0 txs
1 call
constructor
constructor()
functions
BALLOT_TYPEHASH
viewfunction BALLOT_TYPEHASH() view returns (bytes32)
CLOCK_MODE
viewfunction CLOCK_MODE() view returns (string)
clock
viewfunction clock() view returns (uint48)
COUNTING_MODE
purefunction COUNTING_MODE() pure returns (string)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
EXTENDED_BALLOT_TYPEHASH
viewfunction EXTENDED_BALLOT_TYPEHASH() view returns (bytes32)
getAllowedProposers
viewfunction getAllowedProposers() view returns (address[])
getNextProposalId
viewfunction getNextProposalId() view returns (uint256)
getVotes
viewfunction getVotes(address account, uint256 timepoint) view returns (uint256)
getVotesWithParams
viewfunction getVotesWithParams(address account, uint256 timepoint, bytes params) view returns (uint256)
hasVoted
viewfunction hasVoted(uint256 proposalId, address account) view returns (bool)
isAllowedProposer
viewfunction isAllowedProposer(address _account) view returns (bool)
isProposalGuardianExpired
viewfunction isProposalGuardianExpired() view returns (bool)
isWhitelisted
viewfunction isWhitelisted(address _account) view returns (bool)
lateQuorumVoteExtension
viewfunction lateQuorumVoteExtension() view returns (uint48)
latestProposalIds
viewfunction latestProposalIds(address proposer) view returns (uint256 latestProposalId)
MAX_TEMPORARY_PROPOSER_LIFETIME
viewfunction MAX_TEMPORARY_PROPOSER_LIFETIME() view returns (uint32)
MIN_PROPOSERS
viewfunction MIN_PROPOSERS() view returns (uint8)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
proposalCount
viewfunction proposalCount() view returns (uint256)
proposalDeadline
viewfunction proposalDeadline(uint256 _proposalId) view returns (uint256)
proposalDetails
viewfunction proposalDetails(uint256 _proposalId) view returns (address[], uint256[], bytes[], bytes32)
proposalEta
viewfunction proposalEta(uint256 proposalId) view returns (uint256)
proposalGuardian
viewfunction proposalGuardian() view returns (address account, uint96 expiration)
proposalNeedsQueuing
viewfunction proposalNeedsQueuing(uint256 _proposalId) view returns (bool)
proposalProposer
viewfunction proposalProposer(uint256 proposalId) view returns (address)
proposalSnapshot
viewfunction proposalSnapshot(uint256 proposalId) view returns (uint256)
proposalThreshold
viewfunction proposalThreshold() view returns (uint256)
proposalVotes
viewfunction proposalVotes(uint256 proposalId) view returns (uint256 againstVotes, uint256 forVotes, uint256 abstainVotes)
PROXY_ADMIN
viewfunction PROXY_ADMIN() view returns (address)
quorum
viewfunction quorum(uint256 _voteStart) view returns (uint256)
SET_PROPOSAL_GUARDIAN_SELECTOR
viewfunction SET_PROPOSAL_GUARDIAN_SELECTOR() view returns (bytes4)
state
viewfunction state(uint256 _proposalId) view returns (uint8)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
timelock
viewfunction timelock() view returns (address)
token
viewfunction token() view returns (address)
usedVotes
viewfunction usedVotes(uint256 proposalId, address account) view returns (uint256)
version
viewfunction version() view returns (string)
votingDelay
viewfunction votingDelay() view returns (uint256)
votingPeriod
viewfunction votingPeriod() view returns (uint256)
whitelistAccountExpirations
viewfunction whitelistAccountExpirations(address account) view returns (uint256 timestamp)
whitelistGuardian
viewfunction whitelistGuardian() view returns (address)
__acceptAdmin
nonpayablefunction __acceptAdmin()
addProposer
nonpayablefunction addProposer(address _newProposer)
batchWhitelist
nonpayablefunction batchWhitelist(address[] _initProposers)
cancel
nonpayablefunction cancel(address[] _targets, uint256[] _values, bytes[] _calldatas, bytes32 _descriptionHash) returns (uint256)
cancel
nonpayablefunction cancel(uint256 _proposalId)
castVote
nonpayablefunction castVote(uint256 proposalId, uint8 support) returns (uint256)
castVoteBySig
nonpayablefunction castVoteBySig(uint256 proposalId, uint8 support, address voter, bytes signature) returns (uint256)
castVoteWithReason
nonpayablefunction castVoteWithReason(uint256 proposalId, uint8 support, string reason) returns (uint256)
castVoteWithReasonAndParams
nonpayablefunction castVoteWithReasonAndParams(uint256 proposalId, uint8 support, string reason, bytes params) returns (uint256)
castVoteWithReasonAndParamsBySig
nonpayablefunction castVoteWithReasonAndParamsBySig(uint256 proposalId, uint8 support, address voter, string reason, bytes params, bytes signature) returns (uint256)
execute
payablefunction execute(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) payable returns (uint256)
execute
payablefunction execute(uint256 _proposalId) payable
hashProposal
nonpayablefunction hashProposal(address[] _targets, uint256[] _values, bytes[] _calldatas, bytes32 _descriptionHash) returns (uint256)
initialize
nonpayablefunction initialize(uint48 _initialVotingDelay, uint32 _initialVotingPeriod, uint256 _initialProposalThreshold, address _compAddress, uint256 _quorumVotes, address _timelockAddress, uint48 _initialVoteExtension, address _whitelistGuardian, tuple _proposalGuardian)
onERC1155BatchReceived
nonpayablefunction onERC1155BatchReceived(address, address, uint256[], uint256[], bytes) returns (bytes4)
onERC1155Received
nonpayablefunction onERC1155Received(address, address, uint256, uint256, bytes) returns (bytes4)
onERC721Received
nonpayablefunction onERC721Received(address, address, uint256, bytes) returns (bytes4)
propose
nonpayablefunction propose(address[] _targets, uint256[] _values, bytes[] _calldatas, string _description) returns (uint256)
queue
nonpayablefunction queue(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) returns (uint256)
queue
nonpayablefunction queue(uint256 _proposalId)
relay
payablefunction relay(address target, uint256 value, bytes data) payable
removeProposer
nonpayablefunction removeProposer(address _proposer)
setLateQuorumVoteExtension
nonpayablefunction setLateQuorumVoteExtension(uint48 newVoteExtension)
setNextProposalId
nonpayablefunction setNextProposalId()
setProposalGuardian
nonpayablefunction setProposalGuardian(tuple _newProposalGuardian)
setProposalThreshold
nonpayablefunction setProposalThreshold(uint256 newProposalThreshold)
setQuorum
nonpayablefunction setQuorum(uint256 _amount)
setVotingDelay
nonpayablefunction setVotingDelay(uint48 newVotingDelay)
setVotingPeriod
nonpayablefunction setVotingPeriod(uint32 newVotingPeriod)
setWhitelistAccountExpiration
nonpayablefunction setWhitelistAccountExpiration(address _account, uint256 _expiration)
setWhitelistGuardian
nonpayablefunction setWhitelistGuardian(address _newWhitelistGuardian)
updateTimelock
nonpayablefunction updateTimelock(address newTimelock)
events
EIP712DomainChanged
event EIP712DomainChanged()
Initialized
event Initialized(uint64 version)
LateQuorumVoteExtensionSet
event LateQuorumVoteExtensionSet(uint64 oldVoteExtension, uint64 newVoteExtension)
ProposalCanceled
event ProposalCanceled(uint256 proposalId)
ProposalCreated
event ProposalCreated(uint256 proposalId, address proposer, address[] targets, uint256[] values, string[] signatures, bytes[] calldatas, uint256 voteStart, uint256 voteEnd, string description)
ProposalExecuted
event ProposalExecuted(uint256 proposalId)
ProposalExtended
event ProposalExtended(uint256 indexed proposalId, uint64 extendedDeadline)
ProposalGuardianSet
event ProposalGuardianSet(address oldProposalGuardian, uint96 oldProposalGuardianExpiry, address newProposalGuardian, uint96 newProposalGuardianExpiry)
ProposalQueued
event ProposalQueued(uint256 proposalId, uint256 etaSeconds)
ProposalThresholdSet
event ProposalThresholdSet(uint256 oldProposalThreshold, uint256 newProposalThreshold)
ProposerAdded
event ProposerAdded(address indexed proposer)
ProposerRemoved
event ProposerRemoved(address indexed proposer)
QuorumUpdated
event QuorumUpdated(uint256 oldQuorum, uint256 newQuorum)
TimelockChange
event TimelockChange(address oldTimelock, address newTimelock)
VoteCast
event VoteCast(address indexed voter, uint256 proposalId, uint8 support, uint256 weight, string reason)
VoteCastWithParams
event VoteCastWithParams(address indexed voter, uint256 proposalId, uint8 support, uint256 weight, string reason, bytes params)
VotingDelaySet
event VotingDelaySet(uint256 oldVotingDelay, uint256 newVotingDelay)
VotingPeriodSet
event VotingPeriodSet(uint256 oldVotingPeriod, uint256 newVotingPeriod)
WhitelistAccountExpirationSet
event WhitelistAccountExpirationSet(address setter, address account, uint256 expiration)
WhitelistGuardianSet
event WhitelistGuardianSet(address oldGuardian, address newGuardian)
errors
AlreadySet
error AlreadySet(address account)
BelowMinimumProposers
error BelowMinimumProposers()
CheckpointUnorderedInsertion
error CheckpointUnorderedInsertion()
DuplicateAddress
error DuplicateAddress(address account)
ExceedsMaxLifetime
error ExceedsMaxLifetime(address account)
FailedCall
error FailedCall()
FirstMustBeProposalGuardian
error FirstMustBeProposalGuardian(address account)
GovernorAlreadyCastVote
error GovernorAlreadyCastVote(address voter)
GovernorAlreadyQueuedProposal
error GovernorAlreadyQueuedProposal(uint256 proposalId)
GovernorDisabledDeposit
error GovernorDisabledDeposit()
GovernorExceedRemainingWeight
error GovernorExceedRemainingWeight(address voter, uint256 usedVotes, uint256 remainingWeight)
GovernorInsufficientProposerVotes
error GovernorInsufficientProposerVotes(address proposer, uint256 votes, uint256 threshold)
GovernorInvalidProposalLength
error GovernorInvalidProposalLength(uint256 targets, uint256 calldatas, uint256 values)
GovernorInvalidSignature
error GovernorInvalidSignature(address voter)
GovernorInvalidVoteParams
error GovernorInvalidVoteParams()
GovernorInvalidVoteType
error GovernorInvalidVoteType()
GovernorInvalidVotingPeriod
error GovernorInvalidVotingPeriod(uint256 votingPeriod)
GovernorNonexistentProposal
error GovernorNonexistentProposal(uint256 proposalId)
GovernorNotQueuedProposal
error GovernorNotQueuedProposal(uint256 proposalId)
GovernorNotWhitelisted
error GovernorNotWhitelisted(address account)
GovernorOnlyExecutor
error GovernorOnlyExecutor(address account)
GovernorOnlyProposer
error GovernorOnlyProposer(address account)
GovernorQueueNotImplemented
error GovernorQueueNotImplemented()
GovernorRestrictedProposer
error GovernorRestrictedProposer(address proposer)
GovernorUnexpectedProposalState
error GovernorUnexpectedProposalState(uint256 proposalId, uint8 current, bytes32 expectedStates)
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidInitialization
error InvalidInitialization()
InvalidProposalWhenGuardianExpired
error InvalidProposalWhenGuardianExpired()
IsProposalGuardian
error IsProposalGuardian(address account)
MinProposersReached
error MinProposersReached()
NotInAllowedProposers
error NotInAllowedProposers(address account)
NotInitializing
error NotInitializing()
OnlyAllowedProposers
error OnlyAllowedProposers()
OnlyProposerOrProposalGuardian
error OnlyProposerOrProposalGuardian()
OnlyProxyAdmin
error OnlyProxyAdmin()
ProposalIdAlreadySet
error ProposalIdAlreadySet()
ProposerActiveProposal
error ProposerActiveProposal(address proposer, uint256 proposalId, uint8 state)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
Unauthorized
error Unauthorized(bytes32 reason, address caller)
ZeroAddress
error ZeroAddress()
ZeroAddressAtIndex
error ZeroAddressAtIndex(uint256 index)
creation bytecode
0x6080806040523460d0577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b604051615f3790816100d58239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80604d565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610022575b3615610018575f80fd5b610020613609565b005b5f3560e01c8063017220bd146104d157806301ffc9a7146104cc57806302a251a3146104c757806306fdde03146104c257806309d632d3146104bd578063143489d0146104b8578063150b7a02146104b3578063160cbed7146104ae57806316e9eaec146104a957806317977c61146104a45780631d3225e31461049f578063244907921461049a57806324fec08d146104955780632656227d146104905780632d63f6931461048b5780632fe3e2611461048657806332b8113e14610481578063330df7ff1461047c57806338bd0dda146104775780633932abb11461047257806339ee06611461046d5780633af32abf146104685780633e4f49e61461046357806340e58ee51461045e5780634385963214610459578063452115d6146104545780634bf5d7e91461044f578063544ffc9c1461044a57806354c6ab551461044557806354fd4d5014610440578063567813881461043b5780635b8d0e0d146104365780635f398a14146104315780636136cadf1461042c5780636f28376114610427578063787e0fe014610422578063790518871461041d5780637b3c71d3146104185780637d5e81e2146104135780637ecebe001461040e57806384b0196e146104095780638ff262e31461040457806391ddadf4146103ff5780639a802a6d146103fa578063a890c910146103f5578063a9a95294146103f0578063ab58fb8e146103eb578063b03cd418146103e6578063b58131b0146103e1578063b80d105a146103dc578063b9a61961146103d7578063bc197c81146103d2578063c01f9e37146103cd578063c1ba4e59146103c8578063c28bc2fa146103c3578063c59057e4146103be578063c5a8425d146103b9578063d33219b4146103b4578063da35c664146103af578063dd4e2ba5146103aa578063ddf0b009146103a5578063deaaa7cc146103a0578063ded0a6381461039b578063e540d01d14610396578063eb9019d414610391578063ece40cc11461038c578063ed9bc82a14610387578063ee50086514610382578063f23a6e611461037d578063f3d867f114610378578063f4aad64714610373578063f8ce560a1461036e578063fc0c546a14610369578063fc473616146103645763fe0d94c10361000e57612473565b612442565b61240e565b6123f0565b612370565b612344565b6122d2565b61225d565b61222f565b61220b565b61216f565b61213d565b612008565b611fe1565b611fc2565b611f45565b611f0b565b611ed7565b611eb0565b611e94565b611e29565b611d99565b611d7b565b611cce565b611c6c565b611c20565b611bac565b611ade565b611ac0565b611aa4565b611a22565b611955565b61192a565b61184a565b611790565b6116ea565b61163c565b6115e7565b6115be565b611595565b611568565b611543565b6112fa565b611252565b6111ec565b6111ad565b611104565b6110d3565b611074565b611061565b61102d565b611005565b610fd6565b610f7e565b610f23565b610ef2565b610eb7565b610e44565b610de9565b610dc2565b610da4565b610d8d565b610d6d565b610d4b565b610d11565b610cd6565b610c92565b610b70565b610927565b6107f9565b6106c6565b6105ca565b610570565b610502565b6104e4565b5f9103126104e057565b5f80fd5b346104e0575f3660031901126104e05760206040516301e133808152f35b346104e05760203660031901126104e05760043563ffffffff60e01b81168091036104e0576020906332a2ad4360e11b811490811561055f575b811561054e575b506040519015158152f35b6301ffc9a760e01b1490505f610543565b630271189760e51b8114915061053c565b346104e0575f3660031901126104e057602061058a61248d565b604051908152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9060206105c7928181520190610592565b90565b346104e0575f3660031901126104e0576040515f5f80516020615e42833981519152546105f6816124a8565b8084529060018116908115610685575060011461062e575b61062a8361061e81850382610878565b604051918291826105b6565b0390f35b5f80516020615e428339815191525f9081525f80516020615b22833981519152939250905b80821061066b5750909150810160200161061e61060e565b919260018160209254838588010152019101909291610653565b60ff191660208086019190915291151560051b8401909101915061061e905061060e565b6001600160a01b031690565b6001600160a01b038116036104e057565b346104e05760203660031901126104e0576004356106e3816106b5565b6106eb61319a565b336001600160a01b03909116036107d9576001600160a01b0381169081156107ca5761072061071b6001546106a9565b6106a9565b82146107b7576001600160a01b0381165f9081526005602052604090205415610748565b1590565b6107a157600560045411156107925761076661071b61076b926106a9565b61452f565b507fbab6b194452fd4fa50e0ca09bf0f89976da30a2b92fdf91372ad1a176d81e3285f80a2005b631f52f47f60e31b5f5260045ffd5b6318cb6cd960e21b5f526107b4906107e8565b5ffd5b631a52581360e31b5f526107b4906107e8565b63d92e233d60e01b5f5260045ffd5b6347096e4760e01b5f526107b4335b6001600160a01b0316600452602490565b346104e05760203660031901126104e057602061081760043561252e565b6040516001600160a01b039091168152f35b634e487b7160e01b5f52604160045260245ffd5b604081019081106001600160401b0382111761085857604052565b610829565b608081019081106001600160401b0382111761085857604052565b601f909101601f19168101906001600160401b0382119082101761085857604052565b604051906108aa608083610878565b565b604051906108aa604083610878565b6001600160401b03811161085857601f01601f191660200190565b9291926108e2826108bb565b916108f06040519384610878565b8294818452818301116104e0578281602093845f960137010152565b9080601f830112156104e0578160206105c7933591016108d6565b346104e05760803660031901126104e0576109436004356106b5565b61094e6024356106b5565b6064356001600160401b0381116104e05761096d90369060040161090c565b5061097661319a565b306001600160a01b039091160361099957604051630a85bd0160e11b8152602090f35b637485328f60e11b5f5260045ffd5b6001600160401b0381116108585760051b60200190565b9080601f830112156104e05781356109d6816109a8565b926109e46040519485610878565b81845260208085019260051b8201019283116104e057602001905b828210610a0c5750505090565b602080918335610a1b816106b5565b8152019101906109ff565b9080601f830112156104e0578135610a3d816109a8565b92610a4b6040519485610878565b81845260208085019260051b8201019283116104e057602001905b828210610a735750505090565b8135815260209182019101610a66565b9080601f830112156104e0578135610a9a816109a8565b92610aa86040519485610878565b81845260208085019260051b820101918383116104e05760208201905b838210610ad457505050505090565b81356001600160401b0381116104e057602091610af68784809488010161090c565b815201910190610ac5565b60806003198201126104e0576004356001600160401b0381116104e05781610b2b916004016109bf565b916024356001600160401b0381116104e05782610b4a91600401610a26565b91604435906001600160401b0382116104e057610b6991600401610a83565b9060643590565b346104e057602061058a610b8336610b01565b9291909161256d565b90602080835192838152019201905f5b818110610ba95750505090565b82516001600160a01b0316845260209384019390920191600101610b9c565b90602080835192838152019201905f5b818110610be55750505090565b8251845260209384019390920191600101610bd8565b9080602083519182815201916020808360051b8301019401925f915b838310610c2657505050505090565b9091929394602080610c44600193601f198682030187528951610592565b97019301930191939290610c17565b949392610c7f606093610c71610c8d9460808a5260808a0190610b8c565b9088820360208a0152610bc8565b908682036040880152610bfb565b930152565b346104e05760203660031901126104e05761062a610cb1600435612922565b9060409492945194859485610c53565b9060018060a01b03165f5260205260405f2090565b346104e05760203660031901126104e057600435610cf3816106b5565b60018060a01b03165f526003602052602060405f2054604051908152f35b346104e05760203660031901126104e0576020610d41600435610d33816106b5565b6001600160a01b031661462f565b6040519015158152f35b346104e0575f3660031901126104e057604051635c06882d60e11b8152602090f35b346104e0575f3660031901126104e0576020610d4160015460a01c421190565b602061058a610d9b36610b01565b92919091612a2e565b346104e05760203660031901126104e057602061058a600435612b72565b346104e0575f3660031901126104e05760206040515f80516020615e228339815191528152f35b346104e0575f3660031901126104e057602065ffffffffffff5f80516020615b828339815191525416604051908152f35b6004359065ffffffffffff821682036104e057565b60c4359065ffffffffffff821682036104e057565b346104e05760203660031901126104e057610e5d610e1a565b610e6561379f565b5f80516020615b82833981519152545f80516020615da2833981519152604065ffffffffffff81519481851686521693846020820152a165ffffffffffff1916175f80516020615b8283398151915255005b346104e05760203660031901126104e057600435610ed4816106b5565b60018060a01b03165f526002602052602060405f2054604051908152f35b346104e0575f3660031901126104e057602065ffffffffffff5f80516020615b628339815191525416604051908152f35b346104e05760203660031901126104e0576004356001600160401b0381116104e057366023820112156104e05760048101356001600160401b0381116104e0573660248260051b840101116104e05760246100209201612bd4565b346104e05760203660031901126104e0576020610d41600435610fa0816106b5565b612d93565b634e487b7160e01b5f52602160045260245ffd5b60081115610fc357565b610fa5565b6008811015610fc357602452565b346104e05760203660031901126104e057610ff260043561381c565b6040516008821015610fc3576020918152f35b346104e05760203660031901126104e057610020611024600435612922565b92919091612daf565b346104e05760403660031901126104e0576020611057602435600435611052826106b5565b61305a565b1515604051908152f35b346104e057602061058a61102436610b01565b346104e0575f3660031901126104e05761062a604051611095604082610878565b601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c740000006020820152604051918291602083526020830190610592565b346104e05760203660031901126104e05760606110f1600435612f0c565b9060405192835260208301526040820152f35b346104e0575f3660031901126104e05761111c61319a565b336001600160a01b03909116036107d95760405163368d719960e21b81526020816004815f73c0da02939e1441f497fd74f78ce7decb17b665295af19081156111a85761002091611174915f91611179575b50612f64565b6138cd565b61119b915060203d6020116111a1575b6111938183610878565b810190612f36565b5f61116e565b503d611189565b612f45565b346104e0575f3660031901126104e05761062a6111c8612f7f565b604051918291602083526020830190610592565b6024359060ff821682036104e057565b346104e05760403660031901126104e057602061058a60043561120d6111dc565b6040519161121b8584610878565b5f83523390613903565b9181601f840112156104e0578235916001600160401b0383116104e057602083818601950101116104e057565b346104e05760c03660031901126104e05760043561126e6111dc565b906044359061127c826106b5565b6064356001600160401b0381116104e05761129b903690600401611225565b6084356001600160401b0381116104e0576112ba90369060040161090c565b60a435949092906001600160401b0386116104e05761062a966112e46112ea97369060040161090c565b95612f9e565b6040519081529081906020820190565b346104e05760803660031901126104e0576004356113166111dc565b906044356001600160401b0381116104e057611336903690600401611225565b9190606435906001600160401b0382116104e05761135b61136392369060040161090c565b9336916108d6565b9261136d82613657565b5061137782612b72565b93602060018060a01b035f80516020615c0283398151915254169560446040518098819363782d6fe160e01b835233600484015260248301525afa80156111a857846113da9161062a975f91611514575b506001600160601b03168433876158ed565b938051155f146114ea57506114075f80516020615ee28339815191529160405191829187339688856155ce565b0390a25b65ffffffffffff61142a61141e836124e0565b5465ffffffffffff1690565b1615806114db575b611448575b506040519081529081906020820190565b61149a9061149561147861145b4361507f565b5f80516020615b828339815191525465ffffffffffff16906149e7565b91611482816140f3565b65ffffffffffff8416116114a0576124e0565b612554565b5f611437565b60405165ffffffffffff8416815281907f541f725fb9f7c98a30cc9c0ff32fbb14358cd7159c847a3aa20a2bdc442ba51190602090a26124e0565b506114e581615497565b611432565b5f80516020615dc28339815191529161150c6040519283928833978986615594565b0390a261140b565b611536915060203d60201161153c575b61152e8183610878565b810190614032565b5f6113c8565b503d611524565b346104e05760403660031901126104e057602061058a602435600435611052826106b5565b346104e05760203660031901126104e057610020600435611588816106b5565b61159061379f565b613bde565b346104e0575f3660031901126104e05760205f80516020615c4283398151915254604051908152f35b346104e05760203660031901126104e0576100206115da610e1a565b6115e261379f565b613c3b565b346104e05760603660031901126104e0576004356116036111dc565b90604435906001600160401b0382116104e05760209261163461162d61058a943690600401611225565b36916108d6565b913390613903565b346104e05760803660031901126104e0576004356001600160401b0381116104e05761166c9036906004016109bf565b6024356001600160401b0381116104e05761168b903690600401610a26565b906044356001600160401b0381116104e0576116ab903690600401610a83565b60643591906001600160401b0383116104e057366023840112156104e05761062a936116e46112ea9436906024816004013591016108d6565b92613082565b346104e05760203660031901126104e057600435611707816106b5565b60018060a01b03165f525f80516020615d42833981519152602052602060405f2054604051908152f35b91611766906117586105c797959693600f60f81b865260e0602087015260e0860190610592565b908482036040860152610592565b60608301949094526001600160a01b031660808201525f60a082015280830360c090910152610bc8565b346104e0575f3660031901126104e0575f80516020615cc2833981519152541580611834575b156117f7576117c3613ee2565b6117cb613f9a565b9061062a6040516117dd602082610878565b5f8082523660208301376040519384933091469186611731565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b505f80516020615e8283398151915254156117b6565b346104e05760803660031901126104e0576004356118666111dc565b9060443591611874836106b5565b6064356001600160401b0381116104e0576107446118996118fc92369060040161090c565b6118f66118a587613a4f565b60405160208101915f80516020615c82833981519152835288604083015260ff8816606083015260018060a01b038a16608083015260a082015260a081526118ee60c082610878565b519020613a7d565b86613b09565b61191757906112ea9161062a93611911612ef8565b92613903565b6394ab6c0760e01b5f526107b4836107e8565b346104e0575f3660031901126104e05760206119454361507f565b65ffffffffffff60405191168152f35b346104e05760603660031901126104e057600435611972816106b5565b6044356024356001600160401b0382116104e057611996602092369060040161090c565b505f80516020615c028339815191525460405163782d6fe160e01b81526001600160a01b0394851660048201526024810192909252909283916044918391165afa80156111a85761062a915f91611a03575b506040516001600160601b0390911681529081906020820190565b611a1c915060203d60201161153c5761152e8183610878565b5f6119e8565b346104e05760203660031901126104e057600435611a3f816106b5565b611a4761379f565b5f80516020615e02833981519152546040516001600160a01b03928316925f80516020615bc283398151915291908190611a85908690861683613bc4565b0390a16001600160a01b031916175f80516020615e0283398151915255005b346104e05760203660031901126104e057602060405160018152f35b346104e05760203660031901126104e057602061058a60043561311a565b346104e05760203660031901126104e057600435611afb816106b5565b611b066001546106a9565b90611b1261071b61319a565b3303611b84575b6001600160a01b0381169182156107ca576001600160a01b031682146107b757611b4561071b826106a9565b90611b4f8261462f565b611b715750611b5d90614864565b505f80516020615d628339815191525f80a2005b637076568d60e11b5f526107b4906107e8565b611b8d826106a9565b33036107d95760056004541115611b195762efc58d60e21b5f5260045ffd5b346104e0575f3660031901126104e05760205f80516020615d0283398151915254604051908152f35b6001600160601b038116036104e057565b91908260409103126104e057604051611bfe8161083d565b60208082948035611c0e816106b5565b8452013591611c1c83611bd5565b0152565b346104e05760403660031901126104e057610020604051611c408161083d565b600435611c4c816106b5565b8152602435611c5a81611bd5565b6020820152611c6761379f565b614047565b346104e0575f806003193601126104e0575f80516020615e02833981519152546001600160a01b0316803b156104e0575f8091600460405180948193630e18b68160e01b83525af180156111a857611cc2575080f35b61002091505f90610878565b346104e05760a03660031901126104e057611cea6004356106b5565b611cf56024356106b5565b6044356001600160401b0381116104e057611d14903690600401610a26565b506064356001600160401b0381116104e057611d34903690600401610a26565b506084356001600160401b0381116104e057611d5490369060040161090c565b5061062a611d60613140565b6040516001600160e01b031990911681529081906020820190565b346104e05760203660031901126104e057602061058a6004356140f3565b346104e05760203660031901126104e057600435611db561379f565b611dbe4361507f565b5f80516020615ac283398151915282611dde65ffffffffffff84166134ae565b611ded6040519283928361415d565b0390a16001600160d01b038211611e1157610020916001600160d01b031690615780565b506306dfcc6560e41b5f5260d060045260245260445ffd5b60603660031901126104e057600435611e41816106b5565b6024356044356001600160401b0381116104e057610020925f92611e6a84933690600401611225565b9190611e7461379f565b826040519384928337810185815203925af1611e8e61316b565b9061416e565b346104e057602061058a611ea736610b01565b92919091614194565b346104e0575f3660031901126104e0575f546040516001600160a01b039091168152602090f35b346104e0575f3660031901126104e0575f80516020615e02833981519152546040516001600160a01b039091168152602090f35b346104e0575f3660031901126104e0575f80516020615c42833981519152545f198101908111611f4057602090604051908152f35b612f50565b346104e0575f3660031901126104e05761062a604051611f66606082610878565b603581527f737570706f72743d627261766f2c6672616374696f6e616c2671756f72756d3d602082015274199bdc899c185c985b5ccf599c9858dd1a5bdb985b605a1b6040820152604051918291602083526020830190610592565b346104e05760203660031901126104e057610020610b83600435612922565b346104e0575f3660031901126104e05760206040515f80516020615c828339815191528152f35b346104e05760403660031901126104e057600435612025816106b5565b60243561203f61074461203a61071b336106a9565b61462f565b61212f576001600160a01b03821680156107ca5761206161071b6001546106a9565b1461211c5761207561203a61071b846106a9565b61210957428111806120f3575b6120e0576001600160a01b03919091165f818152600260209081526040918290208490558151338152908101929092528101919091527fb46a2b4dfdf5eaf9cc80dd654ae0bce16fbcc190174ba0da08e27ce78e25560190606090a1005b6302c046f760e11b5f526107b4826107e8565b506301e1338061210342836131d2565b11612082565b637076568d60e11b5f526107b4826107e8565b631a52581360e31b5f526107b4826107e8565b6285ed5960e61b5f5260045ffd5b346104e05760203660031901126104e05760043563ffffffff811681036104e0576100209061216a61379f565b6141d4565b346104e05760403660031901126104e05760043561218c816106b5565b60206024355f60405161219f8482610878565b525f80516020615c028339815191525460405163782d6fe160e01b81526001600160a01b0394851660048201526024810192909252909283916044918391165afa80156111a85761062a915f91611a0357506040516001600160601b0390911681529081906020820190565b346104e05760203660031901126104e05761002060043561222a61379f565b61426a565b346104e0575f3660031901126104e057602060405173725ed7f44f0888aec1b7630ab1acdced91e0591a8152f35b346104e0576101403660031901126104e057612277610e1a565b60243563ffffffff811681036104e057604435606435612296816106b5565b60843560a435916122a6836106b5565b6122ae610e2f565b9360e435956122bc876106b5565b6040366101031901126104e057610020976131df565b346104e05760a03660031901126104e0576122ee6004356106b5565b6122f96024356106b5565b6084356001600160401b0381116104e05761231890369060040161090c565b5061232161319a565b306001600160a01b03909116036109995760405163f23a6e6160e01b8152602090f35b346104e0575f3660031901126104e057602060405160058152f35b9060206105c7928181520190610b8c565b346104e0575f3660031901126104e057604051600480548083525f91825260208301917f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b91905b8181106123da5761062a856123ce81870382610878565b6040519182918261235f565b82548452602090930192600192830192016123b7565b346104e05760203660031901126104e057602061058a6004356134ae565b346104e0575f3660031901126104e0575f80516020615c02833981519152546040516001600160a01b039091168152602090f35b346104e0575f3660031901126104e057600154604080516001600160a01b038316815260a09290921c602083015290f35b60203660031901126104e057610020610d9b600435612922565b63ffffffff5f80516020615b628339815191525460301c1690565b90600182811c921680156124d6575b60208310146124c257565b634e487b7160e01b5f52602260045260245ffd5b91607f16916124b7565b5f525f80516020615ce283398151915260205260405f2090565b5f525f80516020615b0283398151915260205260405f2090565b5f525f80516020615d8283398151915260205260405f2090565b5f9081525f80516020615b0283398151915260205260409020546001600160a01b031690565b9065ffffffffffff1665ffffffffffff19825416179055565b93919261257c90848387614194565b61258581613697565b50600460206125a461071b5f80516020615e02833981519152546106a9565b604051630d48571f60e31b815292839182905afa9081156111a8576125da916125d5915f916127de575b5042612f72565b61507f565b935f5b865181101561275a5761260061071b5f80516020615e02833981519152546106a9565b61267d602061261f612612858c612a1a565b516001600160a01b031690565b6126298589612a1a565b5161265b6126378789612a1a565b519161264d8d60405194859388850197886145d0565b03601f198101835282610878565b5190206040518093819263f2b0653760e01b8352600483019190602083019252565b0381855afa9081156111a8575f9161272c575b506127185790602087926126a7612612848c612a1a565b906126b28489612a1a565b515f6126be8689612a1a565b51936126e060405198899687958694633a66f90160e01b8652600486016145d0565b03925af19182156111a8576001926126fa575b50016125dd565b6127119060203d81116111a1576111938183610878565b505f6126f3565b63f20e7d3760e01b5f52600484905260245ffd5b61274d915060203d8111612753575b6127458183610878565b810190614617565b5f612690565b503d61273b565b509294509291505065ffffffffffff8116156127cf576127c9816127aa7f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda28929360016127a4876124fa565b01612554565b6040805185815265ffffffffffff909216602083015290918291820190565b0390a190565b634844252360e11b5f5260045ffd5b6127f7915060203d6020116111a1576111938183610878565b5f6125ce565b90604051918281549182825260208201905f5260205f20925f5b81811061282c5750506108aa92500383610878565b8454835260019485019487945060209093019201612817565b90815491612852836109a8565b926128606040519485610878565b80845260208401915f5260205f20915f905b82821061287f5750505050565b6040515f855461288e816124a8565b80845290600181169081156128ff57506001146128c8575b50600192826128ba85946020940382610878565b815201940191019092612872565b5f878152602081209092505b8183106128e9575050810160200160016128a6565b60018160209254838688010152019201916128d4565b60ff191660208581019190915291151560051b84019091019150600190506128a6565b805f525f80516020615b4283398151915260205260405f2091604051906129488261085d565b6040518081602087549283815201875f5260205f20925f5b8181106129d257505061297592500382610878565b8252612983600185016127fd565b9160208101928352600361299960028701612845565b95604083019687520154936060820194808652156129c05750519151935192519193929190565b636ad0607560e01b5f5260045260245ffd5b84546001600160a01b0316835260019485019486945060209093019201612960565b634e487b7160e01b5f52603260045260245ffd5b805115612a155760200190565b6129f4565b8051821015612a155760209160051b010190565b92612a3b90838386614194565b926020612a496030866136d7565b50612a69612a56866124fa565b805460ff60f01b1916600160f01b179055565b612a7161319a565b306001600160a01b0390911603612b17575b5090612a909291846146d9565b30612a9c61071b61319a565b141580612af0575b612adb575b6040518181527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f9080602081016127c9565b5f5f80516020615de283398151915255612aa9565b505f80516020615de2833981519152546001600160801b03811660809190911c1415612aa4565b949091935f5b8351811015612b645760019030612b3a61071b6126128489612a1a565b14612b46575b01612b1d565b612b5f612b538288612a1a565b51898151910120613715565b612b40565b509094509290612a90612a83565b5f525f80516020615b0283398151915260205265ffffffffffff60405f205460a01c1690565b5f80516020615e62833981519152805460ff60401b1916600160401b179055565b5f80516020615e62833981519152805460ff60401b19169055565b905f80516020615e628339815191525460ff8160401c168015612d5c575b612d4d576001600160401b0319166002175f80516020615e6283398151915255612c1a612b98565b73725ed7f44f0888aec1b7630ab1acdced91e0591a3303612d3e576005811061079257612c4f612c4a8284612d70565b612d89565b612c5d61071b6001546106a9565b6001600160a01b0390911603612d1f575f5b818110612ca257505050612c81612bb9565b604051600281525f80516020615c628339815191529080602081015b0390a1565b612cb0612c4a828486612d79565b6001600160a01b038116908115612d0b57612cd8610744612cd361071b846106a9565b614864565b612cf85750906001915f80516020615d628339815191525f80a201612c6f565b639f2277f360e01b5f526107b4906107e8565b6364d95e0d60e01b5f52600483905260245ffd5b612c4a612d2f916107b493612d70565b63fca4a1a160e01b5f526107e8565b63ac6e58a760e01b5f5260045ffd5b63f92ee8a960e01b5f5260045ffd5b5060026001600160401b0382161015612bf2565b9015612a155790565b9190811015612a155760051b0190565b356105c7816106b5565b6001600160a01b03165f90815260026020526040902054421090565b91926001600160a01b03612dcd612dc883878688614194565b61252e565b1633141580612ecc575b612ebd57612de7908483856154b9565b92612df18461311a565b9283612dff575b5050505090565b909192945f5b8251811015612eae57612e2861071b5f80516020615e02833981519152546106a9565b90612e366126128286612a1a565b612e408288612a1a565b5192612e4c8388612a1a565b5190803b156104e0578a945f8094612e7a60405198899687958694632c8fe6ff60e11b8652600486016146a2565b03925af19182156111a857600192612e94575b5001612e05565b80612ea25f612ea893610878565b806104d6565b5f612e8d565b5094505050505f808080612df8565b63c9e1a9cb60e01b5f5260045ffd5b50600154336001600160a01b0382161480159190612eeb575b50612dd7565b905060a01c42115f612ee5565b60405190612f07602083610878565b5f8252565b5f9081525f80516020615d8283398151915260205260409020805460018201546002909201549092565b908160209103126104e0575190565b6040513d5f823e3d90fd5b634e487b7160e01b5f52601160045260245ffd5b9060018201809211611f4057565b91908201809211611f4057565b60405190612f8e604083610878565b60018252603160f81b6020830152565b93909291969561074461302c916130268a612fb881613a4f565b612fc336888a6108d6565b602081519101208b5160208d0120906040519260208401945f80516020615e2283398151915286528d604086015260ff8d16606086015260018060a01b0316608085015260a084015260c083015260e082015260e081526118ee61010082610878565b8a613b09565b613047576105c79596916130419136916108d6565b92614a05565b6394ab6c0760e01b5f526107b4876107e8565b9061307e915f525f80516020615d82833981519152602052600360405f2001610cc1565b5490565b919290926130908233613cc0565b156131075761309e3361462f565b15806130f5575b6130e25760015460a01c42116130c1575b6105c7933393613e2d565b6130ce6107448285613db4565b156130b657631493ec0f60e11b5f5260045ffd5b630d97f17760e11b5f526107b4336107e8565b5061310261074433612d93565b6130a5565b63d9b3955760e01b5f523360045260245ffd5b5f525f80516020615b0283398151915260205265ffffffffffff600160405f2001541690565b5f80516020615e0283398151915254306001600160a01b03909116036109995763bc197c8160e01b90565b3d15613195573d9061317c826108bb565b9161318a6040519384610878565b82523d5f602084013e565b606090565b5f80516020615e02833981519152546001600160a01b031690565b5f19810191908211611f4057565b602719810191908211611f4057565b91908203918211611f4057565b949196939095925f80516020615e62833981519152549761320660ff8a60401c1615151590565b986001600160401b0316801590816132af575b60011490816132a5575b15908161329c575b50612d4d575f80516020615e6283398151915280546001600160401b031916600117905561326197610104978a61328f576132b7565b61326757565b61326f612bb9565b604051600181525f80516020615c62833981519152908060208101612c9d565b613297612b98565b6132b7565b9050155f61322b565b303b159150613223565b8a9150613219565b98979695939492986040516132cd604082610878565b601181527021b7b6b837bab7321023b7bb32b93737b960791b60208201526132f36150ce565b6132fb612f7f565b6133036150ce565b81516001600160401b038111610858576133338161332e5f80516020615be2833981519152546124a8565b614b31565b6020601f82116001146133fd579c6133c76133eb9a976108aa9e9f97611c679e9d9b976133c26133d1986133936133db9e9961337f8a6133d69f9b6133cc9c5f916133f2575b50614b1f565b5f80516020615be2833981519152556150f9565b6133a85f5f80516020615cc283398151915255565b6133bd5f5f80516020615e8283398151915255565b6151ee565b6142be565b6142da565b614318565b614385565b6143e7565b6133e3614474565b6115906150ce565b3690611be6565b90508501515f613379565b5f80516020615be28339815191525f52601f198216905f80516020615d22833981519152915f5b8181106134965750976108aa9e9f9297611c679e9d9b976133c26133d1986133eb9f9c6133db9e9960018a6133d69f6133c79a6133cc9d613393961061347e575b5050811b015f80516020615be2833981519152556150f9565b8601515f1960f88460031b161c191690555f80613465565b9192602060018192868a015181550194019201613424565b6134bc63ffffffff91614497565b165f80516020615c2283398151915254905f9180600582116135a1575b65ffffffffffff9150929116905b828110613541575050806134fa57505f90565b61353561352e61350c6105c7936131b5565b5f80516020615c228339815191525f525f80516020615ae28339815191520190565b5460301c90565b6001600160d01b031690565b90918082169080831860011c8201809211611f40575f80516020615c228339815191525f525f80516020615ae283398151915282015465ffffffffffff1684101561358f5750915b906134e7565b92915061359b90612f64565b90613589565b6135aa826152f9565b8203918211611f40575f80516020615c228339815191525f525f80516020615ae283398151915282015465ffffffffffff168310156135f1575065ffffffffffff906134d9565b925061360365ffffffffffff91612f64565b926134d9565b5f80516020615e0283398151915254306001600160a01b039091160361099957565b6008811015610fc35760ff600191161b90565b600452606491906008811015610fc3576024525f604452565b6136608161381c565b90600261366c8361362b565b1615613676575090565b6331b75e4d60e01b5f5260045261368d9150610fc8565b600260445260645ffd5b6136a08161381c565b9060106136ac8361362b565b16156136b6575090565b6331b75e4d60e01b5f526004526136cd9150610fc8565b601060445260645ffd5b906136e18261381c565b91816136ec8461362b565b16156136f757505090565b6331b75e4d60e01b5f5260045261370d82610fc8565b60445260645ffd5b5f80516020615de2833981519152546001608082901c9081016001600160801b03908116939216831461378d575f9081525f80516020615ba283398151915260205260409020555f80516020615de283398151915280546001600160801b031660809290921b6001600160801b031916919091179055565b634e487b715f5260416020526024601cfd5b5f80516020615e02833981519152546001600160a01b03163381036138075730036137c657565b6137cf366108bb565b6137dc6040519182610878565b368152365f60208301375f60203683010152602081519101205b806137ff6147d4565b036137f65750565b6347096e4760e01b5f90815233600452602490fd5b613825816148c8565b9061382f82610fb9565b600582149081613846575b50156105c75750600690565b600491506138539061311a565b5f80516020615e0283398151915254602090613877906001600160a01b03166106a9565b6040516360d143f160e11b815293849182905afa9081156111a8576138a3925f926138ac575b50612f72565b4210155f61383a565b6138c691925060203d6020116111a1576111938183610878565b905f61389d565b5f80516020615c42833981519152546001016138f4575f80516020615c4283398151915255565b6326bbc0ed60e01b5f5260045ffd5b9192604051613913602082610878565b5f815261391f84613657565b50604461392b85612b72565b93602060018060a01b035f80516020615c0283398151915254166040519384809263782d6fe160e01b825260018060a01b038616998a600484015260248301525afa9081156111a857878492613993945f91613a30575b506001600160601b031691886158ed565b9481869251155f14613a0857506139bf5f80516020615ee28339815191529360405193849388856155ce565b0390a25b65ffffffffffff6139d661141e836124e0565b1615806139f9575b6139e6575090565b6105c79061149561147861145b4361507f565b50613a0381615497565b6139de565b613a28905f80516020615dc2833981519152946040519485948986615594565b0390a26139c3565b613a49915060203d60201161153c5761152e8183610878565b5f613982565b6001600160a01b03165f9081525f80516020615d428339815191526020526040902080546001810190915590565b604290613a88615864565b613a906158bb565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152613ae160c082610878565b519020906040519161190160f01b8352600283015260228201522090565b60041115610fc357565b9190823b613b445790613b1b916149ad565b50613b2581613aff565b159182613b3157505090565b6001600160a01b03918216911614919050565b915f9261264d613b7a85946040519283916020830195630b135d3f60e11b87526024840152604060448401526064830190610592565b51915afa613b8661316b565b81613bb6575b81613b95575090565b9050613bb2630b135d3f60e11b9160208082518301019101612f36565b1490565b905060208151101590613b8c565b6001600160a01b0391821681529116602082015260400190565b5f546040519091907f80a07e73e552148844a9c216d9724212d609cfa54e9c1a2e97203bdd2c4ad3419080613c1d846001600160a01b03871683613bc4565b0390a16001600160a01b03166001600160a01b031991909116175f55565b7fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93604065ffffffffffff805f80516020615b6283398151915254169382519485521692836020820152a165ffffffffffff195f80516020615b628339815191525416175f80516020615b6283398151915255565b908151811015612a15570160200190565b815160348110613d6f5760131981840101516001600160a01b0319166b1b91f1b211f2119351b859f160a31b01613d6f57915f92613cfd816131c3565b915b818310613d1a575050506001600160a01b0391821691161490565b909193613d40613d3b613d2d8785613caf565b516001600160f81b03191690565b614a12565b9015613d645760019160ff9060041b6010600160a01b031691161794019190613cff565b505050505050600190565b505050600190565b80516020909101516001600160e01b0319811692919060048210613d99575050565b6001600160e01b031960049290920360031b82901b16169150565b805160018114801590613e21575b613e1a5715612a155760200151306001600160a01b0390911603613e1557635c06882d60e11b906001600160e01b031990613e0690613e0090612a08565b51613d77565b1603613e1157600190565b5f90565b505f90565b5050505f90565b50600183511415613dc2565b6001600160a01b0385165f908152600360205260409020549395949380613e7e575b5094613e61928492613e7a9697614e2e565b91829160018060a01b03165f52600360205260405f2090565b5590565b613e878161381c565b906008821015610fc357600182148015613ed1575b613ea65750613e4f565b631925ac2760e01b5f526001600160a01b0386166004526024526008811015610fc35760445260645ffd5b50613edb82610fb9565b8115613e9c565b6040515f80516020615be283398151915254815f613eff836124a8565b8083529260018116908115613f7b5750600114613f23575b6105c792500382610878565b505f80516020615be28339815191525f90815290915f80516020615d228339815191525b818310613f5f5750509060206105c792820101613f17565b6020919350806001915483858801015201910190918392613f47565b602092506105c794915060ff191682840152151560051b820101613f17565b6040515f80516020615ca283398151915254815f613fb7836124a8565b8083529260018116908115613f7b5750600114613fda576105c792500382610878565b505f80516020615ca28339815191525f90815290915f80516020615ea28339815191525b8183106140165750509060206105c792820101613f17565b6020919350806001915483858801015201910190918392613ffe565b908160209103126104e057516105c781611bd5565b60209060015460018060a01b038116907f0df5c50a741fb48167b20bd20f0511172808fd676c48df741b0bdfeaa59a760f608060018060a01b038551169260018060601b0387870151166040519186835260a01c888301528460408301526060820152a18082036140d9575b5050805191015160a01b6001600160a01b0319166001600160a01b039190911617600155565b6140e56140eb9261452f565b50614864565b505f806140b3565b5f8181525f80516020615b02833981519152602052604090205465ffffffffffff9061412f9060d081901c63ffffffff169060a01c83166149e7565b16905f525f80516020615ce283398151915260205265ffffffffffff60405f20541690818082119118021890565b908152602081019190915260400190565b9091906108aa575080511561418557805190602001fd5b63d6bda27560e01b5f5260045ffd5b906141a09392916150ae565b5f525f80516020615ec283398151915260205260405f205480156141c15790565b505f80516020615c428339815191525490565b63ffffffff8116908115614257577f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e882860405f80516020615b62833981519152549381519063ffffffff8660301c1682526020820152a163ffffffff60301b1990911660309190911b63ffffffff60301b16175f80516020615b6283398151915255565b63f1cfbf0560e01b5f525f60045260245ffd5b7fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461815f80516020615d02833981519152546142aa6040519283928361415d565b0390a15f80516020615d0283398151915255565b6108aa929161216a61222a926142d26150ce565b6115e26150ce565b6142e26150ce565b6142ea6150ce565b5f80516020615c0283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6143206150ce565b6143286150ce565b5f80516020615e02833981519152546040516001600160a01b03928316925f80516020615bc283398151915291908190614366908690861683613bc4565b0390a16001600160a01b031916175f80516020615e0283398151915255565b61438d6150ce565b6143956150ce565b5f80516020615b82833981519152545f80516020615da2833981519152604065ffffffffffff81519481851686521693846020820152a165ffffffffffff1916175f80516020615b8283398151915255565b906143f06150ce565b6143f86150ce565b6144014361507f565b5f80516020615ac28339815191528361442165ffffffffffff84166134ae565b6144306040519283928361415d565b0390a16001600160d01b03831161445c579091614458916001600160d01b0390911690615780565b5050565b826306dfcc6560e41b5f5260d060045260245260445ffd5b61447c6150ce565b6144846150ce565b5f195f80516020615c4283398151915255565b63ffffffff81116144ab5763ffffffff1690565b6306dfcc6560e41b5f52602060045260245260445ffd5b8054821015612a15575f5260205f2001905f90565b916144f09183549060031b91821b915f19901b19161790565b9055565b8054801561451b575f19019061450a82826144c2565b8154905f199060031b1b1916905555565b634e487b7160e01b5f52603160045260245ffd5b5f818152600560205260409020549081156145ca575f19820190828211611f40576004545f19810193908411611f405783835f95614589950361458f575b50505061457a60046144f4565b6005905f5260205260405f2090565b55600190565b61457a6145bb916145b16145a76145c19560046144c2565b90549060031b1c90565b92839160046144c2565b906144d7565b555f808061456d565b50505f90565b926146109060809365ffffffffffff9397969760018060a01b03168652602086015260a060408601525f60a086015260c0606086015260c0850190610592565b9416910152565b908160209103126104e0575180151581036104e05790565b5f52600560205260405f2054151590565b6020818303126104e0578051906001600160401b0382116104e0570181601f820112156104e057805190614673826108bb565b926146816040519485610878565b828452602083830101116104e057815f9260208093018386015e8301015290565b949392608092610c8d9260018060a01b03168752602087015260a060408701525f60a087015260c0606087015260c0860190610592565b9291906146e58461311a565b9384156147c2575061471161470a61071b5f80516020615e02833981519152546106a9565b3490615456565b5f5b81518110156147bb5784905f61473961071b5f80516020615e02833981519152546106a9565b6147466126128487612a1a565b906147518488612a1a565b518361475d868b612a1a565b519361477f60405198899687958694630825f38f60e01b8652600486016146a2565b03925af19182156111a857600192614799575b5001614713565b6147b4903d805f833e6147ac8183610878565b810190614640565b505f614792565b5050505050565b63d5ddb82560e01b5f5260045260245ffd5b5f80516020615de2833981519152546001600160801b038116919060801c8214614852575f8281525f80516020615ba28339815191526020526040808220546001600160801b038086168452918320929092555f80516020615de283398151915280546001600160801b031916600190950190911693909317909255565b634e487b715f5260316020526024601cfd5b5f81815260056020526040902054613e1557600454600160401b811015610858576148b161489b82600185940160045560046144c2565b819391549060031b91821b915f19901b19161790565b9055600454905f52600560205260405f2055600190565b6148d1816124fa565b5460f881901c9060f01c60ff166149a6576149a0576148ef81612b72565b801561498c5761490c6149014361507f565b65ffffffffffff1690565b809110156145ca5761491d826140f3565b106149285750600190565b61493461074482615497565b801561495d575b156149465750600390565b61494f9061311a565b61495857600490565b600590565b50614987610744825f525f80516020615d8283398151915260205260405f20600181015490541090565b61493b565b636ad0607560e01b5f52600482905260245ffd5b50600290565b5050600790565b81519190604183036149dd576149d69250602082015190606060408401519301515f1a9061551c565b9192909190565b50505f9160029190565b9065ffffffffffff8091169116019065ffffffffffff8211611f4057565b9290919361391f84613657565b60f81c9081602f1080614a85575b15614a3257600191602f190160ff1690565b8160401080614a7b575b15614a4e576001916036190160ff1690565b8160601080614a71575b15614a6a576001916056190160ff1690565b5f91508190565b5060678210614a58565b5060478210614a3c565b50603a8210614a20565b818110614a9a575050565b5f8155600101614a8f565b91818110614ab257505050565b6108aa925f5260205f209182019101614a8f565b8151916001600160401b03831161085857600160401b831161085857602090614af484845481865585614aa5565b01905f5260205f205f5b838110614b0b5750505050565b600190602084519401938184015501614afe565b8160011b915f199060031b1c19161790565b90601f8211614b3e575050565b6108aa915f80516020615be28339815191525f5260205f20906020601f840160051c83019310614b76575b601f0160051c0190614a8f565b9091508190614b69565b90601f8211614b8d575050565b6108aa915f80516020615e428339815191525f5260205f20906020601f840160051c83019310614b7657601f0160051c0190614a8f565b9190601f8111614bd357505050565b6108aa925f5260205f20906020601f840160051c83019310614b7657601f0160051c0190614a8f565b81519192916001600160401b03811161085857614c2381614c1d84546124a8565b84614bc4565b6020601f8211600114614c515781906144f09394955f92614c46575b5050614b1f565b015190505f80614c3f565b601f19821690614c64845f5260205f2090565b915f5b818110614c9e57509583600195969710614c86575b505050811b019055565b01515f1960f88460031b161c191690555f8080614c7c565b9192602060018192868b015181550194019201614c67565b815191600160401b8311610858578154838355808410614d10575b506020614ce39101915f5260205f2090565b5f915b838310614cf35750505050565b6001602082614d0483945186614bfc565b01920192019190614ce6565b825f528360205f2091820191015b818110614d2b5750614cd1565b80614d38600192546124a8565b80614d45575b5001614d1e565b601f81118314614d5a57505f81555b5f614d3e565b614d7c9083601f614d6e855f5260205f2090565b920160051c82019101614a8f565b5f8181526020812081835555614d54565b81518051919291906001600160401b03821161085857600160401b821161085857602090614dc083865481885587614aa5565b01835f5260205f205f5b838110614e035750505050606081614deb6020600394015160018601614ac6565b614dfc604082015160028601614cb6565b0151910155565b82516001600160a01b031681830155602090920191600101614dca565b5f198114611f405760010190565b919493948351614e4660208601918220838587614194565b948451845190818114801590615074575b801561506c575b61504f57505065ffffffffffff614e86614e77886124fa565b5460a01c65ffffffffffff1690565b16615032577f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e086979861500797614f988489614eef614ec44361507f565b65ffffffffffff614ee865ffffffffffff5f80516020615b62833981519152541690565b9116612f72565b89614ef861248d565b614f76614f04886124fa565b80546001600160a01b0319166001600160a01b038b16178155614f4d614f298661507f565b825465ffffffffffff60a01b191660a09190911b65ffffffffffff60a01b16178255565b614f5683614497565b815463ffffffff60d01b191660d09190911b63ffffffff60d01b16179055565b8c614f8b614f8486516155f4565b9285612f72565b94604051998a998a61563d565b0390a15190209185614fc9614faf858585896150ae565b5f525f80516020615ec283398151915260205260405f2090565b55614fd261089b565b938452602084015260408301526060820152615002835f525f80516020615b4283398151915260205260405f2090565b614d8d565b6105c76150215f80516020615c4283398151915254614e20565b5f80516020615c4283398151915255565b6107b48661503f8161381c565b6331b75e4d60e01b5f529061363e565b8451630447b05d60e41b5f5260049190915260245260445260645ffd5b508015614e5e565b508451811415614e57565b65ffffffffffff81116150975765ffffffffffff1690565b6306dfcc6560e41b5f52603060045260245260445ffd5b929061264d6150c892604051948593602085019788610c53565b51902090565b60ff5f80516020615e628339815191525460401c16156150ea57565b631afcd79f60e31b5f5260045ffd5b80519091906001600160401b0381116108585761513a816151275f80516020615ca2833981519152546124a8565b5f80516020615ca2833981519152614bc4565b602092601f821160011461516d5761515c929382915f92614c46575050614b1f565b5f80516020615ca283398151915255565b5f80516020615ca28339815191525f52601f198216935f80516020615ea2833981519152915f5b8681106151d657508360019596106151be575b505050811b015f80516020615ca283398151915255565b01515f1960f88460031b161c191690555f80806151a7565b91926020600181928685015181550194019201615194565b906151f76150ce565b81516001600160401b03811161085857615227816152225f80516020615e42833981519152546124a8565b614b80565b602092601f821160011461525a57615249929382915f92614c46575050614b1f565b5f80516020615e4283398151915255565b5f80516020615e428339815191525f52601f198216935f80516020615b22833981519152915f5b8681106152c357508360019596106152ab575b505050811b015f80516020615e4283398151915255565b01515f1960f88460031b161c191690555f8080615294565b91926020600181928685015181550194019201615281565b81156152e5570490565b634e487b7160e01b5f52601260045260245ffd5b60018111156105c757806001600160801b821015615419575b6153bf6153b56153ab6153a161539761538d61537c6153c69760046153cb9a600160401b81101561540c575b600160201b8110156153ff575b620100008110156153f2575b6101008110156153e5575b60108110156153d8575b10156153d0575b60030260011c90565b615386818b6152db565b0160011c90565b615386818a6152db565b61538681896152db565b61538681886152db565b61538681876152db565b61538681866152db565b80936152db565b821190565b900390565b60011b615373565b60041c9160021b9161536c565b60081c9160041b91615362565b60101c9160081b91615357565b60201c9160101b9161534b565b60401c9160201b9161533e565b50506153cb6153c66153bf6153b56153ab6153a161539761538d61537c6154408a60801c90565b9850600160401b97506153129650505050505050565b814710615480575f918291829182916001600160a01b03165af161547861316b565b501561418557565b504763cf47918160e01b5f5260045260245260445ffd5b6154b46154af6154a683612f0c565b50939050612b72565b6134ae565b111590565b906154c5939291614194565b6154d0603b826136d7565b506154da816124fa565b80546001600160f81b0316600160f81b1790556040518181527f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c90602090a190565b91906fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411615589579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156111a8575f516001600160a01b0381161561557f57905f905f90565b505f906001905f90565b5050505f9160039190565b93909260ff6155c0936105c797958752166020860152604085015260a0606085015260a0840190610592565b916080818403910152610592565b909260ff6080936105c79695845216602083015260408201528160608201520190610592565b906155fe826109a8565b61560b6040519182610878565b828152809261561c601f19916109a8565b01905f5b82811061562c57505050565b806060602080938501015201615620565b95999896979493919261567e9361567092885260018060a01b031660208801526101206040880152610120870190610b8c565b908582036060870152610bc8565b968388036080850152815180895260208901906020808260051b8c01019401915f905b8282106156dd57505050506105c7969750906156c49184820360a0860152610bfb565b9360c083015260e0820152610100818403910152610592565b909192946020806156fb6001938f601f199082030186528951610592565b9701920192019092916156a1565b9065ffffffffffff82549181199060301b169116179055565b8054600160401b8110156108585761573f916001820181556144c2565b61576d578161575a65ffffffffffff6108aa94511683612554565b602001516001600160d01b031690615709565b634e487b7160e01b5f525f60045260245ffd5b5f80516020615c2283398151915254919291801561583b5761350c6157a4916131b5565b9081546157c06157b98265ffffffffffff1690565b9160301c90565b9265ffffffffffff80841692169180831161582c578692036157ea576157e69250615709565b9190565b50506157e6906158096157fb6108ac565b65ffffffffffff9092168252565b6001600160d01b03851660208201525b5f80516020615c22833981519152615722565b632520601d60e01b5f5260045ffd5b5061585f9061584b6157fb6108ac565b6001600160d01b0384166020820152615819565b5f9190565b61586c613ee2565b805190811561587c576020012090565b50505f80516020615cc28339815191525480156158965790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b6158c3613f9a565b80519081156158d3576020012090565b50505f80516020615e828339815191525480156158965790565b93909192615905906158ff848761305a565b90615aa9565b80915015615a96575f915f9260ff5f961680155f146159c7575050516159b8576159679360039261594b83975f525f80516020615d8283398151915260205260405f2090565b92806159a5575b508061598e575b5080615977575b5001610cc1565b615972828254612f72565b905590565b61598660028301918254612f72565b90555f615960565b61599d60018401918254612f72565b90555f615959565b6159b0908454612f72565b83555f615952565b63867db77160e01b5f5260045ffd5b92939092600181036159ec575050516159b857615967938261594b6003949197612514565b9395509260028103615a105750516159b8578360039261594b615967969297612514565b909695925060ff14159050615a875760308551036159b857602085015160801c946040603082015160801c91015160801c91828288010194808611615a635750916159679495969161594b600394612514565b6302a71c8960e01b5f526001600160a01b038516600452602486905260445260645ffd5b6303599be160e11b5f5260045ffd5b6371c6af4960e01b5f526107b4836107e8565b9190828111615ab9576001920390565b505f9150819056fe6784e9bcb845caaa98267d7b0918f97d3d17f7cb35a05b52010f7eb587a0acb04bb30adc02d6137d1649360a58581580cf95c0409c60bedb46170617cfd36d7b7c712897014dbe49c045ef1299aa2d5f9e67e48eea4403efa21f1e0f3ac0cb01da13dda7583a39a3cd73e8830529c760837228fa4683752c823b17e10548aad5357e1d0c89980520b3654c57f444238d75a15e5f41d389a090caabe54617d80200d7616c8fe29c6c2fbe1d0c5bc8f2faa4c35b43746e70b24b4d532752affd01042f525fd47e44d02e065dd7bb464f47b4f926fbd05b5e087891ebd756adf1007c712897014dbe49c045ef1299aa2d5f9e67e48eea4403efa21f1e0f3ac0cb0308f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1022130f92f3b57a0ca0ff53b681825494ca70980d3b0ddffac97113db00028b600fc13b0622f15c0c6558fbb10a1f5d36853f903c871b669bae7001d348b50ca00357e1d0c89980520b3654c57f444238d75a15e5f41d389a090caabe54617d800c7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2f2aad550cf55f045cb27e9c559f9889fdfb6e6cdaa032301d6ea397784ae51d7a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100042f525fd47e44d02e065dd7bb464f47b4f926fbd05b5e087891ebd756adf10100d7616c8fe29c6c2fbe1d0c5bc8f2faa4c35b43746e70b24b4d532752affd0042ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb002bf05609716bc4b090ad0e99b47b91881c7517771259c625df05db7e9d8c8181d073797d8f9d07d835a3fc13195afeafd2f137da609f97a44f7a3aa4341708007ca4ac117ed3cdce75c1161d8207c440389b1a15d69d096831664657c07dafc2e2babfbac5889a709b63bb7f598b324e08bc5a4fb9ec647fb3cbc9ec07eb87127c712897014dbe49c045ef1299aa2d5f9e67e48eea4403efa21f1e0f3ac0cb027d1501d734d0ca30b8d26751a7fae89646767b24afe11265192d56e5fe515b003e83946653575f9a39005e1545185629e92736b7528ab20ca3816f315424a8117c712897014dbe49c045ef1299aa2d5f9e67e48eea4403efa21f1e0f3ac0cb00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75357e1d0c89980520b3654c57f444238d75a15e5f41d389a090caabe54617d801b8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4a264697066735822122087a0c57af56ea735a6dd7991a2a5de45a7adaf9d7c2044cc5f08342ae8443a3e64736f6c634300081a0033