Overview ERC721
Total Supply:
1 NOIRE

Holders:
2
Profile Summary
Blockchain:
Ethereum (1)

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

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 1337000 runs

Created At:
Tue, 21 May 2024 18:55:11 GMT
Ownable2StepUpgradeable.sol
@openzeppelin
contracts-upgradeable-v5
access
Ownable2StepUpgradeable.sol


Contract ABI
[
  {
    "inputs": [],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "addressReturned",
        "type": "address"
      }
    ],
    "name": "AddressLibrary_Proxy_Call_Did_Not_Return_A_Contract",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "ERC721IncorrectOwner",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "ERC721InsufficientApproval",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "approver",
        "type": "address"
      }
    ],
    "name": "ERC721InvalidApprover",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      }
    ],
    "name": "ERC721InvalidOperator",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "ERC721InvalidOwner",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }
    ],
    "name": "ERC721InvalidReceiver",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "ERC721InvalidSender",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "ERC721NonexistentToken",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidInitialization",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidShortString",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "maxTokenId",
        "type": "uint256"
      }
    ],
    "name": "NFTCollection_Max_Token_Id_Has_Already_Been_Minted",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NFTCollection_Token_CID_Already_Minted",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NFTCollection_Token_Creator_Payment_Address_Required",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NotInitializing",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "OwnableInvalidOwner",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "OwnableUnauthorizedAccount",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "totalSupply",
        "type": "uint256"
      }
    ],
    "name": "SelfDestructibleCollection_Minted_NFTs_Must_Be_Burned_First",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "str",
        "type": "string"
      }
    ],
    "name": "StringTooLong",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "StringsLibrary_Required_String_Is_Empty",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "currentMaxTokenId",
        "type": "uint256"
      }
    ],
    "name": "TokenLimitedCollection_Max_Token_Id_May_Not_Be_Cleared",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "currentMaxTokenId",
        "type": "uint256"
      }
    ],
    "name": "TokenLimitedCollection_Max_Token_Id_May_Not_Increase",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "currentMintedCount",
        "type": "uint256"
      }
    ],
    "name": "TokenLimitedCollection_Max_Token_Id_Must_Be_Greater_Than_Current_Minted_Count",
    "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": false,
        "internalType": "string",
        "name": "baseURI",
        "type": "string"
      }
    ],
    "name": "BaseURIUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint64",
        "name": "version",
        "type": "uint64"
      }
    ],
    "name": "Initialized",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "maxTokenId",
        "type": "uint256"
      }
    ],
    "name": "MaxTokenIdUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "creator",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "string",
        "name": "indexedTokenCID",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "tokenCID",
        "type": "string"
      }
    ],
    "name": "Minted",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferStarted",
    "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": "operator",
        "type": "address"
      }
    ],
    "name": "SelfDestruct",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "fromPaymentAddress",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "toPaymentAddress",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "TokenCreatorPaymentAddressSet",
    "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": "acceptOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "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": [],
    "name": "baseURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "uri",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "burn",
    "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": "",
        "type": "uint256"
      }
    ],
    "name": "getFeeBps",
    "outputs": [
      {
        "internalType": "uint256[]",
        "name": "royaltiesInBasisPoints",
        "type": "uint256[]"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getFeeRecipients",
    "outputs": [
      {
        "internalType": "address payable[]",
        "name": "recipients",
        "type": "address[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "tokenCID",
        "type": "string"
      }
    ],
    "name": "getHasMintedCID",
    "outputs": [
      {
        "internalType": "bool",
        "name": "hasBeenMinted",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getNFTCollectionType",
    "outputs": [
      {
        "internalType": "string",
        "name": "collectionType",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getRoyalties",
    "outputs": [
      {
        "internalType": "address payable[]",
        "name": "recipients",
        "type": "address[]"
      },
      {
        "internalType": "uint256[]",
        "name": "royaltiesInBasisPoints",
        "type": "uint256[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getTokenCreatorPaymentAddress",
    "outputs": [
      {
        "internalType": "address payable",
        "name": "creatorPaymentAddress",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address payable",
        "name": "_creator",
        "type": "address"
      },
      {
        "internalType": "string",
        "name": "_name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_symbol",
        "type": "string"
      }
    ],
    "name": "initialize",
    "outputs": [],
    "stateMutability": "nonpayable",
    "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": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "maxTokenId",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "tokenCID",
        "type": "string"
      }
    ],
    "name": "mint",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "tokenCID",
        "type": "string"
      },
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      }
    ],
    "name": "mintAndApprove",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "tokenCID",
        "type": "string"
      },
      {
        "internalType": "address payable",
        "name": "tokenCreatorPaymentAddress",
        "type": "address"
      }
    ],
    "name": "mintWithCreatorPaymentAddress",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "tokenCID",
        "type": "string"
      },
      {
        "internalType": "address payable",
        "name": "tokenCreatorPaymentAddress",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      }
    ],
    "name": "mintWithCreatorPaymentAddressAndApprove",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "tokenCID",
        "type": "string"
      },
      {
        "internalType": "address",
        "name": "paymentAddressFactory",
        "type": "address"
      },
      {
        "internalType": "bytes",
        "name": "paymentAddressCall",
        "type": "bytes"
      }
    ],
    "name": "mintWithCreatorPaymentFactory",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "tokenCID",
        "type": "string"
      },
      {
        "internalType": "address",
        "name": "paymentAddressFactory",
        "type": "address"
      },
      {
        "internalType": "bytes",
        "name": "paymentAddressCall",
        "type": "bytes"
      },
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      }
    ],
    "name": "mintWithCreatorPaymentFactoryAndApprove",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "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": "pendingOwner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "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": [],
    "name": "selfDestruct",
    "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": "bytes4",
        "name": "interfaceId",
        "type": "bytes4"
      }
    ],
    "name": "supportsInterface",
    "outputs": [
      {
        "internalType": "bool",
        "name": "interfaceSupported",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "tokenCreator",
    "outputs": [
      {
        "internalType": "address payable",
        "name": "creator",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "tokenURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "uri",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "supply",
        "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": [
      {
        "internalType": "string",
        "name": "baseURIOverride",
        "type": "string"
      }
    ],
    "name": "updateBaseURI",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint32",
        "name": "_maxTokenId",
        "type": "uint32"
      }
    ],
    "name": "updateMaxTokenId",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]


Contract Creation Code
60a060405234801561001057600080fd5b5060408051808201909152600e81526d27232a1021b7b63632b1ba34b7b760911b602082015261003f8161017e565b608052507ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0080546001600160401b03919068010000000000000000900460ff1680610097575080546001600160401b03808416911610155b156100b55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b0383161768010000000000000000178155604080518082018252601d81527f4e465420436f6c6c656374696f6e20496d706c656d656e746174696f6e0000006020808301919091528251808401909352600383526213919560ea1b90830152610130916101c5565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505061042e565b600080829050601f815111156101b2578260405163305a27a960e01b81526004016101a9919061025e565b60405180910390fd5b80516101bd826102ad565b179392505050565b6101cd61020e565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300806101f9848261036f565b5060018101610208838261036f565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661025c57604051631afcd79f60e31b815260040160405180910390fd5b565b60006020808352835180602085015260005b8181101561028c57858101830151858201604001528201610270565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156102ce576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806102fe57607f821691505b6020821081036102ce57634e487b7160e01b600052602260045260246000fd5b601f82111561036a576000816000526020600020601f850160051c810160208610156103475750805b601f850160051c820191505b8181101561036657828155600101610353565b5050505b505050565b81516001600160401b03811115610388576103886102d4565b61039c8161039684546102ea565b8461031e565b602080601f8311600181146103d157600084156103b95750858301515b600019600386901b1c1916600185901b178555610366565b600085815260208120601f198616915b82811015610400578886015182559484019460019091019084016103e1565b508582101561041e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805161374b61044960003960006110e7015261374b6000f3fe608060405234801561001057600080fd5b50600436106102d35760003560e01c80638da5cb5b11610186578063bb3bafd6116100e3578063e30c397811610097578063f2fde38b11610071578063f2fde38b14610657578063fe102cda1461066a578063ff35819b1461067d57600080fd5b8063e30c3978146105d4578063e985e9c5146105dc578063ec5f752e1461064457600080fd5b8063d2c0fa5a116100c8578063d2c0fa5a146105a6578063d85d3d27146105b9578063dfea951d146105cc57600080fd5b8063bb3bafd614610572578063c87b56dd1461059357600080fd5b80639b78fdd91161013a578063a22cb4651161011f578063a22cb4651461052c578063b88d4fde1461053f578063b9c4d9fb1461055257600080fd5b80639b78fdd9146105115780639cb8a26a1461052457600080fd5b806391ba317a1161016b57806391ba317a146104da578063931688cb146104f657806395d89b411461050957600080fd5b80638da5cb5b146104bf57806390657147146104c757600080fd5b806342842e0e1161023457806370a08231116101e85780637860ca2d116101cd5780637860ca2d1461047f57806379ba5097146104925780638c0e83491461049a57600080fd5b806370a0823114610464578063715018a61461047757600080fd5b80636352211e116102195780636352211e146104365780636933e79a146104495780636c0360eb1461045c57600080fd5b806342842e0e1461041057806342966c681461042357600080fd5b806318160ddd1161028b57806329f87c381161027057806329f87c38146103ab5780632a55205a146103be57806340c1a064146103fd57600080fd5b806318160ddd1461038257806323b872dd1461039857600080fd5b8063081812fc116102bc578063081812fc14610315578063095ea7b31461034d5780630ebd4c7f1461036257600080fd5b806301ffc9a7146102d857806306fdde0314610300575b600080fd5b6102eb6102e6366004612b32565b610690565b60405190151581526020015b60405180910390f35b6103086106a1565b6040516102f79190612bbd565b610328610323366004612bd0565b610757565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f7565b61036061035b366004612c0b565b6107ac565b005b610375610370366004612bd0565b6107bb565b6040516102f79190612c73565b61038a610812565b6040519081526020016102f7565b6103606103a6366004612c86565b610839565b61038a6103b9366004612d10565b61092f565b6103d16103cc366004612d95565b61096b565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016102f7565b61032861040b366004612bd0565b610983565b61036061041e366004612c86565b61098d565b610360610431366004612bd0565b6109ad565b610328610444366004612bd0565b6109b9565b61038a610457366004612db7565b6109c4565b6103086109e4565b61038a610472366004612e0e565b6109ee565b610360610a8f565b61038a61048d366004612e2b565b610aa3565b610360610ac5565b6000546104aa9063ffffffff1681565b60405163ffffffff90911681526020016102f7565b610328610b40565b6103606104d5366004612e93565b610b82565b6000546104aa9068010000000000000000900463ffffffff1681565b610360610504366004612ef8565b610d79565b610308610dcc565b61038a61051f366004612f3a565b610e1d565b610360610e43565b61036061053a366004612fd1565b610e53565b61036061054d36600461303e565b610e5e565b610565610560366004612bd0565b610e75565b6040516102f79190613183565b610585610580366004612bd0565b610ef2565b6040516102f7929190613196565b6103086105a1366004612bd0565b610fab565b61038a6105b4366004612db7565b610ff5565b61038a6105c7366004612ef8565b6110d4565b6103086110e0565b61032861110b565b6102eb6105ea3660046131c4565b73ffffffffffffffffffffffffffffffffffffffff91821660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793056020908152604080832093909416825291909152205460ff1690565b610328610652366004612bd0565b611134565b610360610665366004612e0e565b61116b565b6102eb610678366004612ef8565b611222565b61036061068b3660046131f2565b61124f565b600061069b82611260565b92915050565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930080546060919081906106d390613218565b80601f01602080910402602001604051908101604052809291908181526020018280546106ff90613218565b801561074c5780601f106107215761010080835404028352916020019161074c565b820191906000526020600020905b81548152906001019060200180831161072f57829003601f168201915b505050505091505090565b60006107628261139a565b5060008281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079304602052604090205473ffffffffffffffffffffffffffffffffffffffff1661069b565b6107b7828233611418565b5050565b604080516001808252818301909252606091602080830190803683370190505090506103e86bffffffffffffffffffffffff16816000815181106108015761080161326b565b602002602001018181525050919050565b600061083460005463ffffffff64010000000082048116918116919091031690565b905090565b73ffffffffffffffffffffffffffffffffffffffff821661088e576040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b600061089b838333611425565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610929576040517f64283d7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80861660048301526024820184905282166044820152606401610885565b50505050565b60008061095373ffffffffffffffffffffffffffffffffffffffff861685856114c2565b9050610960878783610ff5565b979650505050505050565b60008061097784611134565b94600a90930493505050565b600061069b610b40565b6109a883838360405180602001604052806000815250610e5e565b505050565b6107b760008233611425565b600061069b8261139a565b60006109d084846115a2565b90506109dd826001610e53565b9392505050565b60606108346117b4565b60007f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930073ffffffffffffffffffffffffffffffffffffffff8316610a61576040517f89c62b6400000000000000000000000000000000000000000000000000000000815260006004820152602401610885565b73ffffffffffffffffffffffffffffffffffffffff9092166000908152600390920160205250604090205490565b610a97611885565b610aa160006118dd565b565b6000610ab0858585610ff5565b9050610abd826001610e53565b949350505050565b3380610acf61110b565b73ffffffffffffffffffffffffffffffffffffffff1614610b34576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610885565b610b3d816118dd565b50565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b5473ffffffffffffffffffffffffffffffffffffffff1692915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610bcd5750825b905060008267ffffffffffffffff166001148015610bea5750303b155b905081158015610bf8575080155b15610c2f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610c905784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610d0389898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a908190840183828082843760009201919091525061192d92505050565b610d0c8a611970565b8315610d6d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b610d81611885565b6001610d8e8284836132ea565b507f6741b2fc379fad678116fe3d4d4b9a1a184ab53ba36b86ad0fa66340b1ab41ad8282604051610dc0929190613404565b60405180910390a15050565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930180546060917f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300916106d390613218565b6000610e2c878787878761092f565b9050610e39826001610e53565b9695505050505050565b610e4b611885565b610aa16119c8565b6107b7338383611a58565b610e69848484610839565b61092984848484611b79565b60408051600180825281830190925260609160208083019080368337019050509050610ea082611134565b81600081518110610eb357610eb361326b565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050919050565b60408051600180825281830190925260609182919060208083019080368337019050509150610f2083611134565b82600081518110610f3357610f3361326b565b73ffffffffffffffffffffffffffffffffffffffff929092166020928302919091018201526040805160018082528183019092529182810190803683370190505090506103e86bffffffffffffffffffffffff1681600081518110610f9a57610f9a61326b565b602002602001018181525050915091565b6060610fb68261139a565b50610fbf6117b4565b6000838152600460209081526040918290209151610fdf939291016134e2565b6040516020818303038152906040529050919050565b600073ffffffffffffffffffffffffffffffffffffffff8216611044576040517f49860fb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61104e84846115a2565b60008181526003602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716908117909155905192935083929091907f296490d14aadeb9208962e029edf126e34fe835b4ed9dc8c91602df4d0476695908290a49392505050565b60006109dd83836115a2565b60606108347f0000000000000000000000000000000000000000000000000000000000000000611d70565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610b65565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16806111665761069b610b40565b919050565b611173611885565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811782556111dc610b40565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b600060028383604051611236929190613500565b9081526040519081900360200190205415159392505050565b611257611885565b610b3d81611daf565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a0000000000000000000000000000000000000000000000000000000014806112f357507fffffffff0000000000000000000000000000000000000000000000000000000082167f40c1a06400000000000000000000000000000000000000000000000000000000145b8061133f57507fffffffff0000000000000000000000000000000000000000000000000000000082167fbb3bafd600000000000000000000000000000000000000000000000000000000145b8061138b57507fffffffff0000000000000000000000000000000000000000000000000000000082167fb779958400000000000000000000000000000000000000000000000000000000145b8061069b575061069b82611f4b565b60008181527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079302602052604081205473ffffffffffffffffffffffffffffffffffffffff168061069b576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101849052602401610885565b6109a8838383600161202e565b600073ffffffffffffffffffffffffffffffffffffffff84166114b75760008381526004602052604090819020905160029161146091613510565b90815260408051602092819003830190206000908190558581526003835281812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055600490925281206114b791612ab6565b610abd84848461223a565b60008061151c84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505073ffffffffffffffffffffffffffffffffffffffff8916929150506122ae565b905080806020019051810190611532919061351c565b915073ffffffffffffffffffffffffffffffffffffffff82163b61159a576040517f8556197e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610885565b509392505050565b60006115ac611885565b6115eb83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122f292505050565b600283836040516115fd929190613500565b908152602001604051809103902054600014611645576040517fcd47065e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054819061165a9063ffffffff16613539565b825463ffffffff9182166101009390930a838102908302199091161790925560005490925068010000000000000000900416158015906116ad575060005468010000000000000000900463ffffffff1681115b156116fb576000546040517f797049f00000000000000000000000000000000000000000000000000000000081526801000000000000000090910463ffffffff166004820152602401610885565b60016002848460405161170f929190613500565b908152604080516020928190038301902092909255600083815260049091522061173a8385836132ea565b50611745338261232d565b8282604051611755929190613500565b6040518091039020813373ffffffffffffffffffffffffffffffffffffffff167fe2406cfd356cfbe4e42d452bde96d27f48c423e5f02b5d78695893308399519d86866040516117a6929190613404565b60405180910390a492915050565b6060600180546117c390613218565b80601f01602080910402602001604051908101604052809291908181526020018280546117ef90613218565b801561183c5780601f106118115761010080835404028352916020019161183c565b820191906000526020600020905b81548152906001019060200180831161181f57829003601f168201915b505050505090508051600003611882575060408051808201909152600781527f697066733a2f2f0000000000000000000000000000000000000000000000000060208201525b90565b3361188e610b40565b73ffffffffffffffffffffffffffffffffffffffff1614610aa1576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610885565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556107b782612347565b6119356123dd565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300806119618482613583565b50600181016109298382613583565b6119786123dd565b73ffffffffffffffffffffffffffffffffffffffff8116610b34576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610885565b6119d0610812565b15611a12576119dd610812565b6040517f707fdc2500000000000000000000000000000000000000000000000000000000815260040161088591815260200190565b604051339081907fd3747e9bfbfe48316cef75f276e53ab68e800a3fa1a0d4540245a64b85c2598890600090a28073ffffffffffffffffffffffffffffffffffffffff16ff5b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930073ffffffffffffffffffffffffffffffffffffffff8316611ade576040517f5b08ba1800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610885565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260058401602090815260408083209488168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83163b15610929576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063150b7a0290611bee90339088908790879060040161369d565b6020604051808303816000875af1925050508015611c47575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611c44918101906136dc565b60015b611cd6573d808015611c75576040519150601f19603f3d011682016040523d82523d6000602084013e611c7a565b606091505b508051600003611cce576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610885565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a020000000000000000000000000000000000000000000000000000000014611d69576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610885565b5050505050565b60606000611d7d83612444565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b8063ffffffff16600003611e06576000546040517f89a313660000000000000000000000000000000000000000000000000000000081526801000000000000000090910463ffffffff166004820152602401610885565b60005468010000000000000000900463ffffffff1615801590611e41575060005463ffffffff68010000000000000000909104811690821610155b15611e8f576000546040517f07f4133a0000000000000000000000000000000000000000000000000000000081526801000000000000000090910463ffffffff166004820152602401610885565b60005463ffffffff80831691161115611ee0576000546040517fbcf4db2700000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610885565b600080547fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff166801000000000000000063ffffffff841690810291909117825560405190917f5633fd1915094f39ec7d395ea541662e957f3fffdcaf492b661373bf00da98fd91a250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480611fde57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061069b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461069b565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793008180612070575073ffffffffffffffffffffffffffffffffffffffff831615155b156121e45760006120808561139a565b905073ffffffffffffffffffffffffffffffffffffffff8416158015906120d357508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015612131575073ffffffffffffffffffffffffffffffffffffffff80821660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079305602090815260408083209388168352929052205460ff16155b15612180576040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610885565b82156121e257848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b600093845260040160205250506040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff84166122a35761225f611885565b60008054600163ffffffff64010000000080840482169290920116027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff9091161790555b610abd848484612485565b60606109dd838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564000081525061264a565b8051600003610b3d576040517ff73c5b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b7828260405180602001604052806000815250612758565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610aa1576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff8216601f81111561069b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930260205260408120547f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793009073ffffffffffffffffffffffffffffffffffffffff908116908416156125005761250081858761276f565b73ffffffffffffffffffffffffffffffffffffffff8116156125785761252a60008660008061202e565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600383016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555b73ffffffffffffffffffffffffffffffffffffffff8616156125c35773ffffffffffffffffffffffffffffffffffffffff861660009081526003830160205260409020805460010190555b600085815260028301602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a811691821790925591518893918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a495945050505050565b6060824710156126dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610885565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161270591906136f9565b60006040518083038185875af1925050503d8060008114612742576040519150601f19603f3d011682016040523d82523d6000602084013e612747565b606091505b50915091506109608783838761281f565b61276283836128bf565b6109a86000848484611b79565b61277a838383612970565b6109a85773ffffffffffffffffffffffffffffffffffffffff83166127ce576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101829052602401610885565b6040517f177e802f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260248101829052604401610885565b606083156128b55782516000036128ae5773ffffffffffffffffffffffffffffffffffffffff85163b6128ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610885565b5081610abd565b610abd8383612a72565b73ffffffffffffffffffffffffffffffffffffffff821661290f576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260006004820152602401610885565b600061291d83836000611425565b905073ffffffffffffffffffffffffffffffffffffffff8116156109a8576040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260006004820152602401610885565b600073ffffffffffffffffffffffffffffffffffffffff831615801590610abd57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a1d575073ffffffffffffffffffffffffffffffffffffffff80851660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079305602090815260408083209387168352929052205460ff165b80610abd57505060009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079304602052604090205473ffffffffffffffffffffffffffffffffffffffff908116911614919050565b815115612a825781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108859190612bbd565b508054612ac290613218565b6000825580601f10612ad2575050565b601f016020900490600052602060002090810190610b3d91905b80821115612b005760008155600101612aec565b5090565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610b3d57600080fd5b600060208284031215612b4457600080fd5b81356109dd81612b04565b60005b83811015612b6a578181015183820152602001612b52565b50506000910152565b60008151808452612b8b816020860160208601612b4f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006109dd6020830184612b73565b600060208284031215612be257600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610b3d57600080fd5b60008060408385031215612c1e57600080fd5b8235612c2981612be9565b946020939093013593505050565b60008151808452602080850194506020840160005b83811015612c6857815187529582019590820190600101612c4c565b509495945050505050565b6020815260006109dd6020830184612c37565b600080600060608486031215612c9b57600080fd5b8335612ca681612be9565b92506020840135612cb681612be9565b929592945050506040919091013590565b60008083601f840112612cd957600080fd5b50813567ffffffffffffffff811115612cf157600080fd5b602083019150836020828501011115612d0957600080fd5b9250929050565b600080600080600060608688031215612d2857600080fd5b853567ffffffffffffffff80821115612d4057600080fd5b612d4c89838a01612cc7565b909750955060208801359150612d6182612be9565b90935060408701359080821115612d7757600080fd5b50612d8488828901612cc7565b969995985093965092949392505050565b60008060408385031215612da857600080fd5b50508035926020909101359150565b600080600060408486031215612dcc57600080fd5b833567ffffffffffffffff811115612de357600080fd5b612def86828701612cc7565b9094509250506020840135612e0381612be9565b809150509250925092565b600060208284031215612e2057600080fd5b81356109dd81612be9565b60008060008060608587031215612e4157600080fd5b843567ffffffffffffffff811115612e5857600080fd5b612e6487828801612cc7565b9095509350506020850135612e7881612be9565b91506040850135612e8881612be9565b939692955090935050565b600080600080600060608688031215612eab57600080fd5b8535612eb681612be9565b9450602086013567ffffffffffffffff80821115612ed357600080fd5b612edf89838a01612cc7565b90965094506040880135915080821115612d7757600080fd5b60008060208385031215612f0b57600080fd5b823567ffffffffffffffff811115612f2257600080fd5b612f2e85828601612cc7565b90969095509350505050565b60008060008060008060808789031215612f5357600080fd5b863567ffffffffffffffff80821115612f6b57600080fd5b612f778a838b01612cc7565b909850965060208901359150612f8c82612be9565b90945060408801359080821115612fa257600080fd5b50612faf89828a01612cc7565b9094509250506060870135612fc381612be9565b809150509295509295509295565b60008060408385031215612fe457600080fd5b8235612fef81612be9565b91506020830135801515811461300457600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561305457600080fd5b843561305f81612be9565b9350602085013561306f81612be9565b925060408501359150606085013567ffffffffffffffff8082111561309357600080fd5b818701915087601f8301126130a757600080fd5b8135818111156130b9576130b961300f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156130ff576130ff61300f565b816040528281528a602084870101111561311857600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008151808452602080850194506020840160005b83811015612c6857815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101613151565b6020815260006109dd602083018461313c565b6040815260006131a9604083018561313c565b82810360208401526131bb8185612c37565b95945050505050565b600080604083850312156131d757600080fd5b82356131e281612be9565b9150602083013561300481612be9565b60006020828403121561320457600080fd5b813563ffffffff811681146109dd57600080fd5b600181811c9082168061322c57607f821691505b602082108103613265577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b601f8211156109a8576000816000526020600020601f850160051c810160208610156132c35750805b601f850160051c820191505b818110156132e2578281556001016132cf565b505050505050565b67ffffffffffffffff8311156133025761330261300f565b613316836133108354613218565b8361329a565b6000601f84116001811461336857600085156133325750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611d69565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156133b75786850135825560209485019460019092019101613397565b50868210156133f2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b6000815461345e81613218565b6001828116801561347657600181146134a9576134d8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841687528215158302870194506134d8565b8560005260208060002060005b858110156134cf5781548a8201529084019082016134b6565b50505082870194505b5050505092915050565b600083516134f4818460208801612b4f565b6131bb81840185613451565b8183823760009101908152919050565b60006109dd8284613451565b60006020828403121561352e57600080fd5b81516109dd81612be9565b600063ffffffff808316818103613579577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6001019392505050565b815167ffffffffffffffff81111561359d5761359d61300f565b6135b1816135ab8454613218565b8461329a565b602080601f83116001811461360457600084156135ce5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556132e2565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561365157888601518255948401946001909101908401613632565b508582101561368d57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152610e396080830184612b73565b6000602082840312156136ee57600080fd5b81516109dd81612b04565b6000825161370b818460208701612b4f565b919091019291505056fea2646970667358221220a6e6a9b07552541fc511b068100616e3a0df357788d80a66a43b5e454d91dd4164736f6c63430008190033