Overview ERC721
Total Supply:
4 AET

Holders:
4
Profile Summary
Blockchain:
C-Chain (43114)

Contract Source Code Verified (Partial Match)
Contract Name:
Artworks

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Created At:
Tue, 05 Dec 2023 12:41:22 GMT
Artworks.sol
contracts
Artworks.sol


Contract ABI
[
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "creator",
        "type": "address"
      },
      {
        "internalType": "string",
        "name": "name_",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "symbol_",
        "type": "string"
      },
      {
        "internalType": "address",
        "name": "manager_",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "registry_",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "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": false,
        "internalType": "uint256",
        "name": "_fromTokenId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_toTokenId",
        "type": "uint256"
      }
    ],
    "name": "BatchMetadataUpdate",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "MetadataUpdate",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferred",
    "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": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "artworkIdForToken",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "toCheck",
        "type": "address"
      }
    ],
    "name": "canTransfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "artworkId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "startTime",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "endTime",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "price",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "publicQuantity",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "privateQuantity",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "privatePrice",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "maxMintablePerWallet",
        "type": "uint256"
      },
      {
        "internalType": "bool",
        "name": "active",
        "type": "bool"
      },
      {
        "internalType": "bool",
        "name": "allReferrersAllowed",
        "type": "bool"
      }
    ],
    "name": "configureMint",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "selfMintQuantity",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "maxQuantity",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "royaltyAmount",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "royaltyReceiver",
        "type": "address"
      }
    ],
    "name": "createPiece",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "artworkId",
        "type": "uint256"
      }
    ],
    "name": "editionCountForArtwork",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "editionNumberAndCountForToken",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "editionNumberForToken",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "explicitlyAllowed",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "buyer",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "artworkId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "quantity",
        "type": "uint256"
      }
    ],
    "name": "fulfillMint",
    "outputs": [],
    "stateMutability": "nonpayable",
    "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": "artworkId",
        "type": "uint256"
      }
    ],
    "name": "getArtwork",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "maxQuantity",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "royaltyAmount",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "royaltyReceiver",
            "type": "address"
          }
        ],
        "internalType": "struct Artworks.Artwork",
        "name": "",
        "type": "tuple"
      }
    ],
    "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": [
      {
        "internalType": "address",
        "name": "toCheck",
        "type": "address"
      }
    ],
    "name": "isBlocked",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "toCheck",
        "type": "address"
      }
    ],
    "name": "isRegistryBlocked",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "localCustomBaseURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "locallyBlocked",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "manager",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "managerAddress",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "artworkId",
        "type": "uint256"
      }
    ],
    "name": "maxQuantityFor",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "artworkId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "quantity",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "signature",
        "type": "bytes"
      },
      {
        "internalType": "address",
        "name": "referrer",
        "type": "address"
      }
    ],
    "name": "mint",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "artworkId",
        "type": "uint256"
      }
    ],
    "name": "mintDetails",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "startTime",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "endTime",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "publicPrice",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "privatePrice",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "publicQuantity",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "privateQuantity",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "maxMintablePerWallet",
            "type": "uint256"
          },
          {
            "internalType": "bool",
            "name": "active",
            "type": "bool"
          },
          {
            "internalType": "bool",
            "name": "allReferrersAllowed",
            "type": "bool"
          }
        ],
        "internalType": "struct IArtworkMinter.Mint",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "minter",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "ownerOf",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "registry",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "artworkId",
        "type": "uint256"
      }
    ],
    "name": "remainingEditions",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "artworkId",
        "type": "uint256"
      }
    ],
    "name": "remainingEditionsForPrivateMint",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "artworkId",
        "type": "uint256"
      }
    ],
    "name": "remainingEditionsForPublicMint",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_salePrice",
        "type": "uint256"
      }
    ],
    "name": "royaltyInfo",
    "outputs": [
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "royaltyAmount",
        "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": "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": "uint256",
        "name": "artworkId",
        "type": "uint256"
      },
      {
        "internalType": "bool",
        "name": "active",
        "type": "bool"
      }
    ],
    "name": "setActive",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "artworkId",
        "type": "uint256"
      },
      {
        "internalType": "address[]",
        "name": "referrers",
        "type": "address[]"
      },
      {
        "internalType": "bool",
        "name": "allowed",
        "type": "bool"
      }
    ],
    "name": "setAllowedReferrers",
    "outputs": [],
    "stateMutability": "nonpayable",
    "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": "artworkId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "newEndTime",
        "type": "uint256"
      }
    ],
    "name": "setEndTime",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "op_",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "a_",
        "type": "bool"
      }
    ],
    "name": "setExplicitlyAllowed",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "artworkId",
        "type": "uint256"
      },
      {
        "internalType": "address[]",
        "name": "recipients",
        "type": "address[]"
      },
      {
        "internalType": "uint256[]",
        "name": "amounts",
        "type": "uint256[]"
      }
    ],
    "name": "setFeesToSplit",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "localCustomBaseURI_",
        "type": "string"
      }
    ],
    "name": "setLocalCustomBaseURI",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "op_",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "b_",
        "type": "bool"
      }
    ],
    "name": "setLocallyBlocked",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "artworkId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "rate",
        "type": "uint256"
      }
    ],
    "name": "setReferralRate",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "artworkId_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "royaltyAmount_",
        "type": "uint256"
      }
    ],
    "name": "setRoyaltyAmount",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "artworkId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "royaltyReceiver",
        "type": "address"
      }
    ],
    "name": "setRoyaltyReceiver",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "string",
        "name": "tokenURI_",
        "type": "string"
      }
    ],
    "name": "setTokenURI",
    "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": [
      {
        "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": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "upgradeMinterInterface",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]


Contract Creation Code
60806040523480156200001157600080fd5b5060405162003cca38038062003cca833981016040819052620000349162000356565b8383600062000044838262000488565b50600162000053828262000488565b505050620000706200006a6200013d60201b60201c565b62000141565b6001600855601180546001600160a01b038084166001600160a01b031992831617909255601280549285169290911682179055604080516303aa30b960e11b81529051829163075461729160048083019260209291908290030181865afa158015620000e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000106919062000554565b601380546001600160a01b0319166001600160a01b0392909216919091179055620001318662000193565b50505050505062000579565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200019d62000216565b6001600160a01b038116620002085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620002138162000141565b50565b6007546001600160a01b03163314620002725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620001ff565b565b80516001600160a01b03811681146200028c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002b957600080fd5b81516001600160401b0380821115620002d657620002d662000291565b604051601f8301601f19908116603f0116810190828211818310171562000301576200030162000291565b816040528381526020925086838588010111156200031e57600080fd5b600091505b8382101562000342578582018301518183018401529082019062000323565b600093810190920192909252949350505050565b600080600080600060a086880312156200036f57600080fd5b6200037a8662000274565b60208701519095506001600160401b03808211156200039857600080fd5b620003a689838a01620002a7565b95506040880151915080821115620003bd57600080fd5b50620003cc88828901620002a7565b935050620003dd6060870162000274565b9150620003ed6080870162000274565b90509295509295909350565b600181811c908216806200040e57607f821691505b6020821081036200042f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200048357600081815260208120601f850160051c810160208610156200045e5750805b601f850160051c820191505b818110156200047f578281556001016200046a565b5050505b505050565b81516001600160401b03811115620004a457620004a462000291565b620004bc81620004b58454620003f9565b8462000435565b602080601f831160018114620004f45760008415620004db5750858301515b600019600386901b1c1916600185901b1785556200047f565b600085815260208120601f198616915b82811015620005255788860151825594840194600190910190840162000504565b5085821015620005445787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200056757600080fd5b620005728262000274565b9392505050565b61374180620005896000396000f3fe6080604052600436106103355760003560e01c806378fc3cb3116101ab578063c3814e56116100f7578063e5cff48711610095578063f2fde38b1161006f578063f2fde38b14610a48578063f6b0f7ce14610a68578063fbac395114610a88578063ff2f707d14610aa857600080fd5b8063e5cff487146109e8578063e60a955d14610a08578063e985e9c514610a2857600080fd5b8063d9000ce4116100d1578063d9000ce414610968578063d998cc7414610988578063e15c356b146109a8578063e57c7e98146109bb57600080fd5b8063c3814e561461090a578063c87b56dd1461092a578063cf73a1bc1461094a57600080fd5b80639a8653be11610164578063abfbac4b1161013e578063abfbac4b14610857578063afc6aedb14610877578063b88d4fde1461088c578063c29da304146108ac57600080fd5b80639a8653be146107f7578063a22cb46514610817578063a5a263141461083757600080fd5b806378fc3cb31461074f5780637b1039991461076f5780637bc94ec61461078f5780638da5cb5b146107af578063959001bb146107cd57806395d89b41146107e257600080fd5b80633f6dc5521161028557806348870e81116102235780636352211e116101fd5780636352211e146106da57806370a08231146106fa578063715018a61461071a5780637278521f1461072f57600080fd5b806348870e8114610655578063533c79d71461068a5780635cfc78c8146106aa57600080fd5b80634358e47d1161025f5780634358e47d146105c557806343649b19146105f557806344b2de6614610615578063481c6a751461063557600080fd5b80633f6dc552146105655780633f96cc261461058557806342842e0e146105a557600080fd5b80630af5f6d9116102f257806318160ddd116102cc57806318160ddd146104d15780631a633027146104e657806323b872dd146105065780632a55205a1461052657600080fd5b80630af5f6d914610439578063162094c414610466578063167ddf6e1461048657600080fd5b806301ffc9a71461033a5780630443ac611461036f57806306fdde031461039d57806307546172146103bf578063081812fc146103f7578063095ea7b314610417575b600080fd5b34801561034657600080fd5b5061035a6103553660046129a4565b610b39565b60405190151581526020015b60405180910390f35b34801561037b57600080fd5b5061038f61038a3660046129c1565b610b6a565b604051908152602001610366565b3480156103a957600080fd5b506103b2610bf0565b6040516103669190612a2a565b3480156103cb57600080fd5b506013546103df906001600160a01b031681565b6040516001600160a01b039091168152602001610366565b34801561040357600080fd5b506103df6104123660046129c1565b610c82565b34801561042357600080fd5b50610437610432366004612a52565b610ca9565b005b34801561044557600080fd5b5061038f6104543660046129c1565b6000908152600d602052604090205490565b34801561047257600080fd5b50610437610481366004612b6a565b610ce5565b34801561049257600080fd5b506104a66104a13660046129c1565b610cf7565b604080518251815260208084015190820152918101516001600160a01b031690820152606001610366565b3480156104dd57600080fd5b5061038f610d66565b3480156104f257600080fd5b5061035a610501366004612bb0565b610d76565b34801561051257600080fd5b50610437610521366004612bcd565b610dee565b34801561053257600080fd5b50610546610541366004612c0e565b610e24565b604080516001600160a01b039093168352602083019190915201610366565b34801561057157600080fd5b50610437610580366004612c0e565b610e7b565b34801561059157600080fd5b5061038f6105a03660046129c1565b610eed565b3480156105b157600080fd5b506104376105c0366004612bcd565b610f01565b3480156105d157600080fd5b5061035a6105e0366004612bb0565b600f6020526000908152604090205460ff1681565b34801561060157600080fd5b50610437610610366004612c3e565b610f1c565b34801561062157600080fd5b5061038f6106303660046129c1565b610f4f565b34801561064157600080fd5b506012546103df906001600160a01b031681565b34801561066157600080fd5b506106756106703660046129c1565b610fc0565b60408051928352602083019190915201610366565b34801561069657600080fd5b506104376106a5366004612d09565b610fef565b3480156106b657600080fd5b5061035a6106c5366004612bb0565b60106020526000908152604090205460ff1681565b3480156106e657600080fd5b506103df6106f53660046129c1565b611062565b34801561070657600080fd5b5061038f610715366004612bb0565b6110c2565b34801561072657600080fd5b50610437611148565b34801561073b57600080fd5b5061043761074a366004612d63565b61115c565b34801561075b57600080fd5b5061035a61076a366004612bb0565b611170565b34801561077b57600080fd5b506011546103df906001600160a01b031681565b34801561079b57600080fd5b506104376107aa366004612d97565b6111a1565b3480156107bb57600080fd5b506007546001600160a01b03166103df565b3480156107d957600080fd5b506103b26112d8565b3480156107ee57600080fd5b506103b2611366565b34801561080357600080fd5b50610437610812366004612c3e565b611375565b34801561082357600080fd5b50610437610832366004612c3e565b6113a8565b34801561084357600080fd5b50610437610852366004612c0e565b6113d7565b34801561086357600080fd5b50610437610872366004612c0e565b611403565b34801561088357600080fd5b50610437611443565b34801561089857600080fd5b506104376108a7366004612dd8565b6114dd565b3480156108b857600080fd5b5061038f6108c73660046129c1565b6000908152600c6020908152604091829020825160608101845281548082526001830154938201939093526002909101546001600160a01b031692019190915290565b34801561091657600080fd5b50610437610925366004612e43565b611515565b34801561093657600080fd5b506103b26109453660046129c1565b611551565b34801561095657600080fd5b506012546001600160a01b03166103df565b34801561097457600080fd5b50610437610983366004612f05565b611654565b34801561099457600080fd5b5061038f6109a33660046129c1565b611714565b6104376109b6366004612f8d565b61175d565b3480156109c757600080fd5b5061038f6109d63660046129c1565b6000908152600e602052604090205490565b3480156109f457600080fd5b50610437610a03366004612fe4565b6117db565b348015610a1457600080fd5b50610437610a23366004613009565b611814565b348015610a3457600080fd5b5061035a610a4336600461302e565b611855565b348015610a5457600080fd5b50610437610a63366004612bb0565b611883565b348015610a7457600080fd5b50610437610a8336600461305c565b6118fc565b348015610a9457600080fd5b5061035a610aa3366004612bb0565b61191e565b348015610ab457600080fd5b50610ac8610ac33660046129c1565b61194e565b6040516103669190600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e0830151151560e0830152610100808401511515818401525092915050565b6000636ad56fd360e11b6001600160e01b0319831601610b5b57506001919050565b610b6482611a1f565b92915050565b6000610b7e6013546001600160a01b031690565b604051630fcc494960e21b8152306004820152602481018490526001600160a01b039190911690633f312524906044015b602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b649190613091565b606060008054610bff906130aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2b906130aa565b8015610c785780601f10610c4d57610100808354040283529160200191610c78565b820191906000526020600020905b815481529060010190602001808311610c5b57829003601f168201915b5050505050905090565b6000610c8d82611a44565b506000908152600460205260409020546001600160a01b031690565b610cb282611170565b610cd75760405162461bcd60e51b8152600401610cce906130de565b60405180910390fd5b610ce18282611aa3565b5050565b610ced611bb3565b610ce18282611c0d565b610d246040518060600160405280600081526020016000815260200160006001600160a01b031681525090565b506000908152600c6020908152604091829020825160608101845281548152600182015492810192909252600201546001600160a01b03169181019190915290565b6000610d71600a5490565b905090565b60115460405163e596219560e01b81526001600160a01b0383811660048301526000921690819063e596219590602401602060405180830381865afa158015610dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de79190613125565b9392505050565b610df83382611cd8565b610e145760405162461bcd60e51b8152600401610cce90613142565b610e1f838383611d36565b505050565b6000828152600d60209081526040808320548352600c909152812060018101546002909101548291906001600160a01b031680612710610e6484886131a5565b610e6e91906131bc565b9350935050509250929050565b610e83611bb3565b601354604051631fb6e2a960e11b815260048101849052602481018390526001600160a01b0390911690633f6dc552906044015b600060405180830381600087803b158015610ed157600080fd5b505af1158015610ee5573d6000803e3d6000fd5b505050505050565b6000818152600b6020526040812054610b64565b610e1f838383604051806020016040528060008152506114dd565b610f24611bb3565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6000818152600c60209081526040808320815160608101835281548082526001830154948201949094526002909101546001600160a01b0316918101919091529015610fb0576000838152600b60205260409020548151610de791906131de565b5060001992915050565b50919050565b6000818152600e6020908152604080832054600d909252822054829190610fe690610eed565b91509150915091565b610ff7611bb3565b60135460405163533c79d760e01b81526001600160a01b039091169063533c79d79061102b90869086908690600401613235565b600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b50505050505050565b6000818152600260205260408120546001600160a01b031680610b645760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cce565b60006001600160a01b03821661112c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610cce565b506001600160a01b031660009081526003602052604090205490565b611150611bb3565b61115a6000611ea7565b565b611164611bb3565b6014610ce182826132a6565b600061117b8261191e565b1580610b645750506001600160a01b031660009081526010602052604090205460ff1690565b6127108211156111b057600080fd5b601484106111bd57600080fd5b821561121e578383101561121e5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f74206d696e74206d6f7265207468616e206d617820616c6c6f7765604482015261321760f11b6064820152608401610cce565b61122c600980546001019055565b6040518060600160405280848152602001838152602001826001600160a01b0316815250600c600061125d60095490565b81526020808201929092526040908101600090812084518155928401516001840155920151600290910180546001600160a01b0319166001600160a01b039092169190911790555b848110156112d1576112bf6112b960095490565b33611ef9565b806112c981613365565b9150506112a5565b5050505050565b601480546112e5906130aa565b80601f0160208091040260200160405190810160405280929190818152602001828054611311906130aa565b801561135e5780601f106113335761010080835404028352916020019161135e565b820191906000526020600020905b81548152906001019060200180831161134157829003601f168201915b505050505081565b606060018054610bff906130aa565b61137d611bb3565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6113b182611170565b6113cd5760405162461bcd60e51b8152600401610cce906130de565b610ce18282611fe0565b6113df611bb3565b6127108111156113ee57600080fd5b6000918252600c602052604090912060010155565b61140b611bb3565b60135460405163abfbac4b60e01b815260048101849052602481018390526001600160a01b039091169063abfbac4b90604401610eb7565b61144b611bb3565b601254604080516303aa30b960e11b815290516001600160a01b0390921691829163075461729160048083019260209291908290030181865afa158015611496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ba919061337e565b601380546001600160a01b0319166001600160a01b039290921691909117905550565b6114e73383611cd8565b6115035760405162461bcd60e51b8152600401610cce90613142565b61150f84848484611feb565b50505050565b61151d611bb3565b6013546040516361c0a72b60e11b81526001600160a01b039091169063c3814e569061102b9086908690869060040161339b565b606061155c82611a44565b60008281526006602052604081208054611575906130aa565b80601f01602080910402602001604051908101604052809291908181526020018280546115a1906130aa565b80156115ee5780601f106115c3576101008083540402835291602001916115ee565b820191906000526020600020905b8154815290600101906020018083116115d157829003601f168201915b5050505050905060006115ff61201e565b90508051600003611611575092915050565b81511561164357808260405160200161162b9291906133f6565b60405160208183030381529060405292505050919050565b61164c846120ee565b949350505050565b61165c611bb3565b6013546001600160a01b0316604051631e278ba960e01b8152600481018c9052602481018b9052604481018a9052606481018990526084810188905260a4810187905260c4810186905260e481018590528315156101048201528215156101248201526001600160a01b039190911690631e278ba99061014401600060405180830381600087803b1580156116f057600080fd5b505af1158015611704573d6000803e3d6000fd5b5050505050505050505050505050565b60006117286013546001600160a01b031690565b6040516309d102c160e01b8152306004820152602481018490526001600160a01b0391909116906309d102c190604401610baf565b611765612154565b601354604051632f3cdcd360e21b81526001600160a01b039091169063bcf3734c90349061179f9033908990899089908990600401613425565b6000604051808303818588803b1580156117b857600080fd5b505af11580156117cc573d6000803e3d6000fd5b505050505061150f6001600855565b6117e3611bb3565b6000918252600c602052604090912060020180546001600160a01b0319166001600160a01b03909216919091179055565b61181c611bb3565b60135460405163e60a955d60e01b81526004810184905282151560248201526001600160a01b039091169063e60a955d90604401610eb7565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61188b611bb3565b6001600160a01b0381166118f05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cce565b6118f981611ea7565b50565b6013546001600160a01b0316331461191357600080fd5b610e1f8284836121ad565b600061192982610d76565b80610b645750506001600160a01b03166000908152600f602052604090205460ff1690565b6119a1604051806101200160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b6013546001600160a01b0316604051632f1cb39b60e21b8152306004820152602481018490526001600160a01b03919091169063bc72ce6c9060440161012060405180830381865afa1580156119fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b649190613468565b60006001600160e01b03198216632483248360e11b1480610b645750610b64826121d4565b6000818152600260205260409020546001600160a01b03166118f95760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cce565b6000611aae82611062565b9050806001600160a01b0316836001600160a01b031603611b1b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610cce565b336001600160a01b0382161480611b375750611b378133611855565b611ba95760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610cce565b610e1f8383612224565b6007546001600160a01b0316331461115a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cce565b6000828152600260205260409020546001600160a01b0316611c885760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610cce565b6000828152600660205260409020611ca082826132a6565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b600080611ce483611062565b9050806001600160a01b0316846001600160a01b03161480611d0b5750611d0b8185611855565b8061164c5750836001600160a01b0316611d2484610c82565b6001600160a01b031614949350505050565b826001600160a01b0316611d4982611062565b6001600160a01b031614611d6f5760405162461bcd60e51b8152600401610cce906134ed565b6001600160a01b038216611dd15760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610cce565b611dde8383836001612292565b826001600160a01b0316611df182611062565b6001600160a01b031614611e175760405162461bcd60e51b8152600401610cce906134ed565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000828152600b6020526040902080546001019055611f1c600a80546001019055565b6000828152600b6020526040812054611f3d84670de0b6b3a76400006131a5565b611f479190613532565b90506000611f70611f606007546001600160a01b031690565b6001600160a01b03166014612321565b9050600081611f7e866124bc565b604051602001611f8f929190613545565b60408051808303601f190181529181526000858152600d6020908152828220899055888252600b905220549091506000848152600e6020526040902055611fd6848461254e565b6112d18382611c0d565b610ce13383836126e7565b611ff6848484611d36565b612002848484846127b5565b61150f5760405162461bcd60e51b8152600401610cce90613581565b60606014805461202d906130aa565b90506000036120e1576000612043306014612321565b6012546040805163889a3f1960e01b815290519293506001600160a01b0390911691829163889a3f199160048083019260009291908290030181865afa158015612091573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120b991908101906135d3565b826040516020016120cb929190613649565b6040516020818303038152906040529250505090565b60148054610bff906130aa565b60606120f982611a44565b600061210361201e565b905060008151116121235760405180602001604052806000815250610de7565b8061212d846124bc565b60405160200161213e9291906133f6565b6040516020818303038152906040529392505050565b6002600854036121a65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610cce565b6002600855565b60005b8181101561150f576121c28484611ef9565b806121cc81613365565b9150506121b0565b60006001600160e01b031982166380ac58cd60e01b148061220557506001600160e01b03198216635b5e139f60e01b145b80610b6457506301ffc9a760e01b6001600160e01b0319831614610b64565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061225982611062565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001600160a01b03841633146122c7576122ab33611170565b6122c75760405162461bcd60e51b8152600401610cce906130de565b6122d083611170565b61231c5760405162461bcd60e51b815260206004820152601b60248201527f526563697069656e7420686173206265656e20626c6f636b65642e00000000006044820152606401610cce565b61150f565b606060006123308360026131a5565b61233b906002613532565b6001600160401b0381111561235257612352612a7e565b6040519080825280601f01601f19166020018201604052801561237c576020820181803683370190505b509050600360fc1b8160008151811061239757612397613684565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106123c6576123c6613684565b60200101906001600160f81b031916908160001a90535060006123ea8460026131a5565b6123f5906001613532565b90505b600181111561246d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061242957612429613684565b1a60f81b82828151811061243f5761243f613684565b60200101906001600160f81b031916908160001a90535060049490941c936124668161369a565b90506123f8565b508315610de75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610cce565b606060006124c9836128b6565b60010190506000816001600160401b038111156124e8576124e8612a7e565b6040519080825280601f01601f191660200182016040528015612512576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461251c57509392505050565b6001600160a01b0382166125a45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610cce565b6000818152600260205260409020546001600160a01b0316156126095760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cce565b612617600083836001612292565b6000818152600260205260409020546001600160a01b03161561267c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cce565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b816001600160a01b0316836001600160a01b0316036127485760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610cce565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60006001600160a01b0384163b156128ab57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906127f99033908990889088906004016136b1565b6020604051808303816000875af1925050508015612834575060408051601f3d908101601f19168201909252612831918101906136ee565b60015b612891573d808015612862576040519150601f19603f3d011682016040523d82523d6000602084013e612867565b606091505b5080516000036128895760405162461bcd60e51b8152600401610cce90613581565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061164c565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106128f55772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612921576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061293f57662386f26fc10000830492506010015b6305f5e1008310612957576305f5e100830492506008015b612710831061296b57612710830492506004015b6064831061297d576064830492506002015b600a8310610b645760010192915050565b6001600160e01b0319811681146118f957600080fd5b6000602082840312156129b657600080fd5b8135610de78161298e565b6000602082840312156129d357600080fd5b5035919050565b60005b838110156129f55781810151838201526020016129dd565b50506000910152565b60008151808452612a168160208601602086016129da565b601f01601f19169290920160200192915050565b602081526000610de760208301846129fe565b6001600160a01b03811681146118f957600080fd5b60008060408385031215612a6557600080fd5b8235612a7081612a3d565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715612ab757612ab7612a7e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612ae557612ae5612a7e565b604052919050565b60006001600160401b03821115612b0657612b06612a7e565b50601f01601f191660200190565b600082601f830112612b2557600080fd5b8135612b38612b3382612aed565b612abd565b818152846020838601011115612b4d57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215612b7d57600080fd5b8235915060208301356001600160401b03811115612b9a57600080fd5b612ba685828601612b14565b9150509250929050565b600060208284031215612bc257600080fd5b8135610de781612a3d565b600080600060608486031215612be257600080fd5b8335612bed81612a3d565b92506020840135612bfd81612a3d565b929592945050506040919091013590565b60008060408385031215612c2157600080fd5b50508035926020909101359150565b80151581146118f957600080fd5b60008060408385031215612c5157600080fd5b8235612c5c81612a3d565b91506020830135612c6c81612c30565b809150509250929050565b60006001600160401b03821115612c9057612c90612a7e565b5060051b60200190565b600082601f830112612cab57600080fd5b81356020612cbb612b3383612c77565b82815260059290921b84018101918181019086841115612cda57600080fd5b8286015b84811015612cfe578035612cf181612a3d565b8352918301918301612cde565b509695505050505050565b600080600060608486031215612d1e57600080fd5b8335925060208401356001600160401b03811115612d3b57600080fd5b612d4786828701612c9a565b9250506040840135612d5881612c30565b809150509250925092565b600060208284031215612d7557600080fd5b81356001600160401b03811115612d8b57600080fd5b61164c84828501612b14565b60008060008060808587031215612dad57600080fd5b8435935060208501359250604085013591506060850135612dcd81612a3d565b939692955090935050565b60008060008060808587031215612dee57600080fd5b8435612df981612a3d565b93506020850135612e0981612a3d565b92506040850135915060608501356001600160401b03811115612e2b57600080fd5b612e3787828801612b14565b91505092959194509250565b600080600060608486031215612e5857600080fd5b833592506020808501356001600160401b0380821115612e7757600080fd5b612e8388838901612c9a565b94506040870135915080821115612e9957600080fd5b508501601f81018713612eab57600080fd5b8035612eb9612b3382612c77565b81815260059190911b82018301908381019089831115612ed857600080fd5b928401925b82841015612ef657833582529284019290840190612edd565b80955050505050509250925092565b6000806000806000806000806000806101408b8d031215612f2557600080fd5b8a35995060208b0135985060408b0135975060608b0135965060808b0135955060a08b0135945060c08b0135935060e08b013592506101008b0135612f6981612c30565b91506101208b0135612f7a81612c30565b809150509295989b9194979a5092959850565b60008060008060808587031215612fa357600080fd5b843593506020850135925060408501356001600160401b03811115612fc757600080fd5b612fd387828801612b14565b9250506060850135612dcd81612a3d565b60008060408385031215612ff757600080fd5b823591506020830135612c6c81612a3d565b6000806040838503121561301c57600080fd5b823591506020830135612c6c81612c30565b6000806040838503121561304157600080fd5b823561304c81612a3d565b91506020830135612c6c81612a3d565b60008060006060848603121561307157600080fd5b833561307c81612a3d565b95602085013595506040909401359392505050565b6000602082840312156130a357600080fd5b5051919050565b600181811c908216806130be57607f821691505b602082108103610fba57634e487b7160e01b600052602260045260246000fd5b6020808252601a908201527f4f70657261746f7220686173206265656e20626c6f636b65642e000000000000604082015260600190565b805161312081612c30565b919050565b60006020828403121561313757600080fd5b8151610de781612c30565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b6457610b6461318f565b6000826131d957634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610b6457610b6461318f565b600081518084526020808501945080840160005b8381101561322a5781516001600160a01b031687529582019590820190600101613205565b509495945050505050565b83815260606020820152600061324e60608301856131f1565b90508215156040830152949350505050565b601f821115610e1f57600081815260208120601f850160051c810160208610156132875750805b601f850160051c820191505b81811015610ee557828155600101613293565b81516001600160401b038111156132bf576132bf612a7e565b6132d3816132cd84546130aa565b84613260565b602080601f83116001811461330857600084156132f05750858301515b600019600386901b1c1916600185901b178555610ee5565b600085815260208120601f198616915b8281101561333757888601518255948401946001909101908401613318565b50858210156133555787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000600182016133775761337761318f565b5060010190565b60006020828403121561339057600080fd5b8151610de781612a3d565b838152600060206060818401526133b560608401866131f1565b838103604085015284518082528286019183019060005b818110156133e8578351835292840192918401916001016133cc565b509098975050505050505050565b600083516134088184602088016129da565b83519083019061341c8183602088016129da565b01949350505050565b600060018060a01b03808816835286602084015285604084015260a0606084015261345360a08401866129fe565b91508084166080840152509695505050505050565b6000610120828403121561347b57600080fd5b613483612a94565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c08201526134cf60e08401613115565b60e08201526101006134e2818501613115565b908201529392505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b80820180821115610b6457610b6461318f565b600083516135578184602088016129da565b602f60f81b90830190815283516135758160018401602088016129da565b01600101949350505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000602082840312156135e557600080fd5b81516001600160401b038111156135fb57600080fd5b8201601f8101841361360c57600080fd5b805161361a612b3382612aed565b81815285602083850101111561362f57600080fd5b6136408260208301602086016129da565b95945050505050565b6000835161365b8184602088016129da565b83519083019061366f8183602088016129da565b602f60f81b9101908152600101949350505050565b634e487b7160e01b600052603260045260246000fd5b6000816136a9576136a961318f565b506000190190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906136e4908301846129fe565b9695505050505050565b60006020828403121561370057600080fd5b8151610de78161298e56fea26469706673582212203b008df97d67da90a800eb949f9bf66ac96323af6cc1766bea3a5f701a44b4ac64736f6c6343000811003300000000000000000000000078ed40da05548f18da862786511b153e6fb46ac900000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000083dca508be55d7b5d4d04c02c75abefabd86c2690000000000000000000000004058af9b14884b75ac685db4b6633ca83e3b9d73000000000000000000000000000000000000000000000000000000000000000841657465726e756d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034145540000000000000000000000000000000000000000000000000000000000