Contract con_simple_staking_tau_rswp_001


Contract Code


  
1 import currency
2 import con_rswp_lst001
3 STAKING_TOKEN = currency
4 YIELD_TOKEN = con_rswp_lst001
5 __Owner = Variable(contract='con_simple_staking_tau_rswp_001', name='Owner')
6 __DevRewardWallet = Variable(contract='con_simple_staking_tau_rswp_001',
7 name='DevRewardWallet')
8 __EmissionRatePerHour = Variable(contract='con_simple_staking_tau_rswp_001',
9 name='EmissionRatePerHour')
10 __DevRewardPct = Variable(contract='con_simple_staking_tau_rswp_001', name=
11 'DevRewardPct')
12 __StartTime = Variable(contract='con_simple_staking_tau_rswp_001', name=
13 'StartTime')
14 __EndTime = Variable(contract='con_simple_staking_tau_rswp_001', name='EndTime'
15 )
16 __OpenForBusiness = Variable(contract='con_simple_staking_tau_rswp_001',
17 name='OpenForBusiness')
18 __Deposits = Hash(default_value=False, contract=
19 'con_simple_staking_tau_rswp_001', name='Deposits')
20 __Withdrawals = Hash(default_value=0, contract=
21 'con_simple_staking_tau_rswp_001', name='Withdrawals')
22 __CurrentEpochIndex = Variable(contract='con_simple_staking_tau_rswp_001',
23 name='CurrentEpochIndex')
24 __Epochs = Hash(default_value=False, contract=
25 'con_simple_staking_tau_rswp_001', name='Epochs')
26 __StakedBalance = Variable(contract='con_simple_staking_tau_rswp_001', name
27 ='StakedBalance')
28 __meta = Hash(default_value=False, contract=
29 'con_simple_staking_tau_rswp_001', name='meta')
30 __EmissionRatePerTauYearly = Variable(contract=
31 'con_simple_staking_tau_rswp_001', name='EmissionRatePerTauYearly')
32 __EmissionRatePerSecond = Variable(contract=
33 'con_simple_staking_tau_rswp_001', name='EmissionRatePerSecond')
34
35
36 def ____():
37 __Owner.set(ctx.caller)
38 __DevRewardWallet.set(ctx.caller)
39 __CurrentEpochIndex.set(0)
40 __StakedBalance.set(0)
41 __EmissionRatePerTauYearly.set(10)
42 __Epochs[0] = {'time': now, 'emission_rate_per_tau':
43 __EmissionRatePerTauYearly.get()}
44 __EmissionRatePerSecond.set(getEmissionRatePerSecond(
45 __EmissionRatePerTauYearly.get()))
46 __meta['version'] = '0.0.1'
47 __meta['type'] = 'staking_simple'
48 __meta['STAKING_TOKEN'] = 'currency'
49 __meta['YIELD_TOKEN'] = 'con_rswp_lst001'
50 __DevRewardPct.set(decimal('0.1'))
51 __StartTime.set(datetime.datetime(year=2021, month=3, day=24, hour=22))
52 __EndTime.set(datetime.datetime(year=2022, month=3, day=24, hour=22))
53 __OpenForBusiness.set(True)
54
55
56 @__export('con_simple_staking_tau_rswp_001')
57 def addStakingTokens(amount: float):
58 assert __OpenForBusiness.get(
59 ) == True, 'This staking pool is not open right now.'
60 assert amount > 0, 'You cannot stake a negative balance.'
61 user = ctx.caller
62 STAKING_TOKEN.transfer_from(amount=amount, to=ctx.this, main_account=user)
63 staked = __StakedBalance.get()
64 new_staked_amount = staked + amount
65 __StakedBalance.set(new_staked_amount)
66 if __Deposits[user] is False:
67 __Deposits[user] = []
68 deposits = __Deposits[user]
69 deposits.append({'starting_epoch': __CurrentEpochIndex.get(), 'time':
70 now, 'amount': amount})
71 __Deposits[user] = deposits
72
73
74 @__export('con_simple_staking_tau_rswp_001')
75 def withdrawYield(amount: float):
76 assert amount > 0, 'You cannot harvest a negative balance'
77 user = ctx.caller
78 deposits = __Deposits[user]
79 assert deposits is not False, 'You have no deposit to withdraw yield from.'
80 withdrawn_yield = __Withdrawals[user]
81 harvestable_yield = 0
82 for d in deposits:
83 harvestable_yield += __calculateYield(starting_epoch_index=d[
84 'starting_epoch'], start_time=d['time'], amount=d['amount'])
85 harvestable_yield -= withdrawn_yield
86 yield_to_harvest = (amount if amount < harvestable_yield else
87 harvestable_yield)
88 assert yield_to_harvest > 0, 'There is no yield to harvest right now :('
89 dev_share = yield_to_harvest * __DevRewardPct.get()
90 if dev_share > 0:
91 YIELD_TOKEN.transfer(to=__DevRewardWallet.get(), amount=dev_share)
92 user_share = yield_to_harvest - dev_share
93 YIELD_TOKEN.transfer(to=user, amount=user_share)
94 __Withdrawals[user] = withdrawn_yield + yield_to_harvest
95
96
97 @__export('con_simple_staking_tau_rswp_001')
98 def withdrawTokensAndYield():
99 user = ctx.caller
100 deposits = __Deposits[user]
101 assert deposits is not False, 'You have no deposit to withdraw'
102 withdrawn_yield = __Withdrawals[user]
103 stake_to_return = 0
104 yield_to_harvest = 0
105 for d in deposits:
106 yield_to_harvest += __calculateYield(starting_epoch_index=d[
107 'starting_epoch'], start_time=d['time'], amount=d['amount'])
108 stake_to_return += d['amount']
109 STAKING_TOKEN.transfer(to=user, amount=stake_to_return)
110 yield_to_harvest -= withdrawn_yield
111 if yield_to_harvest > 0:
112 dev_share = yield_to_harvest * __DevRewardPct.get()
113 if dev_share > 0:
114 YIELD_TOKEN.transfer(to=__DevRewardWallet.get(), amount=dev_share)
115 user_share = yield_to_harvest - dev_share
116 YIELD_TOKEN.transfer(to=user, amount=user_share)
117 __Deposits[user] = False
118 __Withdrawals[user] = 0
119 new_staked_amount = __StakedBalance.get() - stake_to_return
120 __StakedBalance.set(new_staked_amount)
121
122
123 def __calculateYield(starting_epoch_index: int, start_time, amount: float):
124 current_epoch_index = getCurrentEpochIndex()
125 this_epoch_index = starting_epoch_index
126 y = 0
127 while this_epoch_index <= current_epoch_index:
128 this_epoch = __Epochs[this_epoch_index]
129 next_epoch = __Epochs[this_epoch_index + 1]
130 delta = 0
131 if starting_epoch_index == current_epoch_index:
132 delta = __fitTimeToRange(now) - __fitTimeToRange(start_time)
133 elif this_epoch_index == starting_epoch_index:
134 delta = __fitTimeToRange(next_epoch['time']) - __fitTimeToRange(
135 start_time)
136 elif this_epoch_index == current_epoch_index:
137 delta = __fitTimeToRange(now) - __fitTimeToRange(this_epoch['time']
138 )
139 else:
140 delta = __fitTimeToRange(next_epoch['time']) - __fitTimeToRange(
141 this_epoch['time'])
142 rswp_per_tau_per_second = getEmissionRatePerSecond(this_epoch[
143 'emission_rate_per_tau'])
144 y += rswp_per_tau_per_second * amount * delta.seconds
145 this_epoch_index += 1
146 return y
147
148
149 def __fitTimeToRange(time: Any):
150 if time < __StartTime.get():
151 time = __StartTime.get()
152 elif time > __EndTime.get():
153 time = __EndTime.get()
154 return time
155
156
157 @__export('con_simple_staking_tau_rswp_001')
158 def getEmissionRatePerSecond(emission_rate_per_tau: float):
159 value = emission_rate_per_tau / 365 / 24 / 60 / 60
160 return value
161
162
163 @__export('con_simple_staking_tau_rswp_001')
164 def getCurrentEpochIndex():
165 current_epoch_index = __CurrentEpochIndex.get()
166 return current_epoch_index
167
168
169 @__export('con_simple_staking_tau_rswp_001')
170 def incrementEpoch(emission_rate_per_tau: float):
171 __assertOwner()
172 assert emission_rate_per_tau > 0
173 current_epoch = __CurrentEpochIndex.get()
174 new_epoch_idx = current_epoch + 1
175 __CurrentEpochIndex.set(new_epoch_idx)
176 __EmissionRatePerTauYearly.set(emission_rate_per_tau)
177 __EmissionRatePerSecond.set(getEmissionRatePerSecond(
178 __EmissionRatePerTauYearly.get()))
179 __Epochs[new_epoch_idx] = {'time': now, 'emission_rate_per_tau':
180 emission_rate_per_tau}
181 return new_epoch_idx
182
183
184 @__export('con_simple_staking_tau_rswp_001')
185 def emergencyReturnStake():
186 user = ctx.caller
187 deposits = __Deposits[user]
188 assert __Deposits[user
189 ] is not False, 'This account has no deposits to return.'
190 stake_to_return = 0
191 for d in deposits:
192 stake_to_return += d['amount']
193 STAKING_TOKEN.transfer(to=user, amount=stake_to_return)
194 __Deposits[user] = False
195 __Withdrawals[user] = 0
196 new_staked_amount = __StakedBalance.get() - stake_to_return
197 __StakedBalance.set(new_staked_amount)
198
199
200 @__export('con_simple_staking_tau_rswp_001')
201 def setOwner(vk: str):
202 __assertOwner()
203 __Owner.set(vk)
204
205
206 @__export('con_simple_staking_tau_rswp_001')
207 def setDevWallet(vk: str):
208 __assertOwner()
209 __DevRewardWallet.set(vk)
210
211
212 @__export('con_simple_staking_tau_rswp_001')
213 def setDevRewardPct(amount: float):
214 __assertOwner()
215 assert amount < 1 and amount >= 0, 'Amount must be a value between 0 and 1'
216 __DevRewardPct.set(amount)
217
218
219 @__export('con_simple_staking_tau_rswp_001')
220 def recoverYieldToken(amount: float):
221 __assertOwner()
222 YIELD_TOKEN.transfer(amount=amount, to=__Owner.get())
223
224
225 @__export('con_simple_staking_tau_rswp_001')
226 def allowStaking(is_open: bool):
227 __assertOwner()
228 __OpenForBusiness.set(is_open)
229
230
231 @__export('con_simple_staking_tau_rswp_001')
232 def setStartTime(year: int, month: int, day: int, hour: int):
233 __assertOwner()
234 time = datetime.datetime(year, month, day, hour)
235 __StartTime.set(time)
236
237
238 @__export('con_simple_staking_tau_rswp_001')
239 def setEndTime(year: int, month: int, day: int, hour: int):
240 __assertOwner()
241 time = datetime.datetime(year, month, day, hour)
242 __EndTime.set(time)
243
244
245 @__export('con_simple_staking_tau_rswp_001')
246 def updateMeta(field: str, value: str):
247 __assertOwner()
248 __meta[field] = value
249
250
251 def __assertOwner():
252 assert __Owner.get(
253 ) == ctx.caller, 'You must be the owner to call this function.'
254

Byte Code

e30000000000000000000000000600000040000000734c020000640064016c005a00640064016c015a0165005a0265015a0365046402640364048d025a0565046402640564048d025a0665046402640664048d025a0765046402640764048d025a0865046402640864048d025a0965046402640964048d025a0a65046402640a64048d025a0b650c640b6402640c640d8d035a0d650c64006402640e640d8d035a0e65046402640f64048d025a0f650c640b64026410640d8d035a1065046402641164048d025a11650c640b64026412640d8d035a1265046402641364048d025a1365046402641464048d025a146415641684005a15651664028301651764179c0164186419840483015a18651664028301651764179c01641a641b840483015a19651664028301641c641d840083015a1a651b6517641e9c02641f642084045a1c651d64219c016422642384045a1e651664028301651764249c0164256426840483015a1f65166402830164276428840083015a20651664028301651764249c016429642a840483015a21651664028301642b642c840083015a226516640283016523642d9c01642e642f840483015a246516640283016523642d9c0164306431840483015a25651664028301651764179c0164326433840483015a26651664028301651764179c0164346435840483015a27651664028301652864369c0164376438840483015a29651664028301651b651b651b651b64399c04643a643b840483015a2a651664028301651b651b651b651b64399c04643c643d840483015a2b65166402830165236523643e9c02643f6440840483015a2c6441644284005a2d640153002943e9000000004eda1f636f6e5f73696d706c655f7374616b696e675f7461755f727377705f303031da054f776e65722902da08636f6e7472616374da046e616d65da0f44657652657761726457616c6c6574da13456d697373696f6e52617465506572486f7572da0c446576526577617264506374da09537461727454696d65da07456e6454696d65da0f4f70656e466f72427573696e65737346da084465706f736974732903da0d64656661756c745f76616c756572040000007205000000da0b5769746864726177616c73da1143757272656e7445706f6368496e646578da0645706f636873da0d5374616b656442616c616e6365da046d657461da18456d697373696f6e52617465506572546175596561726c79da15456d697373696f6e526174655065725365636f6e6463000000000000000000000000070000004300000073c600000074006a0174026a038301010074046a0174026a038301010074056a0164018301010074066a0164018301010074076a01640283010100740874076a09830064039c02740a64013c00740b6a01740c74076a0983008301830101006404740d64053c006406740d64073c006408740d64093c00640a740d640b3c00740e6a01740f640c83018301010074106a0174116a11640d640e640f641064118d048301010074126a0174116a116412640e640f641064118d048301010074136a016413830101006400530029144e7201000000e90a0000002902da0474696d65da15656d697373696f6e5f726174655f7065725f7461757a05302e302e31da0776657273696f6eda0e7374616b696e675f73696d706c65da0474797065da0863757272656e6379da0d5354414b494e475f544f4b454eda0f636f6e5f727377705f6c7374303031da0b5949454c445f544f4b454e7a03302e3169e5070000e903000000e918000000e9160000002904da0479656172da056d6f6e7468da03646179da04686f757269e6070000542914da075f5f4f776e6572da03736574da03637478da0663616c6c6572da115f5f44657652657761726457616c6c6574da135f5f43757272656e7445706f6368496e646578da0f5f5f5374616b656442616c616e6365da1a5f5f456d697373696f6e52617465506572546175596561726c79da036e6f77da03676574da085f5f45706f636873da175f5f456d697373696f6e526174655065725365636f6e64da18676574456d697373696f6e526174655065725365636f6e64da065f5f6d657461da0e5f5f446576526577617264506374da07646563696d616cda0b5f5f537461727454696d65da086461746574696d65da095f5f456e6454696d65da115f5f4f70656e466f72427573696e657373a900723a000000723a000000da00da045f5f5f5f24000000732200000000010c010c010a010a010a010201100106010c0108010801080108010e0118011801723c0000002901da06616d6f756e74630100000000000000050000000500000043000000739400000074006a01830064016b02731474026402830182017c0064036b047324740264048301820174036a047d0174056a067c0074036a077c0164058d03010074086a0183007d027c027c0017007d0374086a097c0383010100740a7c01190064066b08726a6700740a7c013c00740a7c0119007d047c046a0b740c6a018300740d7c0064079c03830101007c04740a7c013c006400530029084e547a2854686973207374616b696e6720706f6f6c206973206e6f74206f70656e207269676874206e6f772e72010000007a24596f752063616e6e6f74207374616b652061206e656761746976652062616c616e63652e2903723d000000da02746fda0c6d61696e5f6163636f756e74462903da0e7374617274696e675f65706f63687216000000723d000000290e7239000000722f000000da0e417373657274696f6e4572726f7272280000007229000000721c000000da0d7472616e736665725f66726f6dda0474686973722c0000007227000000da0a5f5f4465706f73697473da06617070656e64722b000000722e0000002905723d000000da0475736572da067374616b6564da116e65775f7374616b65645f616d6f756e74da086465706f73697473723a000000723a000000723b000000da106164645374616b696e67546f6b656e7338000000731c000000000206010e01100106011201080108010a010c01080108010a010c01724a00000063010000000000000009000000070000004300000073da0000007c0064016b047310740064028301820174016a027d0174037c0119007d027c0264036b09732e740064048301820174047c0119007d0364017d04782a7c0244005d227d057c0474057c05640519007c05640619007c056407190064088d0337007d04714057007c047c0338007d047c007c046b00727a7c006e027c047d067c0664016b04738e74006409830182017c0674066a07830014007d077c0764016b0472b474086a09740a6a0783007c07640a8d0201007c067c0718007d0874086a097c017c08640a8d0201007c037c06170074047c013c0064005300290b4e72010000007a25596f752063616e6e6f7420686172766573742061206e656761746976652062616c616e6365467a2b596f752068617665206e6f206465706f73697420746f207769746864726177207969656c642066726f6d2e72400000007216000000723d0000002903da147374617274696e675f65706f63685f696e646578da0a73746172745f74696d65723d0000007a295468657265206973206e6f207969656c6420746f2068617276657374207269676874206e6f77203a282902723e000000723d000000290b7241000000722800000072290000007244000000da0d5f5f5769746864726177616c73da105f5f63616c63756c6174655969656c647234000000722f000000721e000000da087472616e73666572722a0000002909723d00000072460000007249000000da0f77697468647261776e5f7969656c64da116861727665737461626c655f7969656c64da0164da107969656c645f746f5f68617276657374da096465765f7368617265da0a757365725f7368617265723a000000723a000000723b000000da0d77697468647261775969656c644a000000732600000000021001060108011001080104010a0106011c0108010c01040110010c010801120108010e01725600000063000000000000000009000000070000004300000073ea00000074006a017d0074027c0019007d017c0164016b09731e740364028301820174047c0019007d0264037d0364037d0478367c0144005d2e7d057c0474057c05640419007c05640519007c056406190064078d0337007d047c037c056406190037007d037134570074066a077c007c0364088d0201007c047c0238007d047c0464036b0472c07c0474086a09830014007d067c0664036b0472aa740a6a07740b6a0983007c0664088d0201007c047c0618007d07740a6a077c007c0764088d020100640174027c003c00640374047c003c00740c6a0983007c0318007d08740c6a0d7c08830101006400530029094e467a1f596f752068617665206e6f206465706f73697420746f207769746864726177720100000072400000007216000000723d0000002903724b000000724c000000723d0000002902723e000000723d000000290e7228000000722900000072440000007241000000724d000000724e000000721c000000724f0000007234000000722f000000721e000000722a000000722c00000072270000002909724600000072490000007250000000da0f7374616b655f746f5f72657475726e72530000007252000000725400000072550000007248000000723a000000723a000000723b000000da167769746864726177546f6b656e73416e645969656c6461000000732c00000000020601080110010801040104010a010601180110010e01080108010c010801120108010e01080108010c0172580000002902724b000000723d0000006303000000000000000a000000040000004300000073cc000000740083007d037c007d0464017d0578b87c047c036b0172c674017c0419007d0674017c046402170019007d0764017d087c007c036b02724a74027403830174027c01830118007d086e547c047c006b02726874027c0764031900830174027c01830118007d086e367c047c036b02728674027403830174027c0664031900830118007d086e1874027c0764031900830174027c0664031900830118007d0874047c066404190083017d097c057c097c0214007c086a05140037007d057c04640237007d04711057007c05530029054e7201000000e901000000721600000072170000002906da1467657443757272656e7445706f6368496e6465787230000000da105f5f66697454696d65546f52616e6765722e0000007232000000da077365636f6e6473290a724b000000724c000000723d000000da1363757272656e745f65706f63685f696e646578da10746869735f65706f63685f696e646578da0179da0a746869735f65706f6368da0a6e6578745f65706f6368da0564656c7461da17727377705f7065725f7461755f7065725f7365636f6e64723a000000723a000000723b000000724e0000007b000000732a00000000010601040104010a0108010c0104010801120108010c010a01080116030c010c010401080112010c01724e00000029017216000000630100000000000000010000000200000043000000732e0000007c0074006a0183006b00721674006a0183007d006e147c0074026a0183006b04722a74026a0183007d007c00530029014e29037236000000722f000000723800000029017216000000723a000000723a000000723b000000725b00000095000000730a00000000010c010a010c010801725b0000002901721700000063010000000000000002000000020000004300000073180000007c0064011b0064021b0064031b0064031b007d017c01530029044e696d0100007220000000e93c000000723a00000029027217000000da0576616c7565723a000000723a000000723b00000072320000009d0000007304000000000214017232000000630000000000000000010000000100000043000000730c00000074006a0183007d007c00530029014e2902722b000000722f0000002901725d000000723a000000723a000000723b000000725a000000a3000000730400000000020801725a000000630100000000000000030000000300000043000000735a0000007400830001007c0064016b0473127401820174026a0383007d017c01640217007d0274026a047c028301010074056a047c008301010074066a04740774056a03830083018301010074087c0064039c0274097c023c007c02530029044e72010000007259000000290272160000007217000000290ada0d5f5f6173736572744f776e65727241000000722b000000722f0000007227000000722d00000072310000007232000000722e000000723000000029037217000000da0d63757272656e745f65706f6368da0d6e65775f65706f63685f696478723a000000723a000000723b000000da0e696e6372656d656e7445706f6368a90000007316000000000206010c01080108010a010a0106010c0102010c017269000000630000000000000000050000000400000043000000737800000074006a017d0074027c0019007d0174027c00190064016b097322740364028301820164037d0278187c0144005d107d037c027c036404190037007d02712c570074046a057c007c0264058d020100640174027c003c00640374067c003c0074076a0883007c0218007d0474076a097c04830101006400530029064e467a2754686973206163636f756e7420686173206e6f206465706f7369747320746f2072657475726e2e7201000000723d0000002902723e000000723d000000290a7228000000722900000072440000007241000000721c000000724f000000724d000000722c000000722f0000007227000000290572460000007249000000725700000072520000007248000000723a000000723a000000723b000000da14656d657267656e637952657475726e5374616b65b8000000731800000000020601080106010e0104010a0110010e01080108010c01726a0000002901da02766b630100000000000000010000000200000043000000731400000074008300010074016a027c00830101006400530029014e29037266000000722600000072270000002901726b000000723a000000723a000000723b000000da087365744f776e6572c8000000730400000000020601726c000000630100000000000000010000000200000043000000731400000074008300010074016a027c00830101006400530029014e29037266000000722a00000072270000002901726b000000723a000000723a000000723b000000da0c73657444657657616c6c6574ce000000730400000000020601726d000000630100000000000000010000000200000043000000732c0000007400830001007c0064016b0072167c0064026b05731e740164038301820174026a037c00830101006400530029044e725900000072010000007a26416d6f756e74206d75737420626520612076616c7565206265747765656e203020616e642031290472660000007241000000723400000072270000002901723d000000723a000000723a000000723b000000da0f736574446576526577617264506374d40000007306000000000206011801726e000000630100000000000000010000000400000043000000731c00000074008300010074016a027c0074036a04830064018d0201006400530029024e2902723d000000723e00000029057266000000721e000000724f0000007226000000722f0000002901723d000000723a000000723a000000723b000000da117265636f7665725969656c64546f6b656edb000000730400000000020601726f0000002901da0769735f6f70656e630100000000000000010000000200000043000000731400000074008300010074016a027c00830101006400530029014e290372660000007239000000722700000029017270000000723a000000723a000000723b000000da0c616c6c6f775374616b696e67e1000000730400000000020601727100000029047222000000722300000072240000007225000000630400000000000000050000000500000043000000732400000074008300010074016a017c007c017c027c0383047d0474026a037c04830101006400530029014e29047266000000723700000072360000007227000000290572220000007223000000722400000072250000007216000000723a000000723a000000723b000000da0c736574537461727454696d65e700000073060000000002060110017272000000630400000000000000050000000500000043000000732400000074008300010074016a017c007c017c027c0383047d0474026a037c04830101006400530029014e29047266000000723700000072380000007227000000290572220000007223000000722400000072250000007216000000723a000000723a000000723b000000da0a736574456e6454696d65ee000000730600000000020601100172730000002902da056669656c64726500000063020000000000000002000000030000004300000073120000007400830001007c0174017c003c006400530029014e290272660000007233000000290272740000007265000000723a000000723a000000723b000000da0a7570646174654d657461f50000007304000000000206017275000000630000000000000000000000000200000043000000731a00000074006a01830074026a036b02731674046401830182016400530029024e7a2c596f75206d75737420626520746865206f776e657220746f2063616c6c20746869732066756e6374696f6e2e29057226000000722f000000722800000072290000007241000000723a000000723a000000723a000000723b0000007266000000fb0000007304000000000106017266000000292e721b000000721d000000721c000000721e000000da085661726961626c657226000000722a000000da155f5f456d697373696f6e52617465506572486f75727234000000723600000072380000007239000000da04486173687244000000724d000000722b0000007230000000722c0000007233000000722d0000007231000000723c000000da085f5f6578706f7274da05666c6f6174724a00000072560000007258000000da03696e74724e000000da03416e79725b0000007232000000725a0000007269000000726a000000da03737472726c000000726d000000726e000000726f000000da04626f6f6c72710000007272000000727300000072750000007266000000723a000000723a000000723a000000723b000000da083c6d6f64756c653e01000000737c00000008010801040104010c01040108010401080104010801040108010c020401080104010a0104010a010401080104010a010401080104010a0102010a0102010a0308140601101106011016101a101a0e080601100510060601100e10100601100506011005060110060601100506011005060116060601160606011205