0 txs
0 calls
constructor
constructor()
functions
creatorFeePercent
viewfunction creatorFeePercent() view returns (uint256)
getBuyPrice
viewfunction getBuyPrice(bytes32 wearablesSubject, uint256 amount) view returns (uint256)
getBuyPriceAfterFee
viewfunction getBuyPriceAfterFee(bytes32 wearablesSubject, uint256 amount) view returns (uint256)
getPrice
purefunction getPrice(uint256 supply, uint256 amount, uint256 totalSupply, uint256 curveFactor, uint256 initialPriceFactor, bool isBuy) pure returns (uint256)
getSellPrice
viewfunction getSellPrice(bytes32 wearablesSubject, uint256 amount) view returns (uint256)
getSellPriceAfterFee
viewfunction getSellPriceAfterFee(bytes32 wearablesSubject, uint256 amount) view returns (uint256)
getUserNonce
viewfunction getUserNonce(address user) view returns (uint256)
nonces
viewfunction nonces(address) view returns (uint256)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
protocolFeeDestination
viewfunction protocolFeeDestination() view returns (address)
protocolFeePercent
viewfunction protocolFeePercent() view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
wearableOperator
viewfunction wearableOperator() view returns (address)
wearables
viewfunction wearables(bytes32) view returns (address creator, string name, string category, string imageURI, tuple factors, uint8 state)
wearablesBalance
viewfunction wearablesBalance(bytes32, address) view returns (uint256)
wearableSigner
viewfunction wearableSigner() view returns (address)
wearablesSupply
viewfunction wearablesSupply(bytes32) view returns (uint256)
acceptOwnership
nonpayablefunction acceptOwnership()
batchSetWearableSalesState
nonpayablefunction batchSetWearableSalesState(bytes32[] wearablesSubjects, uint8 saleState)
buyPrivateWearables
payablefunction buyPrivateWearables(bytes32 wearablesSubject, uint256 amount, bytes signature) payable
buyWearables
payablefunction buyWearables(bytes32 wearablesSubject, uint256 amount) payable
createWearable
nonpayablefunction createWearable(tuple params)
initialize
nonpayablefunction initialize(address _wearableOperator, address _signer)
renounceOwnership
nonpayablefunction renounceOwnership()
sellPrivateWearables
payablefunction sellPrivateWearables(bytes32 wearablesSubject, uint256 amount, bytes signature) payable
sellWearables
payablefunction sellWearables(bytes32 wearablesSubject, uint256 amount) payable
setCreatorFeePercent
nonpayablefunction setCreatorFeePercent(uint256 _feePercent)
setProtocolFeeDestination
nonpayablefunction setProtocolFeeDestination(address _feeDestination)
setProtocolFeePercent
nonpayablefunction setProtocolFeePercent(uint256 _feePercent)
setWearableOperator
nonpayablefunction setWearableOperator(address _operator)
setWearableSalesState
nonpayablefunction setWearableSalesState(bytes32 wearablesSubject, uint8 saleState)
setWearableSigner
nonpayablefunction setWearableSigner(address _signer)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
transferWearables
nonpayablefunction transferWearables(bytes32 wearablesSubject, address from, address to, uint256 amount)
upgradeTo
nonpayablefunction upgradeTo(address newImplementation)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AdminChanged
event AdminChanged(address previousAdmin, address newAdmin)
BeaconUpgraded
event BeaconUpgraded(address indexed beacon)
CreatorFeePercentUpdated
event CreatorFeePercentUpdated(uint256 feePercent)
Initialized
event Initialized(uint8 version)
NonceUpdated
event NonceUpdated(address user, uint256 nonce)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
ProtocolFeeDestinationUpdated
event ProtocolFeeDestinationUpdated(address feeDestination)
ProtocolFeePercentUpdated
event ProtocolFeePercentUpdated(uint256 feePercent)
Trade
event Trade(address trader, bytes32 subject, bool isBuy, bool isPublic, uint256 wearableAmount, uint256 ethAmount, uint256 protocolEthAmount, uint256 creatorEthAmount, uint256 supply)
Upgraded
event Upgraded(address indexed implementation)
WearableCreated
event WearableCreated(address creator, bytes32 subject, string name, string category, string imageURI, (uint256 supplyFactor, uint256 curveFactor, uint256 initialPriceFactor) factors, uint8 state)
WearableOperatorUpdated
event WearableOperatorUpdated(address operator)
WearableSaleStateUpdated
event WearableSaleStateUpdated(bytes32 wearablesSubject, uint8 saleState)
WearableSignerUpdated
event WearableSignerUpdated(address signer)
WearableTransferred
event WearableTransferred(address from, address to, bytes32 subject, uint256 amount)
errors
AmountNotMultipleOfBaseUnit
error AmountNotMultipleOfBaseUnit()
ExcessivePayment
error ExcessivePayment()
IncorrectSender
error IncorrectSender()
InsufficientBaseUnit
error InsufficientBaseUnit()
InsufficientHoldings
error InsufficientHoldings()
InsufficientPayment
error InsufficientPayment()
InvalidCurveFactor
error InvalidCurveFactor()
InvalidFeePercent
error InvalidFeePercent()
InvalidInitialPriceFactor
error InvalidInitialPriceFactor()
InvalidOperator
error InvalidOperator()
InvalidSaleState
error InvalidSaleState()
InvalidSignature
error InvalidSignature()
InvalidTotalSupply
error InvalidTotalSupply()
SendFundsFailed
error SendFundsFailed()
TotalSupplyExceeded
error TotalSupplyExceeded()
TransferToZeroAddress
error TransferToZeroAddress()
WearableAlreadyCreated
error WearableAlreadyCreated()
WearableNotCreated
error WearableNotCreated()
creation bytecode
0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e7565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516136bb6200011f60003960008181610d9701528181610de00152818161143701528181611477015261150a01526136bb6000f3fe60806040526004361061021a5760003560e01c80636cbef46111610123578063aa07c98a116100ab578063e6aa2a8c1161006f578063e6aa2a8c1461063d578063f2fde38b1461065d578063f4868ca51461067d578063f4d2ed081461069d578063f9855735146106bd57600080fd5b8063aa07c98a146105a9578063aabf7a44146105c9578063cad244cd146105e9578063d6e6eb9f14610609578063e30c39781461061f57600080fd5b806379ba5097116100f257806379ba5097146105085780637ecebe001461051d5780638da5cb5b1461054b578063a10786b014610569578063a49834211461058957600080fd5b80636cbef461146104ad5780636ff6c4b8146104c0578063715018a6146104e0578063723e224a146104f557600080fd5b80634236e876116101a65780634f1ef286116101755780634f1ef2861461041857806352d1902d1461042b57806353613dd3146104405780636834e3a8146104565780636c9a3dad1461048d57600080fd5b80634236e8761461037f57806343d61e4f1461039f578063485cc955146103d85780634ce7957c146103f857600080fd5b80633659cfe6116101ed5780633659cfe6146102bf5780633a68ec3b146102df5780633d8ee40c146103115780633e3e1f0414610331578063420b14351461035f57600080fd5b80630efee4371461021f578063150906061461025c5780632e50b9141461027e5780633456816a146102ac575b600080fd5b34801561022b57600080fd5b5060fe5461023f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561026857600080fd5b5061027c610277366004612ca6565b6106d0565b005b34801561028a57600080fd5b5061029e610299366004612ce2565b610aba565b604051908152602001610253565b61027c6102ba366004612d04565b610b16565b3480156102cb57600080fd5b5061027c6102da366004612da0565b610d8d565b3480156102eb57600080fd5b506102ff6102fa366004612dbb565b610e75565b60405161025396959493929190612e5c565b34801561031d57600080fd5b5061027c61032c366004612da0565b611074565b34801561033d57600080fd5b5061029e61034c366004612dbb565b6101026020526000908152604090205481565b34801561036b57600080fd5b5061027c61037a366004612eda565b6110d1565b34801561038b57600080fd5b5061029e61039a366004612ce2565b611294565b3480156103ab57600080fd5b5061029e6103ba366004612f1e565b61010160209081526000928352604080842090915290825290205481565b3480156103e457600080fd5b5061027c6103f3366004612f4a565b6112d2565b34801561040457600080fd5b5060fb5461023f906001600160a01b031681565b61027c610426366004612f8a565b61142d565b34801561043757600080fd5b5061029e6114fd565b34801561044c57600080fd5b5061029e60fd5481565b34801561046257600080fd5b5061029e610471366004612da0565b6001600160a01b03166000908152610103602052604090205490565b34801561049957600080fd5b5061029e6104a8366004612ce2565b6115b0565b61027c6104bb366004612ce2565b6115ee565b3480156104cc57600080fd5b5061027c6104db366004612dbb565b6116ce565b3480156104ec57600080fd5b5061027c611741565b61027c610503366004612ce2565b611755565b34801561051457600080fd5b5061027c611835565b34801561052957600080fd5b5061029e610538366004612da0565b6101036020526000908152604090205481565b34801561055757600080fd5b506033546001600160a01b031661023f565b34801561057557600080fd5b5061027c610584366004612da0565b6118ac565b34801561059557600080fd5b5061027c6105a4366004612dbb565b611902565b3480156105b557600080fd5b5061027c6105c436600461305b565b611975565b3480156105d557600080fd5b5060ff5461023f906001600160a01b031681565b3480156105f557600080fd5b5061029e610604366004612ce2565b611a60565b34801561061557600080fd5b5061029e60fc5481565b34801561062b57600080fd5b506065546001600160a01b031661023f565b34801561064957600080fd5b5061027c610658366004612da0565b611abb565b34801561066957600080fd5b5061027c610678366004612da0565b611b11565b34801561068957600080fd5b5061029e6106983660046130ef565b611b82565b3480156106a957600080fd5b5061027c6106b8366004613140565b611c1a565b61027c6106cb366004612d04565b611cb5565b60ff546001600160a01b031633146106fb5760405163ccea9e6f60e01b815260040160405180910390fd5b60018160a00135108061071357506127108160a00135115b15610731576040516334bbd58560e01b815260040160405180910390fd5b60018160c00135108061074957506103e88160c00135115b1561076757604051633a0f339560e21b815260040160405180910390fd5b60648160e00135108061077f57506103e88160e00135115b1561079d5760405163d515582960e01b815260040160405180910390fd5b60006107ac6020830183613163565b6107b96060850185613163565b6040516020016107cc94939291906131d3565b60408051601f19818403018152918152815160209283012060008181526101009093529120549091506001600160a01b03161561081c576040516341623d0560e01b815260040160405180910390fd5b600061082e60a08401608085016131fa565b61083957600061083c565b60015b9050600060405180606001604052808560a0013581526020018560c0013581526020018560e0013581525090506040518060c001604052808560000160208101906108879190612da0565b6001600160a01b031681526020018580602001906108a59190613163565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020016108ec6040870187613163565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020016109336060870187613163565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020810183905260400183600181111561098657610986612e24565b9052600084815261010060209081526040909120825181546001600160a01b0319166001600160a01b039091161781559082015160018201906109c9908261329d565b50604082015160028201906109de908261329d565b50606082015160038201906109f3908261329d565b506080820151805160048301556020810151600583015560400151600682015560a082015160078201805460ff191660018381811115610a3557610a35612e24565b02179055507f8d35d78b9ce45c1c69445a734dd787e62bf7454e41bae87772befeebf139b1f19150610a6c90506020860186612da0565b84610a7a6020880188613163565b610a8760408a018a613163565b610a9460608c018c613163565b898b604051610aac9a9998979695949392919061335d565b60405180910390a150505050565b600082815261010060209081526040808320600481015460058201546006909201546101029094529184205491929091610b0a9086610b0186670de0b6b3a764000061340b565b85856001611b82565b93505050505b92915050565b66038d7ea4c68000831015610b3e576040516391acf56f60e01b815260040160405180910390fd5b610b4f66038d7ea4c6800084613438565b15610b6d576040516371f3285560e11b815260040160405180910390fd5b600084815261010060205260409020546001600160a01b0316610ba35760405163156966a960e21b815260040160405180910390fd5b6000848152610100602052604081206007015460ff166001811115610bca57610bca612e24565b14610be857604051633482502f60e01b815260040160405180910390fd5b3360008181526101036020908152604080832054905160609490941b6bffffffffffffffffffffffff1916918401919091526262757960e81b6034840152603783018790526057830186905260778301819052916097016040516020818303038152906040528051906020012090506000610c90827f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b60fe54604080516020601f89018190048102820181019092528781529293506001600160a01b0390911691610ce29188908890819084018382808284376000920191909152508693925050611f279050565b6001600160a01b031614610d0957604051638baa579f60e01b815260040160405180910390fd5b33600090815261010360205260408120805460019290610d2a90849061344c565b90915550503360008181526101036020908152604091829020548251938452908301527f2ddf4902150368e68ca3b1565faf1e0603da0895a2699dc884f1db788c8396a2910160405180910390a1505050610d8784846000611f4b565b50505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610dde5760405162461bcd60e51b8152600401610dd59061345f565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610e2760008051602061363f833981519152546001600160a01b031690565b6001600160a01b031614610e4d5760405162461bcd60e51b8152600401610dd5906134ab565b610e56816121cf565b60408051600080825260208201909252610e72918391906121d7565b50565b61010060205260009081526040902080546001820180546001600160a01b039092169291610ea290613215565b80601f0160208091040260200160405190810160405280929190818152602001828054610ece90613215565b8015610f1b5780601f10610ef057610100808354040283529160200191610f1b565b820191906000526020600020905b815481529060010190602001808311610efe57829003601f168201915b505050505090806002018054610f3090613215565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5c90613215565b8015610fa95780601f10610f7e57610100808354040283529160200191610fa9565b820191906000526020600020905b815481529060010190602001808311610f8c57829003601f168201915b505050505090806003018054610fbe90613215565b80601f0160208091040260200160405190810160405280929190818152602001828054610fea90613215565b80156110375780601f1061100c57610100808354040283529160200191611037565b820191906000526020600020905b81548152906001019060200180831161101a57829003601f168201915b505060408051606081018252600487015481526005870154602082015260068701549181019190915260079095015493949360ff16925088915050565b61107c612342565b60fe80546001600160a01b0319166001600160a01b0383169081179091556040519081527f7c5de6c9484fe1791c429caf029dce7d92d8b90baae2aa812813d99edae616a3906020015b60405180910390a150565b6001600160a01b0382166110f857604051633a954ecd60e21b815260040160405180910390fd5b66038d7ea4c68000811015611120576040516391acf56f60e01b815260040160405180910390fd5b61113166038d7ea4c6800082613438565b1561114f576040516371f3285560e11b815260040160405180910390fd5b336001600160a01b0384161461117857604051637d1c29f360e01b815260040160405180910390fd5b6000848152610101602090815260408083206001600160a01b03871684529091529020548111156111bc5760405163fdc9902d60e01b815260040160405180910390fd5b6000848152610101602090815260408083206001600160a01b03871684529091529020546111eb9082906134f7565b6000858152610101602090815260408083206001600160a01b03888116855292528083209390935584168152205461122490829061344c565b6000858152610101602090815260408083206001600160a01b0387811680865291845293829020949094558051928716835290820192909252908101859052606081018290527f05fbb3a0c4db99e4a77481987705b0cb15d269dd5ffa5e03667ee32efab738a890608001610aac565b6000806112a18484611a60565b905060006112ae8261239c565b905060006112bb836123bf565b9050806112c883856134f7565b610b0a91906134f7565b600054610100900460ff16158080156112f25750600054600160ff909116105b8061130c5750303b15801561130c575060005460ff166001145b61136f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610dd5565b6000805460ff191660011790558015611392576000805461ff0019166101001790555b666a94d74f43000060fc81905560fd5560ff80546001600160a01b038086166001600160a01b03199283161790925560fe8054928516929091169190911790556113da6123d8565b6113e2612407565b8015611428576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114755760405162461bcd60e51b8152600401610dd59061345f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114be60008051602061363f833981519152546001600160a01b031690565b6001600160a01b0316146114e45760405162461bcd60e51b8152600401610dd5906134ab565b6114ed826121cf565b6114f9828260016121d7565b5050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461159d5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610dd5565b5060008051602061363f83398151915290565b6000806115bd8484610aba565b905060006115ca8261239c565b905060006115d7836123bf565b9050806115e4838561344c565b610b0a919061344c565b66038d7ea4c68000811015611616576040516391acf56f60e01b815260040160405180910390fd5b61162766038d7ea4c6800082613438565b15611645576040516371f3285560e11b815260040160405180910390fd5b600082815261010060205260409020546001600160a01b031661167b5760405163156966a960e21b815260040160405180910390fd5b60016000838152610100602052604090206007015460ff1660018111156116a4576116a4612e24565b146116c257604051633482502f60e01b815260040160405180910390fd5b6114f982826001611f4b565b6116d6612342565b6702c68af0bb14000060fc54826116ed919061344c565b111561170c57604051638a81d3b360e01b815260040160405180910390fd5b60fd8190556040518181527ff94832cd6cb3b731db197cb04c72105b97bc2fd0292f188007d46cd6fd3f8e73906020016110c6565b611749612342565b611753600061242e565b565b66038d7ea4c6800081101561177d576040516391acf56f60e01b815260040160405180910390fd5b61178e66038d7ea4c6800082613438565b156117ac576040516371f3285560e11b815260040160405180910390fd5b600082815261010060205260409020546001600160a01b03166117e25760405163156966a960e21b815260040160405180910390fd5b60016000838152610100602052604090206007015460ff16600181111561180b5761180b612e24565b1461182957604051633482502f60e01b815260040160405180910390fd5b6114f982826001612447565b60655433906001600160a01b031681146118a35760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610dd5565b610e728161242e565b6118b4612342565b60fb80546001600160a01b0319166001600160a01b0383169081179091556040519081527f4907155279818c6a4cc7f8cd1dfc9ddd3d180b957ddd9ca2838c3fb3dc4cedb4906020016110c6565b61190a612342565b6702c68af0bb14000060fd5482611921919061344c565b111561194057604051638a81d3b360e01b815260040160405180910390fd5b60fc8190556040518181527fa5c267c300696b3221974b5d94af56248d0aa8ff7bb91204bfc87be4835d4332906020016110c6565b60ff546001600160a01b031633146119a05760405163ccea9e6f60e01b815260040160405180910390fd5b60005b82811015610d87578161010060008686858181106119c3576119c361350a565b60209081029290920135835250810191909152604001600020600701805460ff1916600183818111156119f8576119f8612e24565b02179055507f811af1ae2a68147222d5e67521dffde594a885944ad70eb4e058294bb08f18f2848483818110611a3057611a3061350a565b9050602002013583604051611a46929190613520565b60405180910390a180611a5881613534565b9150506119a3565b600082815261010060209081526040808320600481015460058201546006909201546101029094529184205491929091610b0a90611a9f9087906134f7565b86611ab286670de0b6b3a764000061340b565b85856000611b82565b611ac3612342565b60ff80546001600160a01b0319166001600160a01b0383169081179091556040519081527f392208663aaba8bd9cdff20c7faabac5fa14620cbde5d81fff0a625d3f45dd60906020016110c6565b611b19612342565b606580546001600160a01b0383166001600160a01b03199091168117909155611b4a6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000818015611b9a575084611b97878961344c565b10155b15611bb857604051637eaca13d60e11b815260040160405180910390fd5b81158015611bc65750848710155b15611be457604051637eaca13d60e11b815260040160405180910390fd5b611bf087868686612714565b611c05611bfd888a61344c565b878787612714565b611c0f91906134f7565b979650505050505050565b60ff546001600160a01b03163314611c455760405163ccea9e6f60e01b815260040160405180910390fd5b600082815261010060205260409020600701805482919060ff191660018381811115611c7357611c73612e24565b02179055507f811af1ae2a68147222d5e67521dffde594a885944ad70eb4e058294bb08f18f28282604051611ca9929190613520565b60405180910390a15050565b66038d7ea4c68000831015611cdd576040516391acf56f60e01b815260040160405180910390fd5b611cee66038d7ea4c6800084613438565b15611d0c576040516371f3285560e11b815260040160405180910390fd5b600084815261010060205260409020546001600160a01b0316611d425760405163156966a960e21b815260040160405180910390fd5b6000848152610100602052604081206007015460ff166001811115611d6957611d69612e24565b14611d8757604051633482502f60e01b815260040160405180910390fd5b3360008181526101036020908152604080832054905160609490941b6bffffffffffffffffffffffff191691840191909152631cd95b1b60e21b6034840152603883018790526058830186905260788301819052916098016040516020818303038152906040528051906020012090506000611e30827f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b60fe54604080516020601f89018190048102820181019092528781529293506001600160a01b0390911691611e829188908890819084018382808284376000920191909152508693925050611f279050565b6001600160a01b031614611ea957604051638baa579f60e01b815260040160405180910390fd5b33600090815261010360205260408120805460019290611eca90849061344c565b90915550503360008181526101036020908152604091829020548251938452908301527f2ddf4902150368e68ca3b1565faf1e0603da0895a2699dc884f1db788c8396a2910160405180910390a1505050610d8784846000612447565b6000806000611f36858561278e565b91509150611f43816127d3565b509392505050565b60008381526101026020908152604080832054610100909252822060040154909190611fa89083908690611f8790670de0b6b3a764000061340b565b60008981526101006020526040902060058101546006909101546001611b82565b90506000611fb58261239c565b90506000611fc2836123bf565b905080611fcf838561344c565b611fd9919061344c565b341015611ff95760405163cd1c886760e01b815260040160405180910390fd5b80612004838561344c565b61200e919061344c565b34111561202e57604051631e33487360e11b815260040160405180910390fd5b60008781526101016020908152604080832033845290915290205461205490879061344c565b600088815261010160209081526040808320338452909152902055612079868561344c565b60008881526101026020908152604080832093909355610100905220546001600160a01b03167fc3c743778cbda2f66551d22d13c5e66b51917af7cf9d07ddc3696e17540b977a33896001898b8989896120d3848f61344c565b6040516120e89998979695949392919061354d565b60405180910390a160fb546040516000916001600160a01b03169085908381818185875af1925050503d806000811461213d576040519150601f19603f3d011682016040523d82523d6000602084013e612142565b606091505b505090506000826001600160a01b03168460405160006040518083038185875af1925050503d8060008114612193576040519150601f19603f3d011682016040523d82523d6000602084013e612198565b606091505b505090508180156121a65750805b6121c357604051631a7a493760e01b815260040160405180910390fd5b50505050505050505050565b610e72612342565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561220a576114288361291d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612264575060408051601f3d908101601f1916820190925261226191810190613597565b60015b6122c75760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610dd5565b60008051602061363f83398151915281146123365760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610dd5565b506114288383836129b9565b6033546001600160a01b031633146117535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd5565b6000670de0b6b3a764000060fc54836123b5919061340b565b610b1091906135b0565b6000670de0b6b3a764000060fd54836123b5919061340b565b600054610100900460ff166123ff5760405162461bcd60e51b8152600401610dd5906135c4565b6117536129de565b600054610100900460ff166117535760405162461bcd60e51b8152600401610dd5906135c4565b606580546001600160a01b0319169055610e7281612a0e565b60008381526101026020526040812054906124ad61246585846134f7565b60008781526101006020526040902060040154869061248c90670de0b6b3a764000061340b565b60008981526101006020526040812060058101546006909101549091611b82565b905060006124ba8261239c565b905060006124c7836123bf565b6000888152610101602090815260408083203384529091529020549091508611156125055760405163fdc9902d60e01b815260040160405180910390fd5b60008781526101016020908152604080832033845290915290205461252b9087906134f7565b60008881526101016020908152604080832033845290915290205561255086856134f7565b600088815261010260209081526040808320939093556101009052908120546001600160a01b0316907fc3c743778cbda2f66551d22d13c5e66b51917af7cf9d07ddc3696e17540b977a9033908a90898b8989896125ae848f6134f7565b6040516125c39998979695949392919061354d565b60405180910390a1600033836125d986886134f7565b6125e391906134f7565b604051600081818185875af1925050503d806000811461261f576040519150601f19603f3d011682016040523d82523d6000602084013e612624565b606091505b505060fb546040519192506000916001600160a01b039091169086908381818185875af1925050503d8060008114612678576040519150601f19603f3d011682016040523d82523d6000602084013e61267d565b606091505b505090506000836001600160a01b03168560405160006040518083038185875af1925050503d80600081146126ce576040519150601f19603f3d011682016040523d82523d6000602084013e6126d3565b606091505b505090508280156126e15750815b80156126ea5750805b61270757604051631a7a493760e01b815260040160405180910390fd5b5050505050505050505050565b60006103e8612723868461340b565b61272d91906135b0565b61273f84670de0b6b3a764000061340b565b61274987876134f7565b612753868861340b565b61276590670de0b6b3a764000061340b565b61276f91906135b0565b61277991906134f7565b61278391906134f7565b90505b949350505050565b60008082516041036127c45760208301516040840151606085015160001a6127b887828585612a60565b945094505050506127cc565b506000905060025b9250929050565b60008160048111156127e7576127e7612e24565b036127ef5750565b600181600481111561280357612803612e24565b036128505760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610dd5565b600281600481111561286457612864612e24565b036128b15760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610dd5565b60038160048111156128c5576128c5612e24565b03610e725760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610dd5565b6001600160a01b0381163b61298a5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610dd5565b60008051602061363f83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6129c283612b24565b6000825111806129cf5750805b1561142857610d878383612b64565b600054610100900460ff16612a055760405162461bcd60e51b8152600401610dd5906135c4565b6117533361242e565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612a975750600090506003612b1b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612aeb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612b1457600060019250925050612b1b565b9150600090505b94509492505050565b612b2d8161291d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060612b89838360405180606001604052806027815260200161365f60279139612b90565b9392505050565b6060600080856001600160a01b031685604051612bad919061360f565b600060405180830381855af49150503d8060008114612be8576040519150601f19603f3d011682016040523d82523d6000602084013e612bed565b606091505b5091509150612bfe86838387612c08565b9695505050505050565b60608315612c77578251600003612c70576001600160a01b0385163b612c705760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610dd5565b5081612786565b6127868383815115612c8c5781518083602001fd5b8060405162461bcd60e51b8152600401610dd5919061362b565b600060208284031215612cb857600080fd5b813567ffffffffffffffff811115612ccf57600080fd5b82016101008185031215612b8957600080fd5b60008060408385031215612cf557600080fd5b50508035926020909101359150565b60008060008060608587031215612d1a57600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115612d4057600080fd5b818701915087601f830112612d5457600080fd5b813581811115612d6357600080fd5b886020828501011115612d7557600080fd5b95989497505060200194505050565b80356001600160a01b0381168114612d9b57600080fd5b919050565b600060208284031215612db257600080fd5b612b8982612d84565b600060208284031215612dcd57600080fd5b5035919050565b60005b83811015612def578181015183820152602001612dd7565b50506000910152565b60008151808452612e10816020860160208601612dd4565b601f01601f19169290920160200192915050565b634e487b7160e01b600052602160045260246000fd5b60028110612e5857634e487b7160e01b600052602160045260246000fd5b9052565b6001600160a01b038716815261010060208201819052600090612e8183820189612df8565b90508281036040840152612e958188612df8565b90508281036060840152612ea98187612df8565b85516080850152602086015160a0850152604086015160c08501529150612ecd9050565b611c0f60e0830184612e3a565b60008060008060808587031215612ef057600080fd5b84359350612f0060208601612d84565b9250612f0e60408601612d84565b9396929550929360600135925050565b60008060408385031215612f3157600080fd5b82359150612f4160208401612d84565b90509250929050565b60008060408385031215612f5d57600080fd5b612f6683612d84565b9150612f4160208401612d84565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215612f9d57600080fd5b612fa683612d84565b9150602083013567ffffffffffffffff80821115612fc357600080fd5b818501915085601f830112612fd757600080fd5b813581811115612fe957612fe9612f74565b604051601f8201601f19908116603f0116810190838211818310171561301157613011612f74565b8160405282815288602084870101111561302a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b803560028110612d9b57600080fd5b60008060006040848603121561307057600080fd5b833567ffffffffffffffff8082111561308857600080fd5b818601915086601f83011261309c57600080fd5b8135818111156130ab57600080fd5b8760208260051b85010111156130c057600080fd5b6020928301955093506130d6918601905061304c565b90509250925092565b80358015158114612d9b57600080fd5b60008060008060008060c0878903121561310857600080fd5b863595506020870135945060408701359350606087013592506080870135915061313460a088016130df565b90509295509295509295565b6000806040838503121561315357600080fd5b82359150612f416020840161304c565b6000808335601e1984360301811261317a57600080fd5b83018035915067ffffffffffffffff82111561319557600080fd5b6020019150368190038213156127cc57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006131e76040830186886131aa565b8281036020840152611c0f8185876131aa565b60006020828403121561320c57600080fd5b612b89826130df565b600181811c9082168061322957607f821691505b60208210810361324957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561142857600081815260208120601f850160051c810160208610156132765750805b601f850160051c820191505b8181101561329557828155600101613282565b505050505050565b815167ffffffffffffffff8111156132b7576132b7612f74565b6132cb816132c58454613215565b8461324f565b602080601f83116001811461330057600084156132e85750858301515b600019600386901b1c1916600185901b178555613295565b600085815260208120601f198616915b8281101561332f57888601518255948401946001909101908401613310565b508582101561334d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b038b168152602081018a90526101206040820181905260009061338a8382018b8d6131aa565b9050828103606084015261339f81898b6131aa565b905082810360808401526133b48187896131aa565b855160a0850152602086015160c0850152604086015160e085015291506133d89050565b6133e6610100830184612e3a565b9b9a5050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b1057610b106133f5565b634e487b7160e01b600052601260045260246000fd5b60008261344757613447613422565b500690565b80820180821115610b1057610b106133f5565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b81810381811115610b1057610b106133f5565b634e487b7160e01b600052603260045260246000fd5b82815260408101612b896020830184612e3a565b600060018201613546576135466133f5565b5060010190565b6001600160a01b03999099168952602089019790975294151560408801529215156060870152608086019190915260a085015260c084015260e08301526101008201526101200190565b6000602082840312156135a957600080fd5b5051919050565b6000826135bf576135bf613422565b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008251613621818460208701612dd4565b9190910192915050565b602081526000612b896020830184612df856fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206d184c08ee3650515ac0a591045e72fe633bbf4459f5a7c4a711511a655487fc64736f6c63430008130033