0 txs
0 calls
constructor
constructor(uint256 _mintFeeAmount, address _mintFeeRecipient)
functions
activePresaleStageCount
viewfunction activePresaleStageCount() view returns (uint256)
autoApproveTransfersFromValidator
viewfunction autoApproveTransfersFromValidator() view returns (bool)
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
config
viewfunction config() view returns (address metadataRenderer, uint64 collectionSize, uint16 royaltyBPS, address fundsRecipient, address royaltyRecipient, bool revealed, bool lockBeforeMintOut)
contractURI
viewfunction contractURI() view returns (string)
contractVersion
purefunction contractVersion() pure returns (string)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
DEFAULT_TRANSFER_VALIDATOR
viewfunction DEFAULT_TRANSFER_VALIDATOR() view returns (address)
explicitOwnershipOf
viewfunction explicitOwnershipOf(uint256 tokenId) view returns (tuple ownership)
explicitOwnershipsOf
viewfunction explicitOwnershipsOf(uint256[] tokenIds) view returns (tuple[])
feeForAmount
viewfunction feeForAmount(uint256 quantity) view returns (address recipient, uint256 fee)
getApproved
viewfunction getApproved(uint256 tokenId) view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getTransferValidationFunction
purefunction getTransferValidationFunction() pure returns (bytes4 functionSignature, bool isViewFunction)
getTransferValidator
viewfunction getTransferValidator() view returns (address validator)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isAdmin
viewfunction isAdmin(address user) view returns (bool)
isApprovedForAll
viewfunction isApprovedForAll(address owner, address operator) view returns (bool isApproved)
metadataRenderer
viewfunction metadataRenderer() view returns (address)
mintedPerAddress
viewfunction mintedPerAddress(address minter) view returns (tuple)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
presaleConfig
viewfunction presaleConfig(uint256) view returns (string presaleName, uint64 presaleStart, uint64 presaleEnd, uint104 presalePrice, uint32 presaleMaxPurchasePerAddress, uint32 presaleSupply, uint32 presaleMinted, bytes32 presaleMerkleRoot)
presaleMintedByAddress
viewfunction presaleMintedByAddress(address, uint256) view returns (uint256)
publicSaleConfig
viewfunction publicSaleConfig() view returns (uint104 publicSalePrice, uint32 maxSalePurchasePerAddress, uint64 publicSaleStart, uint64 publicSaleEnd, bool publicSaleDisabled)
royaltyInfo
viewfunction royaltyInfo(uint256, uint256 _salePrice) view returns (address receiver, uint256 royaltyAmount)
SALES_MANAGER_ROLE
viewfunction SALES_MANAGER_ROLE() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokensOfOwner
viewfunction tokensOfOwner(address owner) view returns (uint256[])
tokensOfOwnerIn
viewfunction tokensOfOwnerIn(address owner, uint256 start, uint256 stop) view returns (uint256[])
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256 result)
__ERC721ACQueryableInitializable_init
nonpayablefunction __ERC721ACQueryableInitializable_init(string name_, string symbol_)
adminMint
nonpayablefunction adminMint(address recipient, uint256 quantity) returns (uint256)
adminMintAirdrop
nonpayablefunction adminMintAirdrop(address[] recipients) returns (uint256)
approve
payablefunction approve(address to, uint256 tokenId) payable
burn
nonpayablefunction burn(uint256 tokenId)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(string _contractName, string _contractSymbol, address _initialOwner, address _fundsRecipient, uint64 _collectionSize, uint16 _royaltyBPS, address _royaltyRecipient, bytes[] _setupCalls, bool _tradingLocked, bool _revealed, address _escrowHandler)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
purchase
payablefunction purchase(uint256 quantity) payable returns (uint256)
purchasePresale
payablefunction purchasePresale(uint256 stageIndex, uint256 quantity, uint256 maxQuantity, uint256 pricePerToken, bytes32[] merkleProof) payable returns (uint256)
purchasePresaleWithComment
payablefunction purchasePresaleWithComment(uint256 stageIndex, uint256 quantity, uint256 maxQuantity, uint256 pricePerToken, bytes32[] merkleProof, string comment) payable returns (uint256)
purchaseWithComment
payablefunction purchaseWithComment(uint256 quantity, string comment) payable returns (uint256)
reduceSupply
nonpayablefunction reduceSupply(uint64 _newCollectionSize)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revealCollection
nonpayablefunction revealCollection(string collectionURI, string extension)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
safeTransferFrom
payablefunction safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) payable
safeTransferFrom
payablefunction safeTransferFrom(address from, address to, uint256 tokenId) payable
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setAutomaticApprovalOfTransfersFromValidator
nonpayablefunction setAutomaticApprovalOfTransfersFromValidator(bool autoApprove)
setFundsRecipient
nonpayablefunction setFundsRecipient(address newRecipientAddress)
setMetadataRenderer
nonpayablefunction setMetadataRenderer(address newRenderer, bytes metadataBase, bytes dynamicMetadataInfo)
setOwner
nonpayablefunction setOwner(address newOwner)
setPresaleConfiguration
nonpayablefunction setPresaleConfiguration(tuple[] presaleStages)
setPublicSaleConfiguration
nonpayablefunction setPublicSaleConfiguration(tuple newConfig)
setRoyalty
nonpayablefunction setRoyalty(uint16 _royaltyBPS, address _royaltyRecipient)
setTradingLock
nonpayablefunction setTradingLock(bool _locked)
setTransferValidator
nonpayablefunction setTransferValidator(address transferValidator_)
transferFrom
payablefunction transferFrom(address from, address to, uint256 tokenId) payable
withdraw
nonpayablefunction withdraw()
events
Approval
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
AutomaticApprovalOfTransferValidatorSet
event AutomaticApprovalOfTransferValidatorSet(bool autoApproved)
CollectionRevealed
event CollectionRevealed(address indexed revealedBy)
CollectionSizeReduced
event CollectionSizeReduced(address indexed changedBy, uint64 newSize)
ConsecutiveTransfer
event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to)
ContractStatusChanged
event ContractStatusChanged(address indexed changedBy)
DynamicMetadataChanged
event DynamicMetadataChanged(address changedBy)
FundsRecipientChanged
event FundsRecipientChanged(address indexed newAddress, address indexed changedBy)
FundsWithdrawn
event FundsWithdrawn(address indexed withdrawnBy, address indexed withdrawnTo, uint256 amount, address feeRecipient, uint256 feeAmount)
Initialized
event Initialized(uint8 version)
LockTradingStatusChanged
event LockTradingStatusChanged(address indexed changedBy, bool status)
MintComment
event MintComment(address indexed sender, address indexed tokenContract, uint256 indexed tokenId, uint256 quantity, string comment)
MintFeePayout
event MintFeePayout(uint256 mintFeeAmount, address mintFeeRecipient, bool success)
OwnerCanceled
event OwnerCanceled(address indexed previousOwner, address indexed potentialNewOwner)
OwnerPending
event OwnerPending(address indexed previousOwner, address indexed potentialNewOwner)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PresaleConfigChanged
event PresaleConfigChanged(address indexed changedBy)
PublicSaleConfigChanged
event PublicSaleConfigChanged(address indexed changedBy)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
RoyaltyChanged
event RoyaltyChanged(address indexed changedBy, uint256 newPercentage, address newRecipient)
Sale
event Sale(uint8 phase, address indexed to, uint256 indexed quantity, uint256 indexed pricePerToken, uint256 firstPurchasedTokenId, uint256 presaleStage)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
TransferValidatorUpdated
event TransferValidatorUpdated(address oldValidator, address newValidator)
UpdatedMetadataRenderer
event UpdatedMetadataRenderer(address sender, address renderer)
errors
Access_MissingRoleOrAdmin
error Access_MissingRoleOrAdmin(bytes32 role)
Access_OnlyAdmin
error Access_OnlyAdmin()
Access_WithdrawNotAllowed
error Access_WithdrawNotAllowed()
Admin_InvalidCollectionSize
error Admin_InvalidCollectionSize()
ApprovalCallerNotOwnerNorApproved
error ApprovalCallerNotOwnerNorApproved()
ApprovalQueryForNonexistentToken
error ApprovalQueryForNonexistentToken()
BalanceQueryForZeroAddress
error BalanceQueryForZeroAddress()
Collection_Aready_Revealed
error Collection_Aready_Revealed()
Collection_TradingLocked
error Collection_TradingLocked()
CreatorTokenBase__InvalidTransferValidatorContract
error CreatorTokenBase__InvalidTransferValidatorContract()
ExternalMetadataRenderer_CallFailed
error ExternalMetadataRenderer_CallFailed()
InvalidQueryRange
error InvalidQueryRange()
Mint_SoldOut
error Mint_SoldOut()
MintERC2309QuantityExceedsLimit
error MintERC2309QuantityExceedsLimit()
MintToZeroAddress
error MintToZeroAddress()
MintZeroQuantity
error MintZeroQuantity()
NotCompatibleWithSpotMints
error NotCompatibleWithSpotMints()
ONLY_OWNER
error ONLY_OWNER()
ONLY_PENDING_OWNER
error ONLY_PENDING_OWNER()
OwnerQueryForNonexistentToken
error OwnerQueryForNonexistentToken()
OwnershipNotInitializedForExtraData
error OwnershipNotInitializedForExtraData()
Presale_ExceedStageSupply
error Presale_ExceedStageSupply()
Presale_Inactive
error Presale_Inactive()
Presale_Invalid
error Presale_Invalid()
Presale_MerkleNotApproved
error Presale_MerkleNotApproved()
Presale_TooManyForAddress
error Presale_TooManyForAddress()
Purchase_TooManyForAddress
error Purchase_TooManyForAddress()
Purchase_WrongPrice
error Purchase_WrongPrice(uint256 correctPrice)
Sale_Inactive
error Sale_Inactive()
SequentialMintExceedsLimit
error SequentialMintExceedsLimit()
SequentialUpToTooSmall
error SequentialUpToTooSmall()
Setup_Presale_StageOutOfRange
error Setup_Presale_StageOutOfRange()
Setup_RoyaltyPercentageTooHigh
error Setup_RoyaltyPercentageTooHigh(uint16 maxRoyaltyBPS)
ShouldNotMintToBurnAddress
error ShouldNotMintToBurnAddress()
SpotMintTokenIdTooSmall
error SpotMintTokenIdTooSmall()
TokenAlreadyExists
error TokenAlreadyExists()
TransferCallerNotOwnerNorApproved
error TransferCallerNotOwnerNorApproved()
TransferFromIncorrectOwner
error TransferFromIncorrectOwner()
TransferToNonERC721ReceiverImplementer
error TransferToNonERC721ReceiverImplementer()
TransferToZeroAddress
error TransferToZeroAddress()
URIQueryForNonexistentToken
error URIQueryForNonexistentToken()
Withdraw_FundsSendFailure
error Withdraw_FundsSendFailure()
creation bytecode
0x610140346102ac576001600160401b036162215f601f38839003908101601f19168501908482118683101761029857808691604095869485528339810103126102ac5783516020909401516001600160a01b03811693908490036102ac578251905f82527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac8473721c0078c2328597ca70f5451fff5a7b38d4e94793846020820152a1813b610254575b5050600160025560086080526203345060a052600560c0527f5ebbf78043a2215b522b1366a193ec74dd1f54e441e841a87b9653246a9c49a660e052610100938452610120928352805460ff8160b81c166102005760ff808260b01c16106101be575b50505190615f7092836102b184396080518381816154260152615551015260a05183818161124801526158ef015260c051838181612d7701526132f2015260e051838181610ebe015281816113b701528181611f44015281816129f501528181612ff5015281816130520152818161322b015281816132c1015281816139ad0152613ecb0152518281816113250152818161493a01528181615011015261589901525181818161134d01526158bf0152f35b60ff60b01b191660ff60b01b179055805160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602090a15f8061010c565b825162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b813b156102ac575f8092604486518095819363fb2de5d760e01b83523060048401526102d160248401525af1156100a95790809250116102985781525f80806100a9565b634e487b7160e01b5f52604160045260245ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c8063014635461461041457806301ffc9a71461040f57806303ee27331461040a5780630608bdf81461040557806306b3f4611461040057806306fdde03146103fb578063081812fc146103f6578063095ea7b3146103f1578063098144d4146103ec5780630d705df6146103e757806310a7eb5d146103e257806313af4035146103dd57806318160ddd146103d857806323b872dd146103d3578063248a9ca3146103ce57806324d7806c146103c95780632a55205a146103c45780632bc350e1146103bf5780632f2ff15d146103ba57806336568abe146103b55780633ccfd60b146103b057806341ef421a146103ab57806342558f55146103a657806342842e0e146103a157806342966c681461039c5780634d27c543146103975780634e44ae5e14610392578063522dd5cd1461038d5780635bbb21771461038857806360e55adf146103835780636221d13c1461037e5780636352211e146103795780636a75944214610374578063703199701461036f57806370a082311461036a57806379502c55146103655780638462151c146103605780638da5cb5b1461035b57806391d148541461035657806395d89b411461035157806399a2557a1461034c5780639e05d24014610347578063a0a8e46014610342578063a217fddf1461033d578063a22cb46514610338578063a3fd2c4414610333578063a9fc664e1461032e578063ac9650d814610329578063b88d4fde14610324578063b8ae5a2c1461031f578063c23dc68f1461031a578063c7b7cae614610315578063c87b56dd14610310578063d445b9781461030b578063d547741f14610306578063da7b7f9f14610301578063e26bd343146102fc578063e58306f9146102f7578063e8a3d485146102f2578063e985e9c5146102ed578063efef39a1146102e8578063f73134d0146102e3578063ff47a7c3146102de5763ff92cd73146102d9575f80fd5b61328c565b6131f1565b6131da565b61316b565b61312d565b6130b9565b613018565b612fde565b612f59565b612efa565b612d40565b612c50565b612b95565b612b32565b6129bd565b612930565b6128b6565b6127ec565b61278c565b6126e5565b6126cb565b612686565b612620565b61247b565b6123c9565b612377565b61234f565b6121bc565b612104565b6120d5565b6120ad565b611f13565b611ea1565b611e7d565b611c33565b611b63565b611aee565b611a39565b611823565b611618565b611438565b611381565b61130a565b6111c1565b61112b565b61107c565b610fca565b610f0a565b610e68565b610e3b565b610c99565b610c1d565b610bd2565b610b4b565b610b24565b610af8565b610a50565b6109c0565b6108d4565b610882565b61078b565b6106a0565b610467565b610427565b5f91031261042357565b5f80fd5b34610423575f36600319011261042357602060405173721c0078c2328597ca70f5451fff5a7b38d4e9478152f35b6001600160e01b031981160361042357565b34610423576020366003190112610423576104ca60043561048781610455565b63ffffffff60e01b16637965db0b60e01b8114908115610557575b81156104f0575b81156104df575b81156104ce575b5060405190151581529081906020820190565b0390f35b63152a902d60e11b1490505f6104b7565b638da5cb5b60e01b811491506104b0565b9050632b435fdb60e21b81148015610547575b8015610510575b906104a9565b506301ffc9a760e01b81148015610537575b8061050a5750635b5e139f60e01b811461050a565b506380ac58cd60e01b8114610522565b5063503e914d60e11b8114610503565b6301ffc9a760e01b811491506104a2565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161058f57604052565b610568565b608081019081106001600160401b0382111761058f57604052565b61010081019081106001600160401b0382111761058f57604052565b602081019081106001600160401b0382111761058f57604052565b604081019081106001600160401b0382111761058f57604052565b90601f801991011681019081106001600160401b0382111761058f57604052565b6040519061062f82610594565b565b6001600160401b03811161058f57601f01601f191660200190565b92919261065882610631565b916106666040519384610601565b829481845281830111610423578281602093845f960137010152565b9080601f830112156104235781602061069d9335910161064c565b90565b6040366003190112610423576001600160401b03600435602435828111610423576106cf903690600401610682565b916106d861485a565b5f80516020615e3b8339815191525482015f1901908183116107535760045460a01c1610610741576107086148ae565b1561072f576104ca9161071a91614928565b60016002556040519081529081906020820190565b60405163f12dcc7f60e01b8152600490fd5b604051630717c51360e41b8152600490fd5b61353a565b6004359061ffff8216820361042357565b60a4359061ffff8216820361042357565b6001600160a01b0381160361042357565b34610423576040366003190112610423576107a4610758565b6024356107b08161077a565b335f9081525f80516020615e1b833981519152602052604090205460ff1615610870576113888061ffff84161161085857506004805461ffff60e01b191660e084901b61ffff60e01b16179055600680546001600160a01b0319166001600160a01b039290921691821790556040805161ffff9093168352602083019190915233917f2820bfcf7b1a159978f13dbeb50640bc4abd2dea1eae87236232e3f3305ccc079190a2005b6024906040519063334074c160e11b82526004820152fd5b6040516302bd6bd160e01b8152600490fd5b34610423575f366003190112610423576020600954604051908152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b90602061069d92818152019061089f565b34610423575f366003190112610423576040515f5f80516020615ebb833981519152805490610902826118ff565b80855291602091600191828116908115610993575060011461093b575b6104ca8661092f81880382610601565b604051918291826108c3565b5f90815293507f933ecf8acb7824b680a8d16f3ff3db8864228d986aa4c2ebab1eeb2703b4beb35b8385106109805750505050810160200161092f826104ca5f61091f565b8054868601840152938201938101610963565b90508695506104ca9693506020925061092f94915060ff191682840152151560051b82010192935f61091f565b34610423576020366003190112610423576004356109dd81614ab7565b15610a0c575f525f80516020615e9b833981519152602052602060018060a01b0360405f205416604051908152f35b6333d1c03960e21b5f5260045ffd5b6044359061062f8261077a565b6064359061062f8261077a565b60c4359061062f8261077a565b610144359061062f8261077a565b604036600319011261042357600435610a688161077a565b602435906001600160a01b0380610a7e8461527d565b1690813303610adb575b835f525f80516020615e9b83398151915260205260405f20921691826001600160601b0360a01b8254161790557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a4005b610ae53383614087565b610a88576367d9dca160e11b5f5260045ffd5b34610423575f366003190112610423576020610b12613569565b6040516001600160a01b039091168152f35b34610423575f366003190112610423576040805163657711f560e11b815260016020820152f35b3461042357602036600319011261042357600435610b688161077a565b335f9081525f80516020615e1b833981519152602052604090205460ff161561087057600580546001600160a01b0319166001600160a01b0392909216918217905533907f70a7ea5c664ab9c21baf3da59bb2f1e1ca33557b08a0031fab4f1707674499515f80a3005b3461042357602036600319011261042357600435610bef8161077a565b335f9081525f80516020615e1b833981519152602052604090205460ff161561087057610c1b90614b9a565b005b34610423575f366003190112610423575f80516020615e3b833981519152547f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c415460405191035f19018152602090f35b606090600319011261042357600435610c858161077a565b90602435610c928161077a565b9060443590565b610ca236610c6d565b906001600160401b0360045460a01c16925f80516020615e3b833981519152935f198554011460ff60065460a81c169081610e32575b50610e2057610ce68361527d565b6001600160a01b0391821694818316869003610e1b575f8581525f80516020615e9b833981519152602052604090208054610d346001600160a01b03891633908114908314171590565b1590565b610e04575b610d4487878a61592e565b610dfb575b50610d5386611ab6565b80545f19019055610d6384611ab6565b805460010190556001600160a01b0384164260a01b17600160e11b17610d88866118e5565b55600160e11b821615610dc1575b505081168281855f80516020615edb8339815191525f80a415610dbc57610c1b92615a41565b614b41565b6001850190610dcf826118e5565b5415610ddc575b50610d96565b548103610dea575b80610dd6565b610df3906118e5565b555f80610de4565b5f90555f610d49565b610e11610d30338a614087565b15610d3957614b32565b614b24565b60405163a36e58c360e01b8152600490fd5b9050155f610cd8565b34610423576020366003190112610423576004355f5260016020526020600160405f200154604051908152f35b34610423576020366003190112610423576020600435610e878161077a565b5f8080526001835260408082206001600160a01b038416835260205290205460ff16908115610ebc575b506040519015158152f35b7f00000000000000000000000000000000000000000000000000000000000000005f9081526001845260408082206001600160a01b0390931682526020929092522060ff915054165f610eb1565b34610423576040366003190112610423576040610f286024356135ba565b82516001600160a01b0390921682526020820152f35b6001600160401b0381160361042357565b6084359061062f82610f3e565b9181601f84011215610423578235916001600160401b038311610423576020808501948460051b01011161042357565b6101043590811515820361042357565b6101243590811515820361042357565b60043590811515820361042357565b60843590811515820361042357565b3461042357610160366003190112610423576001600160401b0360043581811161042357610ffc903690600401610682565b60243582811161042357611014903690600401610682565b61101c610a1b565b611024610a28565b61102c610f4f565b90611035610769565b61103d610a35565b9060e43597881161042357611059610c1b983690600401610f5c565b949093611064610f8c565b9661106d610f9c565b98611076610a42565b9a6135ee565b346104235760403660031901126104235760243560043561109c8261077a565b805f5260016020526110b4600160405f200154614cea565b5f8181526001602090815260408083206001600160a01b038616845290915290205460ff16156110e057005b5f8181526001602090815260408083206001600160a01b03861684529091529020805460ff1916600117905533916001600160a01b0316905f80516020615dfb8339815191525f80a4005b34610423576040366003190112610423576024356111488161077a565b336001600160a01b0382160361116457610c1b90600435614c62565b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608490fd5b34610423575f366003190112610423576111d961485a565b5f8052600160205247611217610d30611210335f80516020615e1b8339815191525b9060018060a01b03165f5260205260405f2090565b5460ff1690565b806112ec575b6112da575f8080808461124661123a60055460018060a01b031690565b6001600160a01b031690565b7f0000000000000000000000000000000000000000000000000000000000000000f1611270613a1d565b50156112c857600554604080519283525f60208401819052908301526001600160a01b03169033907f8a95554e4c9dcaaf33f247387f2ee77390780487d3365e3a804788791a1df50090606090a3610c1b6001600255565b6040516339debd5b60e01b8152600490fd5b604051631dab829b60e01b8152600490fd5b50600554611302906001600160a01b031661123a565b33141561121d565b346104235760203660031901126104235760406113496004357f00000000000000000000000000000000000000000000000000000000000000006135a7565b81517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020810191909152f35b346104235760203660031901126104235761139a610fac565b335f9081525f80516020615e1b83398151915260205260409020547f00000000000000000000000000000000000000000000000000000000000000009060ff16158061140c575b6113ee57610c1b82613a4c565b6040516333ba055f60e21b81526004810191909152602490fd5b0390fd5b505f81815260016020908152604080832033845290915290206114339060ff905b54161590565b6113e1565b61144136610c6d565b6001600160401b0360049392935460a01c16905f80516020615e3b833981519152915f19835401149160ff60065460a81c16808091611610575b610e20576040519361148c856105cb565b5f85528180611608575b610e2057816115ff575b50610e20576114ae8261527d565b6001600160a01b0385811692909190818316849003610e1b575f8581525f80516020615e9b8339815191526020526040902080546114fb6001600160a01b03871633908114908314171590565b6115e8575b61150b878b8861592e565b6115df575b5061151a84611ab6565b80545f1901905561152a88611ab6565b805460010190556001600160a01b0388164260a01b17600160e11b1761154f866118e5565b55600160e11b8216156115a5575b505085168281835f80516020615edb8339815191525f80a415610dbc57818561158592615a41565b833b61158d57005b61159a93610d3093615b0b565b6115a057005b614b50565b60018501906115b3826118e5565b54156115c0575b5061155d565b5481036115ce575b806115ba565b6115d7906118e5565b555f806115c8565b5f90555f611510565b6115f5610d303388614087565b1561150057614b32565b9050155f6114a0565b508015611496565b50831561147b565b34610423576020366003190112610423576004356116358161527d565b906001600160a01b038216611661825f525f80516020615e9b83398151915260205260405f2090815490565b939061167c6001600160a01b03841633908114908714171590565b611795575b6116fa9461168f85856159af565b61178c575b5061169e82611ab6565b80546fffffffffffffffffffffffffffffffff0190556001600160a01b0382164260a01b17600360e01b176116d2846118e5565b55600160e11b81161561174c575b50815f825f80516020615edb8339815191528280a46159af565b610c1b6117287f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c415460010190565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4155565b60018301611759816118e5565b5415611766575b506116e0565b5f80516020615e3b83398151915254811461176057611784906118e5565b555f80611760565b5f90555f611694565b6117a2610d303385614087565b1561168157614b32565b6001600160401b03811161058f5760051b60200190565b9080601f830112156104235760209082356117dd816117ac565b936117eb6040519586610601565b81855260208086019260051b82010192831161042357602001905b828210611814575050505090565b81358152908301908301611806565b60a0366003190112610423576001600160401b03602435600435608435838111610423576118559036906004016117c3565b9261185e61485a565b5f80516020615e3b8339815191525483015f1901908184116107535760045460a01c16106107415761188f81614f04565b156118d3576104ca926118b992604051926118a9846105cb565b5f84526064359160443591614f64565b6118c36001600255565b6040519081529081906020820190565b604051634af69e0d60e11b8152600490fd5b5f525f80516020615e5b83398151915260205260405f2090565b90600182811c9216801561192d575b602083101461191957565b634e487b7160e01b5f52602260045260245ffd5b91607f169161190e565b9060405191825f8254611949816118ff565b908184526020946001916001811690815f146119b55750600114611977575b50505061062f92500383610601565b5f90815285812095935091905b81831061199d57505061062f93508201015f8080611968565b85548884018501529485019487945091830191611984565b9250505061062f94925060ff191682840152151560051b8201015f8080611968565b94919360e096946119fd6001600160681b03939b9a99959b610100808a5289019061089f565b9a6001600160401b03809216602089015216604087015216606085015263ffffffff928380921660808601521660a08401521660c08201520152565b34610423576020366003190112610423576004355f52600a60205260405f20611a6181611937565b6104ca6001830154916001600160401b03936002810154600363ffffffff92015492604051968796848460401c1694808560201c169416926001600160681b038260801c1692808360401c16921690896119d7565b6001600160a01b03165f9081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c456020526040902090565b3461042357604036600319011261042357600435611b0b8161077a565b60018060a01b03165f52600b60205260405f206024355f52602052602060405f2054604051908152f35b602060031982011261042357600435906001600160401b03821161042357611b5f91600401610f5c565b9091565b3461042357611b7136611b35565b906040519180835260051b906020916020818501016040525b80818015611baf57611ba690601f198091019385010135613de1565b90850152611b8a565b848660405190602082016020835281518091526020604084019201935f5b828110611bda5784840385f35b90919282608082611c246001948a5162ffffff6060809260018060a01b0381511685526001600160401b036020820151166020860152604081015115156040860152015116910152565b01960191019492919094611bcd565b346104235760603660031901126104235760048035611c518161077a565b6001600160401b039060243582811161042357611c719036908501610682565b9160443590811161042357611c899036908501610682565b335f9081525f80516020615e1b8339815191526020526040908190205490939192919060ff1615611e6d57600480546001600160a01b0319166001600160a01b0390931692909217909155611ce79060208082518301019101613adb565b90928451611d0b81611cfd858760208401613b36565b03601f198101835282610601565b8654611d1f906001600160a01b031661123a565b91823b1561042357611d49925f92838a8a5196879586948593636bbde00160e01b85528401613b36565b03925af18015611e5557611e5a575b508251611db8575b84547f046c5d913c35948c3e0e44c3599eb14bf33b73f141fa8bb282b300414998b86890611db39086906001600160a01b03165b90513381526001600160a01b0390911660208201529081906040820190565b0390a1005b8454929392611dcf906001600160a01b031661123a565b803b1561042357611df9945f80948651978895869485936342495a9560e01b8552308d8601613b66565b03925af18015611e55577f046c5d913c35948c3e0e44c3599eb14bf33b73f141fa8bb282b300414998b86893611db393611d9492611e3c575b5093829350611d60565b80611e49611e4f9261057c565b80610419565b5f611e32565b613b5b565b80611e49611e679261057c565b5f611d58565b505050516302bd6bd160e01b8152fd5b34610423575f36600319011261042357602060ff5f5460a81c166040519015158152f35b346104235760203660031901126104235760206001600160a01b03611ec760043561527d565b16604051908152f35b906040600319830112610423576001600160401b036004358181116104235783611efc91600401610682565b926024359182116104235761069d91600401610682565b3461042357611f2136611ed0565b335f9081525f80516020615e1b83398151915260205260409081902054909291907f00000000000000000000000000000000000000000000000000000000000000009060ff16158061208b575b612074575060065460a01c60ff1661206357600454611f95906001600160a01b031661123a565b835163e8a3d48560e01b8152915f83600481855afa928315611e55575f9361203f575b50813b15610423575f8094611fe39651968795869485936342495a9560e01b85523060048601613b66565b03925af18015611e555761202c575b6006805460ff60a01b1916600160a01b179055337f2a10c355cd3f8130b128e45782d3e92e6c0b4ba2e844d06f49a48ee23f1f21f75f80a2005b80611e496120399261057c565b5f611ff2565b61205c9193503d805f833e6120548183610601565b810190613bb3565b915f611fb8565b8251635c7fae3560e01b8152600490fd5b6024908451906333ba055f60e21b82526004820152fd5b505f818152600160209081528582203383529052604090205460ff1615611f6e565b34610423575f366003190112610423576004546040516001600160a01b039091168152602090f35b346104235760203660031901126104235760206120fc6004356120f78161077a565b613bd8565b604051908152f35b34610423575f3660031901126104235760e060045460ff60018060a01b038060055416906006549161ffff6040519583811687526001600160401b038160a01c166020880152871c166040860152606085015281166080840152818160a01c16151560a084015260a81c16151560c0820152f35b9081518082526020808093019301915f5b828110612197575050505090565b835185529381019392810192600101612189565b90602061069d928181520190612178565b34610423576020366003190112610423576004356121d98161077a565b5f80516020615e3b83398151915254606090606091600191808303612207575b604051806104ca86826121ab565b9091925082936060938281101561234a5761222182613bd8565b958661223a575b50505050506104ca91505f80806121f9565b9091929394505f19840186811115612342575b506040926040519560059184890160051b8801988960405261226d613d7a565b905f91612280610d306040830151151590565b612330575b505f9591959887805b6122ae575b505050505050505050506104ca925081525f80808080612228565b15612312575b5f966122bf8461568b565b808b0151156122dc575050875f935b0196888d8b5297939761228e565b939093518061230a575b50848418861b156122f9575b88906122ce565b99880180871b8c018b9052996122f2565b93505f6122e6565b8083148015612327575b156122b45780612293565b50818a1461231c565b516001600160a01b031691505f612285565b95505f61224d565b614b6e565b34610423575f366003190112610423576003546040516001600160a01b039091168152602090f35b3461042357604036600319011261042357602060ff6123bd60243561239b8161077a565b6004355f526001845260405f209060018060a01b03165f5260205260405f2090565b54166040519015158152f35b34610423575f366003190112610423576040515f5f80516020615e7b8339815191528054906123f7826118ff565b808552916020916001918281169081156109935750600114612423576104ca8661092f81880382610601565b5f90815293507f617167b76dcc8247761fd21f427ad8ec3be6b3be203aed34e3aac08b4d31817c5b8385106124685750505050810160200161092f826104ca5f61091f565b805486860184015293820193810161244b565b3461042357606080600319360112610423576004359061249a8261077a565b6024359060443582936060938281101561234a576001809110612618575b5f80516020615e3b8339815191525480841015612610575b506124da82613bd8565b9583811015612608575b866124f8575b604051806104ca88826121ab565b83819293949596500386811115612600575b506040926040519560059184890160051b8801988960405261252b85613de1565b905f9161253e610d306040830151151590565b6125ee575b505f9591959887805b61256c575b505050505050505050506104ca925081525f808080806124ea565b156125d0575b5f9661257d8461568b565b808b01511561259a575050875f935b0196888d8b5297939761254c565b93909351806125c8575b50848418861b156125b7575b889061258c565b99880180871b8c018b9052996125b0565b93505f6125a4565b80831480156125e5575b156125725780612551565b50818a146125da565b516001600160a01b031691505f612543565b95505f61250a565b5f96506124e4565b92505f6124d0565b9450846124b8565b34610423576020366003190112610423577f6787c7f9a80aa0f5ceddab2c54f1f5169c0b88e75dd5e19d5e858a64144c7dbc602061265c610fac565b6126646152fa565b15155f5460ff60a81b8260a81b169060ff60a81b1916175f55604051908152a1005b34610423575f366003190112610423576104ca6040516126a5816105e6565b6005815264312e302e3360d81b602082015260405191829160208352602083019061089f565b34610423575f3660031901126104235760206040515f8152f35b34610423576040366003190112610423576004356127028161077a565b6024359081151580920361042357335f9081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c47602052604090206127489082906111fb565b60ff1981541660ff841617905560405191825260018060a01b0316907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b34610423575f3660031901126104235760a060075460ff6001600160401b036008549080604051946001600160681b038116865263ffffffff8160681c16602087015260881c1660408501528116606084015260401c1615156080820152f35b34610423576020366003190112610423576004356128098161077a565b6128116152fa565b6001600160a01b0381161515813b15816128ae575b5061289c57807fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac610c1b92612859613569565b604080516001600160a01b03928316815292909116602083015290a15f80546001600160a81b031916600883901b610100600160a81b0316176001179055615352565b6040516332483afb60e01b8152600490fd5b90505f612826565b34610423576128cd6128c736611b35565b90613cca565b60405160209160208201926020835281518094526040830193602060408260051b8601019301915f955b8287106129045785850386f35b909192938280612920600193603f198a8203018652885161089f565b96019201960195929190926128f7565b6080366003190112610423576004356129488161077a565b602435906129558261077a565b6001600160401b0360443560643582811161042357612978903690600401610682565b9160045460a01c165f80516020615e3b833981519152905f198254011460ff60065460a81c169081809261160857610e2057816115ff5750610e20576114ae8261527d565b34610423576129cb36611b35565b335f9081525f80516020615e1b8339815191526020908152604091829020546001949293919291907f00000000000000000000000000000000000000000000000000000000000000009060ff161580612b10575b612af957505f80516020615e3b83398151915254925f19928285018401808411610753576001600160401b0360045460a01c1610612ae85784838101955b868110612a7f576104ca88612a7061566e565b90519081529081906020820190565b8181039085821015612ae3575f8a8a5f80516020615efb8339815191526060839660051b890135612aaf8161077a565b612ab88161541f565b858d612ac261566e565b865160028152969101868e01528501526001600160a01b031692a401612a5d565b613c0c565b8551630717c51360e41b8152600490fd5b6024908551906333ba055f60e21b82526004820152fd5b505f818152600160209081528682203383529052604090205460ff1615612a1f565b34610423576020366003190112610423576080612b50600435613de1565b612b93604051809262ffffff6060809260018060a01b0381511685526001600160401b036020820151166020860152604081015115156040860152015116910152565bf35b60c0366003190112610423576001600160401b036004602435813560843584811161042357612bc790369085016117c3565b9260a43585811161042357612bdf9036908301610682565b94612be861485a565b5f80516020615e3b8339815191525484015f19019081851161075357825460a01c1610612c4157612c1882614f04565b15612c32576104ca61071a86866064356044358888614f64565b604051634af69e0d60e11b8152fd5b604051630717c51360e41b8152fd5b3461042357602036600319011261042357600435612c6d81614ab7565b15612cf557600454612cb9915f916001600160a01b031660065460a01c60ff16604051630180d19360e51b81526004810193909352151560248301529092839190829081906044820190565b03915afa8015611e55576104ca915f91612cdb575b50604051918291826108c3565b612cef91503d805f833e6120548183610601565b5f612cce565b604051630a14c4b560e41b8152600490fd5b6020815260806060612d24845183602086015260a0850190612178565b9360208101516040850152604081015182850152015191015290565b34610423576020366003190112610423576104ca600435612d608161077a565b612d68613e4b565b50612d72336156ef565b612d9b7f0000000000000000000000000000000000000000000000000000000000000000613e6f565b91612dc7612db98260018060a01b03165f52600b60205260405f2090565b60015f5260205260405f2090565b54612dd184613c69565b526001600160a01b0381165f908152600b60205260409020612dfb9060025f5260205260405f2090565b54612e0584613c76565b526001600160a01b0381165f908152600b60205260409020612e30905b60035f5260205260405f2090565b54612e3a84613c86565b526001600160a01b0381165f908152600b60205260409020612e65905b60045f5260205260405f2090565b54612e6f84613c96565b526001600160a01b0381165f908152600b60205260409020612e9a905b60055f5260205260405f2090565b54612ea484613ca6565b526001600160401b03612ece612ec88483612ebe86611ab6565b5460401c16613ea1565b92611ab6565b5460401c1691612edc610622565b93845260208401526040830152606082015260405191829182612d07565b3461042357604036600319011261042357610c1b602435600435612f1d8261077a565b805f526001602052612f35600160405f200154614cea565b614c62565b6001600160681b0381160361042357565b63ffffffff81160361042357565b346104235760a03660031901126104235760405160a08101908082106001600160401b0383111761058f57610c1b91604052600435612f9781612f3a565b8152602435612fa581612f4b565b6020820152604435612fb681610f3e565b6040820152606435612fc781610f3e565b6060820152612fd4610fbb565b6080820152613eae565b34610423575f3660031901126104235760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610423576040366003190112610423576004356130358161077a565b335f9081525f80516020615e1b83398151915260205260409020547f00000000000000000000000000000000000000000000000000000000000000009060ff16158061308f575b6113ee576104ca6118c360243584614004565b505f81815260016020908152604080832033845290915290206130b49060ff9061142d565b61307c565b34610423575f366003190112610423576004805460405163e8a3d48560e01b8152915f9183919082906001600160a01b03165afa8015611e55576104ca915f91613113575b5060405191829160208352602083019061089f565b61312791503d805f833e6120548183610601565b5f6130fe565b3461042357604036600319011261042357602061316160043561314f8161077a565b6024359061315c8261077a565b614087565b6040519015158152f35b60203660031901126104235760043561318261485a565b5f80516020615e3b8339815191525481015f1901808211610753576001600160401b0360045460a01c1610610741576131b96148ae565b1561072f576118b96104ca91604051906131d2826105cb565b5f8252614928565b3461042357610c1b6131eb36611ed0565b90614104565b346104235760203660031901126104235760043561320e81610f3e565b335f9081525f80516020615e1b83398151915260205260409020547f00000000000000000000000000000000000000000000000000000000000000009060ff161580613262575b6113ee57610c1b8261426c565b505f81815260016020908152604080832033845290915290206132879060ff9061142d565b613255565b346104235761329a36611b35565b335f9081525f80516020615e1b8339815191526020908152604091829020546001949293907f00000000000000000000000000000000000000000000000000000000000000009060ff161580613518575b612af957507f000000000000000000000000000000000000000000000000000000000000000081116135075761332081600955565b5f5b81811061335057337f6d682cb52ae97f85ae4d472de1318858441b30323437caaa4b9a2d923f8f22315f80a2005b806134a161335e889361354e565b61349c61337b613376835f52600a60205260405f2090565b614313565b9184878b8b898c8801908d6001600160401b0391826133a185516001600160401b031690565b1680151590816134fc575b506134f5575b6134d0575b506133ed6133e16133d3866133cd8a8a896143b2565b016143d4565b93516001600160401b031690565b6001600160401b031690565b9116116134a7575b61340891509261340e92613415946143b2565b80613c20565b369161064c565b835261344060606134318161342b898c8f6143b2565b016143de565b6001600160681b031690850152565b613466608061345a81613454898c8f6143b2565b016143e8565b63ffffffff1690850152565b61347a60a061345a81613454898c8f6143b2565b60e080613488878a8d6143b2565b0135908401525f52600a60205260405f2090565b61462c565b01613322565b6134c7936134b8936133cd926143b2565b6001600160401b0316848c0152565b84878b8b6133f5565b6134e26134ef916133cd8989886143b2565b6001600160401b03168352565b8d6133b7565b505f6133b2565b90504210155f6133ac565b835163194539c360e31b8152600490fd5b505f818152600160209081528682203383529052604090205460ff16156132eb565b634e487b7160e01b5f52601160045260245ffd5b906001820180921161075357565b9190820180921161075357565b5f54600881901c6001600160a01b0316919082156135845750565b60ff161561358e57565b73721c0078c2328597ca70f5451fff5a7b38d4e9479150565b8181029291811591840414171561075357565b6006546001600160a01b0316919082156135e9576135e56127109161ffff60045460e01c16906135a7565b0490565b505f90565b99979593919a98969492909a5f549b60ff8d60b81c1615809d819e613712575b81156136ef575b5015613693575f805460ff60b01b1916600160b01b17905561363b9b8d61367c57613724565b61364157565b5f805460ff60b81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602090a1565b5f805460ff60b81b1916600160b81b179055613724565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b303b15915081613701575b505f613615565b60b01c60ff1660011490505f6136fa565b9050600160ff8260b01c16109061360e565b9a989694929099979593915f80516020615f1b833981519152549a60ff8c60081c169b8c5f146138125750303b155b156137a7576137689b159c8d6137875761381b565b61376e57565b5f80516020615f1b833981519152805461ff0019169055565b5f80516020615f1b833981519152805461ffff191661010117905561381b565b60405162461bcd60e51b815260206004820152603760248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f20697320616c726561647920696e697469616c697a65640000000000000000006064820152608490fd5b60ff1615613753565b61392e999a9861390f986138d09461062f9e6138426138f19996613899969c9b999c614104565b6001600160a01b039a8b91808316908161394d57505061386d8361386861388b95614e19565b614b9a565b1660018060a01b03166001600160601b0360a01b6005541617600555565b61389433614e19565b613cca565b506138a333614be1565b6004805467ffffffffffffffff60a01b191660a09290921b67ffffffffffffffff60a01b16919091179055565b6004805461ffff60e01b191660e09290921b61ffff60e01b16919091179055565b1660018060a01b03166001600160601b0360a01b6006541617600655565b6006805460ff60a01b191691151560a01b60ff60a01b16919091179055565b6006805460ff60a81b191691151560a81b60ff60a81b16919091179055565b6001600160a01b0381165f9081525f80516020615e1b83398151915260205260409020546139d19594506139ab935061398e919060ff16156139d657614b9a565b60018060a01b03166001600160601b0360a01b6005541617600555565b7f0000000000000000000000000000000000000000000000000000000000000000614e8b565b61388b565b6001600160a01b0381165f9081525f80516020615e1b83398151915260205260409020805460ff1916600117905533835f5f80516020615dfb8339815191528180a4614b9a565b3d15613a47573d90613a2e82610631565b91613a3c6040519384610601565b82523d5f602084013e565b606090565b151560065460ff60a81b8260a81b169060ff60a81b1916176006556040519081527f569e33d168bfc35ada8c9257e83cd5fba5d421727e6d3b1bf319b6e82dcb399d60203392a2565b81601f8201121561042357805190613aac82610631565b92613aba6040519485610601565b8284526020838301011161042357815f9260208093018386015e8301015290565b9091606082840312610423578151916001600160401b03928381116104235784613b06918301613a95565b9360208201518481116104235781613b1f918401613a95565b9360408301519081116104235761069d9201613a95565b9091613b4d61069d9360408452604084019061089f565b91602081840391015261089f565b6040513d5f823e3d90fd5b9493613ba05f94613b92608095613bae9560018060a01b03168a5260a060208b015260a08a019061089f565b9088820360408a015261089f565b90868203606088015261089f565b930152565b906020828203126104235781516001600160401b0381116104235761069d9201613a95565b6001600160a01b03811615613bfd57613bf86001600160401b0391611ab6565b541690565b6323d3ad8160e21b5f5260045ffd5b634e487b7160e01b5f52603260045260245ffd5b903590601e198136030182121561042357018035906001600160401b0382116104235760200191813603831361042357565b90821015612ae357611b5f9160051b810190613c20565b805115612ae35760200190565b805160011015612ae35760400190565b805160021015612ae35760600190565b805160031015612ae35760800190565b805160041015612ae35760a00190565b8051821015612ae35760209160051b010190565b919091613cd6836117ac565b613ce36040519182610601565b838152601f19613cf2856117ac565b015f5b818110613d4557505080935f5b818110613d0f5750505050565b80613d29613d2361340e6001948689613c52565b306153a9565b613d338286613cb6565b52613d3e8185613cb6565b5001613d02565b806060602080938601015201613cf5565b60405190613d6382610594565b5f6060838281528260208201528260408201520152565b6001906001613d87613d56565b925f80516020615e3b83398151915254600110613da2575050565b809293505b613db6575b61069d915061568b565b805f525f80516020615e5b83398151915260205260405f2054613ddc575f190181613da7565b613dac565b90613dea613d56565b91600180821015613df9575050565b5f80516020615e3b833981519152548210613e12575050565b809293505b613e255761069d915061568b565b805f525f80516020615e5b83398151915260205260405f2054613ddc575f190181613e17565b60405190613e5882610594565b5f6060838181528260208201528260408201520152565b90613e79826117ac565b613e866040519182610601565b8281528092613e97601f19916117ac565b0190602036910137565b9190820391821161075357565b335f9081525f80516020615e1b83398151915260205260409020547f00000000000000000000000000000000000000000000000000000000000000009060ff161580613fe1575b613fc95750613f856080826001600160681b03613fa29451166007549063ffffffff60681b602084015160681b16906001600160401b0360881b604085015160881b169266ffffffffffffff60c81b16171717600755613f7e613f6260608301516001600160401b031690565b6001600160401b03166001600160401b03196008541617600855565b0151151590565b60ff60401b60085491151560401b169060ff60401b191617600855565b337f19f44771468333d4fb6bcd1e2b860c3dbb5d00a38a1a5a2bd05d6eb6004c9abc5f80a2565b602490604051906333ba055f60e21b82526004820152fd5b505f81815260016020908152604080832033845290915290205460ff1615613ef5565b905f195f80516020615e3b83398151915254820101808211610753576001600160401b0360045460a01c16106107415761403e818361554f565b61404661566e565b818103908111610753575f80516020615efb83398151915260605f946040519360038552602085015285604085015260018060a01b031692a461069d61566e565b6001600160a01b03165f9081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c476020526040902090919060ff906140cd9084906111fb565b54169182156140da575b50565b60ff5f5460a81c166140e95750565b9091506001600160a01b03806140fd613569565b1691161490565b919061412360ff5f80516020615f1b8339815191525460081c166157a5565b82516001600160401b03811161058f575f80516020615ebb833981519152906141558161415084546118ff565b6143f2565b602080601f83116001146141d25750908061418a9261419196975f926141c7575b50508160011b915f199060031b1c19161790565b9055614533565b6141a760015f80516020615e3b83398151915255565b6141af61580e565b6141b761582b565b61062f6141c2613569565b615352565b015190505f80614176565b90601f198316966142105f80516020615ebb8339815191525f527f933ecf8acb7824b680a8d16f3ff3db8864228d986aa4c2ebab1eeb2703b4beb390565b925f905b8982106142545750509083929160019461419198991061423c575b505050811b019055614533565b01515f1960f88460031b161c191690555f808061422f565b80600185968294968601518155019501930190614214565b6004546001600160401b03828116929160a01c1682108015906142f9575b6142e7576004805467ffffffffffffffff60a01b191660a09290921b67ffffffffffffffff60a01b169190911790556040519081527f2913fed19d080c1a117561858eb9911bfe1c9e32b3ed5cd19a455065f568468160203392a2565b6040516314dc7f9360e21b8152600490fd5b505f80516020615e3b833981519152545f1901821061428a565b90604051614320816105af565b60e06003829461432f81611937565b84526143816001600160681b03600183015461436b6001600160401b0380831660208a01528260401c1660408901906001600160401b03169052565b60801c1660608601906001600160681b03169052565b600281015463ffffffff8082166080870152602082901c811660a087015260409190911c1660c08501520154910152565b9190811015612ae35760051b8101359060fe1981360301821215610423570190565b3561069d81610f3e565b3561069d81612f3a565b3561069d81612f4b565b601f81116143fe575050565b5f80516020615ebb8339815191525f527f933ecf8acb7824b680a8d16f3ff3db8864228d986aa4c2ebab1eeb2703b4beb3906020601f840160051c83019310614461575b601f0160051c01905b818110614456575050565b5f815560010161444b565b9091508190614442565b601f8111614477575050565b5f80516020615e7b8339815191525f527f617167b76dcc8247761fd21f427ad8ec3be6b3be203aed34e3aac08b4d31817c906020601f840160051c830193106144da575b601f0160051c01905b8181106144cf575050565b5f81556001016144c4565b90915081906144bb565b601f82116144f157505050565b5f5260205f20906020601f840160051c83019310614529575b601f0160051c01905b81811061451e575050565b5f8155600101614513565b909150819061450a565b9081516001600160401b03811161058f575f80516020615e7b833981519152906145668161456184546118ff565b61446b565b602080601f831160011461459b575081906145979394955f926141c75750508160011b915f199060031b1c19161790565b9055565b90601f198316956145d95f80516020615e7b8339815191525f527f617167b76dcc8247761fd21f427ad8ec3be6b3be203aed34e3aac08b4d31817c90565b925f905b888210614614575050836001959697106145fc575b505050811b019055565b01515f1960f88460031b161c191690555f80806145f2565b806001859682949686015181550195019301906145dd565b9080518051906001600160401b03821161058f576146548261464e86546118ff565b866144e4565b602090816001601f8511146147ea57508260e0936003959361468a935f926141c75750508160011b915f199060031b1c19161790565b84555b614751600185016146c86146ab60208501516001600160401b031690565b825467ffffffffffffffff19166001600160401b03909116178255565b6147116146df60408501516001600160401b031690565b82546fffffffffffffffff0000000000000000191660409190911b6fffffffffffffffff000000000000000016178255565b60608301516001600160681b031681546cffffffffffffffffffffffffff60801b191660809190911b6cffffffffffffffffffffffffff60801b16179055565b6147e36002850161478261476c608085015163ffffffff1690565b825463ffffffff191663ffffffff909116178255565b6147b861479660a085015163ffffffff1690565b825467ffffffff00000000191660209190911b67ffffffff0000000016178255565b60c083015163ffffffff165b63ffffffff60401b82549160401b169063ffffffff60401b1916179055565b0151910155565b9190601f1984166147fe875f5260205f2090565b935f905b82821061484257505092600192859260e096600398961061482b575b505050811b01845561468d565b01515f1983881b60f8161c191690555f808061481e565b80600186978294978701518155019601940190614802565b60028054146148695760028055565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b60085460ff8160401c161590816148f9575b816148e0575b816148cf575090565b90506001600160401b034291161190565b60075460881c6001600160401b031642101591506148c6565b60075460881c6001600160401b0316151591506148c0565b60409061069d93928152816020820152019061089f565b90600754906001600160681b038216917f000000000000000000000000000000000000000000000000000000000000000061496c85614967838761355c565b6135a7565b3403614a7b575063ffffffff614981336156ef565b9160681c168015159182614a4e575b5050614a3c576149a0833361554f565b6149b1836149ac61566e565b613ea1565b9283926149bd82615870565b816040515f80516020615efb8339815191523391806149ef898260405f91939293606081019483825260208201520152565b0390a481516149ff575b50505090565b7fb9490aee663998179ad13f9e1c1eb6189c71ad1a9ec87f33ad2766f98d9a268a60405180614a313095339583614911565b0390a4805f806149f9565b604051630882ba5360e21b8152600490fd5b614a739192506149ac866001600160401b03614a6933611ab6565b5460401c1661355c565b115f80614990565b614a8c85614967611408938761355c565b60405163350e0bcf60e11b815260048101919091529081906024820190565b8015610753575f190190565b905f916001908060011115614aca575050565b5f80516020615e3b833981519152548110614ae3575050565b90809293505f925b614afc575b5050600160e01b161590565b909150614b08826118e5565b549182614b1f57614b1890614aab565b9080614aeb565b614af0565b62a1148160e81b5f5260045ffd5b632ce44b5f60e11b5f5260045ffd5b633a954ecd60e21b5f5260045ffd5b6368d2bf6b60e11b5f5260045ffd5b636f96cda160e11b5f5260045ffd5b631960ccad60e11b5f5260045ffd5b63b562e8dd60e01b5f5260045ffd5b622e076360e81b5f5260045ffd5b6003546001600160a01b0391821691829082167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a36001600160a01b03191617600355565b6001600160a01b0381165f9081525f80516020615e1b833981519152602052604090205460ff16614c0f5750565b6001600160a01b03165f8181525f80516020615e1b83398151915260205260408120805460ff191690553391907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8180a4565b5f8181526001602090815260408083206001600160a01b038616845290915290205460ff16614c8f575050565b5f8181526001602090815260408083206001600160a01b03861684529091529020805460ff1916905533916001600160a01b0316907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4565b5f8181526001602081815260408084203385529091529091205490919060ff1615614d13575050565b33614d1c615bbb565b926030614d2885613c69565b536078614d3485615be7565b536029905b808211614dd557611408614da0614dbd87611cfd614d6089614d5b8a15615c08565b615c53565b614d9a604051958694614d9a602087016017907f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081520190565b90615a93565b7001034b99036b4b9b9b4b733903937b6329607d1b815260110190565b60405162461bcd60e51b8152918291600483016108c3565b9091600f8116906010821015612ae357614e13916f181899199a1a9b1b9c1cb0b131b232b360811b901a614e098588615bf7565b5360041c92614aab565b90614d39565b6001600160a01b0381165f9081525f80516020615e1b833981519152602052604090205460ff1615614e485750565b6001600160a01b03165f8181525f80516020615e1b83398151915260205260408120805460ff191660011790553391905f80516020615dfb8339815191528180a4565b5f8181526001602090815260408083206001600160a01b038616845290915290205460ff1615614eb9575050565b5f8181526001602090815260408083206001600160a01b03861684529091529020805460ff1916600117905533916001600160a01b0316905f80516020615dfb8339815191525f80a4565b5f52600a602052600160405f2001546001600160401b0390818116918215159283614f42575b5082614f3557505090565b909150429160401c161190565b42101592505f614f2a565b906040519160208301526020825261062f826105e6565b939194929094600954851161526b57614f88613376865f52600a60205260405f2090565b90614fe0610d3060e084015195604096614fd388516020810190614fcb81611cfd8c8b3387604091949392606082019560018060a01b0316825260208201520152565b519020614f4d565b6020815191012091615aa5565b61525a57615007614ffb60608401516001600160681b031690565b6001600160681b031690565b808403615253575b7f00000000000000000000000000000000000000000000000000000000000000009061503f89614967848461355c565b340361522357505061506461505b608084015163ffffffff1690565b63ffffffff1690565b9081810361521b575b50335f908152600b6020526040902061509c9088906150969089905b905f5260205260405f2090565b5461355c565b1161520a5760a081019063ffffffff91826150bb825163ffffffff1690565b16151591826151d1575b50506151c057335f908152600b6020526040902086939291615129916150ec908890615089565b8581540190556147c46002615109895f52600a60205260405f2090565b0191861661511f835463ffffffff9060401c1690565b0163ffffffff1690565b615133833361554f565b61513c83615870565b615148836149ac61566e565b82516001815260208101829052604081019690965295869533905f80516020615efb83398151915290606090a48251615183575b5050505090565b7fb9490aee663998179ad13f9e1c1eb6189c71ad1a9ec87f33ad2766f98d9a268a9051806151b43095339583614911565b0390a4805f808061517c565b8251630e5092e960e11b8152600490fd5b6152029192506151f76151f161505b60c061505b94015163ffffffff1690565b8a61355c565b925163ffffffff1690565b105f806150c5565b825163a7b32bb160e01b8152600490fd5b90505f61506d565b6152358961496761140894899461355c565b905163350e0bcf60e11b815260048101919091529081906024820190565b508261500f565b83516342db872960e11b8152600490fd5b60405163038eae7b60e61b8152600490fd5b60019080600111614b5f57615291816118e5565b549182156152ae575b5050600160e01b81161561069d5780614b5f565b5f80516020615e3b83398151915254821015614b5f5790815b1561529a579091505f19016152db816118e5565b549182156152f3575050600160e01b8116614b5f5790565b90816152c7565b6003546001600160a01b0316330361530e57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b6001600160a01b0381169081615366575050565b3b61536e5750565b803b15610423575f809160446040518094819363fb2de5d760e01b83523060048401526102d160248401525af1156140d75761062f9061057c565b6040519060608201928284106001600160401b0385111761058f575f809161069d95604052602785527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c6020860152660819985a5b195960ca1b6040860152602081519101845af4615419613a1d565b91615cdd565b90600180927f0000000000000000000000000000000000000000000000000000000000000000935b15615544575b5f918481111561553d5784915b5f80516020615e3b833981519152549083156155385761547b848383615a00565b6001600160a01b0381164260a01b6001861460e11b171761549b836118e5565b556154a581611ab6565b80546801000000000000000186020190556001600160a01b0381169586156155335784830195839860015b156154f0575b5f8a8a5f5f80516020615edb8339815191528180a46154d0565b9860010198878a036154d6579661552a959399508694906149ac9397929950615524905f80516020615e3b83398151915255565b89615a00565b91939092615447565b614b8c565b614b7d565b809161545a565b8161544d5750509050565b7f000000000000000000000000000000000000000000000000000000000000000092919060015b15615663575b5f918481111561565c5784915b5f80516020615e3b83398151915254908315615538576155aa848383615a00565b6001600160a01b0381164260a01b6001861460e11b17176155ca836118e5565b556155d481611ab6565b80546801000000000000000186020190556001600160a01b0381169586156155335784830195839860015b1561561f575b5f8a8a5f5f80516020615edb8339815191528180a46155ff565b9860010198878a036156055796615653959399508694906149ac9397929950615524905f80516020615e3b83398151915255565b91939092615576565b8091615589565b8161557c5750509050565b5f80516020615e3b833981519152545f1981019081116107535790565b615693613d56565b505f525f80516020615e5b83398151915260205260405f20546156b4613d56565b6001600160a01b038216815260a082901c6001600160401b03166020820152600160e01b82161515604082015260e89190911c606082015290565b6001600160a01b0381165f908152600b60209081526040808320600184529091528082205460028352912054810191908210610753576001600160a01b0381165f908152600b6020526040902061574590612e22565b548201809211610753576001600160a01b0381165f908152600b6020526040902061576f90612e57565b548201809211610753576001600160a01b03165f908152600b6020526040902061579890612e8c565b5481018091116107535790565b156157ac57565b60405162461bcd60e51b815260206004820152603460248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e7472616374604482015273206973206e6f7420696e697469616c697a696e6760601b6064820152608490fd5b61062f60ff5f80516020615f1b8339815191525460081c166157a5565b7fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac604080515f815273721c0078c2328597ca70f5451fff5a7b38d4e9476020820152a1565b60606158bd7f6f8da53cfedb8cc4f7935c3629624e50b63053c93bb2cad246aa4d3a2ba7d4ce927f00000000000000000000000000000000000000000000000000000000000000006135a7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165f80808085857f0000000000000000000000000000000000000000000000000000000000000000f190615918613a1d565b50604051928352602083015215156040820152a1565b90915f5b600190818110156159a857808301808411610753576001600160a01b03868116159086161580806159a1575b1561597557604051635cbd944160e01b8152600490fd5b15615983575b505001615932565b1561598f575b8061597b565b61599b90868633615d6e565b5f615989565b508161595e565b5050505050565b5f5b600190818110156159fa578084018411610753576001600160a01b03831615806159f3575b156159ed57604051635cbd944160e01b8152600490fd5b016159b1565b50816159d6565b50505050565b905f5b838110615a105750505050565b8082018211610753576001600160a01b038316615a3957604051635cbd944160e01b8152600490fd5b600101615a03565b5f5b600190818110156159a8578085018511610753576001600160a01b03838116159081615a88575b5015615a8257604051635cbd944160e01b8152600490fd5b01615a43565b90508416155f615a6a565b805191908290602001825e015f815290565b929091905f915b8451831015615aee57615abf8386613cb6565b519081811015615add575f52602052600160405f205b920191615aac565b905f52602052600160405f20615ad5565b915092501490565b90816020910312610423575161069d81610455565b92602091615b53935f60018060a01b0360405180978196829584630a85bd0160e11b9c8d8652336004870152166024850152604484015260806064840152608483019061089f565b0393165af15f9181615b8a575b50615b7c57615b6d613a1d565b8051156115a057805190602001fd5b6001600160e01b0319161490565b615bad91925060203d602011615bb4575b615ba58183610601565b810190615af6565b905f615b60565b503d615b9b565b60405190606082018281106001600160401b0382111761058f57604052602a8252604082602036910137565b805160011015612ae35760210190565b908151811015612ae3570160200190565b15615c0f57565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b60405190615c6082610594565b6042825260603660208401376030615c7783613c69565b536078615c8383615be7565b536041905b60018211615c9b5761069d915015615c08565b600f8116906010821015612ae357615cd7916f181899199a1a9b1b9c1cb0b131b232b360811b901a615ccd8486615bf7565b5360041c91614aab565b90615c88565b91929015615d3f5750815115615cf1575090565b3b15615cfa5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015615d525750805190602001fd5b60405162461bcd60e51b815290819061140890600483016108c3565b9092916001600160a01b039182615d83613569565b1680615d92575b505050505050565b803314615d8a57803b15610423575f948460849481604051998a98899763657711f560e11b895216600488015216602486015216604484015260648301525afa8015611e5557615de7575b8080808080615d8a565b80611e49615df49261057c565b5f615ddd56fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0da6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb492569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c402569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c442569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c432569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c462569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c42ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef37a74b6f706970809184cf2c4d73c7baca71e081c7e9fd07291f31ba4618d10aee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85fa26469706673582212208216ff4b329e6d9cf8e3d9d9605bdd4281a71d820bd3e66423ba108c01ed3a7264736f6c634300081900330000000000000000000000000000000000000000000000000000b5e620f480000000000000000000000000002730b29acbbcd34a59b720338e8d06619fd71aca