0 txs
0 calls
constructor
constructor()
functions
DEFAULT_PROTOCOL_REWARD_BPS
viewfunction DEFAULT_PROTOCOL_REWARD_BPS() view returns (uint256)
EIP712_DOMAIN_NAME
viewfunction EIP712_DOMAIN_NAME() view returns (string)
EIP712_DOMAIN_VERSION
viewfunction EIP712_DOMAIN_VERSION() view returns (string)
EIP712_FUNCTION_TYPE_HASH
viewfunction EIP712_FUNCTION_TYPE_HASH() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
generateOfferMessageHash
viewfunction generateOfferMessageHash(address acceptor, uint256 offerId, uint256 tokenId) view returns (bytes32 structHash, bytes32 dataHash)
getDomainSeparator
viewfunction getDomainSeparator() view returns (bytes32)
getRoyaltyInfoWithCap
viewfunction getRoyaltyInfoWithCap(address collection, uint256 tokenId, uint256 amountInWei) view returns (address creator, uint256 royaltyAmount)
MAX_BPS
viewfunction MAX_BPS() view returns (uint256)
MAX_PROTOCOL_REWARD_BPS
viewfunction MAX_PROTOCOL_REWARD_BPS() view returns (uint256)
MAX_ROYALTY_BPS
viewfunction MAX_ROYALTY_BPS() view returns (uint256)
nextOfferId
viewfunction nextOfferId() view returns (uint256)
offers
viewfunction offers(uint256) view returns (uint256 offerId, address payer, address collection, uint256 tokenId, uint256 amount, uint256 costInUSDC, uint256 createdAt, uint256 expiresAt, address tokenRecipient, bool accepted)
offerVerificationInterval
viewfunction offerVerificationInterval() view returns (uint256)
offerVerifiers
viewfunction offerVerifiers(address offerVerifier) view returns (bool)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
protocolRewardBps
viewfunction protocolRewardBps() view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
spurs1155
viewfunction spurs1155() view returns (address)
treasury
viewfunction treasury() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
usdc
viewfunction usdc() view returns (address)
usdcSpursTokenId
viewfunction usdcSpursTokenId() view returns (uint256)
validateOfferSignature
viewfunction validateOfferSignature(address acceptor, uint256 offerId, uint256 tokenId, bytes signature) view returns (bool isValid, bytes32 dataHash, address recoveredSigner)
validateOfferWithId
viewfunction validateOfferWithId(uint256 offerId, uint256 tokenId, address seller) view returns (uint8)
acceptOffer
nonpayablefunction acceptOffer(uint256 offerId, uint256 tokenId, address paymentRecipient)
acceptOfferWithSignature
nonpayablefunction acceptOfferWithSignature(uint256 offerId, uint256 tokenId, address paymentRecipient, bytes signature)
acceptOwnership
nonpayablefunction acceptOwnership()
createOffer
nonpayablefunction createOffer(address collection, uint256 tokenId, uint256 amount, uint256 costInUSDC, uint256 expiresAt, address tokenRecipient) returns (uint256 offerId)
initialize
nonpayablefunction initialize(address admin_, address usdc_, address treasury_, address spurs1155_)
ownerSetOfferVerificationInterval
nonpayablefunction ownerSetOfferVerificationInterval(uint256 interval)
ownerSetOfferVerifier
nonpayablefunction ownerSetOfferVerifier(address verifier, bool isVerified)
ownerSetProtocolRewardBps
nonpayablefunction ownerSetProtocolRewardBps(uint256 protocolRewardBps_)
ownerSetTreasury
nonpayablefunction ownerSetTreasury(address treasury_)
ownerWithdrawUSDC
nonpayablefunction ownerWithdrawUSDC(address to, uint256 amount)
renounceOwnership
nonpayablefunction renounceOwnership()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
EIP712DomainChanged
event EIP712DomainChanged()
Initialized
event Initialized(uint64 version)
OfferAccepted
event OfferAccepted(address indexed acceptor, uint256 indexed offerId, uint256 indexed tokenId, address paymentRecipient, address tokenRecipient, address payer, uint256 acceptedAt)
OfferAcceptSignatureVerified
event OfferAcceptSignatureVerified(address indexed acceptor, uint256 indexed offerId, uint256 indexed tokenId, bytes signature, bytes32 messageHash, address recoveredSigner)
OfferCreated
event OfferCreated(address indexed payer, address indexed collection, uint256 tokenId, uint256 amount, uint256 priceInUSDC, uint256 createdAt, uint256 expiresAt, address tokenRecipient, uint256 indexed offerId)
OfferVerificationIntervalSet
event OfferVerificationIntervalSet(uint256 interval)
OfferVerifierSet
event OfferVerifierSet(address indexed verifier, bool isVerified)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
ProtocolRewardBpsSet
event ProtocolRewardBpsSet(address indexed owner, uint256 protocolRewardBps)
TreasurySet
event TreasurySet(address indexed owner, address treasury)
Upgraded
event Upgraded(address indexed implementation)
USDCOfferPaymentsSent
event USDCOfferPaymentsSent(uint256 indexed offerId, address protocolRewardRecipient, uint256 protocolRewardAmount, address royaltyRecipient, uint256 royaltyAmount, address paymentRecipient, uint256 paymentAmount)
USDCWithdrawn
event USDCWithdrawn(address indexed owner, address indexed to, uint256 amount)
errors
AcceptOfferAlreadyAccepted
error AcceptOfferAlreadyAccepted(uint256 offerId)
AcceptOfferExpired
error AcceptOfferExpired(uint256 offerId, uint256 expiresAt, uint256 currentTime)
AcceptOfferIdNotValid
error AcceptOfferIdNotValid(uint256 offerId)
AcceptOfferNotFromOwner
error AcceptOfferNotFromOwner(uint256 offerId, address offerAcceptor)
AcceptOfferNotVerified
error AcceptOfferNotVerified(uint256 offerId)
AcceptOfferTokenIdMismatched
error AcceptOfferTokenIdMismatched(uint256 offerId, address collection, uint256 offerTokenId, uint256 acceptTokenId)
AcceptOfferUSDCTransferFailed
error AcceptOfferUSDCTransferFailed(uint256 offerId, address from, address to, uint256 amount)
AddressCannotBeZero
error AddressCannotBeZero()
AddressEmptyCode
error AddressEmptyCode(address target)
CreateOfferExpired
error CreateOfferExpired(uint256 expiresAt, uint256 nowTime)
CreateOfferInvalidAmount
error CreateOfferInvalidAmount(address collection, uint256 tokenId, uint256 amount)
CreateOfferUSDCTransferFailed
error CreateOfferUSDCTransferFailed(address to, uint256 amount)
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
InvalidCollection
error InvalidCollection(address collection)
InvalidInitialization
error InvalidInitialization()
InvalidProtocolRewardBps
error InvalidProtocolRewardBps(uint256 bps)
NotInitializing
error NotInitializing()
OfferVerificationFailed
error OfferVerificationFailed(address acceptor, uint256 offerId, uint256 tokenId, bytes signature, bytes32 messageHash, address recoveredSigner)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ValidateCombinedBalance_InsufficientCombinedBalance
error ValidateCombinedBalance_InsufficientCombinedBalance()
WithdrawUSDCFailed
error WithdrawUSDCFailed(address from, address to, uint256 amount)
creation bytecode
0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff16815250348015610042575f5ffd5b5061005161006460201b60201c565b61005f61006460201b60201c565b6101c4565b5f61007361016260201b60201c565b9050805f0160089054906101000a900460ff16156100bd576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff161461015f5767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff60405161015691906101ab565b60405180910390a15b50565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b5f67ffffffffffffffff82169050919050565b6101a581610189565b82525050565b5f6020820190506101be5f83018461019c565b92915050565b6080516157f46101ea5f395f8181611fdb0152818161203001526121ea01526157f45ff3fe60806040526004361061022f575f3560e01c8063829908511161012d578063cda092a7116100aa578063f2fde38b1161006e578063f2fde38b14610814578063f7a9b40e1461083c578063f8c8765e14610866578063fd0702961461088e578063fd967f47146108b85761022f565b8063cda092a714610746578063d0dc91d21461076e578063de3db04714610796578063e30c3978146107c0578063ed24911d146107ea5761022f565b80639751beb9116100f15780639751beb914610664578063ad3cb1cc146106a0578063b40ad8da146106ca578063b47db761146106f4578063c67b4afb1461071e5761022f565b8063829908511461055f57806384b0196e146105895780638a72ea6a146105b95780638da5cb5b146105fe57806393307c4b146106285761022f565b80633e413bee116101bb5780635f5d06551161017f5780635f5d0655146104a35780635fb01785146104cd57806361d027b314610509578063715018a61461053357806379ba5097146105495761022f565b80633e413bee146103df5780634dce2668146104095780634f1ef2861461043357806352d1902d1461044f5780635cc33321146104795761022f565b806324666ea21161020257806324666ea2146102e85780632e01b8a3146103265780633137524214610363578063330bf2a01461038b5780633dca40e6146103b55761022f565b806303ab56ac1461023357806307ae6a5d1461025b57806309ea6f62146102835780631bd238d9146102ab575b5f5ffd5b34801561023e575f5ffd5b5061025960048036038101906102549190613fe1565b6108e2565b005b348015610266575f5ffd5b50610281600480360381019061027c9190614066565b610988565b005b34801561028e575f5ffd5b506102a960048036038101906102a491906140eb565b6109a7565b005b3480156102b6575f5ffd5b506102d160048036038101906102cc9190614129565b610a55565b6040516102df929190614191565b60405180910390f35b3480156102f3575f5ffd5b5061030e600480360381019061030991906142f4565b610ab9565b60405161031d93929190614392565b60405180910390f35b348015610331575f5ffd5b5061034c60048036038101906103479190614129565b610b70565b60405161035a9291906143d6565b60405180910390f35b34801561036e575f5ffd5b50610389600480360381019061038491906143fd565b610c36565b005b348015610396575f5ffd5b5061039f610d34565b6040516103ac9190614483565b60405180910390f35b3480156103c0575f5ffd5b506103c9610d59565b6040516103d6919061449c565b60405180910390f35b3480156103ea575f5ffd5b506103f3610d5f565b60405161040091906144b5565b60405180910390f35b348015610414575f5ffd5b5061041d610d84565b60405161042a91906144ce565b60405180910390f35b61044d600480360381019061044891906144e7565b610da8565b005b34801561045a575f5ffd5b50610463610dc7565b60405161047091906144ce565b60405180910390f35b348015610484575f5ffd5b5061048d610df8565b60405161049a91906145a1565b60405180910390f35b3480156104ae575f5ffd5b506104b7610e31565b6040516104c4919061449c565b60405180910390f35b3480156104d8575f5ffd5b506104f360048036038101906104ee9190614066565b610e37565b6040516105009190614634565b60405180910390f35b348015610514575f5ffd5b5061051d610fc2565b60405161052a91906144b5565b60405180910390f35b34801561053e575f5ffd5b50610547610fe7565b005b348015610554575f5ffd5b5061055d610ffa565b005b34801561056a575f5ffd5b50610573611088565b604051610580919061449c565b60405180910390f35b348015610594575f5ffd5b5061059d61108e565b6040516105b0979695949392919061473e565b60405180910390f35b3480156105c4575f5ffd5b506105df60048036038101906105da9190613fe1565b611197565b6040516105f59a999897969594939291906147c0565b60405180910390f35b348015610609575f5ffd5b50610612611251565b60405161061f91906144b5565b60405180910390f35b348015610633575f5ffd5b5061064e6004803603810190610649919061485a565b611286565b60405161065b919061449c565b60405180910390f35b34801561066f575f5ffd5b5061068a600480360381019061068591906143fd565b6115e8565b60405161069791906148e3565b60405180910390f35b3480156106ab575f5ffd5b506106b4611605565b6040516106c191906145a1565b60405180910390f35b3480156106d5575f5ffd5b506106de61163e565b6040516106eb919061449c565b60405180910390f35b3480156106ff575f5ffd5b50610708611643565b604051610715919061449c565b60405180910390f35b348015610729575f5ffd5b50610744600480360381019061073f91906148fc565b611649565b005b348015610751575f5ffd5b5061076c60048036038101906107679190613fe1565b61180a565b005b348015610779575f5ffd5b50610794600480360381019061078f919061493a565b611853565b005b3480156107a1575f5ffd5b506107aa6118d7565b6040516107b7919061449c565b60405180910390f35b3480156107cb575f5ffd5b506107d46118dd565b6040516107e191906144b5565b60405180910390f35b3480156107f5575f5ffd5b506107fe611912565b60405161080b91906144ce565b60405180910390f35b34801561081f575f5ffd5b5061083a600480360381019061083591906143fd565b611920565b005b348015610847575f5ffd5b506108506119d9565b60405161085d919061449c565b60405180910390f35b348015610871575f5ffd5b5061088c600480360381019061088791906149ba565b6119de565b005b348015610899575f5ffd5b506108a2611ed0565b6040516108af91906145a1565b60405180910390f35b3480156108c3575f5ffd5b506108cc611f09565b6040516108d9919061449c565b60405180910390f35b6108ea611f0f565b61138881111561093157806040517f998dc1b5000000000000000000000000000000000000000000000000000000008152600401610928919061449c565b60405180910390fd5b805f819055503373ffffffffffffffffffffffffffffffffffffffff167f61143574fbcb9f5bdb303e42eb4fb569e32f40d192cac50f82c5dcb60ca7d8f48260405161097d919061449c565b60405180910390a250565b6109a283838360405180602001604052805f815250611853565b505050565b6109af611f0f565b8060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167faa27186c2b30d539d895df627aa4d1aa02e534d9b9919e92e3bd5c287c7744b582604051610a4991906148e3565b60405180910390a25050565b5f5f7f87b54b1a80e67ba60ef9e9de55a9baac9a3e1d3b7b54dc1fc6b5f97d64738377858585604051602001610a8e9493929190614a1e565b604051602081830303815290604052805190602001209150610aaf82611f96565b9050935093915050565b5f5f5f610ac7878787610a55565b905080925050610ae08483611faf90919063ffffffff16565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015610b64575060045f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b92509450945094915050565b5f5f8473ffffffffffffffffffffffffffffffffffffffff16632a55205a85856040518363ffffffff1660e01b8152600401610bad929190614a61565b6040805180830381865afa925050508015610be657506040513d601f19601f82011682018060405250810190610be39190614ab0565b60015b610bf5575f91505f9050610c2e565b8193505f61271061138887610c0a9190614b1b565b610c149190614b89565b905080821115610c2657809350610c2a565b8193505b5050505b935093915050565b610c3e611f0f565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ca3576040517fe622e04000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f21eb548722a564f6e09f039f7aa858ae94c911910f3823b37af2250eeca4f40382604051610d2991906144b5565b60405180910390a250565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61138881565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f87b54b1a80e67ba60ef9e9de55a9baac9a3e1d3b7b54dc1fc6b5f97d6473837781565b610db0611fd9565b610db9826120bf565b610dc382826120ca565b5050565b5f610dd06121e8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60025481565b5f5f60085f8681526020019081526020015f20604051806101400160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016008820160149054906101000a900460ff1615151515815250509050610fb881858561226f565b9150509392505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610fef611f0f565b610ff85f61235c565b565b5f611003612399565b90508073ffffffffffffffffffffffffffffffffffffffff166110246118dd565b73ffffffffffffffffffffffffffffffffffffffff161461107c57806040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161107391906144b5565b60405180910390fd5b6110858161235c565b50565b60035481565b5f6060805f5f5f60605f6110a06123a0565b90505f5f1b815f01541480156110bb57505f5f1b8160010154145b6110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f190614c03565b60405180910390fd5b6111026123c7565b61110a612465565b46305f5f1b5f67ffffffffffffffff811115611129576111286141d0565b5b6040519080825280602002602001820160405280156111575781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b6008602052805f5260405f205f91509050805f015490806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806004015490806005015490806006015490806007015490806008015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060080160149054906101000a900460ff1690508a565b5f5f61125b612503565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b5f5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16036112f757866040517fbf29a5e50000000000000000000000000000000000000000000000000000000081526004016112ee91906144b5565b60405180910390fd5b42831161133d5782426040517ffb606754000000000000000000000000000000000000000000000000000000008152600401611334929190614a61565b60405180910390fd5b60018514611386578686866040517f6aaf228300000000000000000000000000000000000000000000000000000000815260040161137d93929190614c21565b60405180910390fd5b600254905060025f81548092919061139d90614c56565b91905055506040518061014001604052808281526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020014281526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1681526020015f151581525060085f8381526020019081526020015f205f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070155610100820151816008015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101208201518160080160146101000a81548160ff021916908315150217905550905050808773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f73c56794e834715d3ec712e488a58439cf85e977fc656f7be57997656b5fd50a898989428a8a6040516115d696959493929190614c9d565b60405180910390a49695505050505050565b6004602052805f5260405f205f915054906101000a900460ff1681565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60fa81565b61138881565b611651611f0f565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116b6576040517fe622e04000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f6d78d97ccf14c83e1b919354de9763e196d523bfdfef132f76a4e9f303607a9383604051611713919061449c565b60405180910390a35f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040518363ffffffff1660e01b815260040161177c9291906143d6565b6020604051808303815f875af1158015611798573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117bc9190614d10565b905080611804573384846040517fdab29cee0000000000000000000000000000000000000000000000000000000081526004016117fb93929190614d3b565b60405180910390fd5b50505050565b611812611f0f565b806003819055507fefd89bf8acbed864a285e995c85dd3279e2a5c8f7e792cc6332f22eaeab8e1de81604051611848919061449c565b60405180910390a150565b5f5f5f6118623388888761252a565b92509250925082156118c35785873373ffffffffffffffffffffffffffffffffffffffff167f2f68f2a53a34147658dde0dc2257c0d443c6467ca228bb2d6efd231a5f5a75638786866040516118ba93929190614dc2565b60405180910390a45b6118ce8787876125d5565b50505050505050565b60065481565b5f5f6118e7612a80565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b5f61191b612aa7565b905090565b611928611f0f565b5f611931612a80565b905081815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16611993611251565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b5f5481565b5f6119e7612ab5565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f5f8267ffffffffffffffff16148015611a2f5750825b90505f60018367ffffffffffffffff16148015611a6257505f3073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015611a70575080155b15611aa7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315611af4576001855f0160086101000a81548160ff0219169083151502179055505b5f73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1603611b59576040517fe622e04000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1603611bbe576040517fe622e04000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603611c23576040517fe622e04000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603611c88576040517fe622e04000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fa5f819055508760075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508660015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016002819055508560055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611dcb6040518060400160405280600981526020017f52444f4f666665727300000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250612adc565b611dd489612af2565b611e6b8660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de3db0476040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e42573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e669190614dfe565b612b06565b8315611ec5575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26001604051611ebc9190614e75565b60405180910390a15b505050505050505050565b6040518060400160405280600981526020017f52444f4f6666657273000000000000000000000000000000000000000000000081525081565b61271081565b611f17612399565b73ffffffffffffffffffffffffffffffffffffffff16611f35611251565b73ffffffffffffffffffffffffffffffffffffffff1614611f9457611f58612399565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611f8b91906144b5565b60405180910390fd5b565b5f611fa8611fa2612aa7565b83612b51565b9050919050565b5f5f5f5f611fbd8686612b91565b925092509250611fcd8282612be6565b82935050505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148061208657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661206d612d48565b73ffffffffffffffffffffffffffffffffffffffff1614155b156120bd576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6120c7611f0f565b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561213257506040513d601f19601f8201168201806040525081019061212f9190614eb8565b60015b61217357816040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161216a91906144b5565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b81146121d957806040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004016121d091906144ce565b60405180910390fd5b6121e38383612d9b565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461226d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f836101200151156122845760019050612355565b8360e001514211156122995760029050612355565b828460600151141580156122b157505f846060015114155b156122bf5760039050612355565b5f846040015190505f8173ffffffffffffffffffffffffffffffffffffffff1662fdd58e85876040518363ffffffff1660e01b81526004016123029291906143d6565b602060405180830381865afa15801561231d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123419190614dfe565b03612350576004915050612355565b5f9150505b9392505050565b5f612365612a80565b9050805f015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561239582612e0d565b5050565b5f33905090565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b60605f6123d26123a0565b90508060020180546123e390614f10565b80601f016020809104026020016040519081016040528092919081815260200182805461240f90614f10565b801561245a5780601f106124315761010080835404028352916020019161245a565b820191905f5260205f20905b81548152906001019060200180831161243d57829003601f168201915b505050505091505090565b60605f6124706123a0565b905080600301805461248190614f10565b80601f01602080910402602001604051908101604052809291908181526020018280546124ad90614f10565b80156124f85780601f106124cf576101008083540402835291602001916124f8565b820191905f5260205f20905b8154815290600101906020018083116124db57829003601f168201915b505050505091505090565b5f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b5f5f5f60035460085f8881526020019081526020015f206006015461254f9190614f40565b421115612566575f5f5f1b5f9250925092506125cb565b61257287878787610ab9565b809350819450829550505050826125ca578686868685856040517f0b165f7c0000000000000000000000000000000000000000000000000000000081526004016125c196959493929190614f73565b60405180910390fd5b5b9450945094915050565b5f60085f8581526020019081526020015f2090505f815f01540361263057836040517f472e0b5f000000000000000000000000000000000000000000000000000000008152600401612627919061449c565b60405180910390fd5b61279b81604051806101400160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016008820160149054906101000a900460ff16151515158152505084612ede565b60018160080160146101000a81548160ff02191690831515021790555082843373ffffffffffffffffffffffffffffffffffffffff167f199694d15bc5f02bdf6910980242879d222c863e86eb07b71e902ce29948019585856008015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff164260405161284c9493929190614fd9565b60405180910390a45f816002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663f242432a33846008015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168786600401546040518563ffffffff1660e01b81526004016128e1949392919061503f565b5f604051808303815f87803b1580156128f8575f5ffd5b505af115801561290a573d5f5f3e3d5ffd5b50505050612a7982604051806101400160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016008820160149054906101000a900460ff161515151581525050846130b8565b5050505050565b5f7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00905090565b5f612ab0613655565b905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b612ae46136b8565b612aee82826136f8565b5050565b612afa6136b8565b612b0381613749565b50565b8160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806006819055505050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f5f5f6041845103612bd1575f5f5f602087015192506040870151915060608701515f1a9050612bc3888285856137cd565b955095509550505050612bdf565b5f600285515f1b9250925092505b9250925092565b5f6003811115612bf957612bf86145c1565b5b826003811115612c0c57612c0b6145c1565b5b0315612d445760016003811115612c2657612c256145c1565b5b826003811115612c3957612c386145c1565b5b03612c70576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115612c8457612c836145c1565b5b826003811115612c9757612c966145c1565b5b03612cdb57805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401612cd2919061449c565b60405180910390fd5b600380811115612cee57612ced6145c1565b5b826003811115612d0157612d006145c1565b5b03612d4357806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401612d3a91906144ce565b60405180910390fd5b5b5050565b5f612d747f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6138b4565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612da4826138bd565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f81511115612e0057612dfa8282613986565b50612e09565b612e08613a06565b5b5050565b5f612e16612503565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b5f612eea83833361226f565b905060016004811115612f0057612eff6145c1565b5b816004811115612f1357612f126145c1565b5b03612f5857825f01516040517f33ce20f3000000000000000000000000000000000000000000000000000000008152600401612f4f919061449c565b60405180910390fd5b60026004811115612f6c57612f6b6145c1565b5b816004811115612f7f57612f7e6145c1565b5b03612fcc57825f01518360e00151426040517f432a2a3c000000000000000000000000000000000000000000000000000000008152600401612fc393929190615095565b60405180910390fd5b60036004811115612fe057612fdf6145c1565b5b816004811115612ff357612ff26145c1565b5b0361304657825f015183604001518460600151846040517f2a0ace0f00000000000000000000000000000000000000000000000000000000815260040161303d94939291906150ca565b60405180910390fd5b600480811115613059576130586145c1565b5b81600481111561306c5761306b6145c1565b5b036130b357825f0151336040517f69d0fcbd0000000000000000000000000000000000000000000000000000000081526004016130aa92919061510d565b60405180910390fd5b505050565b5f82608001518360a001516130cd9190614b1b565b90505f6127105f54836130e09190614b1b565b6130ea9190614b89565b90505f5f6131018660400151876060015186610b70565b915091505f8184866131139190615134565b61311d9190615134565b90505f613128613a42565b90505f5f61313b8a602001518985613ba1565b91509150895f01517f9251499ebf4487555d28a8cb76a926a0077962c63cb436c30683adb3dff2d9da60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168989898e8a60405161319d96959493929190615167565b60405180910390a25f836040015190505f8311156132d25760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635552bc8b8c602001518560055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de3db0476040518163ffffffff1660e01b8152600401602060405180830381865afa158015613262573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132869190614dfe565b6040518463ffffffff1660e01b81526004016132a493929190614c21565b5f604051808303815f87803b1580156132bb575f5ffd5b505af11580156132cd573d5f5f3e3d5ffd5b505050505b5f8211156133af575f8173ffffffffffffffffffffffffffffffffffffffff166323b872dd8d6020015130866040518463ffffffff1660e01b815260040161331c93929190614d3b565b6020604051808303815f875af1158015613338573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061335c9190614d10565b9050806133ad578b5f01518c60200151308c6040517fcb5c01580000000000000000000000000000000000000000000000000000000081526004016133a494939291906151c6565b60405180910390fd5b505b5f881115613493578073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168a6040518363ffffffff1660e01b81526004016134139291906143d6565b6020604051808303815f875af115801561342f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134539190614d10565b613492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348990615279565b60405180910390fd5b5b5f861180156134ce57505f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b1561358e578073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb88886040518363ffffffff1660e01b815260040161350e9291906143d6565b6020604051808303815f875af115801561352a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061354e9190614d10565b61358d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613584906152e1565b60405180910390fd5b5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8b876040518363ffffffff1660e01b81526004016135c99291906143d6565b6020604051808303815f875af11580156135e5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136099190614d10565b613648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363f90615349565b60405180910390fd5b5050505050505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61367f613d4b565b613687613dc1565b463060405160200161369d959493929190615367565b60405160208183030381529060405280519060200120905090565b6136c0613e38565b6136f6576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6137006136b8565b5f6137096123a0565b90508281600201908161371c919061554f565b508181600301908161372e919061554f565b505f5f1b815f01819055505f5f1b8160010181905550505050565b6137516136b8565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036137c1575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016137b891906144b5565b60405180910390fd5b6137ca8161235c565b50565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115613809575f6003859250925092506138aa565b5f6001888888886040515f815260200160405260405161382c9493929190615639565b6020604051602081039080840390855afa15801561384c573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361389d575f60015f5f1b935093509350506138aa565b805f5f5f1b935093509350505b9450945094915050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361391857806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161390f91906144b5565b60405180910390fd5b806139447f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6138b4565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff16846040516139af91906156b6565b5f60405180830381855af49150503d805f81146139e7576040519150601f19603f3d011682016040523d82523d5f602084013e6139ec565b606091505b50915091506139fc858383613e56565b9250505092915050565b5f341115613a40576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b613a4a613f61565b5f5f5f5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c01bd0e96006546040518263ffffffff1660e01b8152600401613aaa919061449c565b608060405180830381865afa158015613ac5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ae991906156cc565b93509350935093505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b56906157a0565b60405180910390fd5b60405180608001604052808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182151581525094505050505090565b5f5f5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e876006546040518363ffffffff1660e01b8152600401613c019291906143d6565b602060405180830381865afa158015613c1c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c409190614dfe565b90505f846020015186613c539190614b89565b9050613c5f8282613ee3565b9350846020015184613c719190614b1b565b86613c7c9190615134565b92505f831115613d41575f856040015173ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401613cc491906144b5565b602060405180830381865afa158015613cdf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d039190614dfe565b905083811015613d3f576040517f0f31956100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5050935093915050565b5f5f613d556123a0565b90505f613d606123c7565b90505f81511115613d7c57808051906020012092505050613dbe565b5f825f015490505f5f1b8114613d9757809350505050613dbe565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f5f613dcb6123a0565b90505f613dd6612465565b90505f81511115613df257808051906020012092505050613e35565b5f826001015490505f5f1b8114613e0e57809350505050613e35565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f613e41612ab5565b5f0160089054906101000a900460ff16905090565b606082613e6b57613e6682613ef9565b613edb565b5f8251148015613e9157505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15613ed357836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401613eca91906144b5565b60405180910390fd5b819050613edc565b5b9392505050565b5f613ef18284108484613f3d565b905092915050565b5f81511115613f0b5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613f4784613f56565b82841802821890509392505050565b5f8115159050919050565b60405180608001604052805f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581525090565b5f604051905090565b5f5ffd5b5f5ffd5b5f819050919050565b613fc081613fae565b8114613fca575f5ffd5b50565b5f81359050613fdb81613fb7565b92915050565b5f60208284031215613ff657613ff5613fa6565b5b5f61400384828501613fcd565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6140358261400c565b9050919050565b6140458161402b565b811461404f575f5ffd5b50565b5f813590506140608161403c565b92915050565b5f5f5f6060848603121561407d5761407c613fa6565b5b5f61408a86828701613fcd565b935050602061409b86828701613fcd565b92505060406140ac86828701614052565b9150509250925092565b5f8115159050919050565b6140ca816140b6565b81146140d4575f5ffd5b50565b5f813590506140e5816140c1565b92915050565b5f5f6040838503121561410157614100613fa6565b5b5f61410e85828601614052565b925050602061411f858286016140d7565b9150509250929050565b5f5f5f606084860312156141405761413f613fa6565b5b5f61414d86828701614052565b935050602061415e86828701613fcd565b925050604061416f86828701613fcd565b9150509250925092565b5f819050919050565b61418b81614179565b82525050565b5f6040820190506141a45f830185614182565b6141b16020830184614182565b9392505050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b614206826141c0565b810181811067ffffffffffffffff82111715614225576142246141d0565b5b80604052505050565b5f614237613f9d565b905061424382826141fd565b919050565b5f67ffffffffffffffff821115614262576142616141d0565b5b61426b826141c0565b9050602081019050919050565b828183375f83830152505050565b5f61429861429384614248565b61422e565b9050828152602081018484840111156142b4576142b36141bc565b5b6142bf848285614278565b509392505050565b5f82601f8301126142db576142da6141b8565b5b81356142eb848260208601614286565b91505092915050565b5f5f5f5f6080858703121561430c5761430b613fa6565b5b5f61431987828801614052565b945050602061432a87828801613fcd565b935050604061433b87828801613fcd565b925050606085013567ffffffffffffffff81111561435c5761435b613faa565b5b614368878288016142c7565b91505092959194509250565b61437d816140b6565b82525050565b61438c8161402b565b82525050565b5f6060820190506143a55f830186614374565b6143b26020830185614182565b6143bf6040830184614383565b949350505050565b6143d081613fae565b82525050565b5f6040820190506143e95f830185614383565b6143f660208301846143c7565b9392505050565b5f6020828403121561441257614411613fa6565b5b5f61441f84828501614052565b91505092915050565b5f819050919050565b5f61444b6144466144418461400c565b614428565b61400c565b9050919050565b5f61445c82614431565b9050919050565b5f61446d82614452565b9050919050565b61447d81614463565b82525050565b5f6020820190506144965f830184614474565b92915050565b5f6020820190506144af5f8301846143c7565b92915050565b5f6020820190506144c85f830184614383565b92915050565b5f6020820190506144e15f830184614182565b92915050565b5f5f604083850312156144fd576144fc613fa6565b5b5f61450a85828601614052565b925050602083013567ffffffffffffffff81111561452b5761452a613faa565b5b614537858286016142c7565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61457382614541565b61457d818561454b565b935061458d81856020860161455b565b614596816141c0565b840191505092915050565b5f6020820190508181035f8301526145b98184614569565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600581106145ff576145fe6145c1565b5b50565b5f81905061460f826145ee565b919050565b5f61461e82614602565b9050919050565b61462e81614614565b82525050565b5f6020820190506146475f830184614625565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6146818161464d565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6146b981613fae565b82525050565b5f6146ca83836146b0565b60208301905092915050565b5f602082019050919050565b5f6146ec82614687565b6146f68185614691565b9350614701836146a1565b805f5b8381101561473157815161471888826146bf565b9750614723836146d6565b925050600181019050614704565b5085935050505092915050565b5f60e0820190506147515f83018a614678565b81810360208301526147638189614569565b905081810360408301526147778188614569565b905061478660608301876143c7565b6147936080830186614383565b6147a060a0830185614182565b81810360c08301526147b281846146e2565b905098975050505050505050565b5f610140820190506147d45f83018d6143c7565b6147e1602083018c614383565b6147ee604083018b614383565b6147fb606083018a6143c7565b61480860808301896143c7565b61481560a08301886143c7565b61482260c08301876143c7565b61482f60e08301866143c7565b61483d610100830185614383565b61484b610120830184614374565b9b9a5050505050505050505050565b5f5f5f5f5f5f60c0878903121561487457614873613fa6565b5b5f61488189828a01614052565b965050602061489289828a01613fcd565b95505060406148a389828a01613fcd565b94505060606148b489828a01613fcd565b93505060806148c589828a01613fcd565b92505060a06148d689828a01614052565b9150509295509295509295565b5f6020820190506148f65f830184614374565b92915050565b5f5f6040838503121561491257614911613fa6565b5b5f61491f85828601614052565b925050602061493085828601613fcd565b9150509250929050565b5f5f5f5f6080858703121561495257614951613fa6565b5b5f61495f87828801613fcd565b945050602061497087828801613fcd565b935050604061498187828801614052565b925050606085013567ffffffffffffffff8111156149a2576149a1613faa565b5b6149ae878288016142c7565b91505092959194509250565b5f5f5f5f608085870312156149d2576149d1613fa6565b5b5f6149df87828801614052565b94505060206149f087828801614052565b9350506040614a0187828801614052565b9250506060614a1287828801614052565b91505092959194509250565b5f608082019050614a315f830187614182565b614a3e6020830186614383565b614a4b60408301856143c7565b614a5860608301846143c7565b95945050505050565b5f604082019050614a745f8301856143c7565b614a8160208301846143c7565b9392505050565b5f81519050614a968161403c565b92915050565b5f81519050614aaa81613fb7565b92915050565b5f5f60408385031215614ac657614ac5613fa6565b5b5f614ad385828601614a88565b9250506020614ae485828601614a9c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614b2582613fae565b9150614b3083613fae565b9250828202614b3e81613fae565b91508282048414831517614b5557614b54614aee565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614b9382613fae565b9150614b9e83613fae565b925082614bae57614bad614b5c565b5b828204905092915050565b7f4549503731323a20556e696e697469616c697a656400000000000000000000005f82015250565b5f614bed60158361454b565b9150614bf882614bb9565b602082019050919050565b5f6020820190508181035f830152614c1a81614be1565b9050919050565b5f606082019050614c345f830186614383565b614c4160208301856143c7565b614c4e60408301846143c7565b949350505050565b5f614c6082613fae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c9257614c91614aee565b5b600182019050919050565b5f60c082019050614cb05f8301896143c7565b614cbd60208301886143c7565b614cca60408301876143c7565b614cd760608301866143c7565b614ce460808301856143c7565b614cf160a0830184614383565b979650505050505050565b5f81519050614d0a816140c1565b92915050565b5f60208284031215614d2557614d24613fa6565b5b5f614d3284828501614cfc565b91505092915050565b5f606082019050614d4e5f830186614383565b614d5b6020830185614383565b614d6860408301846143c7565b949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f614d9482614d70565b614d9e8185614d7a565b9350614dae81856020860161455b565b614db7816141c0565b840191505092915050565b5f6060820190508181035f830152614dda8186614d8a565b9050614de96020830185614182565b614df66040830184614383565b949350505050565b5f60208284031215614e1357614e12613fa6565b5b5f614e2084828501614a9c565b91505092915050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f614e5f614e5a614e5584614e29565b614428565b614e32565b9050919050565b614e6f81614e45565b82525050565b5f602082019050614e885f830184614e66565b92915050565b614e9781614179565b8114614ea1575f5ffd5b50565b5f81519050614eb281614e8e565b92915050565b5f60208284031215614ecd57614ecc613fa6565b5b5f614eda84828501614ea4565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614f2757607f821691505b602082108103614f3a57614f39614ee3565b5b50919050565b5f614f4a82613fae565b9150614f5583613fae565b9250828201905080821115614f6d57614f6c614aee565b5b92915050565b5f60c082019050614f865f830189614383565b614f9360208301886143c7565b614fa060408301876143c7565b8181036060830152614fb28186614d8a565b9050614fc16080830185614182565b614fce60a0830184614383565b979650505050505050565b5f608082019050614fec5f830187614383565b614ff96020830186614383565b6150066040830185614383565b61501360608301846143c7565b95945050505050565b50565b5f61502a5f83614d7a565b91506150358261501c565b5f82019050919050565b5f60a0820190506150525f830187614383565b61505f6020830186614383565b61506c60408301856143c7565b61507960608301846143c7565b818103608083015261508a8161501f565b905095945050505050565b5f6060820190506150a85f8301866143c7565b6150b560208301856143c7565b6150c260408301846143c7565b949350505050565b5f6080820190506150dd5f8301876143c7565b6150ea6020830186614383565b6150f760408301856143c7565b61510460608301846143c7565b95945050505050565b5f6040820190506151205f8301856143c7565b61512d6020830184614383565b9392505050565b5f61513e82613fae565b915061514983613fae565b925082820390508181111561516157615160614aee565b5b92915050565b5f60c08201905061517a5f830189614383565b61518760208301886143c7565b6151946040830187614383565b6151a160608301866143c7565b6151ae6080830185614383565b6151bb60a08301846143c7565b979650505050505050565b5f6080820190506151d95f8301876143c7565b6151e66020830186614383565b6151f36040830185614383565b61520060608301846143c7565b95945050505050565b7f4661696c656420746f207472616e736665722070726f746f636f6c20726577615f8201527f7264000000000000000000000000000000000000000000000000000000000000602082015250565b5f61526360228361454b565b915061526e82615209565b604082019050919050565b5f6020820190508181035f83015261529081615257565b9050919050565b7f4661696c656420746f207472616e7366657220726f79616c74790000000000005f82015250565b5f6152cb601a8361454b565b91506152d682615297565b602082019050919050565b5f6020820190508181035f8301526152f8816152bf565b9050919050565b7f4661696c656420746f207472616e736665722073656c6c657220616d6f756e745f82015250565b5f61533360208361454b565b915061533e826152ff565b602082019050919050565b5f6020820190508181035f83015261536081615327565b9050919050565b5f60a08201905061537a5f830188614182565b6153876020830187614182565b6153946040830186614182565b6153a160608301856143c7565b6153ae6080830184614383565b9695505050505050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026154147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826153d9565b61541e86836153d9565b95508019841693508086168417925050509392505050565b5f61545061544b61544684613fae565b614428565b613fae565b9050919050565b5f819050919050565b61546983615436565b61547d61547582615457565b8484546153e5565b825550505050565b5f5f905090565b615494615485565b61549f818484615460565b505050565b5b818110156154c2576154b75f8261548c565b6001810190506154a5565b5050565b601f821115615507576154d8816153b8565b6154e1846153ca565b810160208510156154f0578190505b6155046154fc856153ca565b8301826154a4565b50505b505050565b5f82821c905092915050565b5f6155275f198460080261550c565b1980831691505092915050565b5f61553f8383615518565b9150826002028217905092915050565b61555882614541565b67ffffffffffffffff811115615571576155706141d0565b5b61557b8254614f10565b6155868282856154c6565b5f60209050601f8311600181146155b7575f84156155a5578287015190505b6155af8582615534565b865550615616565b601f1984166155c5866153b8565b5f5b828110156155ec578489015182556001820191506020850194506020810190506155c7565b868310156156095784890151615605601f891682615518565b8355505b6001600288020188555050505b505050505050565b5f60ff82169050919050565b6156338161561e565b82525050565b5f60808201905061564c5f830187614182565b615659602083018661562a565b6156666040830185614182565b6156736060830184614182565b95945050505050565b5f81905092915050565b5f61569082614d70565b61569a818561567c565b93506156aa81856020860161455b565b80840191505092915050565b5f6156c18284615686565b915081905092915050565b5f5f5f5f608085870312156156e4576156e3613fa6565b5b5f6156f187828801614a9c565b945050602061570287828801614a9c565b935050604061571387828801614a88565b925050606061572487828801614cfc565b91505092959194509250565b7f4d756c7469546f6b656e44726f704d61726b65743a204d7573742075736520555f8201527f5344432d6261636b656420537075727300000000000000000000000000000000602082015250565b5f61578a60308361454b565b915061579582615730565b604082019050919050565b5f6020820190508181035f8301526157b78161577e565b905091905056fea2646970667358221220329c23e8319c6eb008fcdda07bebea59257e42e32ca6a387f686822c1047262d64736f6c634300081c0033