Contract con_uw_master_s_1


Contract Code


  
1 import currency
2 import con_uwarriors_lst001
3
4 I = importlib
5 S = Hash(default_value='')
6 balances = Hash(default_value=0)
7 metadata = Hash(default_value=0)
8 game = Hash(default_value=0)
9 nicks = Hash(default_value=0)
10 wp = ForeignHash(foreign_contract='con_uwarriors_lst001', foreign_name='balances')
11
12 @construct
13 def seed():
14 metadata['operator'] = ctx.caller
15 metadata['withdrawal'] = False
16 metadata['starter_pack_price'] = 1500
17 metadata['game_cost'] = 2
18 metadata['time'] = 21600
19 metadata['fees'] = decimal('0.15')
20 metadata['fees_withdrawal'] = decimal('0.20')
21 metadata['operator_user_data'] = ['con_uw_auction_season1']
22 metadata['operator_thing_meta'] = ['con_uw_nft_characters','con_uw_nft_crystal']
23 game['in'] = 0
24
25 @export
26 def set_nick_name(nickname: str):
27 caller = ctx.caller
28 assert len(nickname) <= 25, 'Nickname too long (25 chars max).'
29 assert len(nickname) > 0, 'Nickname too short.'
30 names_uid = hashlib.sha256(nickname.lower().replace(' ', ''))
31 assert not nicks['nicknames', names_uid], 'A form of this name already belongs to ' + nicks['nicknames', names_uid]
32 nicks[caller, 'nickname'] = nickname
33 nicks['nicknames', names_uid] = nickname
34
35
36 @export
37 def add_operator_data(operator: str, news: list):
38 assert ctx.caller == metadata['operator'], 'Only operator can set metadata!'
39 metadata[operator] = news
40
41
42 @export
43 def change_nick_name(nickname: str, change: str):
44 assert ctx.caller == metadata['operator'], 'Only operator can set metadata!'
45 assert len(nickname) <= 25, 'Nickname too long (25 chars max).'
46 assert len(nickname) > 0, 'Nickname too short.'
47 names_uid = hashlib.sha256(nickname.lower().replace(' ', ''))
48 assert not nicks['nicknames', names_uid], 'A form of this name already belongs to ' + nicks['nicknames', names_uid]
49 nicks[nickname, 'nickname'] = change
50 nicks['nicknames', names_uid] = change
51
52
53 @export
54 def play():
55 sender = ctx.caller
56 amount = metadata['game_cost']
57 operator = metadata['operator']
58 assert wp[sender] > amount , 'Not enough coins to send!'
59 con_uwarriors_lst001.transfer_from(amount, metadata['operator'], sender)
60 balances[sender, 'can_play'] = True
61 game['in'] += amount
62
63
64 @export
65 def buy_character():
66 sender = ctx.caller
67 amount = metadata['starter_pack_price']
68 operator = metadata['operator']
69 assert wp[sender] > amount , 'Not enough coins to send!'
70 con_uwarriors_lst001.transfer_from(amount, metadata['operator'], sender)
71 game['in'] += amount
72
73 @export
74 def buy_character_gift(wallet: str):
75 sender = ctx.caller
76 amount = metadata['starter_pack_price']
77 operator = metadata['operator']
78 assert wp[sender] > amount , 'Not enough coins to send!'
79 con_uwarriors_lst001.transfer_from(amount, metadata['operator'], sender)
80 game['in'] += amount
81
82 @export
83 def change_thing_meta(uid: str, meta: dict, contract: str):
84 assert ctx.caller == metadata['operator'] or metadata['operator_thing_meta'] == ctx.caller, 'Only operator can set metadata!'
85 thing_info = I.import_module(contract)
86 thing_uid = thing_info.change_meta(uid, meta)
87 return thing_uid
88
89 @export
90 def rewards(uid: str, amount: float):
91 assert ctx.caller == metadata['operator'], 'Only operator'
92 assert balances[uid, 'can_play'] == true, 'No can Play'
93
94 if metadata['withdrawal'] == True:
95 balances[uid, 'rewards'] += amount
96 balances[uid, 'total_rewards'] += amount
97 if balances[uid, 'rewards', 'time'] is None:
98 balances[uid, 'rewards', 'time'] = now
99 else:
100 balances[uid, 'total_rewards'] += amount
101 con_uwarriors_lst001.transfer_from(amount, uid, metadata['operator'])
102
103 balances[uid, 'can_play'] = False
104 game['total_rewards_pay'] += amount
105
106
107 @export
108 def withdrawal():
109 sender = ctx.caller
110 assert balances[sender, 'rewards'] > 0, 'Cannot send negative balances!'
111
112 amount = balances[sender, 'rewards']
113 if metadata['withdrawal'] == True:
114 if (now - balances[sender, 'rewards', 'time']).minute > metadata['time']:
115
116 con_uwarriors_lst001.transfer_from(amount, sender, metadata['operator'])
117 balances[sender, 'rewards'] = 0
118 balances[uid, 'rewards', 'time'] = now
119 game['total_rewards_pay'] += amount
120 else:
121 con_uwarriors_lst001.transfer_from(amount - (amount * metadata['fees_withdrawal']), sender, metadata['operator'])
122 balances[sender, 'rewards'] = 0
123 balances[uid, 'rewards', 'time'] = now
124 game['total_rewards_pay'] += amount
125
126 @export
127 def add_thing_meta(uid: str, meta:str, contract: str, value: Any):
128 assert ctx.caller == metadata['operator'] or ctx.caller in metadata['operator_thing_meta'] , 'Only operator can set metadata!'
129 thing_info = I.import_module(contract)
130 thing_uid = thing_info.add_meta(uid, meta, value)
131
132 return thing_uid
133
134 @export
135 def add_user_data(uid: str, meta: str, value: Any):
136 assert ctx.caller == metadata['operator'] or ctx.caller in metadata['operator_thing_meta'], 'Only operator can set metadata!'
137
138 if not balances[uid, meta]:
139 balances[uid, meta] = value
140
141 @export
142 def increment_user_data(uid: str, meta: str, value: int):
143 assert ctx.caller == metadata['operator'] or ctx.caller in metadata['operator_thing_meta'], 'Only operator can set metadata!'
144 balances[uid, meta] += value
145
146 @export
147 def change_user_data(uid: str, meta: str, value: int):
148 assert ctx.caller == metadata['operator'] or ctx.caller in metadata['operator_thing_meta'], 'Only operator can set metadata!'
149 balances[uid, meta] = value
150
151 @export
152 def change_metadata(key: str, value: Any):
153 assert ctx.caller == metadata['operator'], 'Only operator can set metadata!'
154 metadata[key] = value
155
156 @export
157 def create_thing(contract: str, thing_string: str, name: str, owner: str, meta: dict = {}):
158 assert ctx.caller == metadata['operator'], 'Only operator can set metadata!'
159 thing_info = I.import_module(contract)
160 sender = ctx.caller
161 thing_uid = thing_info.add_thing(thing_string, name, meta, owner)
162
163 return thing_uid
164
165 @export
166 def buy_thing(uid: str, contract:str):
167 thing_info = I.import_module(contract)
168 sender = ctx.caller
169 owner = thing_info.get_owner(uid)
170 creator = thing_info.get_creator(uid)
171
172 assert_already_owned(uid, sender, contract)
173
174 price_amount = thing_info.get_price_amount(uid)
175
176 assert price_amount, uid + ' is not for sale'
177 assert price_amount > 0, uid + ' is not for sale'
178
179 price_amount_pay = price_amount - (price_amount * metadata['fees'])
180
181 con_uwarriors_lst001.transfer_from(price_amount_pay, owner, sender)
182 con_uwarriors_lst001.transfer_from((price_amount * metadata['fees']), metadata['operator'], sender)
183
184 transfer_ownership(uid, sender, contract)
185
186 game['in'] += (price_amount * metadata['fees'])
187
188
189
190
191 @export
192 def sell_thing(uid: str, amount: float, description: str, contract:str):
193 thing_info = I.import_module(contract)
194 auction = thing_info.get_auction(uid)
195
196 assert auction == False, ' is on auction'
197
198 assert_ownership(uid, ctx.caller, contract)
199
200 thing_info.set_price(uid, amount)
201
202 @export
203 def transfer(uid: str, new_owner: str, contract:str):
204 sender = ctx.caller
205 assert_ownership(uid, sender, contract)
206 assert_already_owned(uid, new_owner, contract)
207 transfer_ownership(uid, new_owner, contract)
208
209 @export
210 def approve(uid: str, to: str, contract:str):
211 sender = ctx.caller
212 assert_ownership(uid, sender, contract)
213 balances[sender, uid, to] = True
214
215
216 @export
217 def revoke(uid: str, to: str):
218 balances[ctx.caller, uid, to] = None
219
220
221 @export
222 def transfer_from(uid: str, to: str, main_account: str, contract: str):
223 sender = ctx.caller
224
225 assert balances[main_account, uid, sender], f"You have not been given approval to transfer this user's item. {main_account} {sender}"
226 assert_ownership(uid, main_account, contract)
227 assert_already_owned(uid, to, contract)
228 transfer_ownership(uid, to, contract)
229
230 balances[main_account, uid, sender] = None
231
232
233 def assert_already_owned(uid: str, sender: str, contract: str):
234 thing_info = I.import_module(contract)
235 owner = thing_info.get_owner(uid)
236 assert owner != sender, uid + ' already owned by ' + sender
237
238
239 def assert_ownership(uid: str, sender, contract: str):
240 thing_info = I.import_module(contract)
241 owner = thing_info.get_owner(uid)
242 assert owner == sender, uid + ' not owned by ' + sender
243
244
245 def transfer_ownership(uid:str, new_owner: str, contract: str):
246 thing_info = I.import_module(contract)
247 old_owner = thing_info.get_owner(uid)
248 thing_info.set_owner(uid, new_owner)
249 if thing_info.get_price_amount(uid) > 0:
250 thing_info.set_price(uid, 0)
251
252
253
254
255
256

Byte Code

e3000000000000000000000000080000004000000073a8020000640064016c005a00640064016c015a0165025a03650464026403640464058d035a05650464006403640664058d035a06650464006403640764058d035a07650464006403640864058d035a08650464006403640964058d035a09650a640a64066403640b640c8d045a0b640d640e84005a0c650d64038301650e640f9c0164106411840483015a0f650d64038301650e651064129c0264136414840483015a11650d64038301650e650e64159c0264166417840483015a12650d6403830164186419840083015a13650d64038301641a641b840083015a14650d64038301650e641c9c01641d641e840483015a15650d64038301650e6516650e641f9c0364206421840483015a17650d64038301650e651864229c0264236424840483015a19650d6403830164256426840083015a1a650d64038301650e650e650e651b64279c0464286429840483015a1c650d64038301650e650e651b642a9c03642b642c840483015a1d650d64038301650e650e651e642a9c03642d642e840483015a1f650d64038301650e650e651e642a9c03642f6430840483015a20650d64038301650e651b64319c0264326433840483015a21650d6403830169006601650e650e650e650e651664349c0564356436840583015a22650d64038301650e650e64379c0264386439840483015a23650d64038301650e6518650e650e643a9c04643b643c840483015a24650d64038301650e650e650e643d9c03643e643f840483015a25650d64038301650e650e650e64409c0364416442840483015a26650d64038301650e650e64439c0264446445840483015a27650d64038301650e650e650e650e64469c0464476448840483015a28650e650e650e64499c03644a644b84045a29650e650e64379c02644c644d84045a2a650e650e650e643d9c03644e644f84045a2b640153002950e9000000004eda00da11636f6e5f75775f6d61737465725f735f31da01532903da0d64656661756c745f76616c7565da08636f6e7472616374da046e616d65da0862616c616e636573da086d65746164617461da0467616d65da056e69636b73da14636f6e5f7577617272696f72735f6c7374303031da0277702904da10666f726569676e5f636f6e7472616374da0c666f726569676e5f6e616d6572060000007207000000630000000000000000000000000300000043000000736400000074006a01740264013c006402740264033c006404740264053c006406740264073c006408740264093c007403640a83017402640b3c007403640c83017402640d3c00640e67017402640f3c00641064116702740264123c006413740464143c006400530029154eda086f70657261746f7246da0a7769746864726177616c69dc050000da12737461727465725f7061636b5f7072696365e902000000da0967616d655f636f73746960540000da0474696d657a04302e3135da04666565737a04302e3230da0f666565735f7769746864726177616cda16636f6e5f75775f61756374696f6e5f736561736f6e31da126f70657261746f725f757365725f64617461da15636f6e5f75775f6e66745f63686172616374657273da12636f6e5f75775f6e66745f6372797374616cda136f70657261746f725f7468696e675f6d6574617201000000da02696e2905da03637478da0663616c6c6572da0a5f5f6d65746164617461da07646563696d616cda065f5f67616d65a900722300000072230000007202000000da045f5f5f5f0f000000731600000000010a0108010801080108010c010c010a0102010a0172240000002901da086e69636b6e616d65630100000000000000030000000500000043000000738200000074006a017d0174027c00830164016b01731a740364028301820174027c00830164036b04732e740364048301820174046a057c006a0683006a0764056406830283017d02740864077c02660219000c00736674036408740864077c02660219001700830182017c0074087c01640966023c007c00740864077c0266023c0064005300290a4ee9190000007a214e69636b6e616d6520746f6f206c6f6e6720283235206368617273206d6178292e72010000007a134e69636b6e616d6520746f6f2073686f72742efa01207202000000da096e69636b6e616d65737a274120666f726d206f662074686973206e616d6520616c72656164792062656c6f6e677320746f2072250000002909721e000000721f000000da036c656eda0e417373657274696f6e4572726f72da07686173686c6962da06736861323536da056c6f776572da077265706c616365da075f5f6e69636b7329037225000000721f000000da096e616d65735f756964722300000072230000007202000000da0d7365745f6e69636b5f6e616d651d000000731200000000020601140114011601100106010c010c01723100000029027210000000da046e657773630200000000000000020000000300000043000000732200000074006a017402640119006b02731674036402830182017c0174027c003c006400530029034e72100000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212904721e000000721f0000007220000000722a000000290272100000007232000000722300000072230000007202000000da116164645f6f70657261746f725f646174612a0000007306000000000210010601723300000029027225000000da066368616e6765630200000000000000030000000500000043000000739200000074006a017402640119006b027316740364028301820174047c00830164036b01732a740364048301820174047c00830164056b04733e740364068301820174056a067c006a0783006a0864076408830283017d02740964097c02660219000c0073767403640a740964097c02660219001700830182017c0174097c00640b66023c007c01740964097c0266023c0064005300290c4e72100000007a1f4f6e6c79206f70657261746f722063616e20736574206d657461646174612172260000007a214e69636b6e616d6520746f6f206c6f6e6720283235206368617273206d6178292e72010000007a134e69636b6e616d6520746f6f2073686f72742e7227000000720200000072280000007a274120666f726d206f662074686973206e616d6520616c72656164792062656c6f6e677320746f207225000000290a721e000000721f0000007220000000722a0000007229000000722b000000722c000000722d000000722e000000722f0000002903722500000072340000007230000000722300000072230000007202000000da106368616e67655f6e69636b5f6e616d65310000007314000000000210010601140114011601100106010c010c017235000000630000000000000000030000000400000043000000735c00000074006a017d007402640119007d017402640219007d0274037c0019007c016b04732a740464038301820174056a067c017402640219007c0083030100640474077c00640566023c0074086406050019007c01370003003c006400530029074e721400000072100000007a194e6f7420656e6f75676820636f696e7320746f2073656e642154da0863616e5f706c6179721d0000002909721e000000721f0000007220000000da045f5f7770722a000000720c000000da0d7472616e736665725f66726f6dda0a5f5f62616c616e63657372220000002903da0673656e646572da06616d6f756e747210000000722300000072230000007202000000da04706c61793f000000730e0000000002060108010801140112010c01723c000000630000000000000000030000000400000043000000735000000074006a017d007402640119007d017402640219007d0274037c0019007c016b04732a740464038301820174056a067c017402640219007c008303010074076404050019007c01370003003c006400530029054e721200000072100000007a194e6f7420656e6f75676820636f696e7320746f2073656e6421721d0000002908721e000000721f00000072200000007237000000722a000000720c000000723800000072220000002903723a000000723b0000007210000000722300000072230000007202000000da0d6275795f6368617261637465724a000000730c000000000206010801080114011201723d0000002901da0677616c6c6574630100000000000000040000000400000043000000735000000074006a017d017402640119007d027402640219007d0374037c0119007c026b04732a740464038301820174056a067c027402640219007c018303010074076404050019007c02370003003c006400530029054e721200000072100000007a194e6f7420656e6f75676820636f696e7320746f2073656e6421721d0000002908721e000000721f00000072200000007237000000722a000000720c000000723800000072220000002904723e000000723a000000723b0000007210000000722300000072230000007202000000da126275795f6368617261637465725f6769667454000000730c000000000206010801080114011201723f0000002903da03756964da046d6574617206000000630300000000000000050000000300000043000000733e00000074006a017402640119006b02732474026402190074006a016b027324740364038301820174046a057c0283017d037c036a067c007c0183027d047c04530029044e7210000000721c0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212907721e000000721f0000007220000000722a000000da0149da0d696d706f72745f6d6f64756c65da0b6368616e67655f6d6574612905724000000072410000007206000000da0a7468696e675f696e666fda097468696e675f756964722300000072230000007202000000da116368616e67655f7468696e675f6d6574615e000000730a0000000002100114010a010c01724700000029027240000000723b00000063020000000000000002000000050000004300000073ca00000074006a017402640119006b027316740364028301820174047c0064036602190074056b02732e740364048301820174026405190064066b02728474047c0064076602050019007c01370003003c0074047c0064086602050019007c01370003003c0074047c00640764096603190064006b0872aa740674047c006407640966033c006e2674047c0064086602050019007c01370003003c0074076a087c017c0074026401190083030100640a74047c00640366023c007409640b050019007c01370003003c0064005300290c4e72100000007a0d4f6e6c79206f70657261746f7272360000007a0b4e6f2063616e20506c6179721100000054da0772657761726473da0d746f74616c5f72657761726473721500000046da11746f74616c5f726577617264735f706179290a721e000000721f0000007220000000722a0000007239000000da0474727565da036e6f77720c0000007238000000722200000029027240000000723b00000072230000007223000000720200000072480000006700000073160000000002160118010c011401140112011002140112010c01724800000063000000000000000002000000050000004300000073dc00000074006a017d0074027c0064016602190064026b04731e740364038301820174027c006401660219007d0174046404190064056b0272d8740574027c00640164066603190018006a067404640619006b04729074076a087c017c0074046407190083030100640274027c00640166023c007405740274096401640666033c00740a6408050019007c01370003003c006e4874076a087c017c01740464091900140018007c0074046407190083030100640274027c00640166023c007405740274096401640666033c00740a6408050019007c01370003003c0064005300290a4e724800000072010000007a1e43616e6e6f742073656e64206e656761746976652062616c616e6365732172110000005472150000007210000000724a0000007217000000290b721e000000721f0000007239000000722a0000007220000000724c000000da066d696e757465720c0000007238000000724000000072220000002902723a000000723b00000072230000007223000000720200000072110000007700000073200000000002060118010c010c01140108010a0108010c010e0112020a0114010c010e0172110000002904724000000072410000007206000000da0576616c7565630400000000000000060000000400000043000000734000000074006a017402640119006b02732474006a017402640219006b067324740364038301820174046a057c0283017d047c046a067c007c017c0383037d057c05530029044e7210000000721c0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212907721e000000721f0000007220000000722a00000072420000007243000000da086164645f6d6574612906724000000072410000007206000000724e00000072450000007246000000722300000072230000007202000000da0e6164645f7468696e675f6d6574618c000000730a0000000002140110010a010e017250000000290372400000007241000000724e000000630300000000000000030000000400000043000000734000000074006a017402640119006b02732474006a017402640219006b067324740364038301820174047c007c0166021900733c7c0274047c007c0166023c006400530029044e7210000000721c0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212905721e000000721f0000007220000000722a0000007239000000290372400000007241000000724e000000722300000072230000007202000000da0d6164645f757365725f646174619500000073080000000002140110010c017251000000630300000000000000030000000400000043000000733c00000074006a017402640119006b02732474006a017402640219006b067324740364038301820174047c007c016602050019007c02370003003c006400530029044e7210000000721c0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212905721e000000721f0000007220000000722a0000007239000000290372400000007241000000724e000000722300000072230000007202000000da13696e6372656d656e745f757365725f646174619d00000073060000000002140110017252000000630300000000000000030000000400000043000000733400000074006a017402640119006b02732474006a017402640219006b06732474036403830182017c0274047c007c0166023c006400530029044e7210000000721c0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212905721e000000721f0000007220000000722a0000007239000000290372400000007241000000724e000000722300000072230000007202000000da106368616e67655f757365725f64617461a4000000730600000000021401100172530000002902da036b6579724e000000630200000000000000020000000300000043000000732200000074006a017402640119006b02731674036402830182017c0174027c003c006400530029034e72100000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212904721e000000721f0000007220000000722a00000029027254000000724e000000722300000072230000007202000000da0f6368616e67655f6d65746164617461ab0000007306000000000210010601725500000029057206000000da0c7468696e675f737472696e677207000000da056f776e65727241000000630500000000000000080000000500000043000000733a00000074006a017402640119006b027316740364028301820174046a057c0083017d0574006a017d067c056a067c017c027c047c0383047d077c07530029034e72100000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212907721e000000721f0000007220000000722a00000072420000007243000000da096164645f7468696e672908720600000072560000007207000000725700000072410000007245000000723a0000007246000000722300000072230000007202000000da0c6372656174655f7468696e67b2000000730c0000000003100106010a0106011001725900000029027240000000720600000063020000000000000008000000060000004300000073be00000074006a017c0183017d0274026a037d037c026a047c0083017d047c026a057c0083017d0574067c007c037c01830301007c026a077c0083017d067c06734a74087c0064011700830182017c0664026b04735e74087c0064011700830182017c067c06740964031900140018007d07740a6a0b7c077c047c0383030100740a6a0b7c0674096403190014007409640419007c0383030100740c7c007c037c0183030100740d6405050019007c067409640319001400370003003c006400530029064e7a10206973206e6f7420666f722073616c65720100000072160000007210000000721d000000290e72420000007243000000721e000000721f000000da096765745f6f776e6572da0b6765745f63726561746f72da165f5f6173736572745f616c72656164795f6f776e6564da106765745f70726963655f616d6f756e74722a0000007220000000720c0000007238000000da145f5f7472616e736665725f6f776e65727368697072220000002908724000000072060000007245000000723a0000007257000000da0763726561746f72da0c70726963655f616d6f756e74da1070726963655f616d6f756e745f706179722300000072230000007202000000da096275795f7468696e67bd000000731c00000000020a0106010a010a010c010a011001140110010e010e010c010c01726200000029047240000000723b000000da0b6465736372697074696f6e7206000000630400000000000000060000000400000043000000734200000074006a017c0383017d047c046a027c0083017d057c0564016b027324740364028301820174047c0074056a067c03830301007c046a077c007c01830201006400530029034e467a0e206973206f6e2061756374696f6e290872420000007243000000da0b6765745f61756374696f6e722a000000da125f5f6173736572745f6f776e657273686970721e000000721f000000da097365745f707269636529067240000000723b000000726300000072060000007245000000da0761756374696f6e722300000072230000007202000000da0a73656c6c5f7468696e67cf000000730a00000000020a010a0110010e01726800000029037240000000da096e65775f6f776e65727206000000630300000000000000040000000400000043000000732e00000074006a017d0374027c007c037c028303010074037c007c017c028303010074047c007c017c02830301006400530029014e2905721e000000721f0000007265000000725c000000725e0000002904724000000072690000007206000000723a000000722300000072230000007202000000da087472616e73666572d80000007308000000000206010c010c01726a00000029037240000000da02746f7206000000630300000000000000040000000500000043000000732400000074006a017d0374027c007c037c0283030100640174037c037c007c0166033c006400530029024e542904721e000000721f0000007265000000723900000029047240000000726b0000007206000000723a000000722300000072230000007202000000da07617070726f7665e00000007306000000000206010c01726c00000029027240000000726b00000063020000000000000002000000050000004300000073140000006400740074016a027c007c0166033c006400530029014e29037239000000721e000000721f00000029027240000000726b000000722300000072230000007202000000da067265766f6b65e700000073020000000002726d00000029047240000000726b000000da0c6d61696e5f6163636f756e747206000000630400000000000000050000000500000043000000735e00000074006a017d0474027c027c007c04660319007328740364017c029b0064027c049b009d048301820174047c007c027c038303010074057c007c017c038303010074067c007c017c0383030100640074027c027c007c0466033c006400530029034e7a3f596f752068617665206e6f74206265656e20676976656e20617070726f76616c20746f207472616e73666572207468697320757365722773206974656d2e2072270000002907721e000000721f0000007239000000722a0000007265000000725c000000725e00000029057240000000726b000000726e0000007206000000723a0000007223000000722300000072020000007238000000ec000000730e00000000020601100112010c010c010c01723800000029037240000000723a0000007206000000630300000000000000050000000300000043000000733000000074006a017c0283017d037c036a027c0083017d047c047c016b03732c74037c00640117007c011700830182016400530029024e7a1220616c7265616479206f776e656420627920290472420000007243000000725a000000722a00000029057240000000723a000000720600000072450000007257000000722300000072230000007202000000725c000000f7000000730600000000010a010a01725c000000630300000000000000050000000300000043000000733000000074006a017c0283017d037c036a027c0083017d047c047c016b02732c74037c00640117007c011700830182016400530029024e7a0e206e6f74206f776e656420627920290472420000007243000000725a000000722a00000029057240000000723a0000007206000000724500000072570000007223000000722300000072020000007265000000fd000000730600000000010a010a017265000000630300000000000000050000000300000043000000733e00000074006a017c0283017d037c036a027c0083017d047c036a037c007c01830201007c036a047c00830164016b04723a7c036a057c006401830201006400530029024e7201000000290672420000007243000000725a000000da097365745f6f776e6572725d000000726600000029057240000000726900000072060000007245000000da096f6c645f6f776e6572722300000072230000007202000000725e00000003010000730a00000000010a010a010c010e01725e000000292cda0863757272656e6379720c000000da09696d706f72746c69627242000000da0448617368da035f5f53723900000072200000007222000000722f000000da0b466f726569676e4861736872370000007224000000da085f5f6578706f7274da037374727231000000da046c69737472330000007235000000723c000000723d000000723f000000da04646963747247000000da05666c6f617472480000007211000000da03416e7972500000007251000000da03696e74725200000072530000007255000000725900000072620000007268000000726a000000726c000000726d0000007238000000725c0000007265000000725e0000007223000000722300000072230000007202000000da083c6d6f64756c653e01000000736c0000000801080104010e0106010801060108010e010e0104010c03080e0601100c060112060601120d100b100a06011009060114080601120f1015060116080601140706011406060114060601120606021c0906011211060116080601140706011406060112040601160a12061006