292 txs
413 calls
constructor
constructor(address _vrfConsumer, uint256 _fee, address _feeRecipient, address _factoryWrapper, address _singleFactoryWrapper, address _veAeroSingleFactoryWrapper)
functions
allowedSenders
viewfunction allowedSenders(address) view returns (bool)
allowListHook
viewfunction allowListHook() view returns (address)
calculateBuyOrSell
viewfunction calculateBuyOrSell(address _pair, uint256 _nftAmount, bool _isBuy, bool _isSingleBuy) view returns (uint256 finalPrice, uint256 wrapperFee, uint256 royaltyAmount)
CANCELLATION_DELAY
viewfunction CANCELLATION_DELAY() view returns (uint256)
collectionToFeeSingle
viewfunction collectionToFeeSingle(address) view returns (uint256)
factoryWrapper
viewfunction factoryWrapper() view returns (address)
fee
viewfunction fee() view returns (uint256)
feeRecipient
viewfunction feeRecipient() view returns (address)
getBuyRequests
viewfunction getBuyRequests(address _user) view returns (tuple[] requests)
MAX_FEE
viewfunction MAX_FEE() view returns (uint256)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
singleFactoryWrapper
viewfunction singleFactoryWrapper() view returns (address)
veAeroSingleFactoryWrapper
viewfunction veAeroSingleFactoryWrapper() view returns (address)
vrfConsumer
viewfunction vrfConsumer() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
buyNFTsCallback
nonpayablefunction buyNFTsCallback(uint256 _requestId, uint256[] _randomWords)
buyRandomNFTs
nonpayablefunction buyRandomNFTs(address _pair, uint256 _nftAmount, uint256 _maxExpectedTokenInput) returns (uint256 requestId)
buySingleNFT
nonpayablefunction buySingleNFT(address _pair, uint256 _nftId, uint256 _maxExpectedTokenInput)
cancelUnfulfilledRequest
nonpayablefunction cancelUnfulfilledRequest(uint256 requestId)
onERC721Received
nonpayablefunction onERC721Received(address, address from, uint256, bytes) returns (bytes4)
renounceOwnership
nonpayablefunction renounceOwnership()
rescueTokens
nonpayablefunction rescueTokens(bool _isERC20, address _token, uint256[] _amountOrIds)
sellNFTs
nonpayablefunction sellNFTs(address _pair, uint256[] _nftIds, uint256 _minExpectedTokenOutput) returns (uint256 outputAmount)
setAllowListHook
nonpayablefunction setAllowListHook(address _newAllowListHook)
setCollectionFee
nonpayablefunction setCollectionFee(address _nft, uint256 _newFee)
setFeeConfig
nonpayablefunction setFeeConfig(uint256 _newFee, address _newFeeRecipient)
setVRFConsumer
nonpayablefunction setVRFConsumer(address _newVRFConsumer)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
AllowListHookUpdated
event AllowListHookUpdated(address newAllowListHook)
CollectionFeeUpdated
event CollectionFeeUpdated(address indexed nft, uint256 newFee)
FeeConfigUpdated
event FeeConfigUpdated(uint256 fee, address feeRecipient)
FeeTransferred
event FeeTransferred(address indexed recipient, uint256 amount, address indexed pair)
NFTsBought
event NFTsBought(address indexed pair, address indexed buyer, uint256[] nftIds, uint256 finalPrice, uint256 indexed requestId)
NFTsSold
event NFTsSold(address indexed pair, address indexed seller, uint256[] nftIds, uint256 outputAmount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Refunded
event Refunded(address indexed to, uint256 amount, address indexed pair)
RequestCancelled
event RequestCancelled(address indexed user, uint256 indexed requestId)
RequestFailed
event RequestFailed(address indexed user, uint256 indexed requestId)
RequestSubmitted
event RequestSubmitted(address indexed user, uint256 indexed requestId)
VRFConsumerUpdated
event VRFConsumerUpdated(address newVRFConsumer)
errors
No errors.
creation bytecode
0x60e06040523480156200001157600080fd5b5060405162004e2d38038062004e2d833981016040819052620000349162000227565b6200003f336200019c565b60016002556001600160a01b038616158015906200006557506001600160a01b03841615155b80156200007a57506001600160a01b03831615155b80156200008f57506001600160a01b03821615155b8015620000a457506001600160a01b03811615155b620000ea5760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642061646472657373657360781b60448201526064015b60405180910390fd5b66b1a2bc2ec50000851115620001515760405162461bcd60e51b815260206004820152602560248201527f57726170706572206665652063616e6e6f742062652067726561746572207468604482015264616e20352560d81b6064820152608401620000e1565b600380546001600160a01b03199081166001600160a01b03988916179091556005959095556006805490951693861693909317909355831660805290821660a0521660c0526200029f565b600180546001600160a01b0319169055620001b781620001ba565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200022257600080fd5b919050565b60008060008060008060c087890312156200024157600080fd5b6200024c876200020a565b95506020870151945062000263604088016200020a565b935062000273606088016200020a565b925062000283608088016200020a565b91506200029360a088016200020a565b90509295509295509295565b60805160a05160c051614b18620003156000396000818161041501528181610798015261084f0152600081816102c1015281816109060152610a1c01526000818161031a01528181611f8001528181612037015281816121c4015281816125ad0152818161312a01526132b60152614b186000f3fe6080604052600436106101c65760003560e01c806379ba5097116100f7578063cfd6aa9011610095578063e30c397811610064578063e30c397814610636578063f2fde38b14610661578063f6ea206014610681578063fadbcf48146106a157600080fd5b8063cfd6aa9014610598578063d86fd2e6146105b8578063ddca3f43146105e5578063e2796f75146105fb57600080fd5b80639de96081116100d15780639de9608114610510578063bc063e1a14610530578063bf0afe501461054b578063c3deca1f1461056b57600080fd5b806379ba5097146104b057806388ba19e6146104c55780638da5cb5b146104e557600080fd5b806346904840116101645780635d7fe94e1161013e5780635d7fe94e146104375780636468af3414610457578063715018a614610477578063762187a61461048c57600080fd5b806346904840146103b65780634aa2fd4b146103e35780635c9387b81461040357600080fd5b80631d08cbb7116101a05780631d08cbb7146103085780631ef4d1fd1461033c5780632ac03e6d1461036957806345f918f91461038957600080fd5b8063108a344c14610237578063150b7a021461025957806316ee3e0b146102af57600080fd5b36610232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f742070617961626c6500000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561024357600080fd5b506102576102523660046141e0565b6106e1565b005b34801561026557600080fd5b50610279610274366004614293565b610f36565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b3480156102bb57600080fd5b506102e37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102a6565b34801561031457600080fd5b506102e37f000000000000000000000000000000000000000000000000000000000000000081565b34801561034857600080fd5b506003546102e39073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037557600080fd5b50610257610384366004614375565b610fef565b34801561039557600080fd5b506103a96103a4366004614375565b6110ee565b6040516102a691906143d4565b3480156103c257600080fd5b506006546102e39073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ef57600080fd5b506102576103fe3660046144b6565b611300565b34801561040f57600080fd5b506102e37f000000000000000000000000000000000000000000000000000000000000000081565b34801561044357600080fd5b5061025761045236600461452e565b61145c565b34801561046357600080fd5b5061025761047236600461457a565b611c5f565b34801561048357600080fd5b50610257611e01565b34801561049857600080fd5b506104a261012c81565b6040519081526020016102a6565b3480156104bc57600080fd5b50610257611e15565b3480156104d157600080fd5b506104a26104e03660046145aa565b611eca565b3480156104f157600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166102e3565b34801561051c57600080fd5b5061025761052b366004614614565b6126cb565b34801561053c57600080fd5b506104a266b1a2bc2ec5000081565b34801561055757600080fd5b50610257610566366004614679565b61296b565b34801561057757600080fd5b506004546102e39073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105a457600080fd5b506102576105b3366004614375565b612c15565b3480156105c457600080fd5b506104a26105d3366004614375565b60076020526000908152604090205481565b3480156105f157600080fd5b506104a260055481565b34801561060757600080fd5b5061061b610616366004614692565b612d0d565b604080519384526020840192909252908201526060016102a6565b34801561064257600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff166102e3565b34801561066d57600080fd5b5061025761067c366004614375565b612fc4565b34801561068d57600080fd5b506104a261069c3660046141e0565b613074565b3480156106ad57600080fd5b506106d16106bc366004614375565b600a6020526000908152604090205460ff1681565b60405190151581526020016102a6565b600280540361074c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610229565b600280556040517fe5e31b1300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e5e31b1390602401602060405180830381865afa1580156107e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080591906146e5565b156108c1576040517fdbed1e8800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063dbed1e8890602401602060405180830381865afa158015610896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ba9190614702565b9050610a8a565b6040517fe5e31b1300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e5e31b1390602401602060405180830381865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097191906146e5565b6109d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f7420612073696e676c652d617373657420706169720000000000000000006044820152606401610229565b6040517fdbed1e8800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063dbed1e8890602401602060405180830381865afa158015610a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a879190614702565b90505b60008211610af4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f496e76616c6964205f6d61784578706563746564546f6b656e496e70757400006044820152606401610229565b80421080610b00575080155b610bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f43616e206f6e6c7920627579206265666f7265207061697220697320756e6c6f908201527f636b6564206f722066726f6d20696e697469616c6c7920756e6c6f636b65642060648201527f7061697200000000000000000000000000000000000000000000000000000000608482015260a401610229565b600080610bc4866001806001612d0d565b509150915081841015610c33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f496e73756666696369656e742066756e647320746f20627579204e46540000006044820152606401610229565b600086905060008173ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca9919061471b565b60408051600180825281830190925291925060009190602080830190803683370190505090508781600081518110610ce357610ce3614738565b6020908102919091010152610d1073ffffffffffffffffffffffffffffffffffffffff831633308a613a3a565b610d3173ffffffffffffffffffffffffffffffffffffffff83168a89613af9565b6000610d3d8589614796565b73ffffffffffffffffffffffffffffffffffffffff808c166000908152600a602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f6d8b99f70000000000000000000000000000000000000000000000000000000081529293509190861690636d8b99f790610dd590869086903090879082906004016147a9565b6020604051808303816000875af1158015610df4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e189190614702565b73ffffffffffffffffffffffffffffffffffffffff8c166000908152600a6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055909150610e77903090339088908790613bb2565b600654610e9d9073ffffffffffffffffffffffffffffffffffffffff1687876000613d9b565b81811015610ebb57610ebb33610eb38385614796565b876000613d9b565b60003373ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fac8224ca3190239213ed3924f2424a0903e6ccab69c947c39851aab300185d59868b604051610f1c9291906147f8565b60405180910390a450506001600255505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600a602052604081205460ff16610fc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5472616e73666572206e6f7420616c6c6f7765640000000000000000000000006044820152606401610229565b507f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b610ff7613f1c565b73ffffffffffffffffffffffffffffffffffffffff8116611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152606401610229565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f50eed5d17c3958132639d1eb8d255302fa6abf78793e21b42c31734c3099efd0906020015b60405180910390a150565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260086020526040902080546060919067ffffffffffffffff81111561113157611131614215565b6040519080825280602002602001820160405280156111d057816020015b6111bd6040518060e00160405280600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001606081525090565b81526020019060019003908161114f5790505b50915060005b81548110156112f9576000600960008484815481106111f7576111f7614738565b600091825260208083209091015483528281019390935260409182019020815160e081018352815460ff81161515825273ffffffffffffffffffffffffffffffffffffffff610100909104811682860152600183015416818401526002820154606082015260038201546080820152600482015460a0820152600582018054845181870281018701909552808552929550909360c085019392908301828280156112c057602002820191906000526020600020905b8154815260200190600101908083116112ac575b50505050508152508483815181106112da576112da614738565b60200260200101819052505080806112f19061481a565b9150506111d6565b5050919050565b611308613f1c565b73ffffffffffffffffffffffffffffffffffffffff8216611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152606401610229565b66b1a2bc2ec500008111156113f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f466565206d757374206265206c657373207468616e20352500000000000000006044820152606401610229565b73ffffffffffffffffffffffffffffffffffffffff821660008181526007602052604090819020839055517f58588ce3cc3e3a79fabf58f2c4fcd6da5882fa2484373b312c6892dd14696f4b906114509084815260200190565b60405180910390a25050565b60028054036114c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610229565b6002805560035473ffffffffffffffffffffffffffffffffffffffff163314611572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4f6e6c792074686520565246436f6e73756d65722063616e2063616c6c20746860448201527f69732066756e6374696f6e0000000000000000000000000000000000000000006064820152608401610229565b60008381526009602052604090208054600582015461010090910473ffffffffffffffffffffffffffffffffffffffff16901515806115b25750815460ff165b1561160157604051859073ffffffffffffffffffffffffffffffffffffffff8316907f46ebe0af49f89024c3b8027ab0ce86868a711518de91039dc27e914904f9045790600090a35050611c55565b6001820154604080517faaa44e5c000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921691600091839163aaa44e5c9160048082019286929091908290030181865afa158015611677573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116bd9190810190614852565b90508051846002015411806116d55750600284015485105b156117645783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811785556003850154611718918591908590613d9b565b604051879073ffffffffffffffffffffffffffffffffffffffff8516907f46ebe0af49f89024c3b8027ab0ce86868a711518de91039dc27e914904f9045790600090a350505050611c55565b600180850154600286015460009283926117979273ffffffffffffffffffffffffffffffffffffffff9091169184612d0d565b509150915081866003015410156118345785547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117875560038701546117e6918791908790613d9b565b604051899073ffffffffffffffffffffffffffffffffffffffff8716907f46ebe0af49f89024c3b8027ab0ce86868a711518de91039dc27e914904f9045790600090a3505050505050611c55565b60008187600301546118469190614796565b90506000876002015467ffffffffffffffff81111561186757611867614215565b604051908082528060200260200182016040528015611890578160200160208202803683370190505b50855190915060005b896002015481101561195a576000828d8d848181106118ba576118ba614738565b905060200201356118cb91906148f8565b90508781815181106118df576118df614738565b60200260200101518483815181106118f9576118f9614738565b60209081029190910101528261190e81614933565b9350508281146119515787838151811061192a5761192a614738565b602002602001015188828151811061194457611944614738565b6020026020010181815250505b50600101611899565b5060018981015473ffffffffffffffffffffffffffffffffffffffff9081166000908152600a602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690941790935591517f6d8b99f700000000000000000000000000000000000000000000000000000000815290891691636d8b99f7916119f59186918891309182906004016147a9565b6020604051808303816000875af1925050508015611a4e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611a4b91810190614702565b60015b611b10576001808a015473ffffffffffffffffffffffffffffffffffffffff166000908152600a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009081169091558a541681178a5560038a0154611abf918a91908a90613d9b565b6040518c9073ffffffffffffffffffffffffffffffffffffffff8a16907f46ebe0af49f89024c3b8027ab0ce86868a711518de91039dc27e914904f9045790600090a3505050505050505050611c55565b60018a015473ffffffffffffffffffffffffffffffffffffffff166000908152600a6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055611b709030908b908b908790613bb2565b600654611b969073ffffffffffffffffffffffffffffffffffffffff16868a6000613d9b565b83811015611bd1578954611bd190610100900473ffffffffffffffffffffffffffffffffffffffff16611bc98387614796565b8a6000613d9b565b508151611be79060058b0190602085019061415e565b50885460018a01546040518e9273ffffffffffffffffffffffffffffffffffffffff61010090910481169216907fac8224ca3190239213ed3924f2424a0903e6ccab69c947c39851aab300185d5990611c439087908b906147f8565b60405180910390a45050505050505050505b5050600160025550565b611c67613f1c565b66b1a2bc2ec50000821115611cfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4164646974696f6e616c20666565206d757374206265206c657373207468616e60448201527f20352500000000000000000000000000000000000000000000000000000000006064820152608401610229565b73ffffffffffffffffffffffffffffffffffffffff8116611d7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152606401610229565b6005829055600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040805184815260208101929092527fe125ae54d7ba2b06e6f44852861516acb2dd2692cf41fb127fa03252f15b334e910160405180910390a15050565b611e09613f1c565b611e136000613f9d565b565b600154339073ffffffffffffffffffffffffffffffffffffffff168114611ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152608401610229565b611ec781613f9d565b50565b60006002805403611f37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610229565b600280556040517fe5e31b1300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e5e31b1390602401602060405180830381865afa158015611fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611feb91906146e5565b80156120a457506040517fe1a304e700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e1a304e790602401602060405180830381865afa15801561207e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a291906146e5565b155b61210a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d75737420626520612076616c6964206e6f6e2d72616e646f6d2070616972006044820152606401610229565b82158015906121195750600082115b61217f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c696420696e707574000000000000000000000000000000000000006044820152606401610229565b6040517fdbed1e8800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063dbed1e8890602401602060405180830381865afa15801561220b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222f9190614702565b42106122bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f43616e206f6e6c792073656c6c206265666f7265207061697220697320756e6c60448201527f6f636b65640000000000000000000000000000000000000000000000000000006064820152608401610229565b8460008173ffffffffffffffffffffffffffffffffffffffff1663b1dd61b66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561230b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232f9190614997565b600281111561234057612340614968565b146123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616972206973206e6f7420612062757920706f6f6c000000000000000000006044820152606401610229565b6123e933308388888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525060019250613bb2915050565b73ffffffffffffffffffffffffffffffffffffffff8087166000908152600a602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fb1d3f1c1000000000000000000000000000000000000000000000000000000008152909183169063b1d3f1c19061248090899089908990309088908290600401614a03565b6020604051808303816000875af115801561249f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c39190614702565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600a6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590915061251d88878380612d0d565b50915061252c90508183614796565b6006549094506125559073ffffffffffffffffffffffffffffffffffffffff1682856000613d9b565b6125623385856000613d9b565b6040517f0cdae8a800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301526126529130917f00000000000000000000000000000000000000000000000000000000000000001690630cdae8a890602401602060405180830381865afa1580156125f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612618919061471b565b858a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509250613bb2915050565b3373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f8df60af6be8fe38dab6f8c7d8b025c131ea0e7b9ee1affdfb61a2acb21e471278989886040516126b393929190614a54565b60405180910390a35050600160025550949350505050565b6126d3613f1c565b73ffffffffffffffffffffffffffffffffffffffff8316612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c696420746f6b656e000000000000000000000000000000000000006044820152606401610229565b83156128225760008282600081811061276b5761276b614738565b90506020020135116127d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c696420696e707574000000000000000000000000000000000000006044820152606401610229565b61281d33838360008181106127f0576127f0614738565b905060200201358573ffffffffffffffffffffffffffffffffffffffff16613fce9092919063ffffffff16565b612965565b80612889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c696420696e707574000000000000000000000000000000000000006044820152606401610229565b60005b81811015612963578373ffffffffffffffffffffffffffffffffffffffff166323b872dd30338686868181106128c4576128c4614738565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561294057600080fd5b505af1158015612954573d6000803e3d6000fd5b5050505080600101905061288c565b505b50505050565b60028054036129d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610229565b6002805560008181526009602052604090208054610100900473ffffffffffffffffffffffffffffffffffffffff163314612a6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e6f7420796f75722072657175657374000000000000000000000000000000006044820152606401610229565b805460ff16158015612a8157506005810154155b612b0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f5265717565737420616c72656164792066756c66696c6c6564206f722063616e60448201527f63656c6c656400000000000000000000000000000000000000000000000000006064820152608401610229565b61012c8160040154612b1f9190614a78565b421015612b88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f57616974206265666f72652063616e63656c6c696e67000000000000000000006044820152606401610229565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081178255600382015482820154612bdf9233929173ffffffffffffffffffffffffffffffffffffffff1690613d9b565b604051829033907f1bdb4261b8cc605afbfe72b63a1f1f08ab6eb83dce866bdbed9ba6fc9c74d00490600090a350506001600255565b612c1d613f1c565b73ffffffffffffffffffffffffffffffffffffffff8116612c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152606401610229565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f4f3e6f07dad6bec012f6e3f2812f7fa90c5c17477bc3222c6b9f2296906a220c906020016110e3565b60008080868515612ece576040517f1afd78c500000000000000000000000000000000000000000000000000000000815260016004820152602481018890526000908190819073ffffffffffffffffffffffffffffffffffffffff851690631afd78c59060440160c060405180830381865afa158015612d91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db59190614a8b565b9550955095505050506000818385612dcd9190614796565b612dd79190614796565b9050600060055490506000600760008873ffffffffffffffffffffffffffffffffffffffff166347ccca026040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e55919061471b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508a8015612e9f5750600081115b15612ea8578091505b612eb28383614087565b9850612ebe8987614a78565b9950839750505050505050612fb9565b6040517f33b24a3a00000000000000000000000000000000000000000000000000000000815260016004820152602481018890526000908190819073ffffffffffffffffffffffffffffffffffffffff8516906333b24a3a9060440160c060405180830381865afa158015612f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6b9190614a8b565b9550955095505050506000818385612f839190614a78565b612f8d9190614a78565b9050612fa46005548261408790919063ffffffff16565b9650612fb08785614796565b97509094505050505b509450945094915050565b612fcc613f1c565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561302f60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600060028054036130e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610229565b600280556040517fe1a304e700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e1a304e790602401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319591906146e5565b6131fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f50616972206973206e6f7420612072616e646f6d2070616972000000000000006044820152606401610229565b60008311801561320b5750600082115b613271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f496e76616c696420616d6f756e747300000000000000000000000000000000006044820152606401610229565b6040517fdbed1e8800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063dbed1e8890602401602060405180830381865afa1580156132fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133219190614702565b42106133ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f43616e206f6e6c7920627579206265666f7265207061697220697320756e6c6f60448201527f636b6564000000000000000000000000000000000000000000000000000000006064820152608401610229565b3360009081526008602090815260408083208054825181850281018501909352808352919290919083018282801561340557602002820191906000526020600020905b8154815260200190600101908083116133f1575b5050505050905060008151111561350657600081600183516134279190614796565b8151811061343757613437614738565b6020026020010151905060096000828152602001908152602001600020600501805490506000141580613478575060008181526009602052604090205460ff165b613504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f557365722068617320616e20756e66756c66696c6c656420627579207265717560448201527f657374207768696368206973206e6f742063616e63656c6c65640000000000006064820152608401610229565b505b60008590508073ffffffffffffffffffffffffffffffffffffffff1663aaa44e5c6040518163ffffffff1660e01b8152600401600060405180830381865afa158015613556573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261359c9190810190614852565b51851115613606576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7420656e6f756768204e46547300000000000000000000000000000000006044820152606401610229565b6000613616878760016000612d0d565b5050905080851015613684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f20627579204e46547300006044820152606401610229565b60008273ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f5919061471b565b905061371973ffffffffffffffffffffffffffffffffffffffff8216333089613a3a565b6137aa88878573ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061378d919061471b565b73ffffffffffffffffffffffffffffffffffffffff169190613af9565b6003546040517fe726f2e100000000000000000000000000000000000000000000000000000000815263ffffffff8916600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e726f2e1906024016020604051808303816000875af1158015613820573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138449190614702565b94506040518060e001604052806000151581526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff168152602001888152602001878152602001428152602001600067ffffffffffffffff8111156138be576138be614215565b6040519080825280602002602001820160405280156138e7578160200160208202803683370190505b50905260008681526009602090815260409182902083518154858401517fffffffffffffffffffffff0000000000000000000000000000000000000000009091169115157fffffffffffffffffffffff0000000000000000000000000000000000000000ff169190911761010073ffffffffffffffffffffffffffffffffffffffff92831602178255928401516001820180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190941617909255606083015160028301556080830151600383015560a0830151600483015560c083015180516139d9926005850192019061415e565b50503360008181526008602090815260408083208054600181018255908452918320909101899055518893507f82f70092e3775aae27ccfd7a1699040c0d3e7a2d8c0a3434285163fc228dc6e09190a3505060016002555090949350505050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080612963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610229565b60006040517f095ea7b3000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f415050524f56455f4641494c45440000000000000000000000000000000000006044820152606401610229565b60008373ffffffffffffffffffffffffffffffffffffffff166347ccca026040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c23919061471b565b905060005b8351811015613d03578173ffffffffffffffffffffffffffffffffffffffff166323b872dd8888878581518110613c6157613c61614738565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015613ce057600080fd5b505af1158015613cf4573d6000803e3d6000fd5b50505050806001019050613c28565b508115613d93576040517fa22cb46500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526001602483015282169063a22cb46590604401600060405180830381600087803b158015613d7a57600080fd5b505af1158015613d8e573d6000803e3d6000fd5b505050505b505050505050565b60008273ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e0c919061471b565b9050613e2f73ffffffffffffffffffffffffffffffffffffffff82168686613fce565b8115613ea1578273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fb44b3631755227290f8fbd7b248fa4be405129d15351313e3c332a3fb991941786604051613e9491815260200190565b60405180910390a3612963565b60065473ffffffffffffffffffffffffffffffffffffffff908116908616036129635760065460405185815273ffffffffffffffffffffffffffffffffffffffff8581169216907fd52250dfc6eb77b7820776d8bdc107715bf1dd34767f2759ef9ad1630865d49a9060200160405180910390a35050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611e13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610229565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055611ec7816140a5565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610229565b600061409c8383670de0b6b3a764000061411a565b90505b92915050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048411830215820261414f57600080fd5b50910281810615159190040190565b828054828255906000526020600020908101928215614199579160200282015b8281111561419957825182559160200191906001019061417e565b506141a59291506141a9565b5090565b5b808211156141a557600081556001016141aa565b73ffffffffffffffffffffffffffffffffffffffff81168114611ec757600080fd5b6000806000606084860312156141f557600080fd5b8335614200816141be565b95602085013595506040909401359392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561428b5761428b614215565b604052919050565b600080600080608085870312156142a957600080fd5b84356142b4816141be565b93506020858101356142c5816141be565b935060408601359250606086013567ffffffffffffffff808211156142e957600080fd5b818801915088601f8301126142fd57600080fd5b81358181111561430f5761430f614215565b61433f847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614244565b9150808252898482850101111561435557600080fd5b808484018584013760008482840101525080935050505092959194509250565b60006020828403121561438757600080fd5b8135614392816141be565b9392505050565b600081518084526020808501945080840160005b838110156143c9578151875295820195908201906001016143ad565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156144a8578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc001855281518051151584528781015173ffffffffffffffffffffffffffffffffffffffff90811689860152878201511687850152606080820151908501526080808201519085015260a0808201519085015260c09081015160e09185018290529061449481860183614399565b9689019694505050908601906001016143fb565b509098975050505050505050565b600080604083850312156144c957600080fd5b82356144d4816141be565b946020939093013593505050565b60008083601f8401126144f457600080fd5b50813567ffffffffffffffff81111561450c57600080fd5b6020830191508360208260051b850101111561452757600080fd5b9250929050565b60008060006040848603121561454357600080fd5b83359250602084013567ffffffffffffffff81111561456157600080fd5b61456d868287016144e2565b9497909650939450505050565b6000806040838503121561458d57600080fd5b82359150602083013561459f816141be565b809150509250929050565b600080600080606085870312156145c057600080fd5b84356145cb816141be565b9350602085013567ffffffffffffffff8111156145e757600080fd5b6145f3878288016144e2565b9598909750949560400135949350505050565b8015158114611ec757600080fd5b6000806000806060858703121561462a57600080fd5b843561463581614606565b93506020850135614645816141be565b9250604085013567ffffffffffffffff81111561466157600080fd5b61466d878288016144e2565b95989497509550505050565b60006020828403121561468b57600080fd5b5035919050565b600080600080608085870312156146a857600080fd5b84356146b3816141be565b93506020850135925060408501356146ca81614606565b915060608501356146da81614606565b939692955090935050565b6000602082840312156146f757600080fd5b815161439281614606565b60006020828403121561471457600080fd5b5051919050565b60006020828403121561472d57600080fd5b8151614392816141be565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561409f5761409f614767565b60a0815260006147bc60a0830188614399565b60208301969096525073ffffffffffffffffffffffffffffffffffffffff93841660408201529115156060830152909116608090910152919050565b60408152600061480b6040830185614399565b90508260208301529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361484b5761484b614767565b5060010190565b6000602080838503121561486557600080fd5b825167ffffffffffffffff8082111561487d57600080fd5b818501915085601f83011261489157600080fd5b8151818111156148a3576148a3614215565b8060051b91506148b4848301614244565b81815291830184019184810190888411156148ce57600080fd5b938501935b838510156148ec578451825293850193908501906148d3565b98975050505050505050565b60008261492e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b60008161494257614942614767565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156149a957600080fd5b81516003811061439257600080fd5b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156149ea57600080fd5b8260051b80836020870137939093016020019392505050565b60a081526000614a1760a08301888a6149b8565b60208301969096525073ffffffffffffffffffffffffffffffffffffffff9384166040820152911515606083015290911660809091015292915050565b604081526000614a686040830185876149b8565b9050826020830152949350505050565b8082018082111561409f5761409f614767565b60008060008060008060c08789031215614aa457600080fd5b865160058110614ab357600080fd5b6020880151604089015160608a015160808b015160a0909b0151939c929b50909990985096509094509250505056fea2646970667358221220c6b44f1e816dcf4ef7a746b29765ccbcabe19fbbff89cd0fac567a05a84aa72264736f6c634300081400330000000000000000000000000af5346ea7fc30d1c19626fc8ad7a73c9b7c47270000000000000000000000000000000000000000000000000031bced02db0000000000000000000000000000b720da1307d62e6c55ff30568657db753e5af11b00000000000000000000000013918a541e129a7ef210183e5e9c54486da3fb040000000000000000000000008e4ecbc8ecae876d61efeb17dbf908e6acb796f000000000000000000000000036a7ef78afb3d517fda1e091fff29c451465e035