0 txs
0 calls
constructor
constructor(address _cmxToken, address _swapRouter, address _treasury, address _initialOwner)
functions
acceptedTokens
viewfunction acceptedTokens(address) view returns (bool accepted, uint8 decimals, bool isStablecoin)
addressTierDiscounts
viewfunction addressTierDiscounts(address, uint8) view returns (uint256)
cmxDiscountBasisPoints
viewfunction cmxDiscountBasisPoints() view returns (uint256)
cmxToken
viewfunction cmxToken() view returns (address)
DISCOUNT_DENOMINATOR
viewfunction DISCOUNT_DENOMINATOR() view returns (uint256)
getAddressTierDiscount
viewfunction getAddressTierDiscount(address subscriber, uint8 tierLevel) view returns (uint256)
getPaymentAmount
viewfunction getPaymentAmount(address subscriber, uint8 tierLevel, address paymentToken) view returns (uint256)
getSubscriptionInfo
viewfunction getSubscriptionInfo(address subscriber) view returns (uint8 tierLevel, uint256 nextPaymentDue, bool isActive, uint256 lastPaymentAmount, string tierName, uint256 tierFeeUSD, address lastPaymentToken)
getTokenConfig
viewfunction getTokenConfig(address token) view returns (bool accepted, uint8 decimals, bool isStablecoin)
hasActiveSubscription
viewfunction hasActiveSubscription(address subscriber, uint8 minTierLevel) view returns (bool)
owner
viewfunction owner() view returns (address)
SECONDS_IN_MONTH
viewfunction SECONDS_IN_MONTH() view returns (uint256)
subscribers
viewfunction subscribers(address) view returns (uint8 tierLevel, uint256 nextPaymentDue, bool isActive, uint256 lastPaymentAmount, address lastPaymentToken)
swapRouter
viewfunction swapRouter() view returns (address)
tiers
viewfunction tiers(uint8) view returns (string name, uint256 monthlyFeeUSD, bool isActive)
treasury
viewfunction treasury() view returns (address)
uniswapPoolFee
viewfunction uniswapPoolFee() view returns (uint24)
addAcceptedToken
nonpayablefunction addAcceptedToken(address token, uint8 decimals, bool isStablecoin)
adminCancelSubscription
nonpayablefunction adminCancelSubscription(address subscriber)
adminSetSubscription
nonpayablefunction adminSetSubscription(address subscriber, uint8 tierLevel, uint256 durationInSeconds)
cancelSubscription
nonpayablefunction cancelSubscription()
changeTier
nonpayablefunction changeTier(uint8 newTierLevel, address paymentToken)
changeTierCMX
nonpayablefunction changeTierCMX(uint8 newTierLevel)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address token, uint256 amount)
removeAcceptedToken
nonpayablefunction removeAcceptedToken(address token)
renewSubscription
nonpayablefunction renewSubscription()
renewSubscription
nonpayablefunction renewSubscription(address paymentToken)
renounceOwnership
nonpayablefunction renounceOwnership()
setAddressTierDiscount
nonpayablefunction setAddressTierDiscount(address subscriber, uint8 tierLevel, uint256 discountBasisPoints)
setCMXDiscount
nonpayablefunction setCMXDiscount(uint256 discountBasisPoints)
setTier
nonpayablefunction setTier(uint8 tierLevel, string name, uint256 monthlyFeeUSD, bool isActive)
setTreasury
nonpayablefunction setTreasury(address newTreasury)
setUniswapPoolFee
nonpayablefunction setUniswapPoolFee(uint24 newFee)
subscribe
nonpayablefunction subscribe(uint8 tierLevel, address paymentToken)
subscribeCMX
nonpayablefunction subscribeCMX(uint8 tierLevel)
subscribeWithETH
payablefunction subscribeWithETH(uint8 tierLevel) payable
subscribeWithToken
nonpayablefunction subscribeWithToken(uint8 tierLevel, address paymentCurrency, uint256)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
AcceptedTokenAdded
event AcceptedTokenAdded(address indexed token, uint8 decimals, bool isStablecoin)
AcceptedTokenRemoved
event AcceptedTokenRemoved(address indexed token)
CMXDiscountUpdated
event CMXDiscountUpdated(uint256 oldDiscount, uint256 newDiscount)
DiscountApplied
event DiscountApplied(address indexed subscriber, uint256 discount, uint256 finalAmount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
SubscriptionCancelled
event SubscriptionCancelled(address indexed subscriber)
SubscriptionCreated
event SubscriptionCreated(address indexed subscriber, uint8 tierLevel, uint256 paymentAmount, uint256 nextDue, address paymentToken)
SubscriptionRenewed
event SubscriptionRenewed(address indexed subscriber, uint8 tierLevel, uint256 paymentAmount, uint256 nextDue, address paymentToken)
SubscriptionTierUpdated
event SubscriptionTierUpdated(address indexed subscriber, uint8 oldTier, uint8 newTier)
TierCreated
event TierCreated(uint8 tierLevel, string name, uint256 monthlyFeeUSD)
TierUpdated
event TierUpdated(uint8 tierLevel, string name, uint256 monthlyFeeUSD, bool isActive)
TokenSwapped
event TokenSwapped(address indexed fromToken, uint256 amountIn, uint256 amountOut)
errors
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60c060405234610864576129d56080813803918261001c81610887565b93849283398101031261086457610032816108ac565b61003e602083016108ac565b9161004b604082016108ac565b906001600160a01b0390610061906060016108ac565b16928315610851575f80546001600160a01b031981168617825560405195916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600180556002546107d06007556001600160a01b0390931693841561080f57506001600160a01b03169081156107ca576001600160a01b031690811561078557608084905260a0526001600160b81b03199091161761017760a31b17600255610117610868565b9060018252602082016012815260408301915f83525f52600560205261015060405f2093511515849060ff801983541691151516179055565b519061ff0062ff000084549251151560101b169260081b169062ffff0019161717905561017d6040610887565b60078152602081016629ba30b93a32b960c91b815261019a610868565b8281525f60208083018281526001604085019081529280526003909152915180515f5160206129b55f395f51905f5293916001600160401b03821161059f576101e385546108c0565b601f8111610740575b50602090601f83116001146106ee5791806002949261023e9796945f926104e4575b50508160011b915f199060031b1c19161784555b51600184015551151591019060ff801983541691151516179055565b5f805260036020525f5160206129b55f395f51905f525461025e906108c0565b1561069e575b50506102706040610887565b60048152602081016314d9595960e21b815261028a610868565b828152602081016305e69ec0815260408201906001825260015f52600360205260405f20925180519060018060401b03821161059f576102ca85546108c0565b601f8111610659575b50602090601f8311600114610607579180600294926103239796945f926104e45750508160011b915f199060031b1c191617845551600184015551151591019060ff801983541691151516179055565b60015f5260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c54610357906108c0565b156105b3575b50506103696040610887565b6005815260208101645363616c6560d81b8152610384610868565b828152631dbe22c0602080830191825260016040840190815260025f526003909152915180515f5160206129755f395f51905f529392916001600160401b03821161059f576103d385546108c0565b601f811161055a575b50602090601f83116001146104ef5791806002949261042c9796945f926104e45750508160011b915f199060031b1c191617845551600184015551151591019060ff801983541691151516179055565b60025f5260036020525f5160206129755f395f51905f525461044d906108c0565b15610490575b60405161207c90816108f9823960805181818161086c01528181610e830152818161126d015281816115b40152611600015260a05181610ac00152f35b60805f5160206129955f395f51905f529260405192839160028352606060208401525180918160608501528484015e5f828201840152631dbe22c06040830152601f01601f19168101030190a15f80610453565b015190505f8061020e565b90601f19831691865f52815f20925f5b818110610542575092600192859261042c999896600298961061052a575b505050811b018455610222565b01515f1960f88460031b161c191690555f808061051d565b929360206001819287860151815501950193016104ff565b855f5260205f20601f840160051c81019160208510610595575b601f0160051c01905b81811061058a57506103dc565b5f815560010161057d565b9091508190610574565b634e487b7160e01b5f52604160045260245ffd5b60805f5160206129955f395f51905f529260405192839160018352606060208401525180918160608501528484015e5f8282018401526305e69ec06040830152601f01601f19168101030190a15f8061035d565b90601f19831691865f52815f20925f5b8181106106415750926001928592610323999896600298961061052a57505050811b018455610222565b92936020600181928786015181550195019301610617565b855f5260205f20601f840160051c81019160208510610694575b601f0160051c01905b81811061068957506102d3565b5f815560010161067c565b9091508190610673565b60805f5160206129955f395f51905f52926040519283915f8352606060208401525180918160608501528484015e5f82820184018190526040830152601f01601f19168101030190a15f80610264565b90601f19831691865f52815f20925f5b818110610728575092600192859261023e999896600298961061052a57505050811b018455610222565b929360206001819287860151815501950193016106fe565b855f5260205f20601f840160051c8101916020851061077b575b601f0160051c01905b81811061077057506101ec565b5f8155600101610763565b909150819061075a565b60405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207472656173757279206164647265737300000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964207377617020726f75746572206164647265737300000000006044820152606490fd5b62461bcd60e51b815260206004820152601960248201527f496e76616c696420434d5820746f6b656e2061646472657373000000000000006044820152606490fd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b60405190606082016001600160401b0381118382101761059f57604052565b6040519190601f01601f191682016001600160401b0381118382101761059f57604052565b51906001600160a01b038216820361086457565b90600182811c921680156108ee575b60208310146108da57565b634e487b7160e01b5f52602260045260245ffd5b91607f16916108cf56fe60806040526004361015610011575f80fd5b5f3560e01c80630937772014610aef578063143a70cb146115e2578063154af25d146115965780631aea26381461153457806323bd3d5f146114eb57806324e9edb01461149157806327855b131461147457806327c6483a1461145757806327d5fd9214611392578063337c6f6f146113605780633651c24b1461133b5780633afb9043146112e25780633b618cc1146112b8578063415175bb1461129c5780634ead0bb2146112585780634f73863514610f4d5780635745ae2814610ed957806361d027b314610eb15780636e30798114610cbb578063715018a614610c645780637e5863ed14610c2e57806382dc4a0514610bc55780638da5cb5b14610b9e57806395ccea6714610b3c5780639cd5aee414610aef578063c31c9c0714610aab578063c459efc714610a43578063c93ab5dc146109f8578063cb67e3b114610977578063d1d7997414610911578063d8134a231461083d578063d8b2b10f146106de578063dcaf4761146106a6578063e02eb1091461053b578063f0f38713146103fa578063f0f442601461036e578063f2fde38b146102e95763f804bb0e146101bb575f80fd5b346102e55760203660031901126102e5576001600160a01b036101dc61162e565b165f52600460205260405f20604051906101f582611702565b60ff815416918281526001820154916020820192835260ff6002820154169360408301941515855260038201549160608401928352600460018060a01b039101541690608084019182525f52600360205260405f209260ff6040519161025a836116e6565b61026386611740565b92838152604083600260018a0154998a60208601520154161515910152511694519551151591826102da575b6102cb9293519060018060a01b03905116936040519788978852602088015215156040870152606086015260e0608086015260e08501906117e0565b9160a084015260c08301520390f35b42871015925061028f565b5f80fd5b346102e55760203660031901126102e55761030261162e565b61030a611d4f565b6001600160a01b0316801561035b575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b631e4fbdf760e01b5f525f60045260245ffd5b346102e55760203660031901126102e55761038761162e565b61038f611d4f565b6001600160a01b031680156103b5576001600160601b0360a01b60025416176002555f80f35b60405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207472656173757279206164647265737300000000000000006044820152606490fd5b346102e55760ff61040a3661167a565b919290610415611d4f565b1690815f52600360205261043260ff600260405f200154166118c9565b420191824211610527577f1d7b864e1af418821c0f4ab7bc06241b430999d217c155596df32ec0df5ed8de9160809160046040519161047083611702565b8383526020830196875260408301600181526104d660608501915f8352878601935f855260018060a01b0316998a5f528560205260ff8060405f209851161660ff19885416178755516001870155511515600286019060ff801983541691151516179055565b51600384015551910180546001600160a01b0319166001600160a01b03929092169190911790555f8481526004602090815260408083206001015481519485529184018390528301526060820152a2005b634e487b7160e01b5f52601160045260245ffd5b346102e55760203660031901126102e55761055461162e565b61055c611f5f565b335f52600460205260405f2061057860ff600283015416611843565b60ff81541691825f52600360205261059960ff600260405f200154166118c9565b6105c58160018060a01b03811694855f5260056020526105bf60ff60405f205416611991565b33611da6565b80610688575b600183019384548042115f1461065e575062278d004201804211610527575f5160206120275f395f51905f52946106559260ff9288555b84600383015560048201906001600160601b0360a01b8254161790555416945492604051938493339785926060929594919560ff60808601971685526020850152604084015260018060a01b0316910152565b0390a260018055005b62278d008101809111610527575f5160206120275f395f51905f52946106559260ff928855610602565b6002546106a19082906001600160a01b03163387611f7f565b6105cb565b346102e55760403660031901126102e5576106d86106c261166a565b6106ca611644565b906106d3611f5f565b6119dd565b60018055005b346102e55760603660031901126102e5576106f761162e565b6106ff61165a565b90604435908115158092036102e557610716611d4f565b6001600160a01b03169182156108005760ff1690601282116107c8577fa9c2cd5510b241b7f164c50fb6ad74ba19422bcf3f8fd64876ed9cc02b75f36a916040918251610762816116e6565b600181526020810183815284820190838252875f526005602052610798865f2093511515849060ff801983541691151516179055565b519061ff0062ff000084549251151560101b169260081b169062ffff0019161717905582519182526020820152a2005b60405162461bcd60e51b815260206004820152601060248201526f496e76616c696420646563696d616c7360801b6044820152606490fd5b60405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606490fd5b346102e55760203660031901126102e55761085661162e565b61085e611d4f565b6001600160a01b03908116907f00000000000000000000000000000000000000000000000000000000000000001681146108cc57805f52600560205260405f2060ff1981541690557f326e36170ee6cda4a248990122f9deb8f28dc2d403ef152228a53d173453ebf35f80a2005b60405162461bcd60e51b815260206004820152601760248201527f43616e6e6f742072656d6f766520434d5820746f6b656e0000000000000000006044820152606490fd5b346102e55760203660031901126102e55760ff61092c61166a565b165f52600360205261096660405f2061094481611740565b9060ff60026001830154920154166040519384936060855260608501906117e0565b916020840152151560408301520390f35b346102e55760203660031901126102e5576001600160a01b0361099861162e565b165f52600560205260405f20604051906109b1826116e6565b5460ff8082161515808452600883901c8216602080860182905260109490941c909216151560409485018190528451918252928101919091529182015280606081015b0390f35b346102e55760203660031901126102e55760043562ffffff811681036102e557610a20611d4f565b6002805462ffffff60a01b191660a09290921b62ffffff60a01b16919091179055005b346102e55760203660031901126102e557610a5c61162e565b610a64611d4f565b6001600160a01b03165f818152600460205260408120600201805460ff191690557f71215198e3f86c24dc3af6d0d7f84d0095e5ee736aa56daf9927fae51935e95d9080a2005b346102e5575f3660031901126102e5576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346102e55760403660031901126102e557610b0861162e565b610b1061165a565b9060018060a01b03165f52600660205260ff60405f2091165f52602052602060405f2054604051908152f35b346102e55760403660031901126102e557610b9c610b5861162e565b610b60611d4f565b6040519063a9059cbb60e01b6020830152336024830152602435604483015260448252610b8e60648361171e565b6001600160a01b0316611fc3565b005b346102e5575f3660031901126102e5575f546040516001600160a01b039091168152602090f35b346102e55760203660031901126102e5576001600160a01b03610be661162e565b165f5260056020526109f460405f2054604051918160ff849360101c169060ff808260081c16911684919260ff60409295946060850196151585521660208401521515910152565b346102e55760403660031901126102e5576020610c5a610c4c61162e565b610c5461165a565b90611907565b6040519015158152f35b346102e5575f3660031901126102e557610c7c611d4f565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102e5575f3660031901126102e557610cd3611f5f565b335f52600460205260405f20610cef60ff600283015416611843565b60ff815416805f526003602052610d0f60ff600260405f200154166118c9565b6004820180549091906001600160a01b03168015610e8057905b6001600160a01b0382165f8181526005602052604090205490919060ff1615610e2d5782610d579133611da6565b9081610e0f575b600185019485548042115f14610de4575062278d00420190814211610527575f5160206120275f395f51905f52956106559360ff9389555b8560038401556001600160601b0360a01b8254161790555416945492604051938493339785926060929594919560ff60808601971685526020850152604084015260018060a01b0316910152565b9062278d008201809211610527575f5160206120275f395f51905f52956106559360ff938955610d96565b600254610e289083906001600160a01b03163384611f7f565b610d5e565b60405162461bcd60e51b815260206004820152602560248201527f4c617374207061796d656e7420746f6b656e206e6f206c6f6e67657220616363604482015264195c1d195960da1b6064820152608490fd5b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690610d29565b346102e5575f3660031901126102e5576002546040516001600160a01b039091168152602090f35b346102e55760203660031901126102e5576001600160a01b03610efa61162e565b165f52600460205260a060405f2060ff8154169060018101549060ff6002820154166003820154916004600180881b03910154169260405194855260208501521515604084015260608301526080820152f35b346102e55760803660031901126102e557610f6661166a565b60243567ffffffffffffffff81116102e557366023820112156102e55780600401359167ffffffffffffffff83116102e557602482019160248436920101116102e5576044356064358015158091036102e557610fc1611d4f565b601f19601f8601169160405195610fdb602085018861171e565b808752808660208901375f6020828901015260405196610ffa886116e6565b808852602088019783895260ff60408201978689521696875f52600360205260405f20915180519067ffffffffffffffff82116112445761103b84546116ae565b601f81116111ff575b50602090601f83116001146111675793600260a09b9a999897947f24ec6ac49ddbe80cddfab71b1f14223d93df7154e2c1ea954e692ff7166e43a39e855f99968f99966110c2978c9261115c575b50508160011b918b199060031b1c19161784555b51600184015551151591019060ff801983541691151516179055565b87845260036020526110d760408520546116ae565b1561110e575b5080604051998a988952608060208a01528160808a01528389013786010152604084015260608301528101030190a1005b61114d7fe30419fbad380d895a3b0b88ecd83d0bc97e34acb1ae7a7148aea011f9a73216916040519182918b83526060602084015260608301906117e0565b8760408301520390a18a6110dd565b015190505f80611092565b90601f19831691855f52815f20925f5b8181106111e75750947f24ec6ac49ddbe80cddfab71b1f14223d93df7154e2c1ea954e692ff7166e43a39e60018660a09f9e9d9c9b989660a09a966002965f9d9a6110c29a106111cf575b505050811b0184556110a6565b01518c1960f88460031b161c191690555f80806111c2565b92936020600181928786015181550195019301611177565b845f5260205f20601f840160051c8101916020851061123a575b601f0160051c01905b81811061122f5750611044565b5f8155600101611222565b9091508190611219565b634e487b7160e01b5f52604160045260245ffd5b346102e5575f3660031901126102e5576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346102e5575f3660031901126102e55760206040516127108152f35b346102e55760603660031901126102e557610b9c6112d461166a565b6112dc611644565b906119dd565b346102e5576112f03661167a565b916112f9611d4f565b611307612710841115611804565b611316600a60ff841610611888565b60018060a01b03165f52600660205260ff60405f2091165f5260205260405f20555f80f35b346102e5575f3660031901126102e557602062ffffff60025460a01c16604051908152f35b346102e55760403660031901126102e5576106d861137c61166a565b611384611644565b9061138d611f5f565b611c0c565b60203660031901126102e55760ff6113a861166a565b6113b0611f5f565b166113bd600a8210611888565b5f5260036020526113d760ff600260405f200154166118c9565b34156114225760405162461bcd60e51b815260206004820152601e60248201527f455448207061796d656e7473206e6f742079657420737570706f7274656400006044820152606490fd5b60405162461bcd60e51b815260206004820152600d60248201526c09aeae6e840e6cadcc8408aa89609b1b6044820152606490fd5b346102e5575f3660031901126102e5576020600754604051908152f35b346102e5575f3660031901126102e557602060405162278d008152f35b346102e5575f3660031901126102e557335f526004602052600260405f200180546114be60ff8216611843565b60ff19169055337f71215198e3f86c24dc3af6d0d7f84d0095e5ee736aa56daf9927fae51935e95d5f80a2005b346102e55760603660031901126102e55761150461162e565b61150c61165a565b906044356001600160a01b03811681036102e55760209261152c92611da6565b604051908152f35b346102e55760203660031901126102e5577fc6cbacb69852317aefd13621b528c30e87eb0f32ca6ce44387202cd4d53e67bd6040600435611573611d4f565b611581612710821115611804565b600754908060075582519182526020820152a1005b346102e55760203660031901126102e557610b9c6115b261166a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690611c0c565b346102e55760203660031901126102e557610b9c6115fe61166a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906119dd565b600435906001600160a01b03821682036102e557565b602435906001600160a01b03821682036102e557565b6024359060ff821682036102e557565b6004359060ff821682036102e557565b60609060031901126102e5576004356001600160a01b03811681036102e5579060243560ff811681036102e5579060443590565b90600182811c921680156116dc575b60208310146116c857565b634e487b7160e01b5f52602260045260245ffd5b91607f16916116bd565b6060810190811067ffffffffffffffff82111761124457604052565b60a0810190811067ffffffffffffffff82111761124457604052565b90601f8019910116810190811067ffffffffffffffff82111761124457604052565b9060405191825f825492611753846116ae565b80845293600181169081156117be575060011461177a575b506117789250038361171e565b565b90505f9291925260205f20905f915b8183106117a2575050906020611778928201015f61176b565b6020919350806001915483858901015201910190918492611789565b90506020925061177894915060ff191682840152151560051b8201015f61176b565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b1561180b57565b60405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a5908191a5cd8dbdd5b9d60821b6044820152606490fd5b1561184a57565b60405162461bcd60e51b815260206004820152601660248201527527379030b1ba34bb329039bab139b1b934b83a34b7b760511b6044820152606490fd5b1561188f57565b60405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a59081d1a595c881b195d995b60721b6044820152606490fd5b156118d057565b60405162461bcd60e51b815260206004820152600f60248201526e54696572206e6f742061637469766560881b6044820152606490fd5b60018060a01b03165f52600460205260405f209060405161192781611702565b60ff83541692838252600181015491826020820152608060ff60028401541615928315604084015260038101546060840152600460018060a01b039101541691015261198a5742116119845760ff161161198057600190565b5f90565b50505f90565b5050505f90565b1561199857565b60405162461bcd60e51b815260206004820152601a60248201527f5061796d656e7420746f6b656e206e6f742061636365707465640000000000006044820152606490fd5b9060ff8216906119ef600a8310611888565b815f526003602052611a0a60ff600260405f200154166118c9565b60018060a01b03811691825f526005602052611a2c60ff60405f205416611991565b825f52600560205260405f209060ff6040805193611a49856116e6565b549382851615158152828560081c166020820152019260101c1615158252611a72838633611da6565b918115611b9a575b5081611b7c575b62278d004201804211610527577f1d7b864e1af418821c0f4ab7bc06241b430999d217c155596df32ec0df5ed8de9460049160405193611ac085611702565b845260208401908152611b1c6040850160018152606086019287845260808701948552335f528560205260ff8060405f209851161660ff19885416178755516001870155511515600286019060ff801983541691151516179055565b51600384015551910180546001600160a01b0319166001600160a01b03928316179055335f8181526004602090815260409182902060010154825160ff9990991689529088019490945286019290925291909116606084015291608090a2565b600254611b959083906001600160a01b03163387611f7f565b611a81565b511580611c04575b15611bad575f611a7a565b60405162461bcd60e51b815260206004820152602960248201527f46726565207469657220726571756972657320434d582077697468203130302560448201526808191a5cd8dbdd5b9d60ba1b6064820152608490fd5b508115611ba2565b9060ff821690611c1e600a8310611888565b815f52600360205260ff600260405f2001541615611d145760018060a01b03811690815f526005602052611c5860ff60405f205416611991565b335f526004602052611c8460405f2091611c7860ff600285015416611843565b60ff8354169533611da6565b9081611cf6575b8360ff1982541617815562278d00420191824211610527576004926001830155600382015501906001600160601b0360a01b82541617905560405191825260208201527face96bfdbb830c9e1c7f687ec70709b5f8667990cab2c99c04c556fea7bac92d60403392a2565b600254611d0f9083906001600160a01b03163386611f7f565b611c8b565b60405162461bcd60e51b81526020600482015260136024820152724e65772074696572206e6f742061637469766560681b6044820152606490fd5b5f546001600160a01b03163303611d6257565b63118cdaa760e01b5f523360045260245ffd5b8181029291811591840414171561052757565b9190820391821161052757565b60ff16604d811161052757600a0a90565b909160018060a01b03165f52600560205260405f209060405191611dc9836116e6565b549260ff8416158015845260ff60406020860195828860081c168752019560101c1615158552611f255760ff81165f90815260036020526040902060010154935115611eb1575050805160ff169060068203611e2457505090565b60128203611e4c57505064e8d4a5100081029080820464e8d4a5100014901517156105275790565b6006821115611e7d5760ff91505116600519019060ff821161052757611e74611e7a92611d95565b90611d75565b90565b5060060360ff811161052757611e9290611d95565b908115611e9d570490565b634e487b7160e01b5f52601260045260245ffd5b91509164e8d4a5100081029080820464e8d4a51000149015171561052757611ee990612710611ee260075483611d75565b0490611d88565b9160018060a01b03165f52600660205260ff60405f2091165f5260205260405f205480611f14575090565b90612710611ee2611e7a9383611d75565b60405162461bcd60e51b8152602060048201526012602482015271151bdad95b881b9bdd081858d8d95c1d195960721b6044820152606490fd5b600260015414611f70576002600155565b633ee5aeb560e01b5f5260045ffd5b6040516323b872dd60e01b60208201526001600160a01b03928316602482015292909116604483015260648083019390935291815261177891611fc360848361171e565b905f602091828151910182855af11561201b575f513d61201257506001600160a01b0381163b155b611ff25750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b60011415611feb565b6040513d5f823e3d90fdfe7e7b4c61119c8455abc0b8cc1ea04160289faf1ae1bb540c51156ebc9cb92d00a2646970667358221220f55a219d79b9ec1c177f5a258cbba0d04bd9945feae21821638db684a585f88664736f6c634300081c0033c3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4de30419fbad380d895a3b0b88ecd83d0bc97e34acb1ae7a7148aea011f9a732163617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff0000000000000000000000009d7818d53f9c2ed0752a1608952d29f1606cecaf0000000000000000000000006ff5693b99212da76ad316178a184ab56d299b43000000000000000000000000b3cfc02811aa7071ff5fff055340e9c9dd054a53000000000000000000000000353df1fc86c753c02abe3153f775fe8a6fe0fa1c