2.5k txs
2.6k calls
constructor
constructor(address _buyAndProcess, address _torus, uint256 _startTimestamp)
functions
buyAndProcess
viewfunction buyAndProcess() view returns (address)
calculateStakingRewards
viewfunction calculateStakingRewards(tuple stakePos) view returns (uint256)
expWad
purefunction expWad(int256 x) pure returns (int256)
getCurrentDayIndex
viewfunction getCurrentDayIndex() view returns (uint24 dayIndex)
getDifficultyFactor
viewfunction getDifficultyFactor() view returns (uint256)
getEthAmountForTitanX
viewfunction getEthAmountForTitanX(uint256 titanXAmount) view returns (uint256 ethAmount)
getStakePositions
viewfunction getStakePositions(address user) view returns (tuple[])
penaltiesInRewardPool
viewfunction penaltiesInRewardPool(uint24) view returns (uint256)
protocolStart
viewfunction protocolStart() view returns (uint256)
rewardPool
viewfunction rewardPool(uint24) view returns (uint256)
stakePositions
viewfunction stakePositions(address, uint256) view returns (uint256 principal, uint256 power, uint24 stakingDays, uint256 startTime, uint24 startDayIndex, uint256 endTime, uint256 shares, bool claimedCreate, bool claimedStake, uint256 costTitanX, uint256 costETH, uint256 rewards, uint256 penalties, uint256 claimedAt, bool isCreate)
torus
viewfunction torus() view returns (address)
totalShares
viewfunction totalShares(uint24) view returns (uint256)
totalTitanXBurnt
viewfunction totalTitanXBurnt() view returns (uint256)
claim
nonpayablefunction claim(uint256 stakeIndex)
claimBatch
nonpayablefunction claimBatch(uint256[] stakeIndexes)
createTorus
payablefunction createTorus(uint256 power, uint24 lengthInDays) payable
earlyEndStake
nonpayablefunction earlyEndStake(uint256 stakeIndex)
stakeTorus
payablefunction stakeTorus(uint256 torusAmount, uint24 stakingDays) payable
events
Claimed
event Claimed(address indexed user, uint256 stakeIndex, uint256 torusAmount)
ClaimedBatch
event ClaimedBatch(address indexed user, uint256[] stakeIndices, uint256 totalMinted, uint256 totalReturned)
Created
event Created(address indexed user, uint256 stakeIndex, uint256 torusAmount, uint256 endTime)
EarlyStakeClaimed
event EarlyStakeClaimed(address indexed user, uint256 stakeIndex, uint256 principal, uint256 partialRewards)
StakeClaimed
event StakeClaimed(address indexed user, uint256 stakeIndex, uint256 principal, uint256 rewards)
Staked
event Staked(address indexed user, uint256 stakeIndex, uint256 principal, uint256 stakingDays, uint256 shares)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
AlreadyClaimed
error AlreadyClaimed()
CannotStakeZero
error CannotStakeZero()
FailedInnerCall
error FailedInnerCall()
InsufficientETH
error InsufficientETH()
InvalidLength
error InvalidLength()
InvalidPower
error InvalidPower()
MathOverflowedMulDiv
error MathOverflowedMulDiv()
NotEligibleForEarlyClaim
error NotEligibleForEarlyClaim()
NotReadyToClaim
error NotReadyToClaim(uint256 endTime, uint256 current)
OnlyBuyAndProcess
error OnlyBuyAndProcess()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
T
error T()
creation bytecode
0x60c03461012e57601f61418c38819003918201601f19168301916001600160401b038311848410176101335780849260609460405283398101031261012e5761004781610149565b90604061005660208301610149565b910151600160008181556001600160a01b039485166080529390921660a05281559052600460205269152d02c7e14af68000007fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe055560405161402e908161015e82396080518181816102fd0152818161086601528181610af00152818161339b0152613a0b015260a05181818161040a015281816104c5015281816109dd015281816110b7015281816113920152818161141b0152818161159b0152818161166401528181611a060152818161326701526138560152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b038216820361012e5756fe608080604052600436101561001357600080fd5b600090813560e01c908162f05dfc14611db4575080630d55cfc514611cd15780632403bd7714611bc957806329d56d9414611b955780633023fb1214611b615780633114351714611754578063379607f5146114a857806340816fae146114895780634310b4ab1461146b578063440a96e11461144d57806362abebce146111055780636341a861146110e657806373f3b5f2146110a1578063910079ab1461107e578063a04ec53914610f0e578063ac5b271c14610895578063d4b3e12514610850578063e701be96146108285763efec9ccb146100f157600080fd5b604036600319011261082557600435610108611df7565b610110612f09565b600154421061080c5762ffffff169060018210801561081b575b61080c57600181108015610800575b6107f157610147344761203c565b91604051916370a0823160e01b835230600484015260208360248173f19308f923582a6f7c465e5ce7a9dc1bec6665b15afa9283156107e65785936107b2575b50610190612f2b565b93816a52b7d2dcc80cd2e4000000026a52b7d2dcc80cd2e40000008104830361079e5760649004926101c18461323e565b9080678ac7230489e8000002678ac7230489e8000081048203610776576101ed85605860649304611efb565b046101f6612bc4565b90670de0b6b3a7640000810290808204670de0b6b3a7640000149015171561078a576102c99161022591611f0e565b9461023e63ffffffff61023785612106565b1642611f2e565b966102528461024d818a611efb565b611efb565b9461025b612c83565b9262ffffff8c16608085015288845285604085015242606085015261028763ffffffff61023788612106565b60a08501528660c08501528c60e08501528c610100850152602084015261014083015261012082015260016101c0820152338a52600660205260408a20612cf1565b3388526006602052604088205460001981019790881161077657906102ee9291613c98565b60405163d944392360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081600481855afa90811561072d578891610738575b5015806106b3575b610638575b5047938691604051906370a0823160e01b825230600483015260208260248173f19308f923582a6f7c465e5ce7a9dc1bec6665b15afa91821561062d5789926105f9575b50808997116105e4575b50811061054f575b50806104ad575b50826103f5575b6040805194855260208501919091528301525033907f99a12a7aefbbb67909c2bee4a5e2ddb98b2183b8ae2a59e5a7db47f53453345d9080606081015b0390a26001815580f35b604051639ddbd21160e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9384156104a2577f99a12a7aefbbb67909c2bee4a5e2ddb98b2183b8ae2a59e5a7db47f53453345d9461046e928891610473575b50613ce3565b6103ae565b610495915060203d60201161049b575b61048d8183611e3c565b810190612e33565b38610468565b503d610483565b6040513d88823e3d90fd5b604051639ddbd21160e01b81529086906020836004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561054457828092819261051f968391610525575b506001600160a01b03165af1610519612e52565b50612e92565b386103a7565b61053e915060203d60201161049b5761048d8183611e3c565b38610505565b6040513d84823e3d90fd5b6040516370a0823160e01b815230600482015291945060208260248173f19308f923582a6f7c465e5ce7a9dc1bec6665b15afa80156105d95787906105a0575b610599925061203c565b92386103a0565b506020823d6020116105d1575b816105ba60209383611e3c565b810103126105cc57610599915161058f565b600080fd5b3d91506105ad565b6040513d89823e3d90fd5b829193506105f2904761203c565b9290610398565b9091506020813d602011610625575b8161061560209383611e3c565b810103126105cc5751903861038e565b3d9150610608565b6040513d8b823e3d90fd5b603c420180421161069f57908791813b1561069b5763ffffffff60248492836040519586948593635355574b60e11b85521660048401525af1801561054457610682575b5061034a565b8161068c91611e3c565b61069757853861067c565b8580fd5b8280fd5b634e487b7160e01b88526011600452602488fd5b5060405163aded25c960e01b8152602081600481855afa801561072d5788906106ee575b6c02863c1f5cdae42f954000000091501015610345565b506020813d602011610725575b8161070860209383611e3c565b810103126105cc576c02863c1f5cdae42f954000000090516106d7565b3d91506106fb565b6040513d8a823e3d90fd5b90506020813d60201161076e575b8161075360209383611e3c565b8101031261076a5761076490612e26565b3861033d565b8780fd5b3d9150610746565b634e487b7160e01b89526011600452602489fd5b634e487b7160e01b8a52601160045260248afd5b634e487b7160e01b87526011600452602487fd5b9092506020813d6020116107de575b816107ce60209383611e3c565b810103126105cc57519138610187565b3d91506107c1565b6040513d87823e3d90fd5b634956aa2960e01b8352600483fd5b50620f42408111610139565b63251f56a160e21b8352600483fd5b506058821161012a565b80fd5b50346108255780600319360112610825576020610843612ed7565b62ffffff60405191168152f35b50346108255780600319360112610825576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b506040366003190112610825576004356108ad611df7565b6108b5612f09565b600154421061080c5762ffffff1690600182108015610f04575b61080c578015610ef5576108e3344761203c565b6040516370a0823160e01b8152306004820152929060208460248173f19308f923582a6f7c465e5ce7a9dc1bec6665b15afa9384156107e6578594610ec1575b5061092c612f2b565b9382678ac7230489e8000002678ac7230489e800008104840361079e5761095a610954612bc4565b86611efb565b9060648202918083046064149015171561069f5790605861097c920490611f0e565b806a52b7d2dcc80cd2e400000002906a52b7d2dcc80cd2e400000082040361079e57686c6b935b8bbd4000009004906109b48261323e565b6040516323b872dd60e01b602082019081523360248301523060448301526064820188905291947f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031694909290918a918291610a2581608481015b03601f198101835282611e3c565b519082885af1610a33612e52565b81610e8a575b5015610e5f57610abc610a508761024d818b611efb565b91610a59612c83565b9062ffffff8b166080830152898252886040830152426060830152610a8563ffffffff6102378b612106565b60a083015260c0820197848952600160e08401528c6020840152610140830152610120820152338b52600660205260408b20612cf1565b3389526006602052604089205460001981019890891161078a579086610ae192613c98565b60405163d944392360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081600481855afa908115610e16578a91610e21575b501580610d9c575b610d3d575b5047918891604051906370a0823160e01b825230600483015260208260248173f19308f923582a6f7c465e5ce7a9dc1bec6665b15afa918215610d32578b92610cfe575b50808b9511610ce9575b508110610c64575b5080610c1c575b5080610be7575b505051916040519384526020840152604083015260608201527f9cfd25589d1eb8ad71e342a86a8524e83522e3936c0803048c08f6d9ad974f4060803392a26001815580f35b602060049260405193848092639ddbd21160e01b82525afa80156105d957610c159288916104735750613ce3565b3880610ba1565b604051639ddbd21160e01b8152908890602083600481885afa8015610544578280928192610c5e96839161052557506001600160a01b03165af1610519612e52565b38610b9a565b6040516370a0823160e01b815230600482015291925060208260248173f19308f923582a6f7c465e5ce7a9dc1bec6665b15afa801561062d578990610cb5575b610cae925061203c565b9038610b93565b506020823d602011610ce1575b81610ccf60209383611e3c565b810103126105cc57610cae9151610ca4565b3d9150610cc2565b82919350610cf7904761203c565b9290610b8b565b9091506020813d602011610d2a575b81610d1a60209383611e3c565b810103126105cc57519038610b81565b3d9150610d0d565b6040513d8d823e3d90fd5b603c420180421161078a57908991813b1561069b5763ffffffff60248492836040519586948593635355574b60e11b85521660048401525af1801561054457610d87575b50610b3d565b81610d9191611e3c565b61076a578738610d81565b5060405163aded25c960e01b8152602081600481855afa8015610e16578a90610dd7575b6c02863c1f5cdae42f954000000091501015610b38565b506020813d602011610e0e575b81610df160209383611e3c565b810103126105cc576c02863c1f5cdae42f95400000009051610dc0565b3d9150610de4565b6040513d8c823e3d90fd5b90506020813d602011610e57575b81610e3c60209383611e3c565b81010312610e5357610e4d90612e26565b38610b30565b8980fd5b3d9150610e2f565b60405162461bcd60e51b815260206004820152600360248201526229aa2360e91b6044820152606490fd5b8051801592508215610e9f575b505038610a39565b8192509060209181010312610e53576020610eba9101612e26565b3880610e97565b9093506020813d602011610eed575b81610edd60209383611e3c565b810103126105cc57519238610923565b3d9150610ed0565b636a76ff9f60e01b8352600483fd5b50605882116108cf565b5034610825576020366003190112610825576001600160a01b03610f30611e5e565b1681526006602052604081208054610f4781612c6b565b90610f556040519283611e3c565b80825260208201809385526020852085915b83831061106057868587604051928392602084019060208552518091526040840192915b818110610f99575050500390f35b9193509160206101e06001926101c0875180518352848101518584015262ffffff60408201511660408401526060810151606084015262ffffff608082015116608084015260a081015160a084015260c081015160c084015260e0810151151560e084015261010081015115156101008401526101208101516101208401526101408101516101408401526101608101516101608401526101808101516101808401526101a08101516101a0840152015115156101c0820152019401910191849392610f8b565b600e602060019261107085612049565b815201920192019190610f67565b50346108255780600319360112610825576020611099612bc4565b604051908152f35b50346108255780600319360112610825576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5034610825576020366003190112610825576020611099600435612257565b5034610825576020366003190112610825576004359067ffffffffffffffff821161082557366023830112156108255781600401359167ffffffffffffffff8311611410578260051b91366024848401011161082557611166939293612f09565b80918190611172612f2b565b506212750095835b8681101561131c5733855260066020526111a060248260051b8501013560408720611e74565b506007810196875460ff8160081c169081611311575b50611302576005820154908142106112ea576111d96111d484612049565b611f3b565b918b6111e58183611f2e565b421161126c575b5050885460ff8116611233575090611213839261120d836001979654611f2e565b90611f2e565b9861010161ffff19825416179055600a820155600c429101555b0161117a565b969861010061125361124a85600198979695611f2e565b9b855490611f2e565b9861ff001916179055600a820155600c4291015561122d565b61127d611283916201518093611f2e565b4261203c565b04600781116112e2575b600761129c6112a49285611efb565b04809361203c565b9180600b85015562ffffff6112bf6112ba612ed7565b611ecd565b16895260056020526112d960408a209160011c8254611f2e565b9055388b6111ec565b50600761128d565b6316d5b73160e21b8852600482905242602452604488fd5b630c8d9eab60e31b8752600487fd5b60ff915016386111b6565b509185908581611414575b8061138f575b60405160608082528101849052926001600160fb1b0310610697578460247f8c7cb3b525fe477baff3be202fc2bc7f012a22fb5c153628cd95227f47173ecf950160808501376020830152604082015260808133948101030190a26001815580f35b857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b15611410576040516340c10f1960e01b8152336004820152602481018490529082908290604490829084905af18015610544576113fb575b505061132d565b8161140591611e3c565b6106975785876113f4565b5080fd5b61144882337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316613156565b611327565b50346108255780600319360112610825576020600154604051908152f35b50346108255780600319360112610825576020600254604051908152f35b5034610825576020366003190112610825576020611099600435612123565b503461082557602036600319011261082557600435906114c6612f09565b33815260066020526114db8260408320611e74565b50916007830190815460ff8160081c169081611749575b5061173a57600584019384549485421061172257849550611511612f2b565b5061151e6111d483612049565b90546212750061152e8183611f2e565b42116116af575b5050835460ff811661161e575061154d818354611f2e565b9361010161ffff19825416179055600a820155600c429101556040519081528160208201527f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a60403392a25b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b1561161a576040516340c10f1960e01b8152336004820152602481019290925282908290604490829084905af1801561054457611605575b506001905580f35b8161160f91611e3c565b6108255780386115fd565b5050fd5b61ff00191661010017909355600a810183905542600c82015580547f81e7801ff166ee0fb78a4651529496769abc95c39110711ef866b4b4fd1737f891849161169190337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316613156565b546040805194855260208501919091528301523391606090a2611599565b61127d6116c0916201518093611f2e565b046007811161171a575b60076116d96116e19284611efb565b04809261203c565b9080600b84015562ffffff6116f76112ba612ed7565b1686526005602052611711604087209160011c8254611f2e565b90553880611535565b5060076116ca565b6316d5b73160e21b8552600486905242602452604485fd5b630c8d9eab60e31b8352600483fd5b60ff915016386114f2565b50346108255760203660031901126108255760043590611772612f09565b33815260066020526117878260408320611e74565b506007810191825460ff8160081c16611b525760ff1615611b435760028201600162ffffff82541614611b34576005830154936117d36117cc6003860154809761203c565b954261203c565b908560011c8210611b255785821015611b25576117ee612f2b565b5061010061ff001982541617905583549162ffffff60048601541691611812612ed7565b968362ffffff891681811115611b19570362ffffff811161079e5762ffffff905b169862ffffff845416808b11611b11575b508699989599979197998796600684019384549a5b60ff8a168d8110156118f4579c8b819f60ff9f8f9061187c62ffffff918f611ee3565b1692838152600360205260408120549283156118e557926118c185936040846118c66118d5986118db9a61120d9852600460205261120d876118c18787872054611efb565b611f0e565b96815260056020522054611efb565b9b611ea6565b9a9e509c50611859565b9e925050506118db9150611ea6565b508d94959697995060ff8d165b8b62ffffff8c541660ff83169081101561195157918b611943604061194a9462ffffff6119328f9882995496611ee3565b16815260036020522091825461203c565b9055611ea6565b9050611901565b509750508760648102908082046064149015171561069f579061197391611f0e565b60328110611afa57603119810190811161079e578060011b908082046002149015171561079e576119e262ffffff926119eb9260648110600014611aee576119be6064915b89611efb565b049687916119cc838361203c565b600b82015582600a820155600c4291015561203c565b60011c92611ecd565b1685526005602052611a0260408620918254611f2e565b90557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611a39823383613156565b803b15611aea576040516340c10f1960e01b8152336004820152602481018490529085908290604490829084905af180156107e657611ab4575b5060408051938452602084019190915282015233907f424946ccd26b3a9aa931ab507be414ee1915754ae0d517086bb979d81e2dc4be9080606081016103eb565b93611ae2817f424946ccd26b3a9aa931ab507be414ee1915754ae0d517086bb979d81e2dc4be949396611e3c565b939091611a73565b8480fd5b5060646119be816119b8565b506119eb6119e262ffffff9260646119be8a6119b8565b995038611844565b505062ffffff86611833565b63060839bb60e31b8452600484fd5b63060839bb60e31b8252600482fd5b63060839bb60e31b8152600490fd5b630c8d9eab60e31b8252600482fd5b503461082557602036600319011261082557604060209162ffffff611b84611de5565b168152600383522054604051908152f35b503461082557602036600319011261082557604060209162ffffff611bb8611de5565b168152600583522054604051908152f35b503461082557604036600319011261082557611be3611e5e565b6001600160a01b031681526006602052604081208054602435919082101561069b57611c0f9250611e74565b50805490600181015490600281015462ffffff166003820154600483015462ffffff1660058401546006850154600786015490600887015492600988015494600a89015496600b8a015498600c8b01549a600d015460ff169b604051809e81526020015260408d015260608c015260808b015260a08a015260c089015260ff8116151560e089015260081c60ff1615156101008801526101208701526101408601526101608501526101808401526101a083015215156101c08201526101e090f35b5034610825576101e03660031901126108255760405190611cf182611e09565b6004358252602435602083015260443562ffffff81168103611410576040830152606435606083015260843562ffffff8116810361141057608083015260a43560a083015260c43560c083015260e43580151581036114105760e083015261010435801515810361141057610100830152610124356101208301526101443561014083015261016435610160830152610184356101808301526101a4356101a08301526101c43590811515820361082557602061109984846101c0820152611f3b565b90503461141057602036600319011261141057604060209262ffffff611dd8611de5565b1681526004845220548152f35b6004359062ffffff821682036105cc57565b6024359062ffffff821682036105cc57565b6101e0810190811067ffffffffffffffff821117611e2657604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117611e2657604052565b600435906001600160a01b03821682036105cc57565b8054821015611e9057600052600e602060002091020190600090565b634e487b7160e01b600052603260045260246000fd5b60ff1660ff8114611eb75760010190565b634e487b7160e01b600052601160045260246000fd5b62ffffff60019116019062ffffff8211611eb757565b9062ffffff8091169116019062ffffff8211611eb757565b81810292918115918404141715611eb757565b8115611f18570490565b634e487b7160e01b600052601260045260246000fd5b91908201809211611eb757565b6000805b62ffffff60408401511660ff821690811015612035578390608082019062ffffff611f6d8282855116611ee3565b16600052600360205260406000205415612029578162ffffff611fdb8382612016611ff06120249a9b83611fab61120d9a8261201e9e9d5116611ee3565b16600052600460205261120d611fcd60c06040600020549c019b8c5190611efb565b85611fdb88828d5116611ee3565b16600052600360205260406000205490611f0e565b9782611fff85828a5116611ee3565b166000526005602052604060002054905190611efb565b945116611ee3565b91611ea6565b611f3f565b50505061202490611ea6565b5050905090565b91908203918211611eb757565b9060405161205681611e09565b6101c060ff600d8395805485526001810154602086015262ffffff60028201541660408601526003810154606086015262ffffff6004820154166080860152600581015460a0860152600681015460c0860152826007820154818116151560e088015260081c16151561010086015260088101546101208601526009810154610140860152600a810154610160860152600b810154610180860152600c8101546101a08601520154161515910152565b63ffffffff620151809116029063ffffffff8216918203611eb757565b680238fd42c5cf03ffff1981126122515768070c1cc73b00c80000811361221957670de0b6b3a764000090600190825b60148312612162575b50505090565b8082029060008112600160ff1b841416611eb757808205831490151715611eb757670de0b6b3a7640000830290838205670de0b6b3a76400001484151715611eb7576000821561220557600160ff1b82146000198414166121f1575005809381156121ea5760008282019283129112908015821691151617611eb75760019092019192612153565b935061215c565b634e487b7160e01b81526011600452602490fd5b634e487b7160e01b81526012600452602490fd5b60405162461bcd60e51b815260206004820152601060248201526f6578705761643a206f766572666c6f7760801b6044820152606490fd5b50600090565b604051633850c7bd60e01b81529061038460e08360048173c45a81bc23a64ea556ab4cdf08a86b61cdceea8b5afa8015612bb8576000938491612b2a575b5061ffff16928315612b005761ffff600191160161ffff8111611eb75761ffff600094816040519363252c09d760e01b8552160616600482015260808160248173c45a81bc23a64ea556ab4cdf08a86b61cdceea8b5afa9081156129fb5784908592612adb575b509015612a5a575b63ffffffff1663ffffffff42160363ffffffff811161286a5790818163ffffffff80941610612a52575b50168015612a285760405190612345606083611e3c565b60028252602082019160403684378161235d82613221565b52846123688261322e565b5284604051809463883bdbfd60e01b825260248201936020600484015251809452604482019093835b818110612a0657505081929350038173c45a81bc23a64ea556ab4cdf08a86b61cdceea8b5afa9182156129fb57849085936128df575b506123de6123d48261322e565b5160060b91613221565b5160060b900391667fffffffffffff198312667fffffffffffff841317612894576001600160a01b036124108261322e565b5116906001600160a01b039061242590613221565b51169003906001600160a01b038211612894578060060b9260060b83156128cb57667fffffffffffff1981146000198514166128b75783810560020b9386821291826128a8575b505061287e575b6001600160a01b038181026001600160c01b031691909104900361286a5760201b640100000000600160c01b0316156126215760020b8281121561286457808303905b620d89e882116128555783906001831615612843576001600160881b036ffffcb933bd6fad37aa2d162d1a5940015b169260028116612827575b6004811661280b575b600881166127ef575b601081166127d3575b602081166127b7575b6040811661279b575b6080811661277f575b6101008116612763575b6102008116612747575b610400811661272b575b610800811661270f575b61100081166126f3575b61200081166126d7575b61400081166126bb575b618000811661269f575b620100008116612683575b620200008116612668575b62040000811661264d575b6208000016612635575b13612612575b63ffffffff811661260a5782905b60201c60ff91909116016001600160a01b031691506fffffffffffffffffffffffffffffffff82116125f7576125ee826125f493611efb565b90613f12565b90565b612604826125f493613e11565b90613e70565b6001906125b5565b801561262157600019046125a7565b634e487b7160e01b83526012600452602483fd5b916b048a170391f7dc42444e8fa20260801c916125a1565b6d2216e584f5fa1ea926041bedfe9890930260801c92612597565b926e5d6af8dedb81196699c329225ee6040260801c9261258c565b926f09aa508b5b7a84e1c677de54f3e99bc90260801c92612581565b926f31be135f97d08fd981231505542fcfa60260801c92612576565b926f70d869a156d2a1b890bb3df62baf32f70260801c9261256c565b926fa9f746462d870fdf8a65dc1f90e061e50260801c92612562565b926fd097f3bdfd2022b8845ad8f792aa58250260801c92612558565b926fe7159475a2c29b7443b29c7fa6e889d90260801c9261254e565b926ff3392b0822b70005940c7a398e4b70f30260801c92612544565b926ff987a7253ac413176f2b074cf7815e540260801c9261253a565b926ffcbe86c7900a88aedcffc83b479aa3a40260801c92612530565b926ffe5dee046a99a2a811c461f1969c30530260801c92612526565b926fff2ea16466c96a3843ec78b326b528610260801c9261251d565b926fff973b41fa98c081472e6896dfb254c00260801c92612514565b926fffcb9843d60f6159c9db58835c9266440260801c9261250b565b926fffe5caca7e10e4e61c3624eaa0941cd00260801c92612502565b926ffff2e50f5f656932ef12357cf3c7fdcc0260801c926124f9565b926ffff97272373d413259a46990580e213a0260801c926124f0565b6001600160881b03600160801b6124e5565b6315e4079d60e11b8452600484fd5b806124b6565b634e487b7160e01b84526011600452602484fd5b91627fffff198114612894576000190191612473565b634e487b7160e01b85526011600452602485fd5b0760060b15159050388061246c565b634e487b7160e01b86526011600452602486fd5b634e487b7160e01b86526012600452602486fd5b9250503d8085843e6128f18184611e3c565b820191604081840312611aea57805167ffffffffffffffff81116106975781019083601f830112156106975781519161292983612c6b565b926129376040519485611e3c565b80845260208085019160051b830101918683116129f757602001905b8282106129df5750505060208101519067ffffffffffffffff82116129db57019280601f8501121561069757835161298a81612c6b565b946129986040519687611e3c565b81865260208087019260051b82010192831161076a57602001905b8282106129c357505050386123c7565b602080916129d0846131a1565b8152019101906129b3565b8680fd5b602080916129ec846131d2565b815201910190612953565b8880fd5b6040513d86823e3d90fd5b855163ffffffff1683526020958601958a955088945090920191600101612391565b60405162461bcd60e51b8152602060048201526002602482015261042560f41b6044820152606490fd5b90503861232e565b5060405163252c09d760e01b81526004810184905260808160248173c45a81bc23a64ea556ab4cdf08a86b61cdceea8b5afa9081156129fb579063ffffffff918591612aa9575b509050612304565b612acb915060803d608011612ad4575b612ac38183611e3c565b8101906131e0565b50505038612aa1565b503d612ab9565b9050612af6915060803d608011612ad457612ac38183611e3c565b92915050386122fc565b60405162461bcd60e51b81526020600482015260026024820152614e4960f01b6044820152606490fd5b93905060e0843d60e011612bb0575b81612b4660e09383611e3c565b8101031261082557612b57846131a1565b5060208401518060020b03610825575061ffff612b76604085016131b5565b612ba860c0612b87606088016131b5565b96612b94608082016131b5565b50612ba160a082016131c4565b5001612e26565b509390612295565b3d9150612b39565b6040513d6000823e3d90fd5b600154804210612c5e57612bdc62015180914261203c565b0462015180810290808204620151801481151715611eb75769124bc0ddd92e560000000290808204670de0b6b3a76400001490151715611eb7576301e1338090048067040ed04034530000029067040ed04034530000820503611eb757670de0b6b3a7640000612c4c9105612123565b670de0b6b3a76400008112612c5e5790565b50670de0b6b3a764000090565b67ffffffffffffffff8111611e265760051b60200190565b60405190612c9082611e09565b60006101c0838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201528261016082015282610180820152826101a08201520152565b8054600160401b811015611e2657612d0e91600182018155611e74565b612e1057600d6101c083612e0e945184556020810151600185015562ffffff60408201511662ffffff60028601911662ffffff198254161790556060810151600385015562ffffff60808201511662ffffff60048601911662ffffff1982541617905560a0810151600585015560c0810151600685015560078401612da560e08301511515829060ff801983541691151516179055565b610100820151151561ff0082549160081b169061ff00191617905561012081015160088501556101408101516009850155610160810151600a850155610180810151600b8501556101a0810151600c8501550151151591019060ff801983541691151516179055565b565b634e487b7160e01b600052600060045260246000fd5b519081151582036105cc57565b908160209103126105cc57516001600160a01b03811681036105cc5790565b3d15612e8d573d9067ffffffffffffffff8211611e265760405191612e81601f8201601f191660200184611e3c565b82523d6000602084013e565b606090565b15612e9957565b60405162461bcd60e51b81526020600482015260166024820152751499599d5b99081d1c985b9cd9995c8819985a5b195960521b6044820152606490fd5b600154804210612f0357612eef62015180914261203c565b0460018101809111611eb75762ffffff1690565b50600190565b600260005414612f1a576002600055565b633ee5aeb560e01b60005260046000fd5b612f33612ed7565b90815b62ffffff811690811590811580613067575b15612f5b5750611eb75760001901612f36565b91505091909162ffffff821662ffffff82161461306357612f7b90611ecd565b62ffffff82169062ffffff811682811161215c5760001981019262ffffff8411611eb75762ffffff8094166000526004602052612fbc604060002054613d9d565b82600052600460205280604060002055818314158061304d575b612ff1575b5050501662ffffff8114611eb757600101612f7b565b81600052600560205261300a6040600020918254611f2e565b90558160005260056020526040600020549060005260056020526130346040600020918254611f2e565b9055600052600560205260006040812055388080612fdb565b5082600052600360205260406000205415612fd6565b5090565b5082600052600460205260406000205415612f48565b60405163a9059cbb60e01b6020820190815273410e10c33a49279f78cb99c8d816f18d5e7d5404602483015260448083019390935291815260009182916130c5606482611e3c565b51908273f19308f923582a6f7c465e5ce7a9dc1bec6665b15af16130e7612e52565b8161311f575b50156130f557565b60405162461bcd60e51b815260206004820152600260248201526114d560f21b6044820152606490fd5b8051801592508215613134575b5050386130ed565b81925090602091810103126105cc57602061314f9101612e26565b388061312c565b60405163a9059cbb60e01b602082019081526001600160a01b039093166024820152604481019390935260009283929083906131958160648101610a17565b51925af16130e7612e52565b51906001600160a01b03821682036105cc57565b519061ffff821682036105cc57565b519060ff821682036105cc57565b51908160060b82036105cc57565b91908260809103126105cc57815163ffffffff811681036105cc5791613208602082016131d2565b916125f4606061321a604085016131a1565b9301612e26565b805115611e905760200190565b805160011015611e905760400190565b60009034156138475761325090612257565b9081341061383857604051631c1bf33d60e31b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081600481855afa90811561382d5783916137f9575b506132b56127109185611efb565b0490604051631f9cb13b60e31b8152602081600481855afa9081156129fb5784916137c5575b506132e96127109186611efb565b0491604051633be7956360e21b8152602081600481865afa9081156107e6578591613791575b5061331d6127109187611efb565b0490604051636c35ed4960e01b8152602081600481875afa9081156104a257869161375e575b5060206127106133556004938a611efb565b049460405192838092639ddbd21160e01b82525afa9081156104a25786809381938293839161373f575b506001600160a01b03165af1613393612e52565b5015613708577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692833b15611aea57846004916040519283809263e3221eb560e01b8252885af180156107e6579085916136f3575b5050823b156136ef57836004916040519283809263c381da4f60e01b8252875af180156129fb579084916136da575b5050604051736015551cd911ff4685072e2793f56c841e3ab66160611b602082015261027160ec1b603482015273f19308f923582a6f7c465e5ce7a9dc1bec6665b160601b6037820152602b81529161347a604b84611e3c565b60405163bc35401360e01b81526004810183905290602082602481845afa9182156107e65785926136a5575b5060206004916040519283809263ecb2d32d60e01b82525afa80156107e657859061366b575b60ff91501660640360ff81116128945760649160ff6134ec921690611efb565b046040519260a0840184811067ffffffffffffffff821117613657576040949294528152602081013081526040820193428552606083018481526080840191825260405195869463c04b8d5960e01b865260206004870152519360a060248701528451948560c4880152895b86811061363f57505060e485870181018a905290516001600160a01b031660448701529051606486015290516084850152905160a4840152602093601f909201601f191683018390030190829073e592427a0aece92de3edee1f18e0157c058615645af1801561054457829061360b575b6135df91506135d78161307d565b600254611f2e565b6002558134116135ed575090565b8080806125f4936135fe863461203c565b33617530f1610519612e52565b506020813d602011613637575b8161362560209383611e3c565b810103126105cc576135df90516135c9565b3d9150613618565b602082820181015160e48c840101528a985001613558565b634e487b7160e01b86526041600452602486fd5b506020813d60201161369d575b8161368560209383611e3c565b81010312611aea5761369860ff916131c4565b6134cc565b3d9150613678565b9091506020813d6020116136d2575b816136c160209383611e3c565b810103126105cc57519060206134a6565b3d91506136b4565b816136e491611e3c565b61069b578238613420565b8380fd5b816136fd91611e3c565b6136ef5783386133f1565b60405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606490fd5b613758915060203d60201161049b5761048d8183611e3c565b3861337f565b90506020813d602011613789575b8161377960209383611e3c565b810103126105cc57516020613343565b3d915061376c565b90506020813d6020116137bd575b816137ac60209383611e3c565b810103126105cc575161331d61330f565b3d915061379f565b90506020813d6020116137f1575b816137e060209383611e3c565b810103126105cc57516132e96132db565b3d91506137d3565b90506020813d602011613825575b8161381460209383611e3c565b810103126105cc57516132b56132a7565b3d9150613807565b6040513d85823e3d90fd5b631a84bc4160e21b8152600490fd5b604051631c1bf33d60e31b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190602081600481865afa9081156129fb578491613c64575b506138a56127109183611efb565b04604051631f9cb13b60e31b8152602081600481875afa9081156107e6578591613c30575b506138d86127109184611efb565b04604051633be7956360e21b8152602081600481885afa9081156104a2578691613bfc575b5061390b6127109185611efb565b0491604051636c35ed4960e01b8152602081600481895afa9081156105d9578791613bc8575b5061393f6127109186611efb565b6040516323b872dd60e01b60208201908152336024830152306044830152606482018890529290910496916139bc918991829161397f8160848101610a17565b51908273f19308f923582a6f7c465e5ce7a9dc1bec6665b15af16139a1612e52565b9073f19308f923582a6f7c465e5ce7a9dc1bec6665b1613f97565b8051908115159182613ba5575b5050613b7e57602060049160405192838092639ddbd21160e01b82525afa9081156105d95782613a09613a6994602094613a39948c91613b675750613ce3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169661203c565b60405163095ea7b360e01b81526001600160a01b0387166004820152602481019190915291829081906044820190565b03818973f19308f923582a6f7c465e5ce7a9dc1bec6665b15af180156104a257613b30575b50823b15611aea5760405190630c371c6b60e21b82526004820152848160248183875af180156107e657613b1c575b50813b156136ef5783916024839260405194859384926301c507e160e11b845260048401525af1801561382d57908391613b07575b5050806135d7613b019261307d565b60025590565b81613b1191611e3c565b611410578138613af2565b84613b2991959295611e3c565b9238613abd565b6020813d602011613b5f575b81613b4960209383611e3c565b8101031261069757613b5a90612e26565b613a8e565b3d9150613b3c565b6104959150863d881161049b5761048d8183611e3c565b635274afe760e01b875273f19308f923582a6f7c465e5ce7a9dc1bec6665b1600452602487fd5b819250906020918101031261076a576020613bc09101612e26565b1538806139c9565b90506020813d602011613bf4575b81613be360209383611e3c565b810103126129db575161393f613931565b3d9150613bd6565b90506020813d602011613c28575b81613c1760209383611e3c565b81010312610697575161390b6138fd565b3d9150613c0a565b90506020813d602011613c5c575b81613c4b60209383611e3c565b81010312611aea57516138d86138ca565b3d9150613c3e565b90506020813d602011613c90575b81613c7f60209383611e3c565b810103126136ef57516138a5613897565b3d9150613c72565b9291909260005b60ff811685811015613cdb579062ffffff613cbd613cd69385611ee3565b1660005260036020526040600020611943858254611f2e565b613c9f565b505050509050565b60405163a9059cbb60e01b60208201526001600160a01b0390911660248201526044810191909152613d188160648101610a17565b805173f19308f923582a6f7c465e5ce7a9dc1bec6665b191613d509160009182919060200182865af1613d49612e52565b9083613f97565b8051908115159182613d7a575b5050613d665750565b635274afe760e01b60005260045260246000fd5b81925090602091810103126105cc576020613d959101612e26565b153880613d5d565b9060006000196127088409612708840291828083109203918083039214613e065781612710111561082557506127106127087fbc01a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e9194950990828211900360fc1b910360041c170290565b505061271090049150565b8181029160009160001982820992848085109403938085039414613e655783600160401b1115613e56575090600160401b910990828211900360c01b910360401c1790565b63227bc15360e01b8152600490fd5b925050505060401c90565b90608082901b9060001983600160801b0992828085109403938085039414613f065783821115613ef5578190600160801b09816000038216809204600281600302188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018380600003040190848311900302920304170290565b63227bc15360e01b60005260046000fd5b50906125f49250611f0e565b9060c082901b9060001983600160c01b0992828085109403938085039414613f065783821115613ef5578190600160c01b09816000038216809204600281600302188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018380600003040190848311900302920304170290565b90613fbd5750805115613fac57805190602001fd5b630a12f52160e11b60005260046000fd5b81511580613fef575b613fce575090565b639996b31560e01b60009081526001600160a01b0391909116600452602490fd5b50803b15613fc656fea264697066735822122078a469ee8039d60ddaa360785852848724e78f200eef620e2d02fe6f6eb1c0bd64736f6c634300081a0033000000000000000000000000aa390a37006e22b5775a34f2147f81ebd6a63641000000000000000000000000b47f575807fc5466285e1277ef8acfbb5c6686e800000000000000000000000000000000000000000000000000000000686fffa0