0 txs
6 calls
constructor
constructor()
functions
credIdCounter
viewfunction credIdCounter() view returns (uint256)
credInfo
viewfunction credInfo(uint256 credId_) view returns (tuple)
credsMerkeRoot
viewfunction credsMerkeRoot(uint256 credId) view returns (bytes32 root)
curatePriceWhitelist
viewfunction curatePriceWhitelist(address priceCurve) view returns (bool enable)
getBatchBuyPrice
viewfunction getBatchBuyPrice(uint256[] credIds_, uint256[] amounts_) view returns (uint256)
getBatchSellPrice
viewfunction getBatchSellPrice(uint256[] credIds_, uint256[] amounts_) view returns (uint256)
getCreatorRoyalty
viewfunction getCreatorRoyalty(uint256 credId_) view returns (uint16 buyShareRoyalty, uint16 sellShareRoyalty)
getCredBuyPrice
viewfunction getCredBuyPrice(uint256 credId_, uint256 amount_) view returns (uint256)
getCredBuyPriceWithFee
viewfunction getCredBuyPriceWithFee(uint256 credId_, uint256 amount_) view returns (uint256)
getCredCreator
viewfunction getCredCreator(uint256 credId_) view returns (address)
getCredSellPrice
viewfunction getCredSellPrice(uint256 credId_, uint256 amount_) view returns (uint256)
getCredSellPriceWithFee
viewfunction getCredSellPriceWithFee(uint256 credId_, uint256 amount_) view returns (uint256)
getCuratorAddresses
viewfunction getCuratorAddresses(uint256 credId_, uint256 start_, uint256 stop_) view returns (address[])
getCuratorAddressesWithAmount
viewfunction getCuratorAddressesWithAmount(uint256 credId_, uint256 start_, uint256 stop_) view returns (tuple[])
getCuratorAddressLength
viewfunction getCuratorAddressLength(uint256 credId_) view returns (uint256)
getCurrentSupply
viewfunction getCurrentSupply(uint256 credId_) view returns (uint256)
getPositionsForCurator
viewfunction getPositionsForCurator(address curator_, uint256 start_, uint256 stop_) view returns (uint256[] credIds, uint256[] amounts)
getRoot
viewfunction getRoot(uint256 credId_) view returns (bytes32)
getShareNumber
viewfunction getShareNumber(uint256 credId_, address curator_) view returns (uint256)
isExist
viewfunction isExist(uint256 credId_) view returns (bool)
isShareHolder
viewfunction isShareHolder(uint256 credId_, address curator_) view returns (bool)
lastTradeTimestamp
viewfunction lastTradeTimestamp(uint256 credId, address curator) view returns (uint256 timestamp)
nonces
viewfunction nonces(address) view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingOwner
viewfunction pendingOwner() view returns (address)
phiRewardsAddress
viewfunction phiRewardsAddress() view returns (address)
phiSignerAddress
viewfunction phiSignerAddress() view returns (address)
protocolFeeDestination
viewfunction protocolFeeDestination() view returns (address)
protocolFeePercent
viewfunction protocolFeePercent() view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
SHARE_LOCK_PERIOD
viewfunction SHARE_LOCK_PERIOD() view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
version
purefunction version() pure returns (uint256)
acceptOwnership
nonpayablefunction acceptOwnership()
addToWhitelist
nonpayablefunction addToWhitelist(address address_)
batchBuyShareCred
payablefunction batchBuyShareCred(uint256[] credIds_, uint256[] amounts_, uint256[] maxPrices_, address curator_) payable
batchSellShareCred
nonpayablefunction batchSellShareCred(uint256[] credIds_, uint256[] amounts_, uint256[] minPrices_)
buyShareCred
payablefunction buyShareCred(uint256 credId_, uint256 amount_, uint256 maxPrice_) payable
createCred
payablefunction createCred(address creator_, bytes signedData_, bytes signature_, uint16 buyShareRoyalty_, uint16 sellShareRoyalty_, uint256 quantity_) payable
initialize
nonpayablefunction initialize(address phiSignerAddress_, address ownerAddress_, address protocolFeeDestination_, uint256 protocolFeePercent_, address bondingCurveAddress_, address phiRewardsAddress_)
pause
nonpayablefunction pause()
removeFromWhitelist
nonpayablefunction removeFromWhitelist(address address_)
renounceOwnership
nonpayablefunction renounceOwnership()
sellShareCred
nonpayablefunction sellShareCred(uint256 credId_, uint256 amount_, uint256 minPrice_)
setPhiRewardsAddress
nonpayablefunction setPhiRewardsAddress(address phiRewardsAddress_)
setPhiSignerAddress
nonpayablefunction setPhiSignerAddress(address phiSignerAddress_)
setProtocolFeeDestination
nonpayablefunction setProtocolFeeDestination(address protocolFeeDestination_)
setProtocolFeePercent
nonpayablefunction setProtocolFeePercent(uint256 protocolFeePercent_)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unPause
nonpayablefunction unPause()
updateCred
nonpayablefunction updateCred(bytes signedData_, bytes signature_)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AddedToWhitelist
event AddedToWhitelist(address indexed sender, address indexed whitelistedAddress)
CredCreated
event CredCreated(address indexed creator, uint256 credId, string credURL, string credType, string verificationType, uint256 quantity)
CredUpdated
event CredUpdated(address indexed creator, uint256 credId, string credURL)
Initialized
event Initialized(uint64 version)
MerkleTreeSetUp
event MerkleTreeSetUp(address changer, uint256 credId, bytes32 root)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PhiRewardsAddressSet
event PhiRewardsAddressSet(address phiRewardsAddress)
PhiSignerAddressSet
event PhiSignerAddressSet(address phiSignerAddress)
ProtocolFeeDestinationChanged
event ProtocolFeeDestinationChanged(address changer, address newDestination)
ProtocolFeePercentChanged
event ProtocolFeePercentChanged(address changer, uint256 newFee)
RemovedFromWhitelist
event RemovedFromWhitelist(address indexed sender, address indexed unwhitelistedAddress)
Royalty
event Royalty(address indexed creator, uint256 indexed credId, uint256 Amount)
Trade
event Trade(address indexed curator, uint256 indexed credId, bool isBuy, uint256 amount, uint256 ethAmount, uint256 protocolEthAmount, uint256 supply)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressNotSigned
error AddressNotSigned()
AlreadyClosed
error AlreadyClosed(uint256 credId)
CredNotClosed
error CredNotClosed()
DuplicateCredId
error DuplicateCredId()
EmptyArray
error EmptyArray()
EmptyBatchOperation
error EmptyBatchOperation()
EnforcedPause
error EnforcedPause()
EnumerableMapNonexistentKey
error EnumerableMapNonexistentKey(bytes32 key)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
IndexOutofBounds
error IndexOutofBounds()
InsufficientBatchPayment
error InsufficientBatchPayment()
InsufficientPayment
error InsufficientPayment()
InsufficientShares
error InsufficientShares()
InvalidAddressZero
error InvalidAddressZero()
InvalidAmount
error InvalidAmount()
InvalidArrayLength
error InvalidArrayLength()
InvalidChainId
error InvalidChainId()
InvalidCredId
error InvalidCredId()
InvalidCredType
error InvalidCredType()
InvalidInitialization
error InvalidInitialization()
InvalidMerkleRoot
error InvalidMerkleRoot()
InvalidNonce
error InvalidNonce()
InvalidPaginationParameters
error InvalidPaginationParameters()
InvalidQuantity
error InvalidQuantity()
InvalidRoyaltyRange
error InvalidRoyaltyRange()
InvalidVerificationType
error InvalidVerificationType()
MaxSupplyReached
error MaxSupplyReached()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
PriceBelowLimit
error PriceBelowLimit()
PriceExceedsLimit
error PriceExceedsLimit()
protocolFeePercentTooHigh
error protocolFeePercentTooHigh()
Reentrancy
error Reentrancy()
ShareLockPeriodNotPassed
error ShareLockPeriodNotPassed(uint256 currentBlock, uint256 unlockBlock)
SignatureExpired
error SignatureExpired()
Unauthorized
error Unauthorized()
UnauthorizedCaller
error UnauthorizedCaller()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
WrongCredId
error WrongCredId()
creation bytecode
0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516155696100fd60003960008181612a9501528181612abe0152612c3c01526155696000f3fe60806040526004361061034a5760003560e01c806390c6b912116101bb578063becf791c116100f7578063e30c397811610095578063f2fde38b1161006f578063f2fde38b14610a4a578063f4fd4ee414610a6a578063f7b188a514610a80578063facbc78914610a9557600080fd5b8063e30c3978146109f5578063e43252d714610a0a578063ea5d719114610a2a57600080fd5b8063ca8f8ff3116100d1578063ca8f8ff314610974578063ceedf7ce146109ac578063d6e6eb9f146109cc578063da29c6b9146109e257600080fd5b8063becf791c14610907578063c22364a114610927578063ca89f8a21461094757600080fd5b8063ad3cb1cc11610164578063af6d17051161013e578063af6d17051461087a578063b0499294146108a7578063b4123835146108c7578063ba38b7d5146108e757600080fd5b8063ad3cb1cc146107ce578063aee788ae14610824578063aefd96e51461084457600080fd5b8063a10786b011610195578063a10786b01461076e578063a49834211461078e578063a83d18ef146107ae57600080fd5b806390c6b912146106f457806396fdf45c146107215780639b24b3b01461074157600080fd5b8063613ef8d31161028a5780637cebbc9d116102335780638456cb591161020d5780638456cb5914610694578063860b6e1c146106a95780638ab1d681146106bf5780638da5cb5b146106df57600080fd5b80637cebbc9d146106175780637ecebe001461064757806383fb72991461067457600080fd5b8063729688ec11610264578063729688ec1461058157806373f6cb3f146105e257806379ba50971461060257600080fd5b8063613ef8d31461051f57806368cbe51d1461054c578063715018a61461056c57600080fd5b80634ce7957c116102f757806354fd4d50116102d157806354fd4d50146104955780635b1b9c71146104a95780635c975abb146104bc5780635f08f17a146104ff57600080fd5b80634ce7957c146104355780634f1ef2861461046d57806352d1902d1461048057600080fd5b8063396e48b111610328578063396e48b1146103a457806339ab9558146103d757806346f5303d1461040557600080fd5b806325512cd61461034f578063297b730c1461037157806332b5a1b314610384575b600080fd5b34801561035b57600080fd5b5061036f61036a36600461489d565b610acd565b005b61036f61037f3660046148b8565b610b53565b34801561039057600080fd5b5061036f61039f3660046148e4565b610b67565b3480156103b057600080fd5b506103c46103bf366004614951565b610daa565b6040519081526020015b60405180910390f35b3480156103e357600080fd5b506103f76103f2366004614973565b610e5d565b6040516103ce9291906149e2565b34801561041157600080fd5b506103c4610420366004614a07565b60009081526006602052604090206001015490565b34801561044157600080fd5b50600454610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103ce565b61036f61047b366004614af9565b61103a565b34801561048c57600080fd5b506103c4611059565b3480156104a157600080fd5b5060016103c4565b61036f6104b7366004614ba0565b611088565b3480156104c857600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff165b60405190151581526020016103ce565b34801561050b57600080fd5b506104ef61051a366004614c4b565b611127565b34801561052b57600080fd5b5061053f61053a3660046148b8565b61114c565b6040516103ce9190614c77565b34801561055857600080fd5b506103c4610567366004614cc4565b61120d565b34801561057857600080fd5b5061036f611361565b34801561058d57600080fd5b506105c761059c366004614a07565b60009081526006602052604090206005015461ffff600160a01b8204811692600160b01b9092041690565b6040805161ffff9384168152929091166020830152016103ce565b3480156105ee57600080fd5b506103c46105fd366004614951565b611375565b34801561060e57600080fd5b5061036f6113e2565b34801561062357600080fd5b506104ef61063236600461489d565b600a6020526000908152604090205460ff1681565b34801561065357600080fd5b506103c461066236600461489d565b600f6020526000908152604090205481565b34801561068057600080fd5b506103c461068f366004614951565b61142f565b3480156106a057600080fd5b5061036f611495565b3480156106b557600080fd5b506103c461a8c081565b3480156106cb57600080fd5b5061036f6106da36600461489d565b6114a5565b3480156106eb57600080fd5b506104556114f7565b34801561070057600080fd5b5061071461070f366004614a07565b61152c565b6040516103ce9190614d80565b34801561072d57600080fd5b506103c461073c366004614a07565b611805565b34801561074d57600080fd5b506103c461075c366004614a07565b60009081526007602052604090205490565b34801561077a57600080fd5b5061036f61078936600461489d565b61181c565b34801561079a57600080fd5b5061036f6107a9366004614a07565b6118a8565b3480156107ba57600080fd5b506103c46107c9366004614951565b61192e565b3480156107da57600080fd5b506108176040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516103ce9190614e88565b34801561083057600080fd5b506103c461083f366004614cc4565b61198b565b34801561085057600080fd5b5061045561085f366004614a07565b6000908152600660205260409020546001600160a01b031690565b34801561088657600080fd5b506103c4610895366004614a07565b60076020526000908152604090205481565b3480156108b357600080fd5b50600354610455906001600160a01b031681565b3480156108d357600080fd5b5061036f6108e2366004614edd565b611ad5565b3480156108f357600080fd5b5061036f610902366004614f3d565b611cf8565b34801561091357600080fd5b5061036f61092236600461489d565b611d3b565b34801561093357600080fd5b5061036f6109423660046148b8565b611db9565b34801561095357600080fd5b506109676109623660046148b8565b611dc6565b6040516103ce9190614fd7565b34801561098057600080fd5b506104ef61098f366004614a07565b6000908152600660205260409020546001600160a01b0316151590565b3480156109b857600080fd5b50600554610455906001600160a01b031681565b3480156109d857600080fd5b506103c460015481565b61036f6109f0366004615041565b611ddb565b348015610a0157600080fd5b50610455612384565b348015610a1657600080fd5b5061036f610a2536600461489d565b6123ad565b348015610a3657600080fd5b506103c4610a45366004614c4b565b612417565b348015610a5657600080fd5b5061036f610a6536600461489d565b61243a565b348015610a7657600080fd5b506103c460005481565b348015610a8c57600080fd5b5061036f6124bf565b348015610aa157600080fd5b506103c4610ab0366004614c4b565b600960209081526000928352604080842090915290825290205481565b806001600160a01b038116610af557604051630863a45360e11b815260040160405180910390fd5b610afd6124cf565b600580546001600160a01b0319166001600160a01b0384169081179091556040519081527fc707f63cab450384811a89fe8795cbfd3a1adc79a773167cab1f4fd7cfdfba44906020015b60405180910390a15050565b610b6283836001335b85612501565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610bb25750825b905060008267ffffffffffffffff166001148015610bcf5750303b155b905081158015610bdd575080155b15610c14576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c4857845468ff00000000000000001916680100000000000000001785555b610c518a612a4c565b610c59612a5d565b610c61612a6d565b6001600160a01b038916610c8857604051630863a45360e11b815260040160405180910390fd5b600160028190555060016000819055508a600360006101000a8154816001600160a01b0302191690836001600160a01b0316021790555088600460006101000a8154816001600160a01b0302191690836001600160a01b0316021790555085600560006101000a8154816001600160a01b0302191690836001600160a01b03160217905550876001819055506001600a6000896001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508315610d9d57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b600082815260066020526040808220600581015460019091015491517f5926dd94000000000000000000000000000000000000000000000000000000008152600481018690526024810192909252604482018490526001600160a01b031690635926dd94906064015b602060405180830381865afa158015610e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5491906150ec565b90505b92915050565b6001600160a01b0383166000908152600b6020526040812080546060928392918103610e8a575050611032565b841580610e975750815485115b15610ea457508054610ea7565b50835b808610610ec7576040516329d976df60e11b815260040160405180910390fd5b610ed1868261511b565b67ffffffffffffffff811115610ee957610ee9614a20565b604051908082528060200260200182016040528015610f12578160200160208202803683370190505b509350610f1f868261511b565b67ffffffffffffffff811115610f3757610f37614a20565b604051908082528060200260200182016040528015610f60578160200160208202803683370190505b5092506000865b82811015611029576000848281548110610f8357610f8361512e565b60009182526020808320909101546001600160a01b038d168352600c8252604080842082855290925291205490915060ff1615611020576000818152600860205260408120610fd2908c612a75565b905081888581518110610fe757610fe761512e565b602002602001018181525050808785815181106110065761100661512e565b60209081029190910101528361101b81615144565b945050505b50600101610f67565b50808552835250505b935093915050565b611042612a8a565b61104b82612b41565b6110558282612b49565b5050565b6000611063612c31565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b60008060008061109e8b8b8b8b8b8b6001612c7a565b9350935093509350348411156110e0576040517f1c92b1dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110f08b8b8b8b89888888613326565b60006110fc853461511b565b905080156111195761111981335b6001600160a01b031690613342565b505050505050505050505050565b60008281526008602052604081208190611141908461335e565b151595945050505050565b6060600061115b858585613385565b90506000815167ffffffffffffffff81111561117957611179614a20565b6040519080825280602002602001820160405280156111a2578160200160208202803683370190505b50905060005b8251811015611201578281815181106111c3576111c361512e565b6020026020010151600001518282815181106111e1576111e161512e565b6001600160a01b03909216602092830291909101909101526001016111a8565b509150505b9392505050565b60008060005b8581101561135757600660008888848181106112315761123161512e565b60209081029290920135835250810191909152604001600020600501546001600160a01b0316635926dd9488888481811061126e5761126e61512e565b90506020020135600660008b8b8781811061128b5761128b61512e565b905060200201358152602001908152602001600020600101548888868181106112b6576112b661512e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526004810195909552602485019390935250602090910201356044820152606401602060405180830381865afa15801561131f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134391906150ec565b61134d908361515d565b9150600101611213565b5095945050505050565b6113696124cf565b61137360006134f6565b565b600082815260066020526040808220600581015460019091015491517f27fef863000000000000000000000000000000000000000000000000000000008152600481018690526024810192909252604482018490526001600160a01b0316906327fef86390606401610e13565b33806113ec612384565b6001600160a01b0316146114235760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b61142c816134f6565b50565b600082815260066020526040808220600581015460019091015491517f5cf4ee910000000000000000000000000000000000000000000000000000000081526004810192909252602482018490526001600160a01b031690635cf4ee9190604401610e13565b61149d6124cf565b61137361352e565b6114ad6124cf565b6001600160a01b0381166000818152600a6020526040808220805460ff191690555133917fd288ab5da2e1f37cf384a1565a3f905ad289b092fbdd31950dbbfef148c04f8891a350565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b6115b160405180610160016040528060006001600160a01b031681526020016000815260200160608152602001606081526020016060815260200160006001600160a01b03168152602001600061ffff168152602001600061ffff168152602001600064ffffffffff168152602001600064ffffffffff168152602001600081525090565b60008281526006602090815260409182902082516101608101845281546001600160a01b0316815260018201549281019290925260028101805492939192918401916115fc90615170565b80601f016020809104026020016040519081016040528092919081815260200182805461162890615170565b80156116755780601f1061164a57610100808354040283529160200191611675565b820191906000526020600020905b81548152906001019060200180831161165857829003601f168201915b5050505050815260200160038201805461168e90615170565b80601f01602080910402602001604051908101604052809291908181526020018280546116ba90615170565b80156117075780601f106116dc57610100808354040283529160200191611707565b820191906000526020600020905b8154815290600101906020018083116116ea57829003601f168201915b5050505050815260200160048201805461172090615170565b80601f016020809104026020016040519081016040528092919081815260200182805461174c90615170565b80156117995780601f1061176e57610100808354040283529160200191611799565b820191906000526020600020905b81548152906001019060200180831161177c57829003601f168201915b505050918352505060058201546001600160a01b038116602083015261ffff600160a01b820481166040840152600160b01b820416606083015264ffffffffff600160c01b9091048116608083015260068301541660a082015260079091015460c09091015292915050565b6000818152600860205260408120610e579061359d565b806001600160a01b03811661184457604051630863a45360e11b815260040160405180910390fd5b61184c6124cf565b600480546001600160a01b0319166001600160a01b0384161790557f814a8b2bde1d43722074f07f31c975de57f0cd3b4b2d932295b828fb6456017633604080516001600160a01b039283168152918516602083015201610b47565b6118b06124cf565b6107d08111156118ec576040517fd8f6468200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600181905560408051338152602081018390527f6b757adb4bf53aa6b441b67402a73c06a4215774125bb968d6a6ca97291bc3ad91015b60405180910390a150565b600082815260066020526040812060058101546001909101546001600160a01b0390911690635cf4ee919061196490859061511b565b846040518363ffffffff1660e01b8152600401610e13929190918252602082015260400190565b60008060005b8581101561135757600660008888848181106119af576119af61512e565b60209081029290920135835250810191909152604001600020600501546001600160a01b03166327fef8638888848181106119ec576119ec61512e565b90506020020135600660008b8b87818110611a0957611a0961512e565b90506020020135815260200190815260200160002060010154888886818110611a3457611a3461512e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526004810195909552602485019390935250602090910201356044820152606401602060405180830381865afa158015611a9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac191906150ec565b611acb908361515d565b9150600101611991565b611add6135a8565b6003546040516001600160a01b0390911690611b4490611b0090879087906151aa565b604051809103902084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061360492505050565b6001600160a01b031614611b6b576040516302e87eed60e11b815260040160405180910390fd5b6000611b79848601866151da565b905042816000015111611b9f57604051630819bdcd60e01b815260040160405180910390fd5b46816040015114611bc357604051633d23e4d160e11b815260040160405180910390fd5b336000908152600f60209081526040909120549082015114611bf857604051633ab3447f60e11b815260040160405180910390fd5b60608101516000908152600660205260409020546001600160a01b03163314611c33576040516282b42960e81b815260040160405180910390fd5b60808101516060820151600090815260066020526040902060020190611c5990826152b7565b506060810151600090815260066020819052604090912001805464ffffffffff19164264ffffffffff16179055336001600160a01b03167f71b69d56d13606012cd413ede2f5a99b6177bad43de21d398a44551068f1217b82606001518360800151604051611cc9929190615377565b60405180910390a2336000908152600f60205260408120805491611cec83615144565b91905055505050505050565b600080600080611d0e8a8a8a8a8a8a6000612c7a565b9350935093509350611d258a8a8a8a87878761363e565b611d2f843361110a565b50505050505050505050565b806001600160a01b038116611d6357604051630863a45360e11b815260040160405180910390fd5b611d6b6124cf565b600380546001600160a01b0319166001600160a01b0384169081179091556040519081527fa70a4bec4dc4d2956ab3bed0bbfdfac5d515026411bbb80e62ec376e3c74c97890602001610b47565b610b628383600033610b5c565b6060611dd3848484613385565b949350505050565b611de36135a8565b6003546040516001600160a01b0390911690611e4a90611e06908a908a906151aa565b604051809103902087878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061360492505050565b6001600160a01b031614611e71576040516302e87eed60e11b815260040160405180910390fd5b6001600160a01b038816611e9857604051630863a45360e11b815260040160405180910390fd5b6000611ea687890189615390565b905042816000015111611ecc57604051630819bdcd60e01b815260040160405180910390fd5b60408101516001600160a01b03163314611ef8576040516282b42960e81b815260040160405180910390fd5b46816060015114611f1c57604051633d23e4d160e11b815260040160405180910390fd5b336000908152600f60209081526040909120549082015114611f5157604051633ab3447f60e11b815260040160405180910390fd5b60808101516001600160a01b03166000908152600a602052604090205460ff16611f8d576040516282b42960e81b815260040160405180910390fd5b60408051808201909152600581527f424153494300000000000000000000000000000000000000000000000000000060209182015260c082015180519101207fdc0ae866100b2876ab26eb62a50ca2cd083944f439e6d78aab2fc402e669e9ee14158015612059575060408051808201909152600881527f414456414e43454400000000000000000000000000000000000000000000000060209182015260c082015180519101207fff04394522143e039e702692e428748b66165358d906bfbe95e3c70021337e6b14155b15612090576040517f0ec857e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820190915260068152654d45524b4c4560d01b60209182015260e082015180519101207f21b070752c7648f446ee68750169a97e0be852d73314319e1ce51991be4fa2bd1480156120e95750610100810151155b15612120576040517f9dd854d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820190915260068152654d45524b4c4560d01b60209182015260e082015180519101207f21b070752c7648f446ee68750169a97e0be852d73314319e1ce51991be4fa2bd141580156121d5575060408051808201909152600981527f5349474e4154555245000000000000000000000000000000000000000000000060209182015260e082015180519101207f3bc94f020ffea26f68f6c97ba4adace4972b105480ed4a78141967040a183acc14155b1561220c576040517fa032d25900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113888461ffff16118061222557506113888361ffff16115b1561225c576040517f28b9f42e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003612296576040517f524f409b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006122b88a8360a001518460c001518560e0015186608001518a8a8a61366f565b90506122ef604051806040016040528060068152602001654d45524b4c4560d01b8152508360e0015161365990919063ffffffff16565b15612358576101008201516000828152600760205260409020557f57cc7bdb5babb1dff2cd29be197bdc046a1a85541c7dc2228b3747695a1e8bc933610100840151604080516001600160a01b0390931683526020830185905282015260600160405180910390a15b336000908152600f6020526040812080549161237383615144565b919050555050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0061151c565b6123b56124cf565b6001600160a01b0381166000818152600a60205260409020805460ff191660011790556123df3390565b6001600160a01b03167f0c4b48e75a1f7ab0a9a2f786b5d6c1f7789020403bff177fb54d46edb89ccc0060405160405180910390a350565b60008281526008602052604081208190612431908461335e565b95945050505050565b6124426124cf565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556124866114f7565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b6124c76124cf565b611373613887565b336124d86114f7565b6001600160a01b0316146113735760405163118cdaa760e01b815233600482015260240161141a565b6125096135a8565b60025460011461252c5760405163558a1e0360e11b815260040160405180910390fd5b6002805560008490036125525760405163162908e360e11b815260040160405180910390fd5b6000858152600660205260409020546001600160a01b0316612587576040516337b127cb60e11b815260040160405180910390fd5b6000858152600660205260408082206001810154815460058301549351635826e4dd60e01b8152600481018b905260248101839052604481018a90528815156064820152929491936001600160a01b0391821693839283921690635826e4dd90608401606060405180830381865afa158015612607573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262b9190615493565b92509250925088156126f55786158015906126595750868161264d848661515d565b612657919061515d565b115b1561267757604051633c9f8d0760e21b815260040160405180910390fd5b60646126838b8761515d565b11156126a25760405163d05cb60960e01b815260040160405180910390fd5b806126ad838561515d565b6126b7919061515d565b3410156126f0576040517fcd1c886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612816565b86158015906127175750868161270b848661511b565b612715919061511b565b105b156127355760405163b4d66e0f60e01b815260040160405180910390fd5b60008b81526009602090815260408083206001600160a01b038c1684529091529020546127659061a8c09061515d565b42116127d85760008b81526009602090815260408083206001600160a01b038c168452909152902054429061279d9061a8c09061515d565b6040517f976d56530000000000000000000000000000000000000000000000000000000081526004810192909252602482015260440161141a565b60008b81526008602052604081206127f0908a61335e565b9150508a81101561281457604051633999656760e01b815260040160405180910390fd5b505b6128228b898c8c6138df565b88156128a1578986600101600082825461283c919061515d565b90915550600090508183612850863461511b565b61285a919061511b565b612864919061511b565b9050801561287657612876813361110a565b5060008b81526009602090815260408083206001600160a01b038c16845290915290204290556128e3565b898660010160008282546128b5919061511b565b909155506128e39050816128c9848661511b565b6128d3919061511b565b6001600160a01b038a1690613342565b6004546128f9906001600160a01b031683613342565b6005546040517ff7f8266f0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526361a27e9360e11b602483015260606044830152600060648301529091169063f7f8266f9083906084016000604051808303818588803b15801561297557600080fd5b505af1158015612989573d6000803e3d6000fd5b50505050508a846001600160a01b03167f03a02fb26188b2b0d4622e8540d59215eeac10eaec81f36aebac781bacb2863c836040516129ca91815260200190565b60405180910390a34260078701556001860154604080518b15158152602081018d9052808201869052606081018590526080810192909252518c916001600160a01b038b16917f12d0646903287d48eb117ac55a8bcc90d4357c4180221d5b33e83e73860440ec9181900360a00190a350506001600255505050505050505050565b612a54613a07565b61142c81613a6e565b612a65613a07565b611373613ab9565b611373613a07565b6000610e54836001600160a01b038416613aec565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612b2357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612b177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156113735760405163703e46dd60e11b815260040160405180910390fd5b61142c6124cf565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612ba3575060408051601f3d908101601f19168201909252612ba0918101906150ec565b60015b612bcb57604051634c9c8ce360e01b81526001600160a01b038316600482015260240161141a565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612c27576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161141a565b610b628383613b4c565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113735760405163703e46dd60e11b815260040160405180910390fd5b60006060808089868114612ca157604051634ec4810560e11b815260040160405180910390fd5b808914612cc157604051634ec4810560e11b815260040160405180910390fd5b80600003612cfb576040517fdc388c9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff811115612d1457612d14614a20565b604051908082528060200260200182016040528015612d3d578160200160208202803683370190505b5093508067ffffffffffffffff811115612d5957612d59614a20565b604051908082528060200260200182016040528015612d82578160200160208202803683370190505b5092508067ffffffffffffffff811115612d9e57612d9e614a20565b604051908082528060200260200182016040528015612dc7578160200160208202803683370190505b50915060008167ffffffffffffffff811115612de557612de5614a20565b604051908082528060200260200182016040528015612e0e578160200160208202803683370190505b50905060005b828110156133155760008e8e83818110612e3057612e3061512e565b90506020020135905060008d8d84818110612e4d57612e4d61512e565b90506020020135905080600003612e775760405163162908e360e11b815260040160405180910390fd5b6000828152600660205260409020546001600160a01b0316612eac576040516337b127cb60e11b815260040160405180910390fd5b60005b83811015612f115782858281518110612eca57612eca61512e565b602002602001015103612f09576040517fb7dd914000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612eaf565b5081848481518110612f2557612f2561512e565b60209081029190910181019190915260008381526006909152604090819020600581015460018201549251635826e4dd60e01b8152600481018690526024810193909352604483018490528c1515606484015290916001600160a01b0390911690635826e4dd90608401606060405180830381865afa158015612fac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd09190615493565b8b8781518110612fe257612fe261512e565b602002602001018b8881518110612ffb57612ffb61512e565b602002602001018b89815181106130145761301461512e565b6020908102919091010192909252919052528a15613122578c8c8581811061303e5761303e61512e565b905060200201356000141580156130cd57508c8c858181106130625761306261512e565b9050602002013587858151811061307b5761307b61512e565b60200260200101518986815181106130955761309561512e565b60200260200101518b87815181106130af576130af61512e565b60200260200101516130c1919061515d565b6130cb919061515d565b115b156130eb57604051633c9f8d0760e21b815260040160405180910390fd5b60018101546064906130fe90849061515d565b111561311d5760405163d05cb60960e01b815260040160405180910390fd5b61321f565b8c8c858181106131345761313461512e565b905060200201356000141580156131c357508c8c858181106131585761315861512e565b905060200201358785815181106131715761317161512e565b602002602001015189868151811061318b5761318b61512e565b60200260200101518b87815181106131a5576131a561512e565b60200260200101516131b7919061511b565b6131c1919061511b565b105b156131e15760405163b4d66e0f60e01b815260040160405180910390fd5b60008381526008602052604081206131f9903361335e565b9150508281101561321d57604051633999656760e01b815260040160405180910390fd5b505b8a15613298578684815181106132375761323761512e565b60200260200101518885815181106132515761325161512e565b60200260200101518a868151811061326b5761326b61512e565b602002602001015161327d919061515d565b613287919061515d565b613291908b61515d565b9950613307565b8684815181106132aa576132aa61512e565b60200260200101518885815181106132c4576132c461512e565b60200260200101518a86815181106132de576132de61512e565b60200260200101516132f0919061511b565b6132fa919061511b565b613304908b61515d565b99505b505050806001019050612e14565b505050975097509750979350505050565b61333888888888888888886001613ba2565b5050505050505050565b60003860003884865af16110555763b12d13eb6000526004601cfd5b6000808080613376866001600160a01b038716613f91565b909450925050505b9250929050565b606060008215806133ab575060008581526008602052604090206133a89061359d565b83115b156133ce5760008581526008602052604090206133c79061359d565b90506133d1565b50815b8084106133f1576040516329d976df60e11b815260040160405180910390fd5b60006133fd858361511b565b67ffffffffffffffff81111561341557613415614a20565b60405190808252806020026020018201604052801561345a57816020015b60408051808201909152600080825260208201528152602001906001900390816134335790505b5090506000855b838110156134ea57600088815260086020526040812081906134839084613fcb565b915091506134918a83611127565b156134e0576040518060400160405280836001600160a01b03168152602001828152508585815181106134c6576134c661512e565b602002602001018190525083806134dc90615144565b9450505b5050600101613461565b50815295945050505050565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561105582613fda565b6135366135a8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b039091168152602001611923565b6000610e578261404b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611373576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e54613638846020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042090565b83614056565b61365087878787338888886000613ba2565b50505050505050565b8051602091820120825192909101919091201490565b60006001600160a01b03891661369857604051630863a45360e11b815260040160405180910390fd5b6000805481526006602052604080822080546001600160a01b0319166001600160a01b038d161790558154825290206002016136d489826152b7565b506000805481526006602052604090206003016136f188826152b7565b5060008054815260066020526040902060040161370e87826152b7565b5060008054815260066020526040808220600590810180546001600160a01b0319166001600160a01b038a1617905582548352818320810180547fffffff0000000000ffffffffffffffffffffffffffffffffffffffffffffffff16600160c01b4264ffffffffff160217905582548352818320810180547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff16600160a01b61ffff8a81169190910291909117909155835484529183200180547fffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff16600160b01b928716929092029190911790558054613809918490610b53565b886001600160a01b03167fc71b90be3a39fb376787655eba49c6d0f94bc6751519adb431e0c105294312cf6000548a8a8a8760405161384c9594939291906154c1565b60405180910390a26001600080828254613866919061515d565b909155505060005461387a9060019061511b565b9998505050505050505050565b61388f614100565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613585565b60008481526008602052604081206138f7908561335e565b9150508115613999578015801561393257506001600160a01b0384166000908152600c6020908152604080832088845290915290205460ff16155b1561397057613941858561415b565b6001600160a01b0384166000908152600c602090815260408083208884529091529020805460ff191660011790555b6139938461397e858461515d565b600088815260086020526040902091906141c1565b50613a00565b6139a3838261511b565b6000036139f0576139b485856141d7565b6001600160a01b0384166000908152600c602090815260408083208884528252808320805460ff19169055600890915290206139939085614476565b6139fe8461397e858461511b565b505b5050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611373576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613a76613a07565b6001600160a01b038116611423576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240161141a565b613ac1613a07565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b600081815260028301602052604081205480158015613b125750613b10848461448b565b155b15610e54576040517f02b566860000000000000000000000000000000000000000000000000000000081526004810184905260240161141a565b613b5582614497565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115613b9a57610b62828261450e565b61105561457b565b613baa6135a8565b600254600114613bcd5760405163558a1e0360e11b815260040160405180910390fd5b600280556001600160a01b038516613bf857604051630863a45360e11b815260040160405180910390fd5b60005b88811015613f805760008a8a83818110613c1757613c1761512e565b9050602002013590506000898984818110613c3457613c3461512e565b905060200201359050613c49828983876138df565b8315613c9f5760008281526006602052604081206001018054839290613c7090849061515d565b909155505060008281526009602090815260408083206001600160a01b038c1684529091529020429055613d2e565b60008281526009602090815260408083206001600160a01b038c168452909152902054613ccf9061a8c09061515d565b4211613d075760008281526009602090815260408083206001600160a01b038c168452909152902054429061279d9061a8c09061515d565b60008281526006602052604081206001018054839290613d2890849061511b565b90915550505b613d60868481518110613d4357613d4361512e565b60209081029190910101516004546001600160a01b031690613342565b60055485516001600160a01b039091169063f7f8266f90879086908110613d8957613d8961512e565b6020908102919091018101516000868152600690925260408083205490517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b0390911660048201526361a27e9360e11b6024820152606060448201526064810192909252906084016000604051808303818588803b158015613e1957600080fd5b505af1158015613e2d573d6000803e3d6000fd5b50505060008481526006602052604090205487518593506001600160a01b0390911691507f03a02fb26188b2b0d4622e8540d59215eeac10eaec81f36aebac781bacb2863c90889087908110613e8557613e8561512e565b6020026020010151604051613e9c91815260200190565b60405180910390a381886001600160a01b03167f12d0646903287d48eb117ac55a8bcc90d4357c4180221d5b33e83e73860440ec868d8d88818110613ee357613ee361512e565b905060200201358b8881518110613efc57613efc61512e565b60200260200101518b8981518110613f1657613f1661512e565b60209081029190910181015160008a815260068352604090819020600101548151961515875292860194909452928401919091526060830191909152608082015260a00160405180910390a350600090815260066020526040902042600790910155600101613bfb565b505060016002555050505050505050565b6000818152600283016020526040812054819080613fc057613fb3858561448b565b92506000915061337e9050565b60019250905061337e565b600080808061337686866145b3565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000610e57826145de565b60405160019083600052602083015160405260408351036140ab57604083015160ff81901c601b016020527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166060526140d1565b60418351036140cc57606083015160001a60205260408301516060526140d1565b600091505b6020600160806000855afa5191503d6140f257638baa579f6000526004601cfd5b600060605260405292915050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611373576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166000818152600b60209081526040808320805460018101825590845282842001869055838352600d8083528184208054600e8552838620898752855292852083905594845290915291906141b883615144565b91905055505050565b6000611dd3846001600160a01b038516846145e8565b6001600160a01b0381166000908152600b60205260408120549003614228576040517f521299a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166000818152600e60209081526040808320868452825280832054938352600b909152902054811061428f576040517f7b9674dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000908152600b602052604081208054839081106142b9576142b961512e565b906000526020600020015490508084146142ff576040517f360937eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0383166000908152600b60205260408120546143249060019061511b565b6001600160a01b0385166000908152600b6020526040812080549293509091839081106143535761435361512e565b9060005260206000200154905080600b6000876001600160a01b03166001600160a01b0316815260200190815260200160002085815481106143975761439761512e565b600091825260209091200155818410156143d2576001600160a01b0385166000908152600e6020908152604080832084845290915290208490555b6001600160a01b0385166000908152600b602052604090208054806143f9576143f9615513565b6000828152602080822083016000199081018390559092019092556001600160a01b038716808352600e825260408084208785528352808420849055908352600d909152902054156139fe576001600160a01b0385166000908152600d6020526040812080549161446983615529565b9190505550505050505050565b6000610e54836001600160a01b038416614605565b6000610e548383614622565b806001600160a01b03163b6000036144cd57604051634c9c8ce360e01b81526001600160a01b038216600482015260240161141a565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161452b9190615540565b600060405180830381855af49150503d8060008114614566576040519150601f19603f3d011682016040523d82523d6000602084013e61456b565b606091505b509150915061243185838361463a565b3415611373576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080806145c185856146af565b600081815260029690960160205260409095205494959350505050565b6000610e57825490565b60008281526002840160205260408120829055611dd384846146bb565b60008181526002830160205260408120819055610e5483836146c7565b60008181526001830160205260408120541515610e54565b60608261464f5761464a826146d3565b611206565b815115801561466657506001600160a01b0384163b155b156146a8576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161141a565b5080611206565b6000610e548383614715565b6000610e54838361473f565b6000610e54838361478e565b8051156146e35780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082600001828154811061472c5761472c61512e565b9060005260206000200154905092915050565b600081815260018301602052604081205461478657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610e57565b506000610e57565b600081815260018301602052604081205480156148775760006147b260018361511b565b85549091506000906147c69060019061511b565b905080821461482b5760008660000182815481106147e6576147e661512e565b90600052602060002001549050808760000184815481106148095761480961512e565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061483c5761483c615513565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610e57565b6000915050610e57565b80356001600160a01b038116811461489857600080fd5b919050565b6000602082840312156148af57600080fd5b610e5482614881565b6000806000606084860312156148cd57600080fd5b505081359360208301359350604090920135919050565b60008060008060008060c087890312156148fd57600080fd5b61490687614881565b955061491460208801614881565b945061492260408801614881565b93506060870135925061493760808801614881565b915061494560a08801614881565b90509295509295509295565b6000806040838503121561496457600080fd5b50508035926020909101359150565b60008060006060848603121561498857600080fd5b61499184614881565b95602085013595506040909401359392505050565b60008151808452602080850194506020840160005b838110156149d7578151875295820195908201906001016149bb565b509495945050505050565b6040815260006149f560408301856149a6565b828103602084015261243181856149a6565b600060208284031215614a1957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715614a5957614a59614a20565b60405290565b604051610120810167ffffffffffffffff81118282101715614a5957614a59614a20565b600067ffffffffffffffff80841115614a9e57614a9e614a20565b604051601f8501601f19908116603f01168101908282118183101715614ac657614ac6614a20565b81604052809350858152868686011115614adf57600080fd5b858560208301376000602087830101525050509392505050565b60008060408385031215614b0c57600080fd5b614b1583614881565b9150602083013567ffffffffffffffff811115614b3157600080fd5b8301601f81018513614b4257600080fd5b614b5185823560208401614a83565b9150509250929050565b60008083601f840112614b6d57600080fd5b50813567ffffffffffffffff811115614b8557600080fd5b6020830191508360208260051b850101111561337e57600080fd5b60008060008060008060006080888a031215614bbb57600080fd5b873567ffffffffffffffff80821115614bd357600080fd5b614bdf8b838c01614b5b565b909950975060208a0135915080821115614bf857600080fd5b614c048b838c01614b5b565b909750955060408a0135915080821115614c1d57600080fd5b50614c2a8a828b01614b5b565b9094509250614c3d905060608901614881565b905092959891949750929550565b60008060408385031215614c5e57600080fd5b82359150614c6e60208401614881565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015614cb85783516001600160a01b031683529284019291840191600101614c93565b50909695505050505050565b60008060008060408587031215614cda57600080fd5b843567ffffffffffffffff80821115614cf257600080fd5b614cfe88838901614b5b565b90965094506020870135915080821115614d1757600080fd5b50614d2487828801614b5b565b95989497509550505050565b60005b83811015614d4b578181015183820152602001614d33565b50506000910152565b60008151808452614d6c816020860160208601614d30565b601f01601f19169290920160200192915050565b60208152614d9a6020820183516001600160a01b03169052565b6020820151604082015260006040830151610160806060850152614dc2610180850183614d54565b91506060850151601f1980868503016080870152614de08483614d54565b935060808701519150808685030160a087015250614dfe8382614d54565b92505060a0850151614e1b60c08601826001600160a01b03169052565b5060c085015161ffff811660e08601525060e0850151610100614e438187018361ffff169052565b8601519050610120614e5d8682018364ffffffffff169052565b8601519050610140614e778682018364ffffffffff169052565b959095015193019290925250919050565b602081526000610e546020830184614d54565b60008083601f840112614ead57600080fd5b50813567ffffffffffffffff811115614ec557600080fd5b60208301915083602082850101111561337e57600080fd5b60008060008060408587031215614ef357600080fd5b843567ffffffffffffffff80821115614f0b57600080fd5b614f1788838901614e9b565b90965094506020870135915080821115614f3057600080fd5b50614d2487828801614e9b565b60008060008060008060608789031215614f5657600080fd5b863567ffffffffffffffff80821115614f6e57600080fd5b614f7a8a838b01614b5b565b90985096506020890135915080821115614f9357600080fd5b614f9f8a838b01614b5b565b90965094506040890135915080821115614fb857600080fd5b50614fc589828a01614b5b565b979a9699509497509295939492505050565b602080825282518282018190526000919060409081850190868401855b8281101561502257815180516001600160a01b03168552860151868501529284019290850190600101614ff4565b5091979650505050505050565b803561ffff8116811461489857600080fd5b60008060008060008060008060c0898b03121561505d57600080fd5b61506689614881565b9750602089013567ffffffffffffffff8082111561508357600080fd5b61508f8c838d01614e9b565b909950975060408b01359150808211156150a857600080fd5b506150b58b828c01614e9b565b90965094506150c8905060608a0161502f565b92506150d660808a0161502f565b915060a089013590509295985092959890939650565b6000602082840312156150fe57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e5757610e57615105565b634e487b7160e01b600052603260045260246000fd5b60006001820161515657615156615105565b5060010190565b80820180821115610e5757610e57615105565b600181811c9082168061518457607f821691505b6020821081036151a457634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b600082601f8301126151cb57600080fd5b610e5483833560208501614a83565b6000602082840312156151ec57600080fd5b813567ffffffffffffffff8082111561520457600080fd5b9083019060a0828603121561521857600080fd5b615220614a36565b8235815260208301356020820152604083013560408201526060830135606082015260808301358281111561525457600080fd5b615260878286016151ba565b60808301525095945050505050565b601f821115610b62576000816000526020600020601f850160051c810160208610156152985750805b601f850160051c820191505b818110156139fe578281556001016152a4565b815167ffffffffffffffff8111156152d1576152d1614a20565b6152e5816152df8454615170565b8461526f565b602080601f83116001811461531a57600084156153025750858301515b600019600386901b1c1916600185901b1785556139fe565b600085815260208120601f198616915b828110156153495788860151825594840194600190910190840161532a565b50858210156153675787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b828152604060208201526000611dd36040830184614d54565b6000602082840312156153a257600080fd5b813567ffffffffffffffff808211156153ba57600080fd5b9083019061012082860312156153cf57600080fd5b6153d7614a5f565b82358152602083013560208201526153f160408401614881565b60408201526060830135606082015261540c60808401614881565b608082015260a08301358281111561542357600080fd5b61542f878286016151ba565b60a08301525060c08301358281111561544757600080fd5b615453878286016151ba565b60c08301525060e08301358281111561546b57600080fd5b615477878286016151ba565b60e0830152506101009283013592810192909252509392505050565b6000806000606084860312156154a857600080fd5b8351925060208401519150604084015190509250925092565b85815260a0602082015260006154da60a0830187614d54565b82810360408401526154ec8187614d54565b905082810360608401526155008186614d54565b9150508260808301529695505050505050565b634e487b7160e01b600052603160045260246000fd5b60008161553857615538615105565b506000190190565b60008251615552818460208701614d30565b919091019291505056fea164736f6c6343000819000a