4 txs
7 calls
constructor
constructor(address _collateral, address _ctf, address _proxyFactory, address _safeFactory)
functions
admins
viewfunction admins(address) view returns (uint256)
domainSeparator
viewfunction domainSeparator() view returns (bytes32)
getCollateral
viewfunction getCollateral() view returns (address)
getComplement
viewfunction getComplement(uint256 token) view returns (uint256)
getConditionId
viewfunction getConditionId(uint256 token) view returns (bytes32)
getCtf
viewfunction getCtf() view returns (address)
getMaxFeeRate
purefunction getMaxFeeRate() pure returns (uint256)
getOrderStatus
viewfunction getOrderStatus(bytes32 orderHash) view returns (tuple)
getPolyProxyFactoryImplementation
viewfunction getPolyProxyFactoryImplementation() view returns (address)
getPolyProxyWalletAddress
viewfunction getPolyProxyWalletAddress(address _addr) view returns (address)
getProxyFactory
viewfunction getProxyFactory() view returns (address)
getSafeAddress
viewfunction getSafeAddress(address _addr) view returns (address)
getSafeFactory
viewfunction getSafeFactory() view returns (address)
getSafeFactoryImplementation
viewfunction getSafeFactoryImplementation() view returns (address)
hashOrder
viewfunction hashOrder(tuple order) view returns (bytes32)
isAdmin
viewfunction isAdmin(address usr) view returns (bool)
isOperator
viewfunction isOperator(address usr) view returns (bool)
isValidNonce
viewfunction isValidNonce(address usr, uint256 nonce) view returns (bool)
nonces
viewfunction nonces(address) view returns (uint256)
operators
viewfunction operators(address) view returns (uint256)
orderStatus
viewfunction orderStatus(bytes32) view returns (bool isFilledOrCancelled, uint256 remaining)
parentCollectionId
viewfunction parentCollectionId() view returns (bytes32)
paused
viewfunction paused() view returns (bool)
proxyFactory
viewfunction proxyFactory() view returns (address)
registry
viewfunction registry(uint256) view returns (uint256 complement, bytes32 conditionId)
safeFactory
viewfunction safeFactory() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
validateComplement
viewfunction validateComplement(uint256 token, uint256 complement) view
validateOrder
viewfunction validateOrder(tuple order) view
validateOrderSignature
viewfunction validateOrderSignature(bytes32 orderHash, tuple order) view
validateTokenId
viewfunction validateTokenId(uint256 tokenId) view
addAdmin
nonpayablefunction addAdmin(address admin_)
addOperator
nonpayablefunction addOperator(address operator_)
cancelOrder
nonpayablefunction cancelOrder(tuple order)
cancelOrders
nonpayablefunction cancelOrders(tuple[] orders)
fillOrder
nonpayablefunction fillOrder(tuple order, uint256 fillAmount)
fillOrders
nonpayablefunction fillOrders(tuple[] orders, uint256[] fillAmounts)
incrementNonce
nonpayablefunction incrementNonce()
matchOrders
nonpayablefunction matchOrders(tuple takerOrder, tuple[] makerOrders, uint256 takerFillAmount, uint256[] makerFillAmounts)
onERC1155BatchReceived
nonpayablefunction onERC1155BatchReceived(address, address, uint256[], uint256[], bytes) returns (bytes4)
onERC1155Received
nonpayablefunction onERC1155Received(address, address, uint256, uint256, bytes) returns (bytes4)
pauseTrading
nonpayablefunction pauseTrading()
registerToken
nonpayablefunction registerToken(uint256 token, uint256 complement, bytes32 conditionId)
removeAdmin
nonpayablefunction removeAdmin(address admin)
removeOperator
nonpayablefunction removeOperator(address operator)
renounceAdminRole
nonpayablefunction renounceAdminRole()
renounceOperatorRole
nonpayablefunction renounceOperatorRole()
setProxyFactory
nonpayablefunction setProxyFactory(address _newProxyFactory)
setSafeFactory
nonpayablefunction setSafeFactory(address _newSafeFactory)
unpauseTrading
nonpayablefunction unpauseTrading()
events
FeeCharged
event FeeCharged(address indexed receiver, uint256 tokenId, uint256 amount)
NewAdmin
event NewAdmin(address indexed newAdminAddress, address indexed admin)
NewOperator
event NewOperator(address indexed newOperatorAddress, address indexed admin)
OrderCancelled
event OrderCancelled(bytes32 indexed orderHash)
OrderFilled
event OrderFilled(bytes32 indexed orderHash, address indexed maker, address indexed taker, uint256 makerAssetId, uint256 takerAssetId, uint256 makerAmountFilled, uint256 takerAmountFilled, uint256 fee)
OrdersMatched
event OrdersMatched(bytes32 indexed takerOrderHash, address indexed takerOrderMaker, uint256 makerAssetId, uint256 takerAssetId, uint256 makerAmountFilled, uint256 takerAmountFilled)
ProxyFactoryUpdated
event ProxyFactoryUpdated(address indexed oldProxyFactory, address indexed newProxyFactory)
RemovedAdmin
event RemovedAdmin(address indexed removedAdmin, address indexed admin)
RemovedOperator
event RemovedOperator(address indexed removedOperator, address indexed admin)
SafeFactoryUpdated
event SafeFactoryUpdated(address indexed oldSafeFactory, address indexed newSafeFactory)
TokenRegistered
event TokenRegistered(uint256 indexed token0, uint256 indexed token1, bytes32 indexed conditionId)
TradingPaused
event TradingPaused(address indexed pauser)
TradingUnpaused
event TradingUnpaused(address indexed pauser)
errors
AlreadyRegistered
error AlreadyRegistered()
FeeTooHigh
error FeeTooHigh()
InvalidComplement
error InvalidComplement()
InvalidNonce
error InvalidNonce()
InvalidSignature
error InvalidSignature()
InvalidTokenId
error InvalidTokenId()
MakingGtRemaining
error MakingGtRemaining()
MismatchedTokenIds
error MismatchedTokenIds()
NotAdmin
error NotAdmin()
NotCrossing
error NotCrossing()
NotOperator
error NotOperator()
NotOwner
error NotOwner()
NotTaker
error NotTaker()
OrderExpired
error OrderExpired()
OrderFilledOrCancelled
error OrderFilledOrCancelled()
Paused
error Paused()
TooLittleTokensReceived
error TooLittleTokensReceived()
creation bytecode
0x6101a060405260016000556003805460ff191690553480156200002157600080fd5b5060405162003c3538038062003c358339810160408190526200004491620002d6565b604080518082018252601481527f4d65746177696e204354462045786368616e67650000000000000000000000006020808301918252835180850185526001808252603160f81b82840190815233600090815282855287812083905560028552879020919091558451909320815190932060e08490526101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a0188905260608201859052608082019390935230818301528851808203909201825260c0019097528651969093019590952087958795879587959194938d938d9387938793909291906080523060c05261012052505050506001600160a01b0382811661014081905290821661016081905260405163095ea7b360e01b81526004810191909152600019602482015263095ea7b3906044016020604051808303816000875af1158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000333565b50620001dd91505062000265565b610180525050600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055506200035e945050505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600060c0516001600160a01b0316306001600160a01b03161480156200028c575060a05146145b1562000299575060805190565b620002b46101205160e051610100516200021c60201b60201c565b905090565b80516001600160a01b0381168114620002d157600080fd5b919050565b60008060008060808587031215620002ed57600080fd5b620002f885620002b9565b93506200030860208601620002b9565b92506200031860408601620002b9565b91506200032860608601620002b9565b905092959194509250565b6000602082840312156200034657600080fd5b815180151581146200035757600080fd5b9392505050565b60805160a05160c05160e051610100516101205161014051610160516101805161382e62000407600039600061079e01526000818161043401528181611e810152818161205501528181612b5e0152612c6901526000818161055701528181611df20152818161200a01528181612b8d0152612c9801526000611ab301526000611b0201526000611add01526000611a3601526000611a6001526000611a8a015261382e6000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80637048027511610182578063d798eff6116100e9578063e60f0c05116100a2578063f698da251161007c578063f698da2514610799578063fa950b48146107c0578063fbddd751146107d3578063fe729aaf146107e657600080fd5b8063e60f0c0514610754578063edef7d8e14610767578063f23a6e611461077a57600080fd5b8063d798eff6146106dd578063d7fb272f146106f0578063d82da83814610713578063e03ac3d014610726578063e2eec4051461072e578063e50e4f971461074157600080fd5b8063a287bdf11161013b578063a287bdf114610654578063a6dfcf8614610667578063ac8a584a1461067a578063b28c51c01461068d578063bc197c811461069e578063c10f1a75146106ca57600080fd5b806370480275146105e257806375d7370a146105f55780637ecebe001461060657806383b8a5ae146106265780639870d7fe1461062e578063a10f3dce1461064157600080fd5b8063429b62e5116102415780635893253c116101fa578063627cdcb9116101d4578063627cdcb914610588578063654f0ce41461059057806368c7450f146105a35780636d70f7ae146105b657600080fd5b80635893253c146105195780635c1548fb146105555780635c975abb1461057b57600080fd5b8063429b62e51461046057806344bea37e146104805780634544f05514610488578063456068d21461049b57806346423aa7146104a35780634a2a11f51461051157600080fd5b80631785f53c116102935780631785f53c1461039b57806324d7806c146103ae5780632dff692d146103db578063346009011461041f5780633b521d78146104325780633d6d35981461045857600080fd5b806301ffc9a7146102db5780630647ee201461030357806306b9d691146103305780631031e36e14610350578063131e7e1c1461035a57806313e7c9d81461036d575b600080fd5b6102ee6102e9366004612cbc565b6107f9565b60405190151581526020015b60405180910390f35b6102ee610311366004612d0b565b6001600160a01b03919091166000908152600460205260409020541490565b610338610830565b6040516001600160a01b0390911681526020016102fa565b6103586108a3565b005b600754610338906001600160a01b031681565b61038d61037b366004612d37565b60026020526000908152604090205481565b6040519081526020016102fa565b6103586103a9366004612d37565b6108de565b6102ee6103bc366004612d37565b6001600160a01b03166000908152600160208190526040909120541490565b6104086103e9366004612d54565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016102fa565b61035861042d366004612d54565b610955565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b610358610986565b61038d61046e366004612d37565b60016020526000908152604090205481565b61038d600081565b610358610496366004612d37565b6109f1565b610358610a2b565b6104f46104b1366004612d54565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805460ff1615158352600101549082015290565b6040805182511515815260209283015192810192909252016102fa565b6103e861038d565b610540610527366004612d54565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016102fa565b7f0000000000000000000000000000000000000000000000000000000000000000610338565b6003546102ee9060ff1681565b610358610a64565b61035861059e366004612f54565b610a6e565b6103586105b1366004612f88565b610a89565b6102ee6105c4366004612d37565b6001600160a01b031660009081526002602052604090205460011490565b6103586105f0366004612d37565b610aca565b6007546001600160a01b0316610338565b61038d610614366004612d37565b60046020526000908152604090205481565b610358610b44565b61035861063c366004612d37565b610bb0565b61038d61064f366004612d54565b610c28565b610338610662366004612d37565b610c46565b610358610675366004612f54565b610c65565b610358610688366004612d37565b610c6e565b6006546001600160a01b0316610338565b6106b16106ac366004613042565b610ce5565b6040516001600160e01b031990911681526020016102fa565b600654610338906001600160a01b031681565b6103586106eb36600461316e565b610cf7565b61038d6106fe366004612d54565b60009081526005602052604090206001015490565b6103586107213660046131d1565b610d8f565b610338610db7565b61035861073c3660046131f3565b610e01565b61038d61074f366004612f54565b610e3d565b61035861076236600461322f565b610eda565b610338610775366004612d37565b610f6c565b6106b16107883660046132c0565b63f23a6e6160e01b95945050505050565b61038d7f000000000000000000000000000000000000000000000000000000000000000081565b6103586107ce366004613328565b610f8b565b6103586107e1366004612d37565b610fc2565b6103586107f436600461335c565b610ffc565b60006001600160e01b03198216630271189760e51b148061082a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546040805163557887a160e11b815290516000926001600160a01b03169163aaf10f429160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e91906133a0565b905090565b33600090815260016020819052604090912054146108d457604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611082565b565b336000908152600160208190526040909120541461090f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220829055513392917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b6000818152600560205260408120549003610983576040516307ed98ed60e31b815260040160405180910390fd5b50565b336000908152600260205260409020546001146109b657604051631f0853c160e21b815260040160405180910390fd5b336000818152600260205260408082208290555182917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a3565b3360009081526001602081905260409091205414610a2257604051637bfa4b9f60e01b815260040160405180910390fd5b610983816110bc565b3360009081526001602081905260409091205414610a5c57604051637bfa4b9f60e01b815260040160405180910390fd5b6108dc611118565b6108dc600161114f565b6000610a7982610e3d565b9050610a85818361117d565b5050565b3360009081526001602081905260409091205414610aba57604051637bfa4b9f60e01b815260040160405180910390fd5b610ac583838361126b565b505050565b3360009081526001602081905260409091205414610afb57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020819052604080832091909155513392917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b3360009081526001602081905260409091205414610b7557604051637bfa4b9f60e01b815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b3360009081526001602081905260409091205414610be157604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03811660008181526002602052604080822060019055513392917ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c91a350565b6000610c3382610955565b5060009081526005602052604090205490565b600061082a82610c54610db7565b6007546001600160a01b0316611395565b610983816113f9565b3360009081526001602081905260409091205414610c9f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260026020526040808220829055513392917ff7262ed0443cc211121ceb1a80d69004f319245615a7488f951f1437fd91642c91a350565b63bc197c8160e01b5b95945050505050565b600054600203610d225760405162461bcd60e51b8152600401610d19906133bd565b60405180910390fd5b600260008181553381526020919091526040902054600114610d5757604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610d7b576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336114a1565b50506001600055565b80610d9983610c28565b14610a855760405163337c310560e11b815260040160405180910390fd5b6007546040805163530ca43760e11b815290516000926001600160a01b03169163a619486e9160048083019260209291908290030181865afa15801561087a573d6000803e3d6000fd5b610e2081604001518260200151848461018001518561016001516114fa565b610a8557604051638baa579f60e01b815260040160405180910390fd5b600061082a7fa852566c4e14d00869b6db0220888a9090a13eccdaea03713ff0a3d27bf9767c836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d61014001518e6101600151604051602001610ebf9d9c9b9a9998979695949392919061340b565b60405160208183030381529060405280519060200120611558565b600054600203610efc5760405162461bcd60e51b8152600401610d19906133bd565b600260008181553381526020919091526040902054600114610f3157604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615610f55576040516313d0ff5960e31b815260040160405180910390fd5b610f61848484846115a6565b505060016000555050565b600061082a82610f7a610830565b6006546001600160a01b0316611743565b805160005b81811015610ac557610fba838281518110610fad57610fad61349d565b60200260200101516113f9565b600101610f90565b3360009081526001602081905260409091205414610ff357604051637bfa4b9f60e01b815260040160405180910390fd5b61098381611792565b60005460020361101e5760405162461bcd60e51b8152600401610d19906133bd565b60026000818155338152602091909152604090205460011461105357604051631f0853c160e21b815260040160405180910390fd5b60035460ff1615611077576040516313d0ff5960e31b815260040160405180910390fd5b610d868282336117ee565b6003805460ff1916600117905560405133907f203c4bd3e526634f661575359ff30de3b0edaba6c2cb1eac60f730b6d2d9d53690600090a2565b6007546040516001600160a01b038084169216907f9726d7faf7429d6b059560dc858ed769377ccdf8b7541eabe12b22548719831f90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6003805460ff1916905560405133907fa1e8a54850dbd7f520bcc09f47bff152294b77b2081da545a7adf531b7ea283b90600090a2565b3360009081526004602052604090205461116a9082906134c9565b3360009081526004602052604090205550565b60008160e001511180156111945750428160e00151105b156111b2576040516362b439dd60e11b815260040160405180910390fd5b6111bc8282610e01565b6103e881610120015111156111e45760405163cd4e616760e01b815260040160405180910390fd5b6111f18160800151610955565b60008281526008602052604090205460ff161561122157604051633d9c5bb760e11b815260040160405180910390fd5b61124e81602001518261010001516001600160a01b03919091166000908152600460205260409020541490565b610a8557604051633ab3447f60e11b815260040160405180910390fd5b8183148061127f575082158061127f575081155b1561129d576040516307ed98ed60e31b815260040160405180910390fd5b6000838152600560205260409020541515806112c6575060008281526005602052604090205415155b156112e457604051630ea075bf60e21b815260040160405180910390fd5b6040805180820182528381526020808201848152600087815260058084528582209451855591516001948501558451808601865288815280840187815288835292909352848120925183559051919092015590518291849186917fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d91a48083837fbc9a2432e8aeb48327246cddd6e872ef452812b4243c04e6bfb786a2cd8faf0d60405160405180910390a4505050565b6000806113a1846118ef565b8051906020012090506000856040516020016113cc91906001600160a01b0391909116815260200190565b6040516020818303038152906040528051906020012090506113ef848383611955565b9695505050505050565b60208101516001600160a01b03163314611426576040516330cd747160e01b815260040160405180910390fd5b600061143182610e3d565b600081815260086020526040902080549192509060ff161561146657604051633d9c5bb760e11b815260040160405180910390fd5b805460ff1916600117815560405182907f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d90600090a2505050565b825160005b818110156114f3576114eb8582815181106114c3576114c361349d565b60200260200101518583815181106114dd576114dd61349d565b6020026020010151856117ee565b6001016114a6565b5050505050565b60008082600281111561150f5761150f6133e1565b036115275761152086868686611994565b9050610cee565b600282600281111561153b5761153b6133e1565b0361154c57611520868686866119c8565b61152086868686611a02565b600061082a611565611a29565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b816000806115b48784611b50565b915091506000806115c489611b9d565b915091506115d88960200151308488611bd4565b6115e3898988611bfe565b6115ed8482611c50565b6101208a015190945060009061162f90828c61014001516001811115611615576116156133e1565b146116205787611622565b865b88888e6101400151611c7f565b905061164c308b6020015184848961164791906134e1565b611bd4565b61165830338484611d6f565b600061166384611dcb565b9050801561167b5761167b308c602001518684611bd4565b60208b810151604080518781529283018690528201899052606082018890526080820184905230916001600160a01b039091169087907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a46020808c0151604080518781529283018690528201899052606082018890526001600160a01b03169086907f63bf4d16b7fa898ef4c4b2b6d90fd201e9c56313b65638af6088d149d2ce956c9060800160405180910390a35050505050505050505050565b6040516bffffffffffffffffffffffff19606085901b166020820152600090611788908390859060340160405160208183030381529060405280519060200120611eaf565b90505b9392505050565b6006546040516001600160a01b038084169216907f3053c6252a932554235c173caffc1913604dba3a41cee89516f631c4a1a50a3790600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b816000806117fc8684611b50565b610120880151919350915060009061184990825b8961014001516001811115611827576118276133e1565b146118325785611834565b845b8960a001518a60c001518b6101400151611c7f565b905060008061185789611b9d565b91509150611871338a6020015183868961164791906134e1565b6118818960200151888489611bd4565b602089810151604080518581529283018490528201889052606082018790526080820185905233916001600160a01b039091169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a4505050505050505050565b6060604051806101a0016040528061017181526020016136886101719139604080516001600160a01b03851660208201520160408051601f198184030181529082905261193f9291602001613524565b6040516020818303038152906040529050919050565b60008060ff60f81b8584866040516020016119739493929190613553565b60408051808303601f19018152919052805160209091012095945050505050565b6000836001600160a01b0316856001600160a01b03161480156119bd57506119bd858484611f04565b90505b949350505050565b60006119d5858484611f04565b80156119bd5750836001600160a01b03166119ef86610c46565b6001600160a01b03161495945050505050565b6000611a0f858484611f04565b80156119bd5750836001600160a01b03166119ef86610f6c565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a8257507f000000000000000000000000000000000000000000000000000000000000000046145b15611aac57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600080611b608460600151611f2c565b611b6984610e3d565b9050611b75818561117d565b611b88838560a001518660c00151611f6b565b9150611b95818585611f92565b509250929050565b600080808361014001516001811115611bb857611bb86133e1565b03611bc857505060800151600091565b50506080015190600090565b81600003611bec57611be7848483612008565b611bf8565b611bf884848484612050565b50505050565b815160005b818110156114f357611c4885858381518110611c2157611c2161349d565b6020026020010151858481518110611c3b57611c3b61349d565b602002602001015161207d565b600101611c03565b600080611c5c83611dcb565b90508381101561178b576040516301be9b0160e71b815260040160405180910390fd5b60008515610cee576000611c94858585612155565b9050600081118015611cae5750670de0b6b3a76400008111155b15611d65576000836001811115611cc757611cc76133e1565b03611d1957611cd86127108261358c565b86611cf483611cef81670de0b6b3a76400006134e1565b6121c4565b611cfe908a61358c565b611d08919061358c565b611d1291906135ab565b9150611d65565b611d2d670de0b6b3a764000061271061358c565b86611d4483611cef81670de0b6b3a76400006134e1565b611d4e908a61358c565b611d58919061358c565b611d6291906135ab565b91505b5095945050505050565b8015611bf857611d8184848484611bd4565b60408051838152602081018390526001600160a01b038516917facffcc86834d0f1a64b0d5a675798deed6ff0bcfc2231edd3480e7288dba7ff4910160405180910390a250505050565b600081600003611e5e576040516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082a91906135cd565b604051627eeac760e11b8152306004820152602481018390526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e90604401611e1d565b600080611ebc85856121da565b805190602001209050600060ff60f81b868584604051602001611ee29493929190613553565b60408051808303601f1901815291905280516020909101209695505050505050565b6000836001600160a01b0316611f1a84846122f1565b6001600160a01b031614949350505050565b6001600160a01b03811615801590611f4d57506001600160a01b0381163314155b1561098357604051635211a07960e01b815260040160405180910390fd5b600082600003611f7d5750600061178b565b82611f88838661358c565b61178891906135ab565b60008381526008602052604090206001810154908115611fb25781611fb8565b8360a001515b915081831115611fdb57604051637166356b60e11b815260040160405180910390fd5b611fe583836134e1565b915081600003611ffb57805460ff191660011781555b6001018190559392505050565b7f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b0385160361204457611be7818484612315565b611bf881858585612320565b611bf87f00000000000000000000000000000000000000000000000000000000000000008585858561232c565b600061208984846123b2565b905061209684848361244e565b816000806120a48684611b50565b61012088015191935091506000906120bc9082611810565b90506000806120ca89611b9d565b915091506120e186868b6020015185858c896124c8565b6020808b01518a82015160408051868152938401859052830189905260608301889052608083018690526001600160a01b039182169291169086907fd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f69060a00160405180910390a450505050505050505050565b60008082600181111561216a5761216a6133e1565b036121a2578260000361217e57600061219b565b82612191670de0b6b3a76400008661358c565b61219b91906135ab565b905061178b565b836000036121b1576000611788565b83611f88670de0b6b3a76400008561358c565b60008183106121d3578161178b565b5090919050565b60408051600080825260208201909252606091906121fb90604481016135e6565b60408051601f19818403018152918152602080830180516001600160e01b03166352e831dd60e01b1790528151606380825260a082019093529293506000929190820181803683370190505090507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe6020820152600160601b8502602d8201527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be6041820152600160601b840260608201526e5af43d82803e903d91602b57fd5bf360881b607482015280826040516020016122d8929190613524565b6040516020818303038152906040529250505092915050565b6000806000612300858561252f565b9150915061230d8161259d565b509392505050565b610ac5838383612753565b611bf8848484846127cb565b604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b15801561239357600080fd5b505af11580156123a7573d6000803e3d6000fd5b505050505050505050565b60008083610140015160018111156123cc576123cc6133e1565b1480156123ef5750600082610140015160018111156123ed576123ed6133e1565b145b156123fc5750600161082a565b60018361014001516001811115612415576124156133e1565b148015612438575060018261014001516001811115612436576124366133e1565b145b156124455750600261082a565b50600092915050565b612458838361284e565b61247557604051633fcd37a360e11b815260040160405180910390fd5b6000816002811115612489576124896133e1565b036124b6578160800151836080015114610ac55760405163a0b9446560e01b815260040160405180910390fd5b610ac583608001518360800151610d8f565b6124d48530868a611bd4565b6124e18787868686612898565b856124eb84611dcb565b101561250a576040516301be9b0160e71b815260040160405180910390fd5b61251a308685611647858b6134e1565b61252630338584611d6f565b50505050505050565b60008082516041036125655760208301516040840151606085015160001a61255987828585612920565b94509450505050612596565b825160400361258e5760208301516040840151612583868383612a0d565b935093505050612596565b506000905060025b9250929050565b60008160048111156125b1576125b16133e1565b036125b95750565b60018160048111156125cd576125cd6133e1565b0361261a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610d19565b600281600481111561262e5761262e6133e1565b0361267b5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610d19565b600381600481111561268f5761268f6133e1565b036126e75760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610d19565b60048160048111156126fb576126fb6133e1565b036109835760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610d19565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080611bf85760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610d19565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806114f35760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610d19565b60008260c0015160001480612865575060c0820151155b156128725750600161082a565b61178b61287e84612a46565b61288784612a46565b856101400151856101400151612a60565b60008160028111156128ac576128ac6133e1565b146114f35760018160028111156128c5576128c56133e1565b036128eb576000828152600560205260409020600101546128e69085612afa565b6114f3565b60028160028111156128ff576128ff6133e1565b036114f3576000838152600560205260409020600101546128e69086612c05565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156129575750600090506003612a04565b8460ff16601b1415801561296f57508460ff16601c14155b156129805750600090506004612a04565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156129d4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129fd57600060019250925050612a04565b9150600090505b94509492505050565b6000806001600160ff1b03831681612a2a60ff86901c601b6134c9565b9050612a3887828885612920565b935093505050935093915050565b600061082a8260a001518360c00151846101400151612155565b600080836001811115612a7557612a756133e1565b03612ab9576000826001811115612a8e57612a8e6133e1565b03612aaf57670de0b6b3a7640000612aa685876134c9565b101590506119c0565b50828410156119c0565b6000826001811115612acd57612acd6133e1565b03612adc5750838310156119c0565b670de0b6b3a7640000612aef85876134c9565b111595945050505050565b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612b3057612b3061349d565b602002602001018181525050600281600181518110612b5157612b5161349d565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166372ce42757f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160e01b031960e084901b168152612bd79190600090889087908990600401613619565b600060405180830381600087803b158015612bf157600080fd5b505af1158015612526573d6000803e3d6000fd5b604080516002808252606082018352600092602083019080368337019050509050600181600081518110612c3b57612c3b61349d565b602002602001018181525050600281600181518110612c5c57612c5c61349d565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e7212ad7f0000000000000000000000000000000000000000000000000000000000000000612bad565b600060208284031215612cce57600080fd5b81356001600160e01b03198116811461178b57600080fd5b6001600160a01b038116811461098357600080fd5b8035612d0681612ce6565b919050565b60008060408385031215612d1e57600080fd5b8235612d2981612ce6565b946020939093013593505050565b600060208284031215612d4957600080fd5b813561178b81612ce6565b600060208284031215612d6657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b0381118282101715612da657612da6612d6d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612dd457612dd4612d6d565b604052919050565b803560028110612d0657600080fd5b803560038110612d0657600080fd5b600082601f830112612e0b57600080fd5b81356001600160401b03811115612e2457612e24612d6d565b612e37601f8201601f1916602001612dac565b818152846020838601011115612e4c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a08284031215612e7c57600080fd5b612e84612d83565b905081358152612e9660208301612cfb565b6020820152612ea760408301612cfb565b6040820152612eb860608301612cfb565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140612f0b818401612ddc565b90820152610160612f1d838201612deb565b90820152610180828101356001600160401b03811115612f3c57600080fd5b612f4885828601612dfa565b82840152505092915050565b600060208284031215612f6657600080fd5b81356001600160401b03811115612f7c57600080fd5b6119c084828501612e69565b600080600060608486031215612f9d57600080fd5b505081359360208301359350604090920135919050565b60006001600160401b03821115612fcd57612fcd612d6d565b5060051b60200190565b600082601f830112612fe857600080fd5b81356020612ffd612ff883612fb4565b612dac565b82815260059290921b8401810191818101908684111561301c57600080fd5b8286015b848110156130375780358352918301918301613020565b509695505050505050565b600080600080600060a0868803121561305a57600080fd5b853561306581612ce6565b9450602086013561307581612ce6565b935060408601356001600160401b038082111561309157600080fd5b61309d89838a01612fd7565b945060608801359150808211156130b357600080fd5b6130bf89838a01612fd7565b935060808801359150808211156130d557600080fd5b506130e288828901612dfa565b9150509295509295909350565b600082601f83011261310057600080fd5b81356020613110612ff883612fb4565b82815260059290921b8401810191818101908684111561312f57600080fd5b8286015b848110156130375780356001600160401b038111156131525760008081fd5b6131608986838b0101612e69565b845250918301918301613133565b6000806040838503121561318157600080fd5b82356001600160401b038082111561319857600080fd5b6131a4868387016130ef565b935060208501359150808211156131ba57600080fd5b506131c785828601612fd7565b9150509250929050565b600080604083850312156131e457600080fd5b50508035926020909101359150565b6000806040838503121561320657600080fd5b8235915060208301356001600160401b0381111561322357600080fd5b6131c785828601612e69565b6000806000806080858703121561324557600080fd5b84356001600160401b038082111561325c57600080fd5b61326888838901612e69565b9550602087013591508082111561327e57600080fd5b61328a888389016130ef565b94506040870135935060608701359150808211156132a757600080fd5b506132b487828801612fd7565b91505092959194509250565b600080600080600060a086880312156132d857600080fd5b85356132e381612ce6565b945060208601356132f381612ce6565b9350604086013592506060860135915060808601356001600160401b0381111561331c57600080fd5b6130e288828901612dfa565b60006020828403121561333a57600080fd5b81356001600160401b0381111561335057600080fd5b6119c0848285016130ef565b6000806040838503121561336f57600080fd5b82356001600160401b0381111561338557600080fd5b61339185828601612e69565b95602094909401359450505050565b6000602082840312156133b257600080fd5b815161178b81612ce6565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b60038110613407576134076133e1565b9052565b8d8152602081018d90526001600160a01b038c811660408301528b811660608301528a16608082015260a0810189905260c0810188905260e081018790526101008101869052610120810185905261014081018490526101a0810160028410613476576134766133e1565b8361016083015261348b6101808301846133f7565b9e9d5050505050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156134dc576134dc6134b3565b500190565b6000828210156134f3576134f36134b3565b500390565b60005b838110156135135781810151838201526020016134fb565b83811115611bf85750506000910152565b600083516135368184602088016134f8565b83519083019061354a8183602088016134f8565b01949350505050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60008160001904831182151516156135a6576135a66134b3565b500290565b6000826135c857634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156135df57600080fd5b5051919050565b60208152600082518060208401526136058160408501602087016134f8565b601f01601f19169190910160400192915050565b6001600160a01b038616815260208082018690526040820185905260a06060830181905284519083018190526000918581019160c0850190845b8181101561366f57845183529383019391830191600101613653565b5050809350505050826080830152969550505050505056fe608060405234801561001057600080fd5b5060405161017138038061017183398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e7565b6000602082840312156100ca578081fd5b81516001600160a01b03811681146100e0578182fd5b9392505050565b607c806100f56000396000f3fe6080604052600080546001600160a01b0316813563530ca43760e11b1415602857808252602082f35b3682833781823684845af490503d82833e806041573d82fd5b503d81f3fea2646970667358221220fa9565e3b3a844c1725548afa2d13d6cab32d2e809eaa0edd7624a77e5b6c4e864736f6c63430008040033a26469706673582212205072e06045e30e8d57a16b6c73e93b1c7731ab4e62b42afae3f2dfabbf0a373d64736f6c634300080f0033000000000000000000000000833589fcd6edb6e08f4c7c32d4f71b54bda0291300000000000000000000000090656ad5aea31407b943ec3a7d2db0608ae8dd550000000000000000000000008a22649487778d7e27329da09f1079b37fd976dc0000000000000000000000002a2b342dd9bf9657619942e179b20a36cadd376c