0 txs
0 calls
constructor
constructor()
functions
calculateSpinCost
viewfunction calculateSpinCost() view returns (uint256)
calculateTotalRarityWeight
viewfunction calculateTotalRarityWeight() view returns (uint256)
escrowedPrizes
viewfunction escrowedPrizes(address, uint256) view returns (address nftAddress, uint88 tokenId, uint8 rarity)
getAvailablePrizes
viewfunction getAvailablePrizes(uint8 rarity) view returns (uint256)
getPendingCount
viewfunction getPendingCount(uint8 rarity) view returns (uint256)
keyHash
viewfunction keyHash() view returns (bytes32)
linkToken
viewfunction linkToken() view returns (address)
lotteryManagerRoleId
viewfunction lotteryManagerRoleId() view returns (uint256)
maxRarityId
viewfunction maxRarityId() view returns (uint8)
packPrize
viewfunction packPrize(address nftAddress, uint88 tokenId, uint8 rarity) view returns (uint256)
paused
viewfunction paused() view returns (bool)
prizePools
viewfunction prizePools(uint8) view returns (uint256 firstPrizeId, uint256 nextPrizeId, uint96 pendingCount)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
rarityConfigs
viewfunction rarityConfigs(uint8) view returns (uint8 weight, uint160 basePrice, bool active)
rbac
viewfunction rbac() view returns (address)
requestFulfilled
viewfunction requestFulfilled(uint256) view returns (bool)
requestTimestamps
viewfunction requestTimestamps(uint256) view returns (uint256)
subscriptionId
viewfunction subscriptionId() view returns (uint256)
SUPER_ADMIN_ROLE
viewfunction SUPER_ADMIN_ROLE() view returns (uint256)
totalRarityWeight
viewfunction totalRarityWeight() view returns (uint256)
unpackPrize
purefunction unpackPrize(uint256 packed) pure returns (address nftAddress, uint88 tokenId, uint8 rarity)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
usdcToken
viewfunction usdcToken() view returns (address)
vrfCoordinator
viewfunction vrfCoordinator() view returns (address)
_distributePrize
nonpayablefunction _distributePrize(address player, uint256 requestId, uint8 rarity, uint256 prizeRandom)
addPrize
nonpayablefunction addPrize(address _nftAddress, uint256 _tokenId, uint8 _rarity)
addPrizesBatch
nonpayablefunction addPrizesBatch(address[] _nftAddresses, uint256[] _tokenIds, uint8 _rarity)
cancelStuckSpinRequest
nonpayablefunction cancelStuckSpinRequest(uint256 requestId)
claimEscrowedPrizes
nonpayablefunction claimEscrowedPrizes()
configureRarity
nonpayablefunction configureRarity(uint8 _rarityId, uint8 _weight, uint160 _basePrice, bool _active)
initialize
nonpayablefunction initialize(address _vrfCoordinator, address _rbac, uint256 _lotteryManagerId, address _linkToken, address _usdcToken, bytes32 _keyHash, uint256 _minSpinCost, uint256 _subscriptionId)
onERC721Received
nonpayablefunction onERC721Received(address, address, uint256, bytes) returns (bytes4)
pause
nonpayablefunction pause()
pullFees
nonpayablefunction pullFees(address _to, uint256 _amount)
rawFulfillRandomWords
nonpayablefunction rawFulfillRandomWords(uint256 requestId, uint256[] randomWords)
setCoordinator
nonpayablefunction setCoordinator(address _vrfCoordinator)
setRarityBasePrice
nonpayablefunction setRarityBasePrice(uint8 _rarity, uint160 _price)
spin
nonpayablefunction spin(uint256 maxSpinCost) returns (uint256)
unpause
nonpayablefunction unpause()
updateVRFConfig
nonpayablefunction updateVRFConfig(uint256 _subscriptionId, bytes32 _keyHash, uint32 _callbackGasLimit, uint16 _requestConfirmations, uint32 _numWords)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
BatchPrizesAdded
event BatchPrizesAdded(uint8 rarityId, uint256 count)
CoordinatorSet
event CoordinatorSet(address vrfCoordinator)
Initialized
event Initialized(uint64 version)
NoWin
event NoWin(address indexed player, uint256 indexed requestId)
Paused
event Paused(address account)
PrizeAdded
event PrizeAdded(address indexed nftAddress, uint256 tokenId, uint8 rarity)
PrizeEscrowed
event PrizeEscrowed(address indexed player, uint256 indexed requestId, address nftAddress, uint256 tokenId, uint8 rarity)
PrizeWon
event PrizeWon(address indexed player, uint256 indexed requestId, address nftAddress, uint256 tokenId, uint8 rarity)
RarityConfigUpdated
event RarityConfigUpdated(uint8 rarityId, uint8 weight, uint160 basePrice, bool active)
SpinInitiated
event SpinInitiated(address indexed player, uint256 indexed requestId, uint256 slots, uint256 prizes, uint256 cost)
SpinRequestCancelled
event SpinRequestCancelled(uint256 indexed requestId, address indexed winner, uint256 refundAmount)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
VRFConfigUpdated
event VRFConfigUpdated(uint256 subscriptionId, bytes32 keyHash, uint32 callbackGasLimit, uint16 requestConfirmations, uint32 numWords)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AlreadyFulfilled
error AlreadyFulfilled()
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InactiveRarity
error InactiveRarity()
InconsistentBatchData
error InconsistentBatchData()
InsufficientPrizes
error InsufficientPrizes()
InvalidInitialization
error InvalidInitialization()
InvalidRarity
error InvalidRarity()
InvalidRequestId
error InvalidRequestId()
InvalidSlotConfiguration
error InvalidSlotConfiguration()
InvalidVRFConfig
error InvalidVRFConfig()
InvalidWeightConfiguration
error InvalidWeightConfiguration()
MaxPrizesExceeded
error MaxPrizesExceeded()
MaxRaritiesExceeded
error MaxRaritiesExceeded()
NFTNotOwnedByContract
error NFTNotOwnedByContract()
NoEscrowedPrizes
error NoEscrowedPrizes()
NoPrizesAvailable
error NoPrizesAvailable()
NotAuthorizedRole
error NotAuthorizedRole(uint256 roleId)
NotInitializing
error NotInitializing()
OnlyCoordinatorCanFulfill
error OnlyCoordinatorCanFulfill(address have, address want)
OnlyInternalCall
error OnlyInternalCall()
OnlyLotteryManagerOrCoordinator
error OnlyLotteryManagerOrCoordinator(address have, uint256 roleId, address coordinator)
PendingRequests
error PendingRequests()
RBACAddressZero
error RBACAddressZero()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SpinCostSlippage
error SpinCostSlippage()
TokenIdTooLarge
error TokenIdTooLarge()
TooEarly
error TooEarly()
USDCTransferFailed
error USDCTransferFailed()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60a080604052346100e857306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166100d9576002600160401b03196001600160401b03821601610073575b604051613cab90816100ed823960805181818161203c015261210b0152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610054565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816309c1ba2e14612ca7575080630badaebd14612c6857806311420e5214612c1557806311eac85514612bed578063150b7a0214612b7e57806318e89cc214612b545780631fe543e314612aa3578063304703a814612a62578063310395c414612a3f5780633763f981146127cf5780633784ef61146124e15780633c8f2bef1461246c5780633e7301d71461244b5780633f4ba83a1461236a5780634460bdd61461234e5780634f1ef2861461209057806352d1902d1461202957806352e0640414611e8c57806357970e9314611e635780635c975abb14611e3457806361728f3914611e1657806368064c6414611de85780636f3b1cfa14611b975780637837af2d14611b415780638456cb5914611a5b5780638ea98117146119355780639509099b1461191257806397580d97146117215780639d11204914611703578063a3e56fa8146116da578063a5b6ea8f14610fa5578063a8ecc7f114610f7e578063aa5b3a7614610bf9578063ad3cb1cc14610bac578063baabf19c14610833578063bb3779fd146106c9578063be100779146106ab578063c639f59a14610642578063e2b9589514610520578063ef7bc851146102015763faee6404146101e1575f80fd5b346101fe57806003193601126101fe576020603654604051908152f35b80fd5b50346101fe5760203660031901126101fe576004356044602060018060a01b03845416604051928380926303b0981b60e61b8252600160048301523360248301525afa9081156105155783916104f6575b50156104e257808252603f6020526040822054156104d357808252604060205260ff6040832054166104c457808252603f60205260408220546201518081018091116104b05742106104a15780825260326020526040822090808352604060205260408320600160ff19825416179055829060038301915b8254811015610347578060ff6102e2600193866131a6565b90549060031b1c1680875260346020526001600160601b0360036040892001541661030f575b50016102ca565b86526034602052600360408720016001600160601b03610331818354166131c4565b166001600160601b03198254161790555f610308565b509091839284908054905b81831061045f575050508215158061044b575b6103b6575b60207f6a329a92c9592f87ff57c78a625189509002d4df698321e800149958d443503e91838652603282526103a1604087206131d9565b546040519485526001600160a01b031693a380f35b603754815460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810186905291602091839160449183918a91165af1908115610440578591610411575b5061036a5763a55b288760e01b8452600484fd5b610433915060203d602011610439575b61042b8183612ddd565b810190612f91565b5f6103fd565b503d610421565b6040513d87823e3d90fd5b506037546001600160a01b03161515610365565b90919461049860019160ff61047489866131a6565b90549060031b1c1689526033602052828060a01b0360408a205460081c1690612e3d565b95019190610352565b63085de62560e01b8252600482fd5b634e487b7160e01b83526011600452602483fd5b634a4117f960e01b8252600482fd5b6302e8145360e61b8252600482fd5b633db159f160e21b82526001600452602482fd5b61050f915060203d6020116104395761042b8183612ddd565b5f610252565b6040513d85823e3d90fd5b50346101fe5760403660031901126101fe5761053a612d0e565b603a5482546040516303b0981b60e61b81526004810183905233602482015292939290602090829060449082906001600160a01b03165afa908115610515578391610623575b5015610610575060375460405163a9059cbb60e01b81526001600160a01b03938416600482015260248035908201529192602091839160449183918791165af19081156106055782916105e6575b50156105d75780f35b63a55b288760e01b8152600490fd5b6105ff915060203d6020116104395761042b8183612ddd565b5f6105ce565b6040513d84823e3d90fd5b633db159f160e21b825260045260249150fd5b61063c915060203d6020116104395761042b8183612ddd565b5f610580565b50346101fe5760203660031901126101fe5760ff61065e612cee565b168015801561069d575b61068e5760036040836001600160601b0393602095526034855220015416604051908152f35b63013ebdc960e51b8252600482fd5b5060ff603554168111610668565b50346101fe57806003193601126101fe576020603a54604051908152f35b50346101fe5760403660031901126101fe576106e3612cee565b906106ec612d24565b603a5482546040516303b0981b60e61b81526004810183905233602482015290602090829060449082906001600160a01b03165afa908115610828578491610809575b50156107f7575060ff831692831580156107e9575b6107da579282526033602052604082208054610100600160a81b031916600883901b610100600160a81b031617815591927f09eec8313d10addf98d98ddf2ae9525be64845283ef9b04a8fa6a69bc618e1ea926107d490546040805160ff948516815284831660208201526001600160a01b039095169085015260a81c9091161515606083015281906080820190565b0390a180f35b63013ebdc960e51b8352600483fd5b5060ff603554168411610744565b633db159f160e21b8352600452602482fd5b610822915060203d6020116104395761042b8183612ddd565b5f61072f565b6040513d86823e3d90fd5b50346101fe5760803660031901126101fe5761084d612cee565b60243560ff811691828203610ba8576044356001600160a01b0381169390848103610ba45760643591821595861590818503610ba057603a5489546040516303b0981b60e61b81526004810183905233602482015290602090829060449082906001600160a01b03165afa908115610b95578b91610b76575b5015610b64575060ff861697888a5260346020526001600160601b03600360408c20015416610b55578815610b465760148911610b37578860355460ff81168211610b28575b508a5260336020528560408b20604080519161092783612d93565b549160ff8084169384835260018060a01b038160081c16602084015260a81c1615159182910152610b13575b50610aff575b610a2f575b906109e16107d4959493927f09eec8313d10addf98d98ddf2ae9525be64845283ef9b04a8fa6a69bc618e1ea996040519461099886612d93565b855260208086019283526040808701958652918d52603390528b209351845491516001600160a81b031990921660ff919091161760089190911b610100600160a81b0316178355565b51815460ff60a81b191690151560a81b60ff60a81b161790556040805160ff95861681529590941660208601526001600160a01b031692840192909252901515606083015281906080820190565b9594939291908789526034602052604089209660018801988a8a549a60028b019b5b8c54811015610ae65780835260208c905260408320546001600160581b0360a082901c16906001600160a01b0316803b15610ae257604051632142170760e11b81529185918391829084908290610aad90333060048501612f67565b03925af1908115610828578491610ac9575b5050600101610a51565b81610ad391612ddd565b610ade57825f610abf565b8280fd5b8480fd5b509a81905590995595965093949293919290919061095e565b610b0b84603654612e3d565b603655610959565b610b1f90603654612eef565b6036555f610953565b60ff191617603555885f61090c565b630a037e0760e41b8a5260048afd5b63013ebdc960e51b8a5260048afd5b634bc9bec760e11b8a5260048afd5b633db159f160e21b8a52600452602489fd5b610b8f915060203d6020116104395761042b8183612ddd565b5f6108c6565b6040513d8d823e3d90fd5b8880fd5b8580fd5b8380fd5b50346101fe57806003193601126101fe5750610bf5604051610bcf604082612ddd565b60058152640352e302e360dc1b6020820152604051918291602083526020830190612e19565b0390f35b50346101fe5760603660031901126101fe576004356001600160401b038111610f7a57610c2a903690600401612d3a565b6024356001600160401b038111610ba857610c49903690600401612d3a565b92610c52612cfe565b603a5486546040516303b0981b60e61b81526004810183905233602482015292949290602090829060449082906001600160a01b03165afa908115610f6f578891610f50575b5015610f3e5750848403610f2f5760ff83169485158015610f21575b8015610f07575b610ef85785875260346020526040872060016002820154910154868183115f14610ee957610cee610cf392604b94612eef565b612e3d565b11610eda57865b858110610d3557877f59554931393c1be397f9dfe5e23783b2d475af4aff1761601eb7779714f72e8c6040898982519182526020820152a180f35b6001600160a01b03610d50610d4b838988613182565b613192565b1615610ecb576001600160581b03610d69828486613182565b3511610ebc576001600160a01b03610d85610d4b838988613182565b166020610d93838587613182565b356024604051809481936331a9108f60e11b835260048301525afa908115610eb1578991610e83575b50306001600160a01b0390911603610e745780610e07610e0187610de6610d4b6001968c8b613182565b6001600160581b03610df986898b613182565b351690612e61565b876139f0565b610e15610d4b828988613182565b7f0e604d6f5f020db7f13e0b84493ffd4d38c7b88da40d057f74100158752f531787610e42848789613182565b3592610e6b604051928392888060a01b0316958390929160ff6020916040840195845216910152565b0390a201610cfa565b635c05403d60e11b8852600488fd5b610ea4915060203d8111610eaa575b610e9c8183612ddd565b810190612fa9565b5f610dbc565b503d610e92565b6040513d8b823e3d90fd5b63abbb031560e01b8852600488fd5b63d92e233d60e01b8852600488fd5b63cc9f585160e01b8752600487fd5b604b9250610cf3915089612e3d565b63013ebdc960e51b8752600487fd5b50858752603360205260ff604088205460a81c1615610cbb565b5060ff603554168611610cb4565b63774042cb60e11b8652600486fd5b633db159f160e21b8752600452602486fd5b610f69915060203d6020116104395761042b8183612ddd565b5f610c98565b6040513d8a823e3d90fd5b5080fd5b50346101fe57806003193601126101fe57546040516001600160a01b039091168152602090f35b50346101fe5760203660031901126101fe5760043590610fc3613a40565b60ff603554166001810160ff81116104b05760ff16610fe181612e4a565b90610fef6040519283612ddd565b808252610ffe601f1991612e4a565b0136602083013761100f8392613142565b839060015b60ff6035541660ff82169081116111b757808752603460205260408720818852603360205260ff604089205460a81c1690816111a4575b50611107575b808752603360205260ff604088205460a81c16611078575b5061107390612fc8565b611014565b61108182612efc565b81885260346020526001600160601b03600360408a2001541610156110695794906110e461107392878952603360205260ff60408a205460a81c165f146110ff5760ff60015b166110d2898961312e565b526110dd888861312e565b5190612e3d565b956110f86110f186613174565b958561312e565b5290611069565b60ff896110c7565b80875260336020526040872060ff60a81b198154169055808752603360205261113960ff604089205416603654612eef565b60365580875260336020527f09eec8313d10addf98d98ddf2ae9525be64845283ef9b04a8fa6a69bc618e1ea608060ff60408a205416838a52603360205260018060a01b0360408b205460081c166040519185835260208301526040820152896060820152a1611051565b905060016002820154910154145f61104b565b505092509081156116cb576111cb82613142565b92845b8381106116a95750506111df612fd9565b94801515908161169f575b506116905760018060a01b0360375416602085604051828101906323b872dd60e01b82523360248201523060448201528960648201526064815261122f608482612ddd565b519082855af1156108285784513d6116875750803b155b6116755750835b8281106115d657505050603854603954603b549060405192602084018481106001600160401b038211176115c2576040528584526040519363125fa26760e31b60208601525115156024850152602484526112a9604485612ddd565b6040519060c082018281106001600160401b038211176115ae579660209492819796949261ffff99604052815285810192835261136760408201958a86891c16875263ffffffff6060840196818116885281608086019160301c16815260a085019283528160018060a01b03603d5416986040519e8f9b8c9a8b99634d8e1c2f60e11b8b528f60048c01525160248b01525160448a01525116606488015251166084860152511660a48401525160c060c484015260e4830190612e19565b03925af192831561060557829361157a575b50828252603f602052426040832055600360405161139681612dc2565b3381526001602080830182815260408085018481526060860197885289895260329093528720935184546001600160a01b0319166001600160a01b039190911617845551918301919091555160028201559151805191909201916001600160401b03821161156657600160401b821161156657825482845580831061150f575b5060200191835260208320908060051c92845b8481106114d05750601f1982169091039081611486575b6020868089604051906001825260018583015260408201527fe46e04f7b850aeb4288e9ff6847c38ca79047fc9ee69ce9d877a27cd1d2f0b3d60603392a3604051908152f35b90845b8181106114a05750505001558060205f8080611440565b90919460206114c66001928460ff8a5116919060ff809160031b9316831b921b19161790565b9601929101611489565b85865b602081106114e8575084820155600101611429565b835190939160019160209160ff600388901b81811b199092169216901b17920193016114d3565b83855260208520601f80850160051c8201920160051c0190601f84168061154b575b505b8181106115405750611416565b858155600101611533565b5f198201908154905f199060200360031b1c1690555f611531565b634e487b7160e01b84526041600452602484fd5b9092506020813d6020116115a6575b8161159660209383612ddd565b81010312610f7a5751915f611379565b3d9150611589565b634e487b7160e01b88526041600452602488fd5b634e487b7160e01b87526041600452602487fd5b60ff6115e2828661312e565b51166115ee818461312e565b516115fd575b5060010161124d565b6001600160601b0361160f828561312e565b5116908652603460205260036040872001906001600160601b03825416016001600160601b0381116116615781546bffffffffffffffffffffffff19166001600160601b0390911617905560016115f4565b634e487b7160e01b87526011600452602487fd5b635274afe760e01b8552600452602484fd5b60011415611246565b637de9e3ff60e01b8452600484fd5b905085115f6111ea565b8060ff6116b86001938561312e565b51166116c4828861312e565b52016111ce565b63aef91d3560e01b8452600484fd5b50346101fe57806003193601126101fe57603d546040516001600160a01b039091168152602090f35b50346101fe57806003193601126101fe576020603654604051908152f35b50346101fe57806003193601126101fe57338152607360205260408120805461174981612e4a565b916117576040519384612ddd565b81835283526020808420849184015b8383106118cd5785858051156118be57338252607360205260408220805490838155816118a0575b5050815b815181101561189c57826001600160a01b036117ae838561312e565b5151166001600160581b0360206117c5858761312e565b5101511690803b15610ade57604051632142170760e11b815291839183918290849082906117f890333060048501612f67565b03925af1801561060557611887575b50600191906001600160a01b0361181e838661312e565b5151167fca7bea048fd0bdc5a06f611a565cb1dd464d8729eccfb1807551a4862ccb99e66001600160581b036020611856868961312e565b5101511660ff6040611868878a61312e565b510151169061187e604051928392339684612cc1565b0390a301611792565b8161189191612ddd565b610ade578284611807565b8280f35b835260208320908101905b8181101561178e578381556001016118ab565b63053a78f960e41b8252600482fd5b6001602081926040516118df81612d93565b8554848060a01b03811682526001600160581b038160a01c168483015260f81c6040820152815201920192019190611766565b50346101fe57806003193601126101fe57602061192d612fd9565b604051908152f35b50346101fe5760203660031901126101fe5761194f612d0e565b603a5482546040516303b0981b60e61b81526004810183905233602482015290602090829060449082906001600160a01b03165afa908115610828578491611a3c575b501580611a27575b6119ff57506001600160a01b031680156119f0576020817fd1a6a14209a385a964d036e404cb5cfb71f4000cdb03c9366292430787261be6926001600160601b0360a01b603d541617603d55604051908152a180f35b63d92e233d60e01b8252600482fd5b603d546301b1588560e51b8452336004526024919091526001600160a01b0316604452606482fd5b50603d546001600160a01b031633141561199a565b611a55915060203d6020116104395761042b8183612ddd565b5f611992565b50346101fe57806003193601126101fe57603a5481546040516303b0981b60e61b81526004810183905233602482015290602090829060449082906001600160a01b03165afa908115610515578391611b22575b5015611b105750611abe613a40565b600160ff195f80516020613c368339815191525416175f80516020613c36833981519152557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a180f35b633db159f160e21b8252600452602490fd5b611b3b915060203d6020116104395761042b8183612ddd565b5f611aaf565b50346101fe5760203660031901126101fe57604060609160ff611b62612cee565b1681526034602052206001810154906001600160601b0360036002830154920154169060405192835260208301526040820152f35b50346101fe5760603660031901126101fe57611bb1612d0e565b602435611bbc612cfe565b603a5484546040516303b0981b60e61b81526004810183905233602482015292939290602090829060449082906001600160a01b03165afa908115611ddd578691611dbe575b5015611dac57506001600160a01b038316928315611d9d576001600160581b038211611d8e5760ff831680158015611d80575b8015611d66575b611d57576040516331a9108f60e11b815260048101849052602081602481895afa908115611d4c578791611d2d575b50306001600160a01b0390911603611d1e57855260346020526040852060016002820154910154908181115f14611d1457604b91611ca891612eef565b1015611d055790611cef611ce9847f0e604d6f5f020db7f13e0b84493ffd4d38c7b88da40d057f74100158752f531795946001600160581b03851690612e61565b836139f0565b6040805191825260ff929092166020820152a280f35b63cc9f585160e01b8552600485fd5b5050604b85611ca8565b635c05403d60e11b8652600486fd5b611d46915060203d602011610eaa57610e9c8183612ddd565b5f611c6b565b6040513d89823e3d90fd5b63013ebdc960e51b8652600486fd5b50808652603360205260ff604087205460a81c1615611c3c565b5060ff603554168111611c35565b63abbb031560e01b8552600485fd5b63d92e233d60e01b8552600485fd5b633db159f160e21b8552600452602484fd5b611dd7915060203d6020116104395761042b8183612ddd565b5f611c02565b6040513d88823e3d90fd5b50346101fe5760203660031901126101fe5760ff604060209260043581528184522054166040519015158152f35b50346101fe57806003193601126101fe576020603854604051908152f35b50346101fe57806003193601126101fe57602060ff5f80516020613c3683398151915254166040519015158152f35b50346101fe57806003193601126101fe57603e546040516001600160a01b039091168152602090f35b50346101fe5760a03660031901126101fe576004356024356044359063ffffffff8216809203610ba8576064359161ffff831691828403610ba45760843563ffffffff81169485820361202557603a5488546040516303b0981b60e61b81526004810183905233602482015290602090829060449082906001600160a01b03165afa90811561201a578a91611ffb575b5015611fe9575086158015611fe1575b8015611fd9575b8015611fd1575b611fc2579160a09593918795937fc6a0aca65722500f5b3b28b8c46d10463c12485a2a155c9cc0ca23c444dde3bc986039558260385565ffff000000008469ffffffff000000000000603b549460301b169369ffffffffffffffffffff1916179160201b161717603b556040519485526020850152604084015260608301526080820152a180f35b63d753355560e01b8852600488fd5b508515611f3a565b508415611f33565b508315611f2c565b633db159f160e21b8952600452602488fd5b612014915060203d6020116104395761042b8183612ddd565b5f611f1c565b6040513d8c823e3d90fd5b8780fd5b50346101fe57806003193601126101fe577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036120815760206040515f80516020613c168339815191528152f35b63703e46dd60e11b8152600490fd5b5060403660031901126101fe576120a5612d0e565b602435906001600160401b038211610ade5736602383011215610ade57816004013590836120d283612dfe565b936120e06040519586612ddd565b83855260208501933660248284010111610ade57806024602093018637850101526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630811490811561232c575b5061231d5783546040516303b0981b60e61b81526001600482015233602482015290602090829060449082906001600160a01b03165afa9081156104405785916122fe575b50156122ea576040516352d1902d60e01b81526001600160a01b0382169390602081600481885afa8691816122b2575b506121c457634c9c8ce360e01b86526004859052602486fd5b93845f80516020613c168339815191528796036122a05750823b1561228e575f80516020613c1683398151915280546001600160a01b031916821790558491907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a2805115612273576122679382915190845af43d1561226b573d9161224b83612dfe565b926122596040519485612ddd565b83523d85602085013e613bb7565b5080f35b606091613bb7565b505050503461227f5780f35b63b398979f60e01b8152600490fd5b634c9c8ce360e01b8552600452602484fd5b632a87526960e21b8652600452602485fd5b9091506020813d6020116122e2575b816122ce60209383612ddd565b810103126122de5751905f6121ab565b8680fd5b3d91506122c1565b633db159f160e21b84526001600452602484fd5b612317915060203d6020116104395761042b8183612ddd565b5f61217b565b63703e46dd60e11b8452600484fd5b5f80516020613c16833981519152546001600160a01b0316141590505f612136565b50346101fe57806003193601126101fe57602060405160018152f35b50346101fe57806003193601126101fe57603a5481546040516303b0981b60e61b81526004810183905233602482015290602090829060449082906001600160a01b03165afa90811561051557839161242c575b5015611b1057505f80516020613c368339815191525460ff81161561241d5760ff19165f80516020613c36833981519152557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a180f35b638dfc202b60e01b8252600482fd5b612445915060203d6020116104395761042b8183612ddd565b5f6123be565b50346101fe57806003193601126101fe57602060ff60355416604051908152f35b50346101fe5760403660031901126101fe57612486612d0e565b6001600160a01b03168152607360205260408120805460243592908310156101fe57610bf56124b58484612d6a565b505460405191829160f881901c9060a081901c6001600160581b0316906001600160a01b031684612cc1565b5034612775576080366003190112612775576124fb612d0e565b60243590612507612cfe565b3033036127c05760ff811691825f52603460205260405f209160028301918254936001810154808611156127b1578061254e6125466125549389612eef565b6064356139d2565b90612e3d565b805f528160205260405f2054955f19810190811161278d5781146127a15784545f1981019190821161278d57815f528260205260405f2054905f528260205260405f20555f526020525f60408120555b8254801561278d575f19019092556001600160581b0360a084901c16926001600160a01b038116929060f81c859003612779576001600160a01b03831690813b1561277557604051632142170760e11b81525f818061260889863060048501612f67565b038183875af19081612760575b5061271d576001600160a01b03168088526073602052604080892090519196919261263f84612d93565b835260208301906001600160581b038716825260408401928352805490600160401b821015612709579061267891600182018155612d6a565b9390936126f557519051915160a09290921b6affffffffffffffffffffff60a01b166001600160a01b03919091161760f89190911b6001600160f81b0319161790556040517f02bd238c4328bd7a45819d074c02d94aee3f4a59db4f4741146a5541797a81f893909283926126ef92909184612cc1565b0390a380f35b634e487b7160e01b8a5260048a905260248afd5b634e487b7160e01b8b52604160045260248bfd5b6040516001600160a01b0390911695507fca7bea048fd0bdc5a06f611a565cb1dd464d8729eccfb1807551a4862ccb99e694909384936126ef9350919084612cc1565b61276d9199505f90612ddd565b5f975f612615565b5f80fd5b634e487b7160e01b5f52600160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f526020525f60408120556125a4565b630337966d60e31b5f5260045ffd5b630603565f60e31b5f5260045ffd5b3461277557610100366003190112612775576004356001600160a01b03811690819003612775576127fe612d24565b906064356001600160a01b03811690819003612775576084356001600160a01b0381169290839003612775575f80516020613c56833981519152549360ff8560401c1615946001600160401b03811680159081612a37575b6001149081612a2d575b159081612a24575b50612a155767ffffffffffffffff1981166001175f80516020613c5683398151915255856129e9575b5061289a613b8c565b6128a2613b8c565b6001600160a01b031680156129da576001600160601b0360a01b5f5416175f556128ca613b8c565b6128d2613b8c565b60ff195f80516020613c3683398151915254165f80516020613c3683398151915255604435603a5580156129cb5760c435603c556001600160601b0360a01b603d541617603d556001600160601b0360a01b603e541617603e556001600160601b0360a01b603754161760375560a43560385560e4356039556601000000000000640500030d4069ffffffffffffffffffff19603b54161717603b5561297457005b68ff0000000000000000195f80516020613c5683398151915254165f80516020613c56833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63d92e233d60e01b5f5260045ffd5b63e676f03160e01b5f5260045ffd5b68ffffffffffffffffff191668010000000000000001175f80516020613c568339815191525585612891565b63f92ee8a960e01b5f5260045ffd5b90501587612868565b303b159150612860565b879150612856565b3461277557602036600319011261277557602061192d612a5d612cee565b612efc565b3461277557606036600319011261277557612a7b612d0e565b6024356001600160581b03811681036127755760209161192d91612a9d612cfe565b91612e61565b34612775576040366003190112612775576024356001600160401b03811161277557612ad3903690600401612d3a565b603d549091906001600160a01b031633819003612b3e5750612af482612e4a565b91612b026040519384612ddd565b808352602083019060051b82019136831161277557905b828210612b2e57612b2c84600435613222565b005b8135815260209182019101612b19565b63073e64fd60e21b5f523360045260245260445ffd5b34612775576020366003190112612775576004355f52603f602052602060405f2054604051908152f35b3461277557608036600319011261277557612b97612d0e565b50612ba0612d24565b506064356001600160401b03811161277557366023820112156127755780600401356001600160401b038111612775573691016024011161277557604051630a85bd0160e11b8152602090f35b34612775575f366003190112612775576037546040516001600160a01b039091168152602090f35b346127755760203660031901126127755760ff612c30612cee565b165f526033602052606060405f205460ff60405191818116835260018060a01b038160081c16602084015260a81c1615156040820152f35b346127755760203660031901126127755760405180610bf560043560f881901c9060a081901c6001600160581b0316906001600160a01b031684612cc1565b34612775575f366003190112612775576020906039548152f35b6001600160a01b0390911681526001600160581b03909116602082015260ff909116604082015260600190565b6004359060ff8216820361277557565b6044359060ff8216820361277557565b600435906001600160a01b038216820361277557565b602435906001600160a01b038216820361277557565b9181601f84011215612775578235916001600160401b038311612775576020808501948460051b01011161277557565b8054821015612d7f575f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b606081019081106001600160401b03821117612dae57604052565b634e487b7160e01b5f52604160045260245ffd5b608081019081106001600160401b03821117612dae57604052565b90601f801991011681019081106001600160401b03821117612dae57604052565b6001600160401b038111612dae57601f01601f191660200190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9190820180921161278d57565b6001600160401b038111612dae5760051b60200190565b909160ff81168015908115612ee0575b8115612ec5575b50612eb6576001600160a01b0390911660a09290921b6affffffffffffffffffffff60a01b169190911760f89190911b6001600160f81b0319161790565b63013ebdc960e51b5f5260045ffd5b90505f52603360205260ff60405f205460a81c16155f612e78565b60355460ff1681119150612e71565b9190820391821161278d57565b60ff1680158015612f59575b612eb657805f52603460205260405f20905f52603360205260ff60405f205460a81c16612f3457505f90565b600160028201549101548082115f14612f5357612f5091612eef565b90565b50505f90565b5060ff603554168111612f08565b6001600160a01b039182168152911660208201526001600160581b03909116604082015260600190565b90816020910312612775575180151581036127755790565b9081602091031261277557516001600160a01b03811681036127755790565b60ff1660ff811461278d5760010190565b5f9060365460019260ff60355416915b60ff85168381116130fd57805f52603360205260ff60405f205460a81c16156130f25761301586612efc565b815f5260346020526001600160601b03600360405f2001541681159182156130e7575b505015613068576130629161305c915f52603360205260ff60405f20541690612eef565b94612fc8565b93612fe9565b5f95919552603360205260405f206040519061308382612d93565b54604060ff82169283815260ff60018060a01b038460081c169384602084015260a81c16151591829101526130be575b505061306290612fc8565b8181949293940292818404149015171561278d57613062916130df91612e3d565b91905f6130b3565b111590505f80613038565b509361306290612fc8565b509150919250801561311f57603c5491048082111561311a575090565b905090565b639582fb0d60e01b5f5260045ffd5b8051821015612d7f5760209160051b010190565b9061314c82612e4a565b6131596040519182612ddd565b828152809261316a601f1991612e4a565b0190602036910137565b5f19811461278d5760010190565b9190811015612d7f5760051b0190565b356001600160a01b03811681036127755790565b9190918054831015612d7f575f52601f60205f208360051c01921690565b6001600160601b0316801561278d575f190190565b6003905f81555f60018201555f6002820155018054905f8155816131fb575050565b5f52601f60205f20910160051c8101905b818110613217575050565b5f815560010161320c565b915f92805f52603260205260405f209360036040519561324187612dc2565b60018060a01b03815416875260018101546020880152600281015460408801520193604051808660208298549384815201905f5260205f20925f905b80601f83011061382a57613393945491818110613816575b8181106137ff575b8181106137e8575b8181106137d1575b8181106137bb575b8181106137a4575b81811061378d575b818110613776575b81811061375f575b818110613748575b818110613731575b81811061371a575b818110613703575b8181106136ec575b8181106136d5575b8181106136be575b8181106136a7575b818110613690575b818110613679575b818110613662575b81811061364b575b818110613634575b81811061361d575b818110613606575b8181106135ef575b8181106135d8575b8181106135c1575b8181106135aa575b818110613593575b81811061357c575b818110613565575b10613557575b500386612ddd565b60608601948552825f52604060205260ff60405f20541661354f57825f52604060205260405f20600160ff19825416179055805115612d7f57602001519461341d6040516020810190888252602081526133ee604082612ddd565b519020966040516020810191825242604082015260408152613411606082612ddd565b51902096865190613a67565b5f5b86518051821015613498579060ff6134398260019461312e565b5116805f5260346020526001600160601b03600360405f20015416613460575b500161341f565b5f526034602052600360405f20016001600160601b03613482818354166131c4565b166001600160601b03198254161790555f613459565b505091939590929450845f5260326020526134b560405f206131d9565b82516001600160a01b031691303b156127755760ff9060405193633784ef6160e01b8552600485015286602485015216604483015260648201525f8160848183305af1908161353a575b5061353557516001600160a01b0316907f6da106856812d85f18a2f32a00eeffa53ae8230a00c9f97003f91122bcc988049080a3565b505050565b6135479193505f90612ddd565b5f915f6134ff565b505050915050565b60f81c81526020015f61338b565b92602060019160ff8560f01c168152019301613385565b92602060019160ff8560e81c16815201930161337d565b92602060019160ff8560e01c168152019301613375565b92602060019160ff8560d81c16815201930161336d565b92602060019160ff8560d01c168152019301613365565b92602060019160ff8560c81c16815201930161335d565b92602060019160ff8560c01c168152019301613355565b92602060019160ff8560b81c16815201930161334d565b92602060019160ff8560b01c168152019301613345565b92602060019160ff8560a81c16815201930161333d565b92602060019160ff8560a01c168152019301613335565b92602060019160ff8560981c16815201930161332d565b92602060019160ff8560901c168152019301613325565b92602060019160ff8560881c16815201930161331d565b92602060019160ff8560801c168152019301613315565b92602060019160ff8560781c16815201930161330d565b92602060019160ff8560701c168152019301613305565b92602060019160ff8560681c1681520193016132fd565b92602060019160ff8560601c1681520193016132f5565b92602060019160ff8560581c1681520193016132ed565b92602060019160ff8560501c1681520193016132e5565b92602060019160ff8560481c1681520193016132dd565b92602060019160ff8560401c1681520193016132d5565b92602060019160ff8560381c1681520193016132cd565b92602060019160ff8560301c1681520193016132c5565b92602060019160ff8560281c1681520193016132bd565b92602060019160ff85831c1681520193016132b5565b92602060019160ff8560181c1681520193016132ad565b92602060019160ff8560101c1681520193016132a5565b92602060019160ff8560081c16815201930161329d565b92602060019160ff85168152019301613295565b916020919350610400600191865460ff8116825260ff8160081c168583015260ff8160101c16604083015260ff8160181c16606083015260ff81861c16608083015260ff8160281c1660a083015260ff8160301c1660c083015260ff8160381c1660e083015260ff8160401c1661010083015260ff8160481c1661012083015260ff8160501c1661014083015260ff8160581c1661016083015260ff8160601c1661018083015260ff8160681c166101a083015260ff8160701c166101c083015260ff8160781c166101e083015260ff8160801c1661020083015260ff8160881c1661022083015260ff8160901c1661024083015260ff8160981c1661026083015260ff8160a01c1661028083015260ff8160a81c166102a083015260ff8160b01c166102c083015260ff8160b81c166102e083015260ff8160c01c1661030083015260ff8160c81c1661032083015260ff8160d01c1661034083015260ff8160d81c1661036083015260ff8160e01c1661038083015260ff8160e81c166103a083015260ff8160f01c166103c083015260f81c6103e082015201940192018892939161327d565b81156139dc570690565b634e487b7160e01b5f52601260045260245ffd5b60ff165f52603460205260405f2060028101805480155f14613a305750600180830155600281555b545f19810190811161278d575f5260205260405f2055565b613a3990613174565b8155613a18565b60ff5f80516020613c368339815191525416613a5857565b63d93c066560e01b5f5260045ffd5b905f925f5b8251811015613aec5760ff613a81828561312e565b511680151580613add575b80613ac4575b613aa0575b50600101613a6c565b60019195613abd915f52603360205260ff60405f20541690612e3d565b9490613a97565b50805f52603360205260ff60405f205460a81c16613a92565b5060ff60355416811115613a8c565b5092919091801561311f57613b00916139d2565b5f905f5b835181101561311f5760ff613b19828661312e565b511680151580613b7d575b80613b64575b613b38575b50600101613b04565b92613b5390845f52603360205260ff60405f20541690612e3d565b9283831015613b2f57935050505090565b50805f52603360205260ff60405f205460a81c16613b2a565b5060ff60355416811115613b24565b60ff5f80516020613c568339815191525460401c1615613ba857565b631afcd79f60e31b5f5260045ffd5b90613bdb5750805115613bcc57805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580613c0c575b613bec575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b15613be456fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220a172dce8a90047e5eb8dbccc7ef36bbec7791c968f358fa8c173e583e71de61464736f6c634300081a0033