309 txs
386 calls
constructor
constructor(address _owner, uint256 _mintPrice, address _bbitsBurner, address _weth, address _usdc, address _router, address _quoter, address _lottery, address _artContract)
functions
artContract
viewfunction artContract() view returns (address)
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
bbitsBurner
viewfunction bbitsBurner() view returns (address)
burnPercentage
viewfunction burnPercentage() view returns (uint256)
circulatingSupply
viewfunction circulatingSupply() view returns (uint256)
contractURI
viewfunction contractURI() view returns (string)
currentLotteryDay
viewfunction currentLotteryDay() view returns (uint256)
getApproved
viewfunction getApproved(uint256 tokenId) view returns (address)
getDailyPurchaseAmount
viewfunction getDailyPurchaseAmount() view returns (uint256 ethPerDay)
getLotteryJackpot
viewfunction getLotteryJackpot() view returns (uint256 jackPot)
getLotterylastJackpotEndTime
viewfunction getLotterylastJackpotEndTime() view returns (uint256 endTime)
getLotteryroundDurationInSeconds
viewfunction getLotteryroundDurationInSeconds() view returns (uint256 duration)
getRedeemValue
viewfunction getRedeemValue() view returns (uint256 ethShare, uint256 usdcShare)
isApprovedForAll
viewfunction isApprovedForAll(address owner, address operator) view returns (bool)
lottery
viewfunction lottery() view returns (address)
lotteryParticipationDays
viewfunction lotteryParticipationDays() view returns (uint256)
lotteryPurchaseHistory
viewfunction lotteryPurchaseHistory(uint256) view returns (uint256 tickets, uint256 timestamp)
lotteryReferrer
viewfunction lotteryReferrer() view returns (address)
lotteryTicketPriceUSD
viewfunction lotteryTicketPriceUSD() view returns (uint256)
MAX_SUPPLY
viewfunction MAX_SUPPLY() view returns (uint256)
maxMint
viewfunction maxMint() view returns (uint256)
mintPrice
viewfunction mintPrice() view returns (uint256)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
paused
viewfunction paused() view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
uniswapQuoter
viewfunction uniswapQuoter() view returns (address)
uniswapRouter
viewfunction uniswapRouter() view returns (address)
usdc
viewfunction usdc() view returns (address)
weth
viewfunction weth() view returns (address)
approve
nonpayablefunction approve(address to, uint256 tokenId)
burn
nonpayablefunction burn(uint256 tokenId)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address token)
exchange
nonpayablefunction exchange(uint256 tokenId)
mint
payablefunction mint(uint256 quantity) payable
pause
nonpayablefunction pause()
purchaseLotteryTicket
nonpayablefunction purchaseLotteryTicket()
renounceOwnership
nonpayablefunction renounceOwnership()
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setBurnPercentage
nonpayablefunction setBurnPercentage(uint16 _burnPercentage)
setContractURI
nonpayablefunction setContractURI(string _uri)
setLotteryParticipationDays
nonpayablefunction setLotteryParticipationDays(uint256 _lotteryParticipationDays)
setLotteryReferrer
nonpayablefunction setLotteryReferrer(address _lotteryReferrer)
setMintPrice
nonpayablefunction setMintPrice(uint256 _mintPrice)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 tokenId)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
withdrawReferralFees
nonpayablefunction withdrawReferralFees()
withdrawWinnings
nonpayablefunction withdrawWinnings()
events
Approval
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
BurnPercentageUpdated
event BurnPercentageUpdated(uint256 burnPercentage)
LotteryParticipationDaysUpdated
event LotteryParticipationDaysUpdated(uint256 _lotteryParticipationDays)
LotteryReferrerUpdated
event LotteryReferrerUpdated(address indexed newReferrer)
LotteryTicketPurchased
event LotteryTicketPurchased(uint256 indexed day, uint256 amount)
MintPriceUpdated
event MintPriceUpdated(uint256 _mintPrice)
NFTExchanged
event NFTExchanged(uint256 indexed tokenId, address indexed owner, uint256 ethAmount, uint256 usdcAmount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
Unpaused
event Unpaused(address account)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
EnforcedPause
error EnforcedPause()
ERC721IncorrectOwner
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner)
ERC721InsufficientApproval
error ERC721InsufficientApproval(address operator, uint256 tokenId)
ERC721InvalidApprover
error ERC721InvalidApprover(address approver)
ERC721InvalidOperator
error ERC721InvalidOperator(address operator)
ERC721InvalidOwner
error ERC721InvalidOwner(address owner)
ERC721InvalidReceiver
error ERC721InvalidReceiver(address receiver)
ERC721InvalidSender
error ERC721InvalidSender(address sender)
ERC721NonexistentToken
error ERC721NonexistentToken(uint256 tokenId)
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
InsufficientPayment
error InsufficientPayment()
InsufficientTreasury
error InsufficientTreasury()
InsufficientUSDCForTicket
error InsufficientUSDCForTicket()
InvalidPercentage
error InvalidPercentage()
LotteryAlreadyPurchased
error LotteryAlreadyPurchased()
MaxMintPerCallExceeded
error MaxMintPerCallExceeded()
MaxSupplyReached
error MaxSupplyReached()
NotOwner
error NotOwner()
NoTreasuryAvailable
error NoTreasuryAvailable()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
QuantityZero
error QuantityZero()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
TransferFailed
error TransferFailed()
creation bytecode
0x6101a060408181523461065657819061469380380380916100208286610675565b8439610120928391810103126106565782516001600160a01b038116908190036106565760208401518285015190926001600160a01b03821682036106565761006b60608701610698565b61007760808801610698565b60a08801519091906001600160a01b03811681036106565760c0890151906001600160a01b03821682036106565760e08a01516001600160a01b03811696909390878503610656576101009b8c0151996001600160a01b038b168b036106565787516100e28161065a565b600a8152692837ba102930b4b232b960b11b60208201528851906101058261065a565b60098252682827aa2920a4a222a960b91b60208301528051906001600160401b038211610568575f5490600182811c9216801561064c575b602083101461054a5781601f8493116105f5575b50602090601f8311600114610587575f9261057c575b50508160011b915f199060031b1c1916175f555b8051906001600160401b0382116105685760015490600182811c9216801561055e575b602083101461054a5781601f8493116104ef575b50602090601f831160011461047e575f92610473575b50508160011b915f199060031b1c1916176001555b891561045c5760065488519a90816001600160a01b0382167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a360018060a81b031916176006556001600755600a5560c0526080528360a05260e052885286526101809485526107d0600b5561014092620f42408452610160946032865261016d600e5563095ea7b360e01b9182825260048201526020816044815f80199788602484015260018060a01b03165af18015610452579060209291610435575b5060a05160e05185519283526001600160a01b03908116600484015260248301949094529092839160449183915f91165af1801561042b576103fc575b505193613f8e95866106c58739608051868181611cbc01528181611e0b0152818161222c015281816123ac015281816125440152612c02015260a051868181611ce101528181611e4401528181612159015281816121f3015281816123730152818161287401528181612d3301526134dd015260c0518681816105850152610f0a015260e05186818161170701528181611f3a01526124a5015251858181611d9b015281816123030152612a900152518481816102f3015281816107fa0152818161088a01528181610ab1015281816114d801528181611c510152818161204c015281816120e10152612e810152518381816119e801528181611f700152611ff6015251828181610ccf015261169901525181818161099e0152611a560152f35b61041d9060203d602011610424575b6104158183610675565b8101906106ac565b505f6102db565b503d61040b565b82513d5f823e3d90fd5b61044b90833d8511610424576104158183610675565b505f61029e565b84513d5f823e3d90fd5b8751631e4fbdf760e01b81525f6004820152602490fd5b015190505f806101c8565b60015f9081525f805160206146738339815191529350601f198516905b8181106104d757509084600195949392106104bf575b505050811b016001556101dd565b01515f1960f88460031b161c191690555f80806104b1565b9293602060018192878601518155019501930161049b565b60015f529091505f80516020614673833981519152601f840160051c81019160208510610540575b90601f859493920160051c01905b81811061053257506101b2565b5f8155849350600101610525565b9091508190610517565b634e487b7160e01b5f52602260045260245ffd5b91607f169161019e565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610167565b5f8080525f805160206146538339815191529350601f198516905b8181106105dd57509084600195949392106105c5575b505050811b015f5561017b565b01515f1960f88460031b161c191690555f80806105b8565b929360206001819287860151815501950193016105a2565b5f80529091505f80516020614653833981519152601f840160051c810160208510610645575b90849392915b601f830160051c82018110610637575050610151565b5f8155859450600101610621565b508061061b565b91607f169161013d565b5f80fd5b604081019081106001600160401b0382111761056857604052565b601f909101601f19168101906001600160401b0382119082101761056857604052565b51906001600160a01b038216820361065657565b9081602091031261065657518015158103610656579056fe608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c90816301ffc9a71461318b5750806306fdde03146130c6578063081812fc1461305e578063095ea7b314612f08578063173608e714612e2b57806318160ddd14612def5780632361fc5d14612daa57806323b872dd14612d9257806332cb6b0c14612d575780633e413bee14612ce85780633f4ba83a14612c265780633fc8cef314612bb757806342280d8314612b7b57806342842e0e14612b4157806342966c6814612b065780634d70385f14612ab45780634db4a35214612a455780634e6778fc146129f357806353556559146127f4578063544e87f414611bc85780635c975abb14611b845780636352211e14611b29578063659a945f14611ab65780636817c76c14611a7a5780636877e70114611a0b5780636dcac96b146119b25780636ff1c9bc1461186457806370a08231146117c9578063715018a61461172b578063735de9f7146116bc5780637501f741146116635780638456cb59146115b8578063868477ff1461151157806389ef251b146114655780638da5cb5b146114135780639358928b146113d7578063938e3d7b146111cf57806395d89b41146111075780639b2ad3431461105b578063a0712d6814610c88578063a22cb46514610b84578063b88d4fde14610ad5578063ba13a57214610a66578063c87b56dd14610918578063cc42e83a14610833578063daa2e25314610787578063e8a3d48514610668578063e985e9c5146105ea578063efddd041146105a9578063f019055c1461053a578063f01f20df146104fe578063f16034cd146104c2578063f2fde38b146103df578063f4a0a528146103735763f5ec6ba20361000f573461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057604051907fd31ed2c400000000000000000000000000000000000000000000000000000000825260208260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610364579061032d575b602090604051908152f35b506020813d60201161035c575b81610347602093836133ad565b810103126103585760209051610322565b5f80fd5b3d915061033a565b604051903d90823e3d90fd5b80fd5b50346103705760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610370577f525b762709cc2a983aec5ccdfd807a061f993c91090b5bcd7da92ca254976aaa60206004356103d1613d2f565b80600a55604051908152a180f35b50346103705760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610370576104176132bb565b61041f613d2f565b73ffffffffffffffffffffffffffffffffffffffff80911690811561049157600654827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600655167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a380f35b602483604051907f1e4fbdf70000000000000000000000000000000000000000000000000000000082526004820152fd5b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610370576020600e54604051908152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610370576020600b54604051908152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103705760206105e2613c23565b604051908152f35b50346103705760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610370576106226132bb565b604061062c6132de565b9273ffffffffffffffffffffffffffffffffffffffff809316815260056020522091165f52602052602060ff60405f2054166040519015158152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057604051600c545f826106a883613428565b91828252602093600190856001821691825f146107495750506001146106ee575b506106d6925003836133ad565b6106ea604051928284938452830190613278565b0390f35b849150600c5f527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7905f915b8583106107315750506106d69350820101856106c9565b8054838901850152879450869390920191810161071a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858201526106d695151560051b85010192508791506106c99050565b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057604051907fc147b47100000000000000000000000000000000000000000000000000000000825260208260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610364579061032d57602090604051908152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103705761086a613cbb565b610872613cf4565b8073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b15610915578180916004604051809481937fcc42e83a0000000000000000000000000000000000000000000000000000000083525af1801561090a576108f6575b50600160075580f35b6108ff90613361565b61037057805f6108ed565b6040513d84823e3d90fd5b50fd5b5034610370576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610a625760043561095581613c5c565b50604051907f210fa96b0000000000000000000000000000000000000000000000000000000082526004820152828160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9283156103645780936109e4575b50506106ea604051928284938452830190613278565b909192503d8082843e6109f781846133ad565b8201918381840312610a625780519067ffffffffffffffff8211610a5e570182601f82011215610a6257805190610a2d826133ee565b93610a3b60405195866133ad565b828552858383010111610a5e579080858093018386015e83010152905f806109ce565b8280fd5b5080fd5b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103705760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057610b0d6132bb565b610b156132de565b906064359067ffffffffffffffff8211610b805736602383011215610b805781600401359284610b44856133ee565b93610b5260405195866133ad565b8585523660248783010111610a625785610b7d96602460209301838801378501015260443591613a7d565b80f35b8380fd5b50346103705760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057610bbc6132bb565b60243590811515809203610a5e5773ffffffffffffffffffffffffffffffffffffffff16908115610c5757338352600560205260408320825f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a380f35b602482604051907f5b08ba180000000000000000000000000000000000000000000000000000000082526004820152fd5b506020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610a6257600435610cbf613cbb565b610cc7613cf4565b8015611031577f0000000000000000000000000000000000000000000000000000000000000000811161100757600890600854818101809111610fda576103e810610fb057610d1881600a54613a6a565b3410610f865783612710610d2e600b5434613a6a565b0480610ef3575b50929092903315908115925b858110610d515786600160075580f35b845483610ec2578085915f52600280855273ffffffffffffffffffffffffffffffffffffffff60405f205416908115159384610e53575b610e3c575b825f52855260405f20337fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905533907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4610e0b57600190610df58654613a3d565b86556009610e038154613a3d565b905501610d41565b602487604051907f73c6ac6e0000000000000000000000000000000000000000000000000000000082526004820152fd5b335f526003865260405f2060018154019055610d8d565b50610e8b835f52600460205260405f207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b815f52600386528760405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8154019055610d88565b602488604051907f64a0ae920000000000000000000000000000000000000000000000000000000082526004820152fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b15610a5e5782906024604051809481937f42966c680000000000000000000000000000000000000000000000000000000083528560048401525af1801561090a5715610d3557610f7b90613361565b610b8057835f610d35565b60046040517fcd1c8867000000000000000000000000000000000000000000000000000000008152fd5b60046040517fd05cb609000000000000000000000000000000000000000000000000000000008152fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60046040517f68c45401000000000000000000000000000000000000000000000000000000008152fd5b60046040517f746d616b000000000000000000000000000000000000000000000000000000008152fd5b50346103705760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103705760043561ffff8116809103610a62576110a2613d2f565b61271081116110dd576020817f7a3fe257b566b28f2bbf7a5ef480eb4d1ea161667d07eae36c7aa4124907b4eb92600b55604051908152a180f35b60046040517f1f3b85d3000000000000000000000000000000000000000000000000000000008152fd5b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610370576040515f6001826001549261114a84613428565b92838352602094856001821691825f1461074957505060011461117457506106d6925003836133ad565b84915060015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6905f915b8583106111b75750506106d69350820101856106c9565b805483890185015287945086939092019181016111a0565b50346103705760209060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103705767ffffffffffffffff600435818111610a5e5736602382011215610a5e578060040135918211610a5e576024903660248483010111610b8057611243613d2f565b61124e600c54613428565b601f8111611378575b508391601f84116001146112b457508383949550926112a6575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c191617600c5580f35b602492500101355f80611271565b91947fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085169186915b83831061135c5750505094836001959610611321575b505050811b01600c5580f35b01602401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600384901b60f8161c191690555f8080611315565b908060018a978483969c890101358155019601980191906112ff565b7fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7601f850160051c810191602086106113cd575b601f0160051c01905b8181106113c25750611257565b8581556001016113b5565b90915081906113ac565b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610370576020600954604051908152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057602073ffffffffffffffffffffffffffffffffffffffff60065416604051908152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057604051907f8e98a1d300000000000000000000000000000000000000000000000000000000825260208260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610364579061032d57602090604051908152f35b50346103705760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103705773ffffffffffffffffffffffffffffffffffffffff61155e6132bb565b611566613d2f565b16807fffffffffffffffffffffffff0000000000000000000000000000000000000000600d541617600d557f1871ec97065866e7cb99d722c6ea0a335a61721c008ccfb9c03a67f6436ae6f38280a280f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610370576115ef613d2f565b6115f7613cbb565b740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff60065416176006557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a180f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103705760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057611762613d2f565b5f73ffffffffffffffffffffffffffffffffffffffff6006547fffffffffffffffffffffffff00000000000000000000000000000000000000008116600655167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346103705760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103705773ffffffffffffffffffffffffffffffffffffffff6118166132bb565b168015611833578160409160209352600383522054604051908152f35b602482604051907f89c62b640000000000000000000000000000000000000000000000000000000082526004820152fd5b50346103705760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610370578061189d6132bb565b6118a5613d2f565b6118ad613cf4565b73ffffffffffffffffffffffffffffffffffffffff908116806119185750818080926006541647905af16118df613a01565b50156118ee575b600160075580f35b60046040517f90b8ec18000000000000000000000000000000000000000000000000000000008152fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529250602083602481845afa9182156119a7578492611971575b61196c93506006541690613d80565b6118e6565b91506020833d60201161199f575b8161198c602093836133ad565b810103126103585761196c92519161195d565b3d915061197f565b6040513d86823e3d90fd5b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103705760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610370576020600a54604051908152f35b50346103705760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057600435611af1613d2f565b8015611031576020817f453f106169325c1d8288dc16b5a29bf8cd7a5de1c7f344649f4ac054e9d5ae0c92600e55604051908152a180f35b50346103705760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610370576020611b66600435613c5c565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057602060ff60065460a01c166040519015158152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057611bff613cbb565b611c07613cf4565b6040517f5d0eaaaf0000000000000000000000000000000000000000000000000000000081523060048201526060816024818573ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af190811561090a5782916127b7575b5061278d57611c8e613c23565b801561276357611d816080604051611ca581613375565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811682527f000000000000000000000000000000000000000000000000000000000000000081166020830190815260408084018781526101f4606086019081528686018a905291517fc6a5026a0000000000000000000000000000000000000000000000000000000081528551851660048201529251841660248401525160448301525162ffffff166064820152608090920151166084820152918290819060a4820190565b03818673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115612630578391612741575b50605f810290808204605f149015171561263b576020611f2091606460405191611df483613391565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016835273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016848401526101f460408401523060608401528560808401520460a08201528460c0820152604051809381927f04e45aaf0000000000000000000000000000000000000000000000000000000083526004830191909160c060e08201938173ffffffffffffffffffffffffffffffffffffffff9182815116855282602082015116602086015262ffffff60408201511660408601528260608201511660608601526080810151608086015260a081015160a0860152015116910152565b03818573ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1801561263057839061270d575b611f9591507f000000000000000000000000000000000000000000000000000000000000000090613479565b80156126e357611fa6600f54613a3d565b80600f556040519182604081011067ffffffffffffffff6040850111176125d15782600161201b9360408896016040528383526020830190428252865260106020526040862092518355519101557f000000000000000000000000000000000000000000000000000000000000000090613a6a565b73ffffffffffffffffffffffffffffffffffffffff600d54169073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a5e576040517f51ab925100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201523060448201528181806064810103818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1801561090a576126cf575b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa801561263057839061269a575b624c4b40915010156121cb575b7fbcb7574f9281bf1e992d2b5391517d2b3b0a689da9fbf2b74728b1f7d606b6036020600f5492604051908152a2600160075580f35b6122e960806040516121dc81613375565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166020820152624c4b4060408201526101f460608201528482820152604051809381927fc6a5026a00000000000000000000000000000000000000000000000000000000835260048301919091608060a08201938173ffffffffffffffffffffffffffffffffffffffff918281511685528260208201511660208601526040810151604086015262ffffff6060820151166060860152015116910152565b03818673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115612630578391612668575b50605f810290808204605f149015171561263b57602061248b9160646040519161235c83613391565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016835273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016848401526101f46040840152306060840152624c4b4060808401520460a08201528460c0820152604051809381927f04e45aaf0000000000000000000000000000000000000000000000000000000083526004830191909160c060e08201938173ffffffffffffffffffffffffffffffffffffffff9182815116855282602082015116602086015262ffffff60408201511660408601528260608201511660608601526080810151608086015260a081015160a0860152015116910152565b03818673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af19081156126305783916125fe575b506040519060208201907f2e1a7d4d000000000000000000000000000000000000000000000000000000008252602483015260248252606082019082821067ffffffffffffffff8311176125d1578492839260405251908273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af161256e613a01565b506121955760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f57455448207769746864726177206661696c65640000000000000000000000006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90506020813d602011612628575b81612619602093836133ad565b8101031261035857515f6124d5565b3d915061260c565b6040513d85823e3d90fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b61268a915060803d608011612693575b61268281836133ad565b810190613e6b565b5050505f612333565b503d612678565b506020813d6020116126c7575b816126b4602093836133ad565b8101031261035857624c4b409051612188565b3d91506126a7565b6126d890613361565b610a6257815f61210e565b60046040517fd14b28f5000000000000000000000000000000000000000000000000000000008152fd5b506020813d602011612739575b81612727602093836133ad565b8101031261035857611f959051611f69565b3d915061271a565b61275a915060803d6080116126935761268281836133ad565b5050505f611dcb565b60046040517f10162d2d000000000000000000000000000000000000000000000000000000008152fd5b60046040517fe1e63b02000000000000000000000000000000000000000000000000000000008152fd5b90506060813d6060116127ec575b816127d2606093836133ad565b81010312610a625760406127e69101613a30565b5f611c81565b3d91506127c5565b5034610370576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610a6257600435612830613cbb565b612838613cf4565b61284181613c5c565b73ffffffffffffffffffffffffffffffffffffffff9081339116036129c9576009549260246128708547613479565b94827f000000000000000000000000000000000000000000000000000000000000000094604051938480927f70a0823100000000000000000000000000000000000000000000000000000000825230600483015288165afa80156129be57879061298f575b6128df9250613479565b91841580612987575b61295d576128f58461380f565b828061294b575b50508480808087335af161290e613a01565b50156118ee576040519384528301527f2057414c9d88f856115dbe938a36b867f654593ac98423365dad010018fff78660403393a3600160075580f35b612956913390613d80565b5f826128fc565b60046040517fb75bb902000000000000000000000000000000000000000000000000000000008152fd5b5082156128e8565b508282813d83116129b7575b6129a581836133ad565b81010312610358576128df91516128d5565b503d61299b565b6040513d89823e3d90fd5b60046040517f30cd7471000000000000000000000000000000000000000000000000000000008152fd5b50346103705760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610370576040809160043581526010602052206001815491015482519182526020820152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057602073ffffffffffffffffffffffffffffffffffffffff600d5416604051908152f35b50346103705760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057610b7d60043561380f565b503461037057612b5036613301565b60405191602083019383851067ffffffffffffffff8611176125d157610b7d94604052858452613a7d565b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610370576020600f54604051908152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057612c5d613d2f565b60065460ff8160a01c1615612cbe577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff166006557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a180f35b60046040517f8dfc202b000000000000000000000000000000000000000000000000000000008152fd5b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261037057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103705760206040516103e88152f35b503461037057610b7d612da436613301565b9161359e565b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610370576040612de36134b0565b82519182526020820152f35b503461037057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610370576020600854604051908152f35b5034610358575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035857612e62613cbb565b612e6a613cf4565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b15610358575f80916004604051809481937f173608e70000000000000000000000000000000000000000000000000000000083525af18015612efd57612eec5750600160075580f35b612ef69150613361565b5f806108ed565b6040513d5f823e3d90fd5b346103585760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035857612f3f6132bb565b602435612f4b81613c5c565b3315158061303e575b80613007575b612fd757819073ffffffffffffffffffffffffffffffffffffffff809416938491167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a45f52600460205260405f20907fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790555f80f35b60246040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152336004820152fd5b5073ffffffffffffffffffffffffffffffffffffffff81165f52600560205260405f20335f5260205260ff60405f20541615612f5a565b503373ffffffffffffffffffffffffffffffffffffffff82161415612f54565b346103585760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103585760043561309981613c5c565b505f526004602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b34610358575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610358576040515f8054908261310583613428565b91828252602093600190856001821691825f1461074957505060011461313257506106d6925003836133ad565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8583106131735750506106d69350820101856106c9565b8054838901850152879450869390920191810161315c565b346103585760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035857600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361035857817f80ac58cd000000000000000000000000000000000000000000000000000000006020931490811561324e575b8115613224575b5015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150148361321d565b7f5b5e139f0000000000000000000000000000000000000000000000000000000081149150613216565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361035857565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361035857565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60609101126103585773ffffffffffffffffffffffffffffffffffffffff90600435828116810361035857916024359081168103610358579060443590565b67ffffffffffffffff81116125d157604052565b60a0810190811067ffffffffffffffff8211176125d157604052565b60e0810190811067ffffffffffffffff8211176125d157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176125d157604052565b67ffffffffffffffff81116125d157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b90600182811c9216801561346f575b602083101461344257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691613437565b8115613483570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f906009548015613596576134c58147613479565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680613509575b50509190565b6024929450602090604051938480927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa8015612efd575f90613562575b61355a9250613479565b915f80613503565b506020823d60201161358e575b8161357c602093836133ad565b810103126103585761355a9151613550565b3d915061356f565b505f91508190565b9073ffffffffffffffffffffffffffffffffffffffff80911680156137df57835f52602091600283528460409282845f2054169433151580613718575b50600290866136ac575b825f5260038152855f2060018154019055835f5252835f20817fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4831682036136585750505050565b517f64283d7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810193909352166044820152606490fd5b6136e3845f52600460205260405f207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b865f5260038152855f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81540190556135e5565b919250908061379e575b15613730579086915f6135db565b8387866137665760249151907f7e2732890000000000000000000000000000000000000000000000000000000082526004820152fd5b90517f177e802f0000000000000000000000000000000000000000000000000000000081523360048201526024810191909152604490fd5b5033851480156137c3575b806137225750865f52600481523383855f20541614613722565b50845f5260058152835f20335f52815260ff845f2054166137a9565b60246040517f64a0ae920000000000000000000000000000000000000000000000000000000081525f6004820152fd5b805f5260206002815273ffffffffffffffffffffffffffffffffffffffff9060409082825f205416923315159081613969575b505090600283925f946138fd575b8585525282207fffffffffffffffffffffffff000000000000000000000000000000000000000081541690557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a460095480156138d0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600955565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b613934865f52600460205260405f207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b838552600381528285207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8154019055613850565b816139b2575b501561397c575f80613842565b5092506137665760249151907f7e2732890000000000000000000000000000000000000000000000000000000082526004820152fd5b338514915081156139e3575b81156139cc575b505f61396f565b9050845f52600482523390835f205416145f6139c5565b9050835f5260058252825f20335f52825260ff835f205416906139be565b3d15613a2b573d90613a12826133ee565b91613a2060405193846133ad565b82523d5f602084013e565b606090565b5190811515820361035857565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146138d05760010190565b818102929181159184041417156138d057565b91929092613a8c81858561359e565b833b613a99575b50505050565b60209073ffffffffffffffffffffffffffffffffffffffff80951694613b0760405194859384937f150b7a0200000000000000000000000000000000000000000000000000000000988986523360048701521660248501526044840152608060648401526084830190613278565b03815f875af15f9181613bc6575b50613b645782613b23613a01565b8051919082613b5d57602482604051907f64a0ae920000000000000000000000000000000000000000000000000000000082526004820152fd5b9050602001fd5b7fffffffff000000000000000000000000000000000000000000000000000000001603613b9557505f808080613a93565b602490604051907f64a0ae920000000000000000000000000000000000000000000000000000000082526004820152fd5b9091506020813d602011613c1b575b81613be2602093836133ad565b8101031261035857517fffffffff000000000000000000000000000000000000000000000000000000008116810361035857905f613b15565b3d9150613bd5565b600e54600f54808203908282116138d0574792148015613c54575b613c4e57613c4b91613479565b90565b50505f90565b508115613c3e565b805f52600260205273ffffffffffffffffffffffffffffffffffffffff60405f205416908115613c8a575090565b602490604051907f7e2732890000000000000000000000000000000000000000000000000000000082526004820152fd5b60ff60065460a01c16613cca57565b60046040517fd93c0665000000000000000000000000000000000000000000000000000000008152fd5b600260075414613d05576002600755565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff600654163303613d5057565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b6040517fa9059cbb000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff938416602483015260448083019590955293815292613e01925f9283929190613dea6064886133ad565b1694519082865af1613dfa613a01565b9083613eb8565b8051908115159182613e48575b5050613e175750565b602490604051907f5274afe70000000000000000000000000000000000000000000000000000000082526004820152fd5b8192509060209181010312610358576020613e639101613a30565b155f80613e0e565b919082608091031261035857815191602081015173ffffffffffffffffffffffffffffffffffffffff811681036103585791604082015163ffffffff811681036103585760609092015190565b90613ef75750805115613ecd57805190602001fd5b60046040517f1425ea42000000000000000000000000000000000000000000000000000000008152fd5b81511580613f4f575b613f08575090565b60249073ffffffffffffffffffffffffffffffffffffffff604051917f9996b315000000000000000000000000000000000000000000000000000000008352166004820152fd5b50803b15613f0056fea264697066735822122051468bb3ab97d1d94cc99ed5ad7a7c649361ebd4ee24e3d1ad7c9a2edf77c0ad64736f6c63430008190033290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6000000000000000000000000d811f3803bee46fdce64e680aa29df3a4382e7e30000000000000000000000000000000000000000000000000003e871b540c0000000000000000000000000001595409cbaef3dd2485107fb1e328fa0fa505c100000000000000000000000004200000000000000000000000000000000000006000000000000000000000000833589fcd6edb6e08f4c7c32d4f71b54bda029130000000000000000000000002626664c2603336e57b271c5c0b26f421741e4810000000000000000000000003d4e44eb1374240ce5f1b871ab261cd16335b76a000000000000000000000000bedd4f2bebe9e3e636161e644759f3cbe3d51b950000000000000000000000003a169ec55cabf38c58a579d1eb2f0f9ee2475649