1 tx
2 calls
constructor
constructor(address token, address benefactor, uint256 _claimFee, address _feeCollector, address _feeSetter, address[] _postClaimHandlers, uint256 _maxClaimFee, bool _shouldPayClaimFeeOnlyOnce)
functions
BENEFACTOR
viewfunction BENEFACTOR() view returns (bytes32)
claimFee
viewfunction claimFee() view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
FEE_SETTER_ROLE
viewfunction FEE_SETTER_ROLE() view returns (bytes32)
feeCollector
viewfunction feeCollector() view returns (address)
feeSetter
viewfunction feeSetter() view returns (address)
getCalendarLeafAllocationData
viewfunction getCalendarLeafAllocationData(uint32 rootIndex, bytes decodableArgs, bytes32[] proof) view returns (tuple, tuple)
getCalendarLeafHash
purefunction getCalendarLeafHash(string allocationType, tuple allocation, tuple unlockSchedule) pure returns (bytes32)
getClaimFee
viewfunction getClaimFee(string allocationId) view returns (uint256)
getIntervalLeafAllocationData
viewfunction getIntervalLeafAllocationData(uint32 rootIndex, bytes decodableArgs, bytes32[] proof) view returns (tuple, tuple)
getIntervalLeafHash
purefunction getIntervalLeafHash(string allocationType, tuple allocation, tuple unlockSchedule) pure returns (bytes32)
getLeafJustAllocationData
viewfunction getLeafJustAllocationData(uint32 rootIndex, bytes decodableArgs, bytes32[] proof) view returns (tuple)
getPostClaimHandlers
viewfunction getPostClaimHandlers() view returns (address[] postClaimHandlers)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
merkleRoots
viewfunction merkleRoots(uint256) view returns (bytes32)
POST_CLAIM_HANDLER_MANAGER
viewfunction POST_CLAIM_HANDLER_MANAGER() view returns (bytes32)
schedules
viewfunction schedules(string) view returns (address withdrawalAddress, uint32 terminatedTimestamp, uint256 withdrawn, uint256 terminatedWithdrawn, uint256 fundedAmount, uint256 terminatedAmount)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
token
viewfunction token() view returns (address)
totalWithdrawn
viewfunction totalWithdrawn() view returns (uint256)
validateLeaf
purefunction validateLeaf(bytes32 merkleRoot, bytes leafArguments, bytes32[] proof) pure
version
viewfunction version() view returns (string)
addAllocationRoot
nonpayablefunction addAllocationRoot(bytes32 merkleRoot) returns (uint256)
addPostClaimHandlerToWhitelist
nonpayablefunction addPostClaimHandlerToWhitelist(address postClaimHandler)
cancel
nonpayablefunction cancel(uint32 rootIndex, bytes decodableArgs, bytes32[] proof)
defund
nonpayablefunction defund(uint256 amount)
fund
nonpayablefunction fund(uint256 amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
removePostClaimHandlerToWhitelist
nonpayablefunction removePostClaimHandlerToWhitelist(address postClaimHandler)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
rescueTokens
nonpayablefunction rescueTokens(address _errantTokenAddress, address _rescueAddress)
revoke
nonpayablefunction revoke(uint32 rootIndex, bytes decodableArgs, bytes32[] proof)
revokeAll
nonpayablefunction revokeAll()
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setClaimFee
nonpayablefunction setClaimFee(uint256 _claimFee)
transferBeneficiaryAddress
nonpayablefunction transferBeneficiaryAddress(address newBeneficiaryAddress, uint32 rootIndex, bytes decodableArgs, bytes32[] proof)
withdraw
payablefunction withdraw(uint256 withdrawalAmount, uint32 rootIndex, bytes decodableArgs, bytes32[] proof, address postClaimHandler, bytes extraData) payable
withdraw
payablefunction withdraw(uint256 withdrawalAmount, uint32 rootIndex, bytes decodableArgs, bytes32[] proof) payable
events
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
ScheduleCanceled
event ScheduleCanceled(string id)
ScheduleRevoked
event ScheduleRevoked(string id)
TransferredBeneficiary
event TransferredBeneficiary(string id, address newBeneficiary)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
AlreadyFullyUnlocked
error AlreadyFullyUnlocked()
AlreadyTerminated
error AlreadyTerminated()
AmountZero
error AmountZero()
ClaimFeeExceedsMaximum
error ClaimFeeExceedsMaximum()
ClaimHandlerAlreadyWhitelisted
error ClaimHandlerAlreadyWhitelisted()
ClaimHandlerNotYetWhitelisted
error ClaimHandlerNotYetWhitelisted()
DeflationaryTokensNotSupported
error DeflationaryTokensNotSupported()
FailedInnerCall
error FailedInnerCall()
InsufficientFunds
error InsufficientFunds()
InvalidAllocation
error InvalidAllocation()
InvalidAllocationType
error InvalidAllocationType()
InvalidFeeCollector
error InvalidFeeCollector()
InvalidFeeFundsSent
error InvalidFeeFundsSent()
InvalidFeeSetter
error InvalidFeeSetter()
InvalidMerkleProof
error InvalidMerkleProof()
InvalidToken
error InvalidToken()
InvalidWithdrawal
error InvalidWithdrawal()
NotCancellable
error NotCancellable()
NotRevokable
error NotRevokable()
NotTransferable
error NotTransferable()
PostClaimHandlerNotWhitelisted
error PostClaimHandlerNotWhitelisted()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SameBeneficiaryAddress
error SameBeneficiaryAddress()
ZeroBeneficiary
error ZeroBeneficiary()
ZeroToken
error ZeroToken()
creation bytecode
0x610120604052346102a4576149648038038061001a816102dc565b9283398101610100828203126102a45761003382610301565b9161004060208201610301565b60408201519161005260608201610301565b9361005f60808301610301565b60a08301519096906001600160401b0381116102a457830182601f820112156102a4578051926001600160401b0384116102c8578360051b916020806100a68186016102dc565b8097815201938201019182116102a457602001915b8183106102a85750505060e060c08401519301519384151585036102a457600180556001600160a01b03821615610295576001600160a01b038116156102865761011b9160805261010b81610315565b506101158161038b565b5061041e565b5080515f5b8181106102415750505080831161023257600883905560a05260c0526001600160a01b038216156101fc575b5060e0526001600160a01b0381166101ed575b6101005260405161430c90816105b882396080518181816101eb0152818161059801528181610d100152818161153c015281816118af01528181611b5701528181611c1801528181611e64015261224e015260a05181612b3a015260c0518181816136f80152613f0a015260e05181818161070c01528181612b610152613f6e0152610100518161107e0152f35b6101f6816104b1565b5061015f565b6001600160a01b03831661022357610214575f61014c565b63bb0bac9960e01b5f5260045ffd5b63ff29305760e01b5f5260045ffd5b63a1e2d51d60e01b5f5260045ffd5b825181101561027257600581901b8301602001516001919061026b906001600160a01b0316610544565b5001610120565b634e487b7160e01b5f52603260045260245ffd5b63776cceeb60e01b5f5260045ffd5b63ad1991f560e01b5f5260045ffd5b5f80fd5b82516001600160a01b03811681036102a4578152602092830192016100bb565b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f191682016001600160401b038111838210176102c857604052565b51906001600160a01b03821682036102a457565b6001600160a01b0381165f9081525f5160206149445f395f51905f52602052604090205460ff16610386576001600160a01b03165f8181525f5160206149445f395f51905f5260205260408120805460ff191660011790553391905f5160206148c45f395f51905f528180a4600190565b505f90565b6001600160a01b0381165f9081525f5160206148e45f395f51905f52602052604090205460ff16610386576001600160a01b03165f8181525f5160206148e45f395f51905f5260205260408120805460ff191660011790553391907f66fbe0d77ee8b64a048b3986d02e26607f216597947c12d07d7b52245d7487cf905f5160206148c45f395f51905f529080a4600190565b6001600160a01b0381165f9081525f5160206149045f395f51905f52602052604090205460ff16610386576001600160a01b03165f8181525f5160206149045f395f51905f5260205260408120805460ff191660011790553391907f6f51f874e644f7ce58205aa35351ddb40924d1ef8d58d9d6664fb464dc58e457905f5160206148c45f395f51905f529080a4600190565b6001600160a01b0381165f9081525f5160206149245f395f51905f52602052604090205460ff16610386576001600160a01b03165f8181525f5160206149245f395f51905f5260205260408120805460ff191660011790553391907fe6ad9a47fbda1dc18de1eb5eeb7d935e5e81b4748f3cfc61e233e64f88182060905f5160206148c45f395f51905f529080a4600190565b805f52600360205260405f2054155f1461038657600254680100000000000000008110156102c8576001810180600255811015610272577f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018190556002545f918252600360205260409091205560019056fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a714612eb9575080630b88b8ca14612d645780630d87d62c14612c4f5780632447234a14612c14578063248a9ca314612be95780632e75ab5014612ae35780632f2ff15d14612aa5578063365636c4146128cf57806336568abe1461288a5780633c7c1d89146127f05780633f10db5c1461249957806343a8eb0d14611cd65780634b31971314611cb85780635431c94e14611bd757806354fd4d5014611b84578063639ddaad14611b2c5780636ca1c5bd14611ae2578063704075c914611a9f57806371c5ecb114611a655780638612372a146113c257806386d5e6de146110ad57806387cf3ef41461106857806391d148541461101f57806397866c8a14610f7857806398d6187614610dd257806399d32fc414610db4578063a217fddf14610d98578063a340fff414610cda578063ac9650d814610b33578063c01cb1ea14610886578063c17a656d1461073b578063c415b95c146106f6578063ca1d209d1461055f578063d547741f14610518578063d791b0dd14610413578063daa1f8ae146103d8578063e93476831461039d578063f26baa5114610267578063f68d21c11461021d5763fc0c546a146101d6575f80fd5b3461021a578060031936011261021a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b80fd5b503461021a57602036600319011261021a5761025061023a6131a2565b6102426137fa565b6001600160a01b0316614190565b156102585780f35b637a849d0360e01b8152600490fd5b503461021a57606036600319011261021a576024356001600160401b03811161039957610298903690600401613034565b6044356001600160401b038111610395576102b7903690600401613078565b916040516102e46020828180820195805191829101875e810188838201520301601f198101835282612ff8565b519020906102f1836136c1565b926102ff6040519485612ff8565b808452602084019060051b82019136831161039157905b8282106103815750505082905b8251821015610365576103368284613777565b5190818110156103545784526020526001604084205b910190610323565b90845260205260016040842061034c565b8390600435036103725780f35b63582f497d60e11b8152600490fd5b8135815260209182019101610316565b8580fd5b8280fd5b5080fd5b503461021a578060031936011261021a5760206040517fe6ad9a47fbda1dc18de1eb5eeb7d935e5e81b4748f3cfc61e233e64f881820608152f35b503461021a578060031936011261021a5760206040517f66fbe0d77ee8b64a048b3986d02e26607f216597947c12d07d7b52245d7487cf8152f35b503461021a578060031936011261021a57600254610430816136c1565b61043d6040519182612ff8565b818152610449826136c1565b602082019290601f1901368437600254845b8281106104b05750505090604051928392602084019060208552518091526040840192915b81811061048e575050500390f35b82516001600160a01b0316845285945060209384019390920191600101610480565b8181101561050457600286527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81015460019190600388901b1c6001600160a01b03166104fd8287613777565b520161045b565b634e487b7160e01b86526032600452602486fd5b503461021a57604036600319011261021a5761055b60043561053861318c565b90610556610551825f525f602052600160405f20015490565b613869565b61399d565b5080f35b503461021a57602036600319011261021a5760043561057c613929565b80156106e7576040516370a0823160e01b8152306004820152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602083602481855afa9283156106dc5784936106a6575b5061061f60209160249461061a6040516323b872dd60e01b86820152338882015230604482015283606482015260648152610614608482612ff8565b8661401a565b613ef9565b91604051938480926370a0823160e01b82523060048301525afa91821561069b578392610663575b5003610654576001805580f35b631fff570160e01b8152600490fd5b9091506020813d602011610693575b8161067f60209383612ff8565b8101031261068f5751905f610647565b5f80fd5b3d9150610672565b6040513d85823e3d90fd5b92506020833d6020116106d4575b816106c160209383612ff8565b8101031261068f5791519161061f6105d8565b3d91506106b4565b6040513d86823e3d90fd5b6365e52d5160e11b8252600482fd5b503461021a578060031936011261021a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461021a5761077f8161074e366130a8565b61075c959195939293613929565b61076461378b565b604051630361f58b60e21b81529586948594600486016135a7565b0381305afa90811561087b578291610859575b5060208101516001600160a01b03161561084a5760808101511561083b5763ffffffff6107bf82516131cc565b5460a01c1661082c57610822816107f77f0f82d0e25d66c620ba5a555f9a45859c28a70de61213b47f33a1eb73fc818ad493516131cc565b805463ffffffff60a01b1916600160a01b179055516040516020808252909283929091830190613106565b0390a16001805580f35b632aaa685560e11b8252600482fd5b633c34e69d60e01b8252600482fd5b6305d7ba1960e11b8252600482fd5b61087591503d8084833e61086d8183612ff8565b81019061357f565b5f610792565b6040513d84823e3d90fd5b503461021a57610895366130a8565b926108a1929192613929565b6108a961378b565b604051630361f58b60e21b8152938585806108ca84888888600486016135a7565b0381305afa948515610b28578695610b0c575b5060208501516001600160a01b031615610afd57606085015115610aee5763ffffffff61090a86516131cc565b5460a01c16610adf579082916109208794613a1d565b15610a2c57610944906040519586948594630fc436d760e21b8652600486016135a7565b0381305afa801561069b576020918491610a08575b50015180515f198101919082116109f45763ffffffff9161097991613777565b51164210156109e5576108227f9f1d738a56ddc883f3f29598f2e7af90b537ab8374d15368d7c3e05010b54975915b6109b281516131cc565b805463ffffffff60a01b19164260a01b63ffffffff60a01b16179055516040516020808252909283929091830190613106565b636aea161960e01b8252600482fd5b634e487b7160e01b84526011600452602484fd5b610a2491503d8086833e610a1c8183612ff8565b810190613d20565b90505f610959565b610a4b90604051958694859463436af36f60e11b8652600486016135a7565b0381305afa801561069b576020918491610abb575b50015180515f198101919082116109f457610a8363ffffffff92610a8992613777565b51614156565b164210156109e5576108227f9f1d738a56ddc883f3f29598f2e7af90b537ab8374d15368d7c3e05010b54975916109a8565b610ad791503d8086833e610acf8183612ff8565b810190613be8565b90505f610a60565b632aaa685560e11b8652600486fd5b6367909b1560e01b8652600486fd5b6305d7ba1960e11b8652600486fd5b610b219195503d8088833e61086d8183612ff8565b935f6108dd565b6040513d88823e3d90fd5b503461021a57602036600319011261021a576004356001600160401b03811161039957610b64903690600401613078565b906020604051610b748282612ff8565b84815281810191601f198101368437610b8c856136c1565b93610b9a6040519586612ff8565b858552601f19610ba9876136c1565b01875b818110610ccb57505036819003601e190190875b87811015610c6c578060051b82013583811215610c68578201908135916001600160401b038311610c645785018a833603821361021a5780610c489289610c346001978b8e6040519483869484860198893784019083820190898252519283915e010185815203601f198101835282612ff8565b5190305af4610c41613eca565b90306140f8565b610c52828a613777565b52610c5d8189613777565b5001610bc0565b8a80fd5b8980fd5b83898860405191838301848452825180915260408401948060408360051b870101940192955b828710610c9f5785850386f35b909192938280610cbb600193603f198a82030186528851613106565b9601920196019592919092610c92565b60608782018501528301610bac565b503461021a578060031936011261021a57610cf3613929565b610cfb61378b565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316602082602481845afa90811561069b578391610d62575b610d5b92503390613e88565b6001805580f35b90506020823d602011610d90575b81610d7d60209383612ff8565b8101031261068f57610d5b915190610d4f565b3d9150610d70565b503461021a578060031936011261021a57602090604051908152f35b503461021a578060031936011261021a576020600854604051908152f35b503461021a57606036600319011261021a576004356001600160401b03811161039957610e03903690600401612f0c565b906024356001600160401b038111610f745760e06003198236030112610f7457604435936001600160401b03851161021a57846004019480360392604060031985011261039557610e96610e83610ea492610e6e6040519860208a019a60608c5260808b0191613301565b888103601f190160408a01529060040161335f565b868103601f190160608801529780613321565b604089526040890191613301565b9260248201359060221901811215610395570191602460048401359301956001600160401b038411610395578360071b3603871361039557808203602091820152838252019491905b818110610f1757505050610f0c8160209403601f198101835282612ff8565b519020604051908152f35b90919460808060019263ffffffff610f2e8a612f4c565b16815263ffffffff610f4260208b01612f4c565b16602082015263ffffffff610f5960408b01612f4c565b16604082015260608981013590820152019601929101610eed565b8380fd5b503461021a57602036600319011261021a57610f92613929565b610f9a61378b565b600754600160401b81101561100b57610fbc816001610fd793016007556132c0565b6004929192359083549060031b91821b915f19901b19161790565b90556007545f19810191908211610ff75760208260018055604051908152f35b634e487b7160e01b81526011600452602490fd5b634e487b7160e01b82526041600452602482fd5b503461021a57604036600319011261021a57604061103b61318c565b91600435815280602052209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b503461021a578060031936011261021a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461021a576110bc366131eb565b949190926110c86135d9565b50606060206040516110d981612fa7565b828152015281810193606082860312610f745781356001600160401b0381116113be5785611108918401613034565b5060208201356001600160401b0381116113be578561112891840161362a565b9660408301356001600160401b03811161039157830196604088880312610391576040519761115689612fa7565b80356001600160401b0381116113ba5788611172918301613034565b89526020810135906001600160401b0382116113ba570187601f820112156113b6578035906111a0826136c1565b986111ae6040519a8b612ff8565b828a526020808b019360071b83010191818311610c6857602001925b82841061135b57505050506111e590602089019788526132c0565b90549060031b1c91303b15610391578593929161121791604051968795869563f26baa5160e01b8752600487016136d8565b0381305afa801561087b57908291611346575b505083929161123c6112bd95516131cc565b60046040519161124b83612f8c565b63ffffffff815460018060a01b038116855260a01c166020840152600181015460408401526002810154606084015260038101546080840152015460a082015283516040519561129a87612f5d565b8652602086015260408501526112d5604051958695604087526040870190613249565b93858503602087015251604085526040850190613106565b905183820360209485015280518083529184019301915b8181106112fa575050500390f35b91935091602060806001926060875163ffffffff815116835263ffffffff85820151168584015263ffffffff6040820151166040840152015160608201520194019101918493926112ec565b8161135091612ff8565b61021a57805f61122a565b608084830312610c6857602060809160405161137681612fc2565b61137f87612f4c565b815261138c838801612f4c565b8382015261139c60408801612f4c565b6040820152606087013560608201528152019301926111ca565b8680fd5b8780fd5b8480fd5b50608036600319011261021a576004356113da612f39565b6044356001600160401b038111610f74576113f9903690600401613034565b926064356001600160401b03811161039957611419903690600401613078565b9490926020958360405161142d8982612ff8565b52611436613929565b61143f83613a1d565b1561178857906114668493926040519687948594630fc436d760e21b8652600486016135a7565b0381305afa92831561177b5781928294611759575b506040858501519401519280519563ffffffff61149d604089015198516131cc565b5460a01c1696849763ffffffff42169080155f1461174357505b85985b88518a1015611730578163ffffffff6114d38c8c613777565b5116116114f9576114f16001916114ea8c8b613777565b5190613ef9565b9901986114ba565b92959850509194506115279295505b8082101561172957505b600161151f8551516131cc565b015490613756565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169291908281602481875afa90811561171e5787916116f1575b506115888551613949565b808210156116e95750925b61159e815151613f06565b516115a981516131cc565b92600184019384549260028201966115c68161061a8a5488613ef9565b9860408301998a51106116da57808281116116cb5782156116bc579061161d94939291156116b5575b808210156116ab57509586925b546001600160a01b0316806116a2575001516001600160a01b031693613ef9565b845561162b83600454613ef9565b6004555f805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5415611693579161166d91611676959493613e88565b54905490613ef9565b905110611684576001805580f35b63c945242d60e01b8152600490fd5b63ca1517e960e01b8752600487fd5b91505093613ef9565b90509586926115fc565b50806115ef565b6365e52d5160e11b8c5260048cfd5b63356680b760e01b8c5260048cfd5b63c945242d60e01b8b5260048bfd5b905092611593565b90508281813d8311611717575b6117088183612ff8565b8101031261068f57515f61157d565b503d6116fe565b6040513d89823e3d90fd5b9050611512565b9295985050919450611527929550611508565b908082101561175257506114b7565b90506114b7565b9093506117719192503d8084833e610a1c8183612ff8565b919091925f61147b565b50604051903d90823e3d90fd5b906117ac8497949392604051968794859463436af36f60e11b8652600486016135a7565b0381305afa9182156106dc5784908593611a46575b50816117d963ffffffff82604085015101511661424f565b93019081518051905f198201918211611a32576117f991610a8391613777565b5085805b8351805189101561186f5760019161186188888c89606061185863ffffffff604061184c8683806118326118679f8490613777565b51511699611841838a51613777565b510151169651613777565b51015116938d51613777565b51015192614286565b90613ef9565b9701966117fd565b50919450955061189a9150600161151f8551926040840151908082105f14611a2a5750925b516131cc565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169291908281602481875afa90811561171e5787916119fd575b506118fb8551613949565b808210156119f55750925b611911815151613f06565b5161191c81516131cc565b92600184019384549260028201966119398161061a8a5488613ef9565b9860408301998a51106116da57808281116116cb5782156116bc579061198e94939291156116b557808210156116ab5750958692546001600160a01b0316806116a2575001516001600160a01b031693613ef9565b845561199c83600454613ef9565b6004555f805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5415611693579161166d916119de959493613e88565b90511015610d5b5763c945242d60e01b8152600490fd5b905092611906565b90508281813d8311611a23575b611a148183612ff8565b8101031261068f57515f6118f0565b503d611a0a565b905092611894565b634e487b7160e01b88526011600452602488fd5b9050611a5d9192503d8086833e610acf8183612ff8565b91905f6117c1565b503461021a57602036600319011261021a576004359060075482101561021a576020611a90836132c0565b90549060031b1c604051908152f35b503461021a57602036600319011261021a57600435906001600160401b03821161021a576020611ada611ad53660048601613034565b6136f6565b604051908152f35b503461021a57602036600319011261021a57611b15611aff6131a2565b611b076137fa565b6001600160a01b031661408d565b15611b1d5780f35b6303a049e560e61b8152600490fd5b503461021a57602036600319011261021a57611b46613929565b611b4e61378b565b610d5b600435337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316613e88565b503461021a578060031936011261021a5750611bd3604051611ba7604082612ff8565b600b81526a3234b9ba2fbb191718971960a91b6020820152604051918291602083526020830190613106565b0390f35b503461021a57604036600319011261021a57611bf16131a2565b611bf961318c565b90611c02613929565b611c0a61378b565b6001600160a01b03908116907f0000000000000000000000000000000000000000000000000000000000000000168114611ca9576040516370a0823160e01b815230600482015291602083602481855afa9182156106dc578492611c73575b610d5b9350613e88565b91506020833d602011611ca1575b81611c8e60209383612ff8565b8101031261068f57610d5b925191611c69565b3d9150611c81565b63c1ab6dc160e01b8352600483fd5b503461021a578060031936011261021a576020600454604051908152f35b5060c036600319011261021a57600435611cee612f39565b906044356001600160401b038111610f7457611d0e903690600401613034565b926064356001600160401b03811161039957611d2e903690600401613078565b9290946084359460018060a01b038616809603610f745760a4356001600160401b0381116113be57611d64903690600401613034565b94611d6d613929565b611d7683613a1d565b156121265790611d9d859392604051998a948594630fc436d760e21b8652600486016135a7565b0381305afa93841561087b5782958395612104575b50604060208601519501519580519463ffffffff611dd5604088015197516131cc565b5460a01c1695859663ffffffff42169080155f146120ee57505b86975b89518910156120da578163ffffffff611e0b8b8d613777565b511611611e2a57611e226001916114ea8b8e613777565b980197611df2565b929598505091949750611e4f929550808210156117295750600161151f8551516131cc565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316929190602081602481875afa9081156120cf57889161209d575b50611eb18551613949565b808210156120955750925b611ec7815151613f06565b5191611ed383516131cc565b9260018401958654936002860196611ef08161061a8a5489613ef9565b99604085019a8b511061208657808281116120775782156120685715612061575b808210156120595750955b546001600160a01b0316868161204f5760208501516001600160a01b031696611f459250613ef9565b8855611f5386600454613ef9565b600455611f6b825f52600360205260405f2054151590565b15612040578992919081611f8c57505050509161166d916116769593613e88565b611f9c8783879994959699613e88565b60018060a01b03602085015116935194833b156113ba57612011889692611fff88946040519a8b998a988997631cd8393d60e31b895260048901526024880152604487015260018060a01b0316606486015260c0608486015260c4850190613106565b8381036003190160a485015290613106565b03925af1801561087b5761202b575b50506116769161166d565b8161203591612ff8565b610f7457835f612020565b63ca1517e960e01b8a5260048afd5b611f459196613ef9565b905095611f1c565b5080611f11565b6365e52d5160e11b8d5260048dfd5b63356680b760e01b8d5260048dfd5b63c945242d60e01b8c5260048cfd5b905092611ebc565b90506020813d6020116120c7575b816120b860209383612ff8565b8101031261068f57515f611ea6565b3d91506120ab565b6040513d8a823e3d90fd5b929598505091949750611e4f929550611508565b90808210156120fd5750611def565b9050611def565b90945061211c9195503d8084833e610a1c8183612ff8565b949094935f611db2565b9061214e859694959392604099989951988994859463436af36f60e11b8652600486016135a7565b0381305afa92831561248d578094819461246b575b50602061217c63ffffffff82604089015101511661424f565b94019283518051905f1982019182116109f45761219c91610a8391613777565b50819682975b855180518a101561220d57600191611861898c8a63ffffffff6121c88361220598613777565b51511691606061185863ffffffff60206121e3858751613777565b510151169263ffffffff60406121fa838851613777565b510151169451613777565b9801976121a2565b50919694509450612239919650600161151f8551926040840151908082105f14611a2a575092516131cc565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316929190602081602481875afa9081156120cf578891612439575b5061229b8551613949565b808210156124315750925b6122b1815151613f06565b51916122bd83516131cc565b92600184019586549360028601966122da8161061a8a5489613ef9565b99604085019a8b51106120865780828111612077578215612068571561242a575b808210156124225750955b546001600160a01b031686816124185760208501516001600160a01b03169661232f9250613ef9565b885561233d86600454613ef9565b600455612355825f52600360205260405f2054151590565b1561204057899291908161237657505050509161166d916119de9593613e88565b6123868783879994959699613e88565b60018060a01b03602085015116935194833b156113ba576123e9889692611fff88946040519a8b998a988997631cd8393d60e31b895260048901526024880152604487015260018060a01b0316606486015260c0608486015260c4850190613106565b03925af1801561087b57612403575b50506119de9161166d565b8161240d91612ff8565b610f7457835f6123f8565b61232f9196613ef9565b905095612306565b50806122fb565b9050926122a6565b90506020813d602011612463575b8161245460209383612ff8565b8101031261068f57515f612290565b3d9150612447565b9093506124839194503d8085833e610acf8183612ff8565b939093925f612163565b604051903d90823e3d90fd5b503461021a576124a8366131eb565b929094916124b46135d9565b506060604080516124c481612f5d565b828152826020820152015280820191606081840312610f745780356001600160401b0381116113be57836124f9918301613034565b5060208101356001600160401b0381116113be578361251991830161362a565b9660408201356001600160401b03811161039157820195606087860312610391576040519761254789612f5d565b87356001600160401b0381116113ba5786612563918a01613034565b895260208801356001600160401b0381116113ba5788019786601f8a0112156113ba578835986125928a6136c1565b996125a06040519b8c612ff8565b808b526020808c019160051b83010191898311610c6457602001905b8282106127d85750505060208a019889526040810135906001600160401b0382116127d457019580601f880112156113ba5786356125f9816136c1565b97612607604051998a612ff8565b8189526020808a019260051b820101928311610c6857602001905b8282106127c45750505061263c9060408a019687526132c0565b90549060031b1c91303b156113b6578693929161266e91604051968795869563f26baa5160e01b8752600487016136d8565b0381305afa801561069b579083916127af575b50509184939261269461271596516131cc565b6004604051916126a383612f8c565b63ffffffff815460018060a01b038116855260a01c166020840152600181015460408401526002810154606084015260038101546080840152015460a08201528451604051966126f288612f5d565b87526020870152604086015261272d604051968796604088526040880190613249565b94868603602088015251606086526060860190613106565b915191848103602086015260208084519283815201930190845b8181106127905750505051926040818303910152602080845192838152019301915b818110612777575050500390f35b8251845285945060209384019390920191600101612769565b825163ffffffff16855288975060209485019490920191600101612747565b816127b991612ff8565b61039957815f612681565b8135815260209182019101612622565b8880fd5b602080916127e584612f4c565b8152019101906125bc565b503461021a57602036600319011261021a57600435906001600160401b03821161021a5760c06020806128263660048701613034565b604051928184925191829101835e810160068152030190208054906001810154906002810154600460038301549201549263ffffffff6040519560018060a01b038116875260a01c16602086015260408501526060840152608083015260a0820152f35b503461021a57604036600319011261021a576128a461318c565b336001600160a01b038216036128c05761055b9060043561399d565b63334bd91960e11b8252600482fd5b503461021a57608036600319011261021a576128e96131a2565b6128f1612f39565b826044356001600160401b03811161039957612911903690600401613034565b606435926001600160401b0384116103955761293461293f943690600401613078565b610764959195613929565b0381305afa90811561069b578391612a8b575b5061295c81613949565b61296681516131cc565b6001600160a01b03909216918215612a7c5780546001600160a01b0316838114612a6d577f66fbe0d77ee8b64a048b3986d02e26607f216597947c12d07d7b52245d7487cf855260208581526040808720335f908152925290205460ff169081612a5f575b331480612a52575b8115612a4a575b5015612a3b5780546001600160a01b0319168317905551604080518181527f0ddf22a7d2cb2cfefa64b32f2c75bcb30cc2a68208febc823261caaf171219529390928392612a2b9190840190613106565b9060208301520390a16001805580f35b63dc8d8db760e01b8452600484fd5b90505f6129da565b5060c083015115156129d3565b60a0840151151591506129cb565b63036d099b60e51b8552600485fd5b63776cceeb60e01b8452600484fd5b612a9f91503d8085833e61086d8183612ff8565b5f612952565b503461021a57604036600319011261021a5761055b600435612ac561318c565b90612ade610551825f525f602052600160405f20015490565b6138a1565b503461021a57602036600319011261021a577fe6ad9a47fbda1dc18de1eb5eeb7d935e5e81b4748f3cfc61e233e64f88182060815260208181526040808320335f90815292529020546004359060ff1615612bb2577f00000000000000000000000000000000000000000000000000000000000000008111612ba3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615612b945760085580f35b63bb0bac9960e01b8252600482fd5b63a1e2d51d60e01b8252600482fd5b63e2517d3f60e01b8252336004527fe6ad9a47fbda1dc18de1eb5eeb7d935e5e81b4748f3cfc61e233e64f88182060602452604482fd5b503461021a57602036600319011261021a576020611ada6004355f525f602052600160405f20015490565b503461021a578060031936011261021a5760206040517f6f51f874e644f7ce58205aa35351ddb40924d1ef8d58d9d6664fb464dc58e4578152f35b503461068f57612c7490612c62366130a8565b91949092612c6e613445565b506132c0565b90549060031b1c90303b1561068f575f91612cc5604051948593849363f26baa5160e01b8552600485015260606024850152612cb3606485018a613106565b84810360031901604486015291613421565b0381305afa8015612d5957612d46575b508151820191604081602085019403126103995760208101516001600160401b03811161039557836020612d0b9284010161347c565b506040810151916001600160401b03831161021a57611bd3612d32856020868601016134e3565b60405191829160208352602083019061312a565b612d5291505f90612ff8565b5f5f612cd5565b6040513d5f823e3d90fd5b3461068f57606036600319011261068f576004356001600160401b03811161068f57612d94903690600401612f0c565b602435916001600160401b03831161068f5760e0600319843603011261068f57604435926001600160401b03841161068f5783600401906060600319863603011261068f57612e0c90612df7604051946020860196606088526080870191613301565b848103601f190160408601529060040161335f565b828103601f1901606084015290612e34612e268280613321565b606085526060850191613301565b946020612e4460248301846133ed565b8589038684015280895297909101965f5b818110612e9457505050602095610f0c93612e7886946044612e869501906133ed565b916040818503910152613421565b03601f198101835282612ff8565b90919760208060019263ffffffff612eab8d612f4c565b168152019901929101612e55565b3461068f57602036600319011261068f576004359063ffffffff60e01b821680920361068f57602091637965db0b60e01b8114908115612efb575b5015158152f35b6301ffc9a760e01b14905083612ef4565b9181601f8401121561068f578235916001600160401b03831161068f576020838186019501011161068f57565b6024359063ffffffff8216820361068f57565b359063ffffffff8216820361068f57565b606081019081106001600160401b03821117612f7857604052565b634e487b7160e01b5f52604160045260245ffd5b60c081019081106001600160401b03821117612f7857604052565b604081019081106001600160401b03821117612f7857604052565b608081019081106001600160401b03821117612f7857604052565b60e081019081106001600160401b03821117612f7857604052565b90601f801991011681019081106001600160401b03821117612f7857604052565b6001600160401b038111612f7857601f01601f191660200190565b81601f8201121561068f5760208135910161304e82613019565b9261305c6040519485612ff8565b8284528282011161068f57815f92602092838601378301015290565b9181601f8401121561068f578235916001600160401b03831161068f576020808501948460051b01011161068f57565b606060031982011261068f5760043563ffffffff8116810361068f57916024356001600160401b03811161068f57826130e391600401613034565b91604435906001600160401b03821161068f5761310291600401613078565b9091565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9060c080613141845160e0855260e0850190613106565b9360018060a01b0360208201511660208501526040810151604085015260608101511515606085015260808101511515608085015260a0810151151560a08501520151151591015290565b602435906001600160a01b038216820361068f57565b600435906001600160a01b038216820361068f57565b35906001600160a01b038216820361068f57565b60208091604051928184925191829101835e8101600681520301902090565b90606060031983011261068f5760043563ffffffff8116810361068f57916024356001600160401b03811161068f578161322791600401612f0c565b92909291604435906001600160401b03821161068f5761310291600401613078565b9060e060a0604061327a6132688651610100875261010087019061312a565b60208701518682036020880152613106565b940151600180831b03815116604085015263ffffffff602082015116606085015260408101516080850152606081015182850152608081015160c0850152015191015290565b6007548110156132d85760075f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b80548210156132d8575f5260205f2001905f90565b908060209392818452848401375f828201840152601f01601f1916010190565b9035601e198236030181121561068f5701602081359101916001600160401b03821161068f57813603831361068f57565b3590811515820361068f57565b9060c06133e5816133816133738680613321565b60e0875260e0870191613301565b946001600160a01b03613396602083016131b8565b166020860152604081013560408601526133b260608201613352565b151560608601526133c560808201613352565b151560808601526133d860a08201613352565b151560a086015201613352565b151591015290565b9035601e198236030181121561068f5701602081359101916001600160401b03821161068f578160051b3603831361068f57565b81835290916001600160fb1b03831161068f5760209260051b809284830137010190565b6040519061345282612fdd565b5f60c083606081528260208201528260408201528260608201528260808201528260a08201520152565b81601f8201121561068f5780519061349382613019565b926134a16040519485612ff8565b8284526020838301011161068f57815f9260208093018386015e8301015290565b51906001600160a01b038216820361068f57565b5190811515820361068f57565b91909160e08184031261068f57604051906134fd82612fdd565b81938151906001600160401b03821161068f578261352460c0949261357a9486940161347c565b8552613532602082016134c2565b60208601526040810151604086015261354d606082016134d6565b606086015261355e608082016134d6565b608086015261356f60a082016134d6565b60a0860152016134d6565b910152565b9060208282031261068f5781516001600160401b03811161068f576135a492016134e3565b90565b92906135a4949263ffffffff6135cb92168552606060208601526060850190613106565b926040818503910152613421565b604051906135e682612f5d565b816135ef613445565b815260606020820152604080519161360683612f8c565b5f83525f60208401525f828401525f60608401525f60808401525f60a08401520152565b91909160e08184031261068f576040519061364482612fdd565b81938135906001600160401b03821161068f578261366b60c0949261357a94869401613034565b8552613679602082016131b8565b60208601526040810135604086015261369460608201613352565b60608601526136a560808201613352565b60808601526136b660a08201613352565b60a086015201613352565b6001600160401b038111612f785760051b60200190565b93916135a495936135cb928652606060208701526060860191613301565b7f0000000000000000000000000000000000000000000000000000000000000000908161372e575b5015613728575f90565b60085490565b60ff915060208091604051928184925191829101835e8101600581520301902054165f61371e565b9190820391821161376357565b634e487b7160e01b5f52601160045260245ffd5b80518210156132d85760209160051b010190565b335f9081527f8f5170a001e97aa525d58a8c34652d2ff9db2c32fed46a283422af1e3fc4a2c2602052604090205460ff16156137c357565b63e2517d3f60e01b5f52336004527f66fbe0d77ee8b64a048b3986d02e26607f216597947c12d07d7b52245d7487cf60245260445ffd5b335f9081527feb089f16d6d7e6682dd1727a34ecfcdaa39ebda2bc4bbfc29fb27179c2ad905f602052604090205460ff161561383257565b63e2517d3f60e01b5f52336004527f6f51f874e644f7ce58205aa35351ddb40924d1ef8d58d9d6664fb464dc58e45760245260445ffd5b5f8181526020818152604080832033845290915290205460ff161561388b5750565b63e2517d3f60e01b5f523360045260245260445ffd5b5f818152602081815260408083206001600160a01b038616845290915290205460ff16613923575f818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50505f90565b60026001541461393a576002600155565b633ee5aeb560e01b5f5260045ffd5b80516001600160a01b039061395d906131cc565b5416156139675750565b61397e60018060a01b0360208301511691516131cc565b80546001600160a01b0319166001600160a01b03909216919091179055565b5f818152602081815260408083206001600160a01b038616845290915290205460ff1615613923575f818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b805181019060208183031261068f576020810151916001600160401b03831161068f57613a5192602080920192010161347c565b604051907ff12295c6cff7c66c50482f7bee8dd63da0f387f76819ffea278d69c8f37485d160208301825193613aa1602082818701978089875e81015f838201520301601f198101835282612ff8565b51902003613ab0575050600190565b7f60dde57ea82e6110c36e701060809f1f9246f49c2b2791e1f1dc6a5b15927a2991613afb6020604051809382820195518091875e81015f838201520301601f198101835282612ff8565b51902003613b07575f90565b6331e650b960e11b5f5260045ffd5b519063ffffffff8216820361068f57565b8082039291610100841261068f5760405190613b4282612f5d565b819483516001600160401b03811161068f5782613b609186016134e3565b835260208401516001600160401b03811161068f5760c092613b8391860161347c565b6020840152603f19011261068f5760409060e0825193613ba285612f8c565b613bad8482016134c2565b8552613bbb60608201613b16565b602086015260808101518486015260a0810151606086015260c08101516080860152015160a08401520152565b919060408382031261068f5782516001600160401b03811161068f5781613c10918501613b27565b926020810151906001600160401b03821161068f57019060408282031261068f5760405191613c3e83612fa7565b80516001600160401b03811161068f5782613c5a91830161347c565b83526020810151906001600160401b03821161068f570181601f8201121561068f57805190613c88826136c1565b92613c966040519485612ff8565b82845260208085019360071b8301019181831161068f57602001925b828410613cc55750505050602082015290565b60808483031261068f576020608091604051613ce081612fc2565b613ce987613b16565b8152613cf6838801613b16565b83820152613d0660408801613b16565b604082015260608701516060820152815201930192613cb2565b919060408382031261068f5782516001600160401b03811161068f5781613d48918501613b27565b926020810151906001600160401b03821161068f57019060608282031261068f5760405191613d7683612f5d565b80516001600160401b03811161068f5782613d9291830161347c565b835260208101516001600160401b03811161068f57810182601f8201121561068f57805190613dc0826136c1565b91613dce6040519384612ff8565b80835260208084019160051b8301019185831161068f57602001905b828210613e705750505060208401526040810151906001600160401b03821161068f57019080601f8301121561068f578151613e25816136c1565b92613e336040519485612ff8565b81845260208085019260051b82010192831161068f57602001905b828210613e6057505050604082015290565b8151815260209182019101613e4e565b60208091613e7d84613b16565b815201910190613dea565b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604480830193909352918152613ec891613ec3606483612ff8565b61401a565b565b3d15613ef4573d90613edb82613019565b91613ee96040519384612ff8565b82523d5f602084013e565b606090565b9190820180921161376357565b5f907f000000000000000000000000000000000000000000000000000000000000000015614010576040519060ff815192602081818501958087835e8101600581520301902054161580614005575b613fd6575b50505b803403613fc75780613f6c5750565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03811615613fb8575f80809338935af115613fab57565b63b12d13eb5f526004601cfd5b63bb0bac9960e01b5f5260045ffd5b6326ecf91160e01b5f5260045ffd5b6020919250604051928391518091835e81016005815203019020600160ff198254161790556008545f80613f5a565b506008541515613f55565b5050600854613f5d565b5f806140429260018060a01b03169360208151910182865af161403b613eca565b90836140f8565b805190811515918261406a575b50506140585750565b635274afe760e01b5f5260045260245ffd5b819250906020918101031261068f57602061408591016134d6565b155f8061404f565b805f52600360205260405f2054155f146140f357600254600160401b811015612f78576140dc6140c682600185940160025560026132ec565b819391549060031b91821b915f19901b19161790565b9055600254905f52600360205260405f2055600190565b505f90565b9061411c575080511561410d57805190602001fd5b630a12f52160e11b5f5260045ffd5b8151158061414d575b61412d575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b15614125565b63ffffffff8151169063ffffffff60408160208401511692015116029063ffffffff8216918203613763570163ffffffff81116137635790565b5f818152600360205260409020548015613923575f198101818111613763576002545f1981019190821161376357818103614217575b5050506002548015614203575f19016141e08160026132ec565b8154905f199060031b1b191690556002555f5260036020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b6142396142286140c69360026132ec565b90549060031b1c92839260026132ec565b90555f52600360205260405f20555f80806141c6565b8015614263578042105f146135a457504290565b504290565b8115614272570490565b634e487b7160e01b5f52601260045260245ffd5b9192938281106142cd576142a29261429d91613756565b614268565b918183116142c4575b828102928184041490151715613763576135a491614268565b915080916142ab565b50505050505f9056fea26469706673582212207e9e1205e1ac5f20c7182d406f8a394fb7298b359ad37b5008866408563e0b6c64736f6c634300081b00332f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8f5170a001e97aa525d58a8c34652d2ff9db2c32fed46a283422af1e3fc4a2c2eb089f16d6d7e6682dd1727a34ecfcdaa39ebda2bc4bbfc29fb27179c2ad905f14764fde9c05acf7fd0fb570d7a8bd897798cb3f3d82998258b517116344ffbdad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb50000000000000000000000002519dadb4a41438c85b7c3251c22f45f90c9e45900000000000000000000000001f9632ea55aa14ed6b39aa8ebcece425f7ef0e9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000