tx · FwVcJGGjEYN91c2R4FfEn55m1CqNe7HSy1izSM1cjKwR

3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X:  -0.03500000 Waves

2023.02.28 18:27 [3535204] smart account 3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X > SELF 0.00000000 Waves

{ "type": 13, "id": "FwVcJGGjEYN91c2R4FfEn55m1CqNe7HSy1izSM1cjKwR", "fee": 3500000, "feeAssetId": null, "timestamp": 1677598103878, "version": 2, "chainId": 87, "sender": "3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X", "senderPublicKey": "DEqRFUivMgeChDCH9zcKRCFcK6kGyZZ7ZWPcg8WcANhv", "proofs": [ "2yy7rVG1h7FB7ixikeq8XQYDsEq5HmuNLHtMxjb4EHutZg8LU2ZyAVpsBqcvJ7JzWCNJD8ConrgSpQxAWyfUT7jm" ], "script": "base64:BgKCAQgCEgASBAoCCAESBAoCCAESABIDCgEIEgQKAggBEgQKAggBEgQKAggBEgASBgoECAgICBIECgIICBIECgIICBIDCgEEEgMKAQgSAwoBBBIICgYECAEICAgSBQoDBAgIEgYKBAQIBAgSAwoBBBIECgIIBBIECgIIBBIDCgEEEgMKAQQaAAZTY2FsZTgAgMLXLwAHU2NhbGUxMACAyK+gJQAHU2NhbGUxNgkAaAIFBlNjYWxlOAUGU2NhbGU4AAlkYXlCbG9ja3MAoAsBCmxpSW50VG9TdHIBAmxpCgEBZgIFYWNjdW0EbmV4dAkArAICCQCsAgIFBWFjY3VtCQCkAwEFBG5leHQCASwKAAIkbAUCbGkKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBDXRyeUdldEludGVnZXIBA2tleQQHJG1hdGNoMAkAmggCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDXRyeUdldEJvb2xlYW4BA2tleQQHJG1hdGNoMAkAmwgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcBDHRyeUdldFN0cmluZwEDa2V5BAckbWF0Y2gwCQCdCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWIFByRtYXRjaDAFAWICAAEMdHJ5R2V0QmluYXJ5AQNrZXkEByRtYXRjaDAJAJwIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAFAWIBAAEOZ2V0QXNzZXRTdHJpbmcBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiAgVXQVZFUwENZ2V0QXNzZXRCeXRlcwEKYXNzZXRJZFN0cgMJAAACBQphc3NldElkU3RyAgVXQVZFUwUEdW5pdAkA2QQBBQphc3NldElkU3RyAQpnZXRCYWxhbmNlAQphc3NldElkU3RyAwkAAAIFCmFzc2V0SWRTdHICBVdBVkVTCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkA8AcCBQR0aGlzCQDZBAEFCmFzc2V0SWRTdHIAEnJlc2VydmVGdW5kQWRkcmVzcwkBB0FkZHJlc3MBARoBVx7h+0Axa4Hm7EtWGwUsUaGTbt8JsTzSwQALcmVzZXJ2ZUZ1bmQAFAEPZ2V0TWFya2V0QXNzZXRzAAkAtQkCCQEMdHJ5R2V0U3RyaW5nAQIMc2V0dXBfdG9rZW5zAgEsARJnZXRBc3NldHNNYXhTdXBwbHkABAFzCQEMdHJ5R2V0U3RyaW5nAQIPc2V0dXBfbWF4c3VwcGx5AwkAAAIFAXMCAAkAzAgCAP///////////wEJAMwIAgD///////////8BCQDMCAIA////////////AQkAzAgCAP///////////wEJAMwIAgD///////////8BCQDMCAIA////////////AQkAzAgCAP///////////wEFA25pbAkAtQkCBQFzAgEsAQ1nZXRPdXRkYXRlZFVyAQphc3NldElkU3RyBARkb3duCQBrAwkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQUHU2NhbGUxNgMJAAACBQRkb3duAAAAAAkAawMFBlNjYWxlOAkAawMJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfYlJhdGUFB1NjYWxlMTYFBGRvd24BDGdldFJhdGVDdXJ2ZQEKYXNzZXRJZFN0cgQHJG1hdGNoMAUKYXNzZXRJZFN0cgMJAAACAiwzNE45WWNFRVRMV245M3FZUTY0RXNQMXg4OXRTcnVKVTQ0UnJFTVNYWEVQSgUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiw2WHRIanBYYnM5UlJKUDJTcjlHVXlWcXpBQ2NieTlUa1RoSFhualZDNUNESgUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixBanNvNm5UVGpwdHUyVUhMeDZoZlNYVnRIRnRSQkpDa0tZZDVTQXlqN3pmNQUHJG1hdGNoMAkAlgoEAICJegCAtIkTAIDokiYAgKPDRwMJAAACAixIRUI4UWF3OXhyV3BXczh0SHNpQVRZR0JXREJ0UDJTN2tjUEFMck11NDNBUwUHJG1hdGNoMAkAlgoEAAAAgNrECQCA6JImAIC0iRMDCQAAAgIFV0FWRVMFByRtYXRjaDAJAJYKBACAiXoAgIenDgCA6JImAIDh6xcDCQAAAgIsQXRxdjU5RVl6akZHdWl0S1ZuTVJrNkg4RnVram9WM2t0UG9yYkV5czI1b24FByRtYXRjaDAJAJYKBAAAAIDaxAkAgOiSJgCAtIkTAwkAAAICLERTYmJoTHNTVGVEZzVMc2l1ZmsyQW5laDNEalZxSnVQcjJNOXVVMWd3eTVwBQckbWF0Y2gwCQCWCgQAAACA2sQJAIDokiYAgMLXLwMJAAACAiw4dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQUHJG1hdGNoMAkAlgoEAAAAgIenDgCA6JImAIC0iRMDCQAAAgIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wFByRtYXRjaDAJAJYKBAAAAMDw9QsAgOiSJgCAtIkTAwkAAAICLDhMUVc4ZjdQNWQ1UFpNN0d0WkVCZ2FxUlBHU3pTM0RmUHVpWHJVUko0QUpTBQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDQ3NGpUZVl4MnIyVmEzNTc5NHRDU2NBWFdKRzloVTJIY2d4ek1vd2FaVW51BQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDVVWUJQcHE0V29VNW40TXdwRmtnSm5XM0ZxNEIxdTN1a3BLMzNpazRRZXJSBQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDJ0aHNBQ3VIbXpETXVOZXpQTTMyd2c5YTNCd1V6QldEZVNLYWtnejNjdzIxBQckbWF0Y2gwCQCWCgQAgIl6AIC0iRMAgOiSJgCAwtcvAwkAAAICK1lpTmJvZkZ6QzE3akVISENNd3JSY3B5OU1ycmphYk1NTFp4ZzhnNXhtZjcFByRtYXRjaDAJAJYKBACAiXoAgIenDgCA6JImAIDokiYJAJYKBAAAAIDaxAkAgOiSJgCA6JImAQtnZXRJbnRlcmVzdAEKYXNzZXRJZFN0cgQCdXIJAQ1nZXRPdXRkYXRlZFVyAQUKYXNzZXRJZFN0cgQFY3VydmUJAQxnZXRSYXRlQ3VydmUBBQphc3NldElkU3RyBARyYXRlCQBkAggFBWN1cnZlAl8xAwkAZwIIBQVjdXJ2ZQJfMwUCdXIJAGsDBQJ1cggFBWN1cnZlAl8yCAUFY3VydmUCXzMJAGQCCAUFY3VydmUCXzIJAGsDCQBlAgUCdXIIBQVjdXJ2ZQJfMwkAZQIIBQVjdXJ2ZQJfNAgFBWN1cnZlAl8yCQBlAgCAwtcvCAUFY3VydmUCXzMJAJYDAQkAzAgCCQBrAwUEcmF0ZQUGU2NhbGU4CQBoAgUJZGF5QmxvY2tzAO0CCQDMCAIAAQUDbmlsARB0b2tlblJhdGVzUmVjYWxjAQphc3NldElkU3RyBAhpbnRlcmVzdAkBC2dldEludGVyZXN0AQUKYXNzZXRJZFN0cgQCdXIJAQ1nZXRPdXRkYXRlZFVyAQUKYXNzZXRJZFN0cgQQbGFzdFJlY2FsY0hlaWdodAkBDXRyeUdldEludGVnZXIBAg5sYXN0UmF0ZUhlaWdodAQJbGFzdEJSYXRlCQCWAwEJAMwIAgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9iUmF0ZQkAzAgCBQdTY2FsZTE2BQNuaWwECG5ld0JSYXRlCQBkAgUJbGFzdEJSYXRlCQBoAgkAZQIFBmhlaWdodAUQbGFzdFJlY2FsY0hlaWdodAUIaW50ZXJlc3QECWxhc3RTUmF0ZQkAlgMBCQDMCAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfc1JhdGUJAMwIAgUHU2NhbGUxNgUDbmlsBAhuZXdTUmF0ZQkAZAIFCWxhc3RTUmF0ZQkAaQIJAGgCCQBoAgkAZQIFBmhlaWdodAUQbGFzdFJlY2FsY0hlaWdodAkAawMFCGludGVyZXN0BQJ1cgUGU2NhbGU4CQBlAgBkBQtyZXNlcnZlRnVuZABkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQUIbmV3U1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYXNzZXRJZFN0cgIGX2JSYXRlBQhuZXdCUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIObGFzdFJhdGVIZWlnaHQFBmhlaWdodAUDbmlsAQ1nZXRBY3R1YWxSYXRlAgphc3NldElkU3RyCHJhdGVUeXBlCgEBZgIFYWNjdW0FdG9rZW4EBnJlY2FsYwkBEHRva2VuUmF0ZXNSZWNhbGMBBQV0b2tlbgkAlAoCAwkBAiE9AgUFdG9rZW4FCmFzc2V0SWRTdHIIBQVhY2N1bQJfMQMJAAACBQhyYXRlVHlwZQIFc1JhdGUICQCRAwIFBnJlY2FsYwAABXZhbHVlCAkAkQMCBQZyZWNhbGMAAQV2YWx1ZQkAzggCCAUFYWNjdW0CXzIFBnJlY2FsYwoAAiRsCQEPZ2V0TWFya2V0QXNzZXRzAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAABQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBBWdldFVyAQphc3NldElkU3RyBAVyYXRlcwkBEHRva2VuUmF0ZXNSZWNhbGMBBQphc3NldElkU3RyBARkb3duCQBrAwkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cggJAJEDAgUFcmF0ZXMAAAV2YWx1ZQUHU2NhbGUxNgkAawMFBlNjYWxlOAkAawMJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIICQCRAwIFBXJhdGVzAAEFdmFsdWUFB1NjYWxlMTYFBGRvd24BC3JhdGVzUmVjYWxjAAoBAWYCBWFjY3VtBXRva2VuCQDOCAIFBWFjY3VtCQEQdG9rZW5SYXRlc1JlY2FsYwEFBXRva2VuCgACJGwJAQ9nZXRNYXJrZXRBc3NldHMACgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAQ1nZXRUb2tlblByaWNlAQphc3NldElkU3RyBARpbnYzCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQUFhWS2pONm5STXpYZWVnY1loZmlpYzk2cGQyYzk4RWttAglnZXRUV0FQNjAJAMwIAgUKYXNzZXRJZFN0cgkAzAgCBwUDbmlsBQNuaWwDCQAAAgUEaW52MwUEaW52MwQFZGF0YTMEByRtYXRjaDAFBGludjMDCQABAgUHJG1hdGNoMAIKKEludCwgSW50KQQBeAUHJG1hdGNoMAUBeAkAAgECFWVycm9yIG9mIHByaWNlIG9yYWNsZQMJAAACBQVkYXRhMwUFZGF0YTMFBWRhdGEzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5jYWxjQXNzZXRTY2FsZQEKYXNzZXRJZFN0cgQIZGVjaW1hbHMDCQAAAgUKYXNzZXRJZFN0cgIFV0FWRVMACAgJAQV2YWx1ZQEJAOwHAQkA2QQBBQphc3NldElkU3RyCGRlY2ltYWxzCQBsBgAKAAAFCGRlY2ltYWxzAAAAAAUERE9XTgESY2FsY1VzZXJDb2xsYXRlcmFsAQdhZGRyZXNzBBR1c2VyQ29sbGF0ZXJhbEludm9rZQkA/AcEBQR0aGlzAhFnZXRVc2VyQ29sbGF0ZXJhbAkAzAgCBwkAzAgCBQdhZGRyZXNzCQDMCAIGCQDMCAICAAUDbmlsBQNuaWwDCQAAAgUUdXNlckNvbGxhdGVyYWxJbnZva2UFFHVzZXJDb2xsYXRlcmFsSW52b2tlBBN1c2VyQ29sbGF0ZXJhbFZhbHVlBAckbWF0Y2gwBRR1c2VyQ29sbGF0ZXJhbEludm9rZQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAiRpc3N1ZSB3aGlsZSBkb2luZyBpbi1kYXBwIGludm9jYXRpb24DCQAAAgUTdXNlckNvbGxhdGVyYWxWYWx1ZQUTdXNlckNvbGxhdGVyYWxWYWx1ZQUTdXNlckNvbGxhdGVyYWxWYWx1ZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLhcBaQEGc3VwcGx5AAMJAQEhAQkBDXRyeUdldEJvb2xlYW4BAgxzZXR1cF9hY3RpdmUJAAIBAhFtYXJrZXQgaXMgc3RvcHBlZAMDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEGCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAAkAAgECHDEgcGF5bWVudCBoYXMgdG8gYmUgYXR0YWNoZWQECmFzc2V0SWRTdHIJAQ5nZXRBc3NldFN0cmluZwEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLYXNzZXRBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAskdDA3MzczNzQ0MAkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgVzUmF0ZQQFc1JhdGUIBQskdDA3MzczNzQ0MAJfMQQRcmF0ZXNSZWNhbGNSZXN1bHQIBQskdDA3MzczNzQ0MAJfMgQGYW1vdW50CQBuBAULYXNzZXRBbW91bnQFB1NjYWxlMTYFBXNSYXRlBQRET1dOBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQJbWF4U3VwcGx5BAckbWF0Y2gwCQCiCAEJAKwCAgIQc2V0dXBfbWF4U3VwcGx5XwUKYXNzZXRJZFN0cgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXgFByRtYXRjaDAJAQ1wYXJzZUludFZhbHVlAQUBeAAABAphc3NldFByaWNlCQENZ2V0VG9rZW5QcmljZQEFCmFzc2V0SWRTdHIEEG5ld1RvdGFsU3VwcGxpZWQJAGQCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyBQZhbW91bnQEBHJhdGUICQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBXNSYXRlAl8xBAphc3NldFNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBBQphc3NldElkU3RyBBNuZXdUb3RhbFN1cHBsaWVkVXNkCQBrAwkAawMFEG5ld1RvdGFsU3VwcGxpZWQFBHJhdGUFB1NjYWxlMTYIBQphc3NldFByaWNlAl8xBQphc3NldFNjYWxlAwkAAAIJALMJAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwUKYXNzZXRJZFN0cgUEdW5pdAkAAgECKXRoaXMgYXNzZXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbWFya2V0AwMJAQIhPQIFCW1heFN1cHBseQAACQBmAgUTbmV3VG90YWxTdXBwbGllZFVzZAUJbWF4U3VwcGx5BwkAAgECM21heCB0b3RhbCBzdXBwbHkgZm9yIHRoaXMgdG9rZW4gcmVhY2hlZCBpbiB0aGUgcG9vbAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUQbmV3VG90YWxTdXBwbGllZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIJAGQCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBQZhbW91bnQFA25pbAURcmF0ZXNSZWNhbGNSZXN1bHQBaQEId2l0aGRyYXcCCmFzc2V0SWRTdHILYXNzZXRBbW91bnQECyR0MDg3MDA4NzY3CQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBXNSYXRlBAVzUmF0ZQgFCyR0MDg3MDA4NzY3Al8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFCyR0MDg3MDA4NzY3Al8yBAZhbW91bnQJAG4EBQthc3NldEFtb3VudAUHU2NhbGUxNgUFc1JhdGUFB0NFSUxJTkcEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBA1hc3NldFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBA1hc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyBBF1c2VyQXNzZXRTdXBwbGllZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgQRdXNlckFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIEEmNvbGxhdGVyYWxWYWx1ZUludgkA/AcEBQR0aGlzAhFnZXRVc2VyQ29sbGF0ZXJhbAkAzAgCBwkAzAgCBQdhZGRyZXNzCQDMCAIGCQDMCAIJAKwCAgkArAICBQphc3NldElkU3RyAgosc3VwcGxpZWQsCQCkAwEJAQEtAQUGYW1vdW50BQNuaWwFA25pbAMJAAACBRJjb2xsYXRlcmFsVmFsdWVJbnYFEmNvbGxhdGVyYWxWYWx1ZUludgQPY29sbGF0ZXJhbFZhbHVlBAckbWF0Y2gwBRJjb2xsYXRlcmFsVmFsdWVJbnYDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQIfY2FuJ3QgZ2V0IHVzZXIgY29sbGF0ZXJhbCB2YWx1ZQMJAQEhAQkBDXRyeUdldEJvb2xlYW4BAgxzZXR1cF9hY3RpdmUJAAIBAhFtYXJrZXQgaXMgc3RvcHBlZAMJAGYCAAAFD2NvbGxhdGVyYWxWYWx1ZQkAAgECMnlvdSBkb250IGhhdmUgZW5vdWdoIGNvbGxhdGVyYWwgZm9yIHRoaXMgb3BlcmF0aW9uAwkAZgIFBmFtb3VudAkAZQIFDWFzc2V0U3VwcGxpZWQFDWFzc2V0Qm9ycm93ZWQJAAIBAip0aGlzIGFtb3VudCBpcyBub3QgYXZhaWxhYmxlIG9uIHRoZSBtYXJrZXQDCQBmAgUGYW1vdW50CQBlAgURdXNlckFzc2V0U3VwcGxpZWQFEXVzZXJBc3NldEJvcnJvd2VkCQACAQIqdGhpcyBhbW91bnQgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyCQBlAgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIFBmFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFC2Fzc2V0QW1vdW50CQENZ2V0QXNzZXRCeXRlcwEFCmFzc2V0SWRTdHIFA25pbAURcmF0ZXNSZWNhbGNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEGYm9ycm93Agphc3NldElkU3RyC2Fzc2V0QW1vdW50BAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQNJHQwMTAzMzkxMDQwNgkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgViUmF0ZQQFYlJhdGUIBQ0kdDAxMDMzOTEwNDA2Al8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFDSR0MDEwMzM5MTA0MDYCXzIEBmFtb3VudAkAbgQFC2Fzc2V0QW1vdW50BQdTY2FsZTE2BQViUmF0ZQUHQ0VJTElORwQSY29sbGF0ZXJhbFZhbHVlSW52CQD8BwQFBHRoaXMCEWdldFVzZXJDb2xsYXRlcmFsCQDMCAIHCQDMCAIFB2FkZHJlc3MJAMwIAgYJAMwIAgkArAICCQCsAgIFCmFzc2V0SWRTdHICCixib3Jyb3dlZCwJAKQDAQUGYW1vdW50BQNuaWwFA25pbAMJAAACBRJjb2xsYXRlcmFsVmFsdWVJbnYFEmNvbGxhdGVyYWxWYWx1ZUludgQPY29sbGF0ZXJhbFZhbHVlBAckbWF0Y2gwBRJjb2xsYXRlcmFsVmFsdWVJbnYDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQIfY2FuJ3QgZ2V0IHVzZXIgY29sbGF0ZXJhbCB2YWx1ZQMJAQEhAQkBDXRyeUdldEJvb2xlYW4BAgxzZXR1cF9hY3RpdmUJAAIBAhFtYXJrZXQgaXMgc3RvcHBlZAMJAGYCAAAFD2NvbGxhdGVyYWxWYWx1ZQkAAgECIXlvdSBoYXZlIHRvIHN1cHBseSBtb3JlIHRvIGJvcnJvdwQNYXNzZXRTdXBwbGllZAkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgQNYXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgQRdXNlckFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIDCQBmAgUGYW1vdW50CQBlAgUNYXNzZXRTdXBwbGllZAUNYXNzZXRCb3Jyb3dlZAkAAgECHHRoaXMgYW1vdW50IGlzIG5vdCBhdmFpbGFibGUJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIJAGQCBRF1c2VyQXNzZXRCb3Jyb3dlZAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgkAZAIFDWFzc2V0Qm9ycm93ZWQFBmFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFC2Fzc2V0QW1vdW50CQENZ2V0QXNzZXRCeXRlcwEFCmFzc2V0SWRTdHIFA25pbAURcmF0ZXNSZWNhbGNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEFcmVwYXkAAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkAwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAAACQACAQIcMSBwYXltZW50IGhhcyB0byBiZSBhdHRhY2hlZAQKYXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAthc3NldEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEDSR0MDExOTExMTE5NzgJAQ1nZXRBY3R1YWxSYXRlAgUKYXNzZXRJZFN0cgIFYlJhdGUEBWJSYXRlCAUNJHQwMTE5MTExMTk3OAJfMQQRcmF0ZXNSZWNhbGNSZXN1bHQIBQ0kdDAxMTkxMTExOTc4Al8yBAZhbW91bnQJAG4EBQthc3NldEFtb3VudAUHU2NhbGUxNgUFYlJhdGUFB0NFSUxJTkcEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBA1hc3NldFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBA1hc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyBBF1c2VyQXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgQKYW1vdW50TGVmdAkAZQIFEXVzZXJBc3NldEJvcnJvd2VkBQZhbW91bnQEC3JlcGF5QW1vdW50AwkAZwIFCmFtb3VudExlZnQAAAUGYW1vdW50BRF1c2VyQXNzZXRCb3Jyb3dlZAMJAAACCQCzCQIJAQx0cnlHZXRTdHJpbmcBAgxzZXR1cF90b2tlbnMFCmFzc2V0SWRTdHIFBHVuaXQJAAIBAil0aGlzIGFzc2V0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIG1hcmtldAkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyCQBlAgURdXNlckFzc2V0Qm9ycm93ZWQFC3JlcGF5QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgkAZQIFDWFzc2V0Qm9ycm93ZWQFC3JlcGF5QW1vdW50BQNuaWwFEXJhdGVzUmVjYWxjUmVzdWx0AwkAZwIFCmFtb3VudExlZnQAAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkBAS0BBQphbW91bnRMZWZ0CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA25pbAFpAQ1zdGFrZVRva2VuQWxsAQphc3NldElkU3RyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIsb25seSBmb3IgaW50ZXJuYWwgc21hcnQgY29udHJhY3QgaW52b2NhdGlvbnMEBmFtb3VudAkBCmdldEJhbGFuY2UBBQphc3NldElkU3RyBANpbnYJAPwHBAUEdGhpcwIKc3Rha2VUb2tlbgkAzAgCBQphc3NldElkU3RyCQDMCAIFBmFtb3VudAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpzdGFrZVRva2VuAgphc3NldElkU3RyBmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECLG9ubHkgZm9yIGludGVybmFsIHNtYXJ0IGNvbnRyYWN0IGludm9jYXRpb25zAwkAAAIFCmFzc2V0SWRTdHICLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwBAxhbW91bnRTdGFrZWQJAQ10cnlHZXRJbnRlZ2VyAQI9YXV0b3N0YWtlX2Ftb3VudF9ERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAQDaW52CQD8BwQJAQdBZGRyZXNzAQEaAVfkDqc2T5IL15fPpB0/NRvPQ2rrqjzzcZ0CBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIBILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRBQZhbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAzAgCCQEMSW50ZWdlckVudHJ5AgI9YXV0b3N0YWtlX2Ftb3VudF9ERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAkAZAIFDGFtb3VudFN0YWtlZAUGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUKYXNzZXRJZFN0cgIsOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEEDGFtb3VudFN0YWtlZAkBDXRyeUdldEludGVnZXIBAj1hdXRvc3Rha2VfYW1vdW50Xzh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxBANpbnYJAPwHBAkBB0FkZHJlc3MBARoBV/cVNRHF7XKFU1QQ8N0bTeJqPNO0aHcpWgIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgEgdRYQOIB2DVVlfknzrrHb5hmcahBoH8lVYfpKRlp3MBwFBmFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQDMCAIJAQxJbnRlZ2VyRW50cnkCAj1hdXRvc3Rha2VfYW1vdW50Xzh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxCQBkAgUMYW1vdW50U3Rha2VkBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQphc3NldElkU3RyAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAQMYW1vdW50U3Rha2VkCQENdHJ5R2V0SW50ZWdlcgECPWF1dG9zdGFrZV9hbW91bnRfQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wEA2ludgkA/AcECQEHQWRkcmVzcwEBGgFXa2g44QPUmoyfEhvGLLwjBzkLze0S1wpfAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCASCS0fRK4hEBK/R+6t4hjj3F+8nyfc6Hsu1SGfA6TiRY9QUGYW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAMwIAgkBDEludGVnZXJFbnRyeQICPWF1dG9zdGFrZV9hbW91bnRfQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wJAGQCBQxhbW91bnRTdGFrZWQFBmFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwBaQEMdW5zdGFrZVRva2VuAgphc3NldElkU3RyBmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECLG9ubHkgZm9yIGludGVybmFsIHNtYXJ0IGNvbnRyYWN0IGludm9jYXRpb25zAwkAAAIFCmFzc2V0SWRTdHICLDh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxBAxhbW91bnRTdGFrZWQJAQ10cnlHZXRJbnRlZ2VyAQI9YXV0b3N0YWtlX2Ftb3VudF84dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQQDaW52CQD8BwQJAQdBZGRyZXNzAQEaAVf3FTURxe1yhVNUEPDdG03iajzTtGh3KVoCB3VuU3Rha2UJAMwIAgUGYW1vdW50BQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgkAzAgCCQEMSW50ZWdlckVudHJ5AgI9YXV0b3N0YWtlX2Ftb3VudF84dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQkAZQIFDGFtb3VudFN0YWtlZAUGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUKYXNzZXRJZFN0cgIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wEDGFtb3VudFN0YWtlZAkBDXRyeUdldEludGVnZXIBAj1hdXRvc3Rha2VfYW1vdW50X0F0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBANpbnYJAPwHBAkBB0FkZHJlc3MBARoBV2toOOED1JqMnxIbxiy8Iwc5C83tEtcKXwIHdW5zdGFrZQkAzAgCBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BARiYWwwCQEKZ2V0QmFsYW5jZQECLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMAwkAAAIFBGJhbDAFBGJhbDAEBGludjIJAPwHBAkBB0FkZHJlc3MBARoBV/t16usT/RnAywjcj2CzfgO6EY6tj7fQ6wIXZ25zYnRSZXdhcmRzU1lTUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAACBQRpbnYyBQRpbnYyBAx0b3B1cFJld2FyZHMEByRtYXRjaDAFBGludjIDCQABAgUHJG1hdGNoMAIJTGlzdFtBbnldBAF4BQckbWF0Y2gwBAhzZWNvbmRFbAkAkQMCBQF4AAEEByRtYXRjaDEFCHNlY29uZEVsAwkAAQIFByRtYXRjaDECBlN0cmluZwQIc2Vjb25kRWwFByRtYXRjaDEECXVzZG5WYWx1ZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCCQC1CQIFCHNlY29uZEVsAgFfAAECAToAAQQKd2F2ZXNWYWx1ZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCCQC1CQIFCHNlY29uZEVsAgFfAAACAToAAQMDCQECIT0CBQl1c2RuVmFsdWUAAAYJAQIhPQIFCndhdmVzVmFsdWUAAAQIdXNkbkJhbDAJAQpnZXRCYWxhbmNlAQIsREcyeEZrUGREd0tVb0JrekdBaFF0THBTR3pmWExpQ1lQRXplS0gyQWQyNHADCQAAAgUIdXNkbkJhbDAFCHVzZG5CYWwwBAl3YXZlc0JhbDAJAQpnZXRCYWxhbmNlAQIFV0FWRVMDCQAAAgUJd2F2ZXNCYWwwBQl3YXZlc0JhbDAEBGludjMJAPwHBAkBB0FkZHJlc3MBARoBV2toOOED1JqMnxIbxiy8Iwc5C83tEtcKXwIMY2xhaW1SZXdhcmRzBQNuaWwFA25pbAMJAAACBQRpbnYzBQRpbnYzBAl3YXZlc0JhbDEJAQpnZXRCYWxhbmNlAQIFV0FWRVMDCQAAAgUJd2F2ZXNCYWwxBQl3YXZlc0JhbDEEBGludjQJAPwHBAkBB0FkZHJlc3MBARoBV84UFJ0WWAPkQ0x69aXssp+tv82zg/kpogIEc3dhcAkAzAgCAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAkAZQIFCXdhdmVzQmFsMQUJd2F2ZXNCYWwwBQNuaWwDCQAAAgUEaW52NAUEaW52NAQIdXNkbkJhbDEJAQpnZXRCYWxhbmNlAQIsREcyeEZrUGREd0tVb0JrekdBaFF0THBTR3pmWExpQ1lQRXplS0gyQWQyNHADCQAAAgUIdXNkbkJhbDEFCHVzZG5CYWwxBARpbnY1CQD8BwQJAQdBZGRyZXNzAQEaAVdA6qFcZYEoPXSEW1dgnvvjeSu33Iq0kHcCBHN3YXAJAMwIAgIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIBILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRCQBlAgUIdXNkbkJhbDEFCHVzZG5CYWwwBQNuaWwDCQAAAgUEaW52NQUEaW52NQQEaW52NgkA/AcEBQR0aGlzAgthZGRJbnRlcmVzdAkAzAgCAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAkAzAgCCQBlAgkBCmdldEJhbGFuY2UBAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAUEYmFsMAUDbmlsBQNuaWwDCQAAAgUEaW52NgUEaW52NgACCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAEAAQAAAwkAAAIFDHRvcHVwUmV3YXJkcwUMdG9wdXBSZXdhcmRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAj1hdXRvc3Rha2VfYW1vdW50X0F0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMCQBlAgUMYW1vdW50U3Rha2VkBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAWkBC2FkZEludGVyZXN0Agphc3NldElkU3RyBmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECGG9ubHkgZm9yIHNlbGYgaW52b2NhdGlvbgQGZWFybmVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIVYXV0b3N0YWtlX2xhc3RFYXJuZWRfBQphc3NldElkU3RyBApsYXN0SGVpZ2h0CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIUYXV0b3N0YWtlX2xhc3RCbG9ja18FCmFzc2V0SWRTdHIEC2NsZWFuQW1vdW50CQBrAwUGYW1vdW50AFAAZAQMc3RhdGVDaGFuZ2VzAwMJAAACBQpsYXN0SGVpZ2h0BQZoZWlnaHQGCQAAAgUGYW1vdW50AAAFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhhhdXRvc3Rha2VfcHJlTGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIFBmVhcm5lZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhdhdXRvc3Rha2VfcHJlTGFzdEJsb2NrXwUKYXNzZXRJZFN0cgUKbGFzdEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhVhdXRvc3Rha2VfbGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIJAGQCBQZlYXJuZWQFC2NsZWFuQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICFGF1dG9zdGFrZV9sYXN0QmxvY2tfBQphc3NldElkU3RyBQZoZWlnaHQFA25pbAkAzggCBQxzdGF0ZUNoYW5nZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlCQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQkAawMFB1NjYWxlMTYFC2NsZWFuQW1vdW50CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBQNuaWwBaQETYWRkSW50ZXJlc3RFWFRFUk5BTAAEBmFtb3VudAkAawMICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AFAAZAQHYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAphc3NldElkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBBQdhc3NldElkBAZlYXJuZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhVhdXRvc3Rha2VfbGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIECmxhc3RIZWlnaHQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhRhdXRvc3Rha2VfbGFzdEJsb2NrXwUKYXNzZXRJZFN0cgQMc3RhdGVDaGFuZ2VzAwMJAAACBQpsYXN0SGVpZ2h0BQZoZWlnaHQGCQAAAgUGYW1vdW50AAAFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhhhdXRvc3Rha2VfcHJlTGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIFBmVhcm5lZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhdhdXRvc3Rha2VfcHJlTGFzdEJsb2NrXwUKYXNzZXRJZFN0cgUKbGFzdEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhVhdXRvc3Rha2VfbGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIJAGQCBQZlYXJuZWQFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhRhdXRvc3Rha2VfbGFzdEJsb2NrXwUKYXNzZXRJZFN0cgUGaGVpZ2h0BQNuaWwJAM4IAgUMc3RhdGVDaGFuZ2VzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfc1JhdGUJAGsDBQdTY2FsZTE2BQZhbW91bnQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIFA25pbAFpAQdwcmVJbml0BAZ0b2tlbnMEbHR2cwNsdHMJcGVuYWx0aWVzCgEBZgIFYWNjdW0FdG9rZW4JAM4IAgUFYWNjdW0JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUFdG9rZW4CBl9iUmF0ZQUHU2NhbGUxNgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQV0b2tlbgIGX3NSYXRlBQdTY2FsZTE2BQNuaWwDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgphZG1pbiBvbmx5BAVyYXRlcwoAAiRsCQC1CQIFBnRva2VucwIBLAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQICDHNldHVwX3Rva2VucwUGdG9rZW5zCQDMCAIJAQtTdHJpbmdFbnRyeQICCnNldHVwX2x0dnMFBGx0dnMJAMwIAgkBC1N0cmluZ0VudHJ5AgIJc2V0dXBfbHRzBQNsdHMJAMwIAgkBC1N0cmluZ0VudHJ5AgIPc2V0dXBfcGVuYWx0aWVzBQlwZW5hbHRpZXMJAMwIAgkBDEJvb2xlYW5FbnRyeQICDHNldHVwX2FjdGl2ZQYFA25pbAUFcmF0ZXMBaQEPdXBkYXRlUGFyYW1ldGVyAgNrZXkDdmFsAwMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFXFHlYhcD6GmfnFDSNDPfE8G1F7fYc+T1BBwkAAgECCmFkbWluIG9ubHkJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQkBDXBhcnNlSW50VmFsdWUBBQN2YWwFA25pbAFpAQx1cGRhdGVTdHJpbmcCA2tleQN2YWwDAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQECIT0CCAUBaQZjYWxsZXIJAQdBZGRyZXNzAQEaAVcUeViFwPoaZ+cUNI0M98TwbUXt9hz5PUEHCQACAQIKYWRtaW4gb25seQkAzAgCCQELU3RyaW5nRW50cnkCBQNrZXkFA3ZhbAUDbmlsAWkBEmNsYWltVG9SZXNlcnZlRnVuZAEFZGVidWcEBmFzc2V0cwkBD2dldE1hcmtldEFzc2V0cwAEBXJhdGVzCAkBDWdldEFjdHVhbFJhdGUCCQCRAwIFBmFzc2V0cwAAAgVzUmF0ZQJfMgQCbGkJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoBAWYCBWFjY3VtAW4DCQBnAgUBbgkAkAMBBQZhc3NldHMFBWFjY3VtBAphc3NldElkU3RyCQCRAwIFBmFzc2V0cwUBbgQPYXV0b3N0YWtlQW1vdW50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bGxhdGVyYWwEDSR0MDI1MjgzMjUzNDUJAQ1nZXRBY3R1YWxSYXRlAgULc0Fzc2V0SWRTdHICBXNSYXRlBAVzUmF0ZQgFDSR0MDI1MjgzMjUzNDUCXzEEC3JhdGVzUmVzdWx0CAUNJHQwMjUyODMyNTM0NQJfMgQNJHQwMjUzNTAyNTQxOQkBDWdldEFjdHVhbFJhdGUCBQtiQXNzZXRJZFN0cgIFYlJhdGUEBWJSYXRlCAUNJHQwMjUzNTAyNTQxOQJfMQQScmF0ZXNSZWNhbGNSZXN1bHQyCAUNJHQwMjUzNTAyNTQxOQJfMgQMc0Fzc2V0QW1vdW50CQBrAwULYXNzZXRBbW91bnQFB1NjYWxlMTYFBXNSYXRlBBBjdXJyZW50U1Bvc2l0aW9uCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgQTY3VycmVudEJQb3NpdGlvblZhbAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIEEGN1cnJlbnRCUG9zaXRpb24DCQBmAgUTY3VycmVudEJQb3NpdGlvblZhbAAABRNjdXJyZW50QlBvc2l0aW9uVmFsCQACAQIgdXNlciBoYXMgbm8gYm9ycm93IGluIHRoaXMgdG9rZW4DCQBmAgUOdXNlckNvbGxhdGVyYWwAAAkAAgECGHVzZXIgY2FuJ3QgYmUgbGlxdWlkYXRlZAMJAGYCBQxzQXNzZXRBbW91bnQFEGN1cnJlbnRTUG9zaXRpb24JAAIBAjJwb3NpdGlvbiB0byBsaXF1aWRhdGUgaXMgYmlnZ2VyIHRoYW4gdXNlcidzIHN1cHBseQQRYWdncmVnYXRvckFkZHJlc3MJAQdBZGRyZXNzAQEaAVedDKrGE1GpbsuA92N9wWR44u9yTagMutMEDmJhbGFuY2UwQmVmb3JlCQEKZ2V0QmFsYW5jZQEFC3NBc3NldElkU3RyAwkAAAIFDmJhbGFuY2UwQmVmb3JlBQ5iYWxhbmNlMEJlZm9yZQQOYmFsYW5jZTFCZWZvcmUJAQpnZXRCYWxhbmNlAQULYkFzc2V0SWRTdHIDCQAAAgUOYmFsYW5jZTFCZWZvcmUFDmJhbGFuY2UxQmVmb3JlBA5leGNoYW5nZUludm9rZQkA/AcEBRFhZ2dyZWdhdG9yQWRkcmVzcwIEc3dhcAkAzAgCBQhyb3V0ZVN0cgkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEFzc2V0Qnl0ZXMBBQtzQXNzZXRJZFN0cgULYXNzZXRBbW91bnQFA25pbAMJAAACBQ5leGNoYW5nZUludm9rZQUOZXhjaGFuZ2VJbnZva2UECmFzc2V0MFNvbGQJAGUCBQ5iYWxhbmNlMEJlZm9yZQkBCmdldEJhbGFuY2UBBQtzQXNzZXRJZFN0cgMJAAACBQphc3NldDBTb2xkBQphc3NldDBTb2xkBAxhc3NldDFCb3VnaHQJAGUCCQEKZ2V0QmFsYW5jZQEFC2JBc3NldElkU3RyBQ5iYWxhbmNlMUJlZm9yZQMJAAACBQxhc3NldDFCb3VnaHQFDGFzc2V0MUJvdWdodAQLYXNzZXQwUHJpY2UICQENZ2V0VG9rZW5QcmljZQEFC3NBc3NldElkU3RyAl8xBAthc3NldDBTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQULc0Fzc2V0SWRTdHIECWFzc2V0MFVzZAkAawMFCmFzc2V0MFNvbGQFC2Fzc2V0MFByaWNlBQthc3NldDBTY2FsZQQLYXNzZXQxUHJpY2UICQENZ2V0VG9rZW5QcmljZQEFC2JBc3NldElkU3RyAl8yBAthc3NldDFTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQULYkFzc2V0SWRTdHIECWFzc2V0MVVzZAkAawMFDGFzc2V0MUJvdWdodAULYXNzZXQxUHJpY2UFC2Fzc2V0MVNjYWxlBAdwZW5hbHR5CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQEMdHJ5R2V0U3RyaW5nAQIPc2V0dXBfcGVuYWx0aWVzAgEsCQEFdmFsdWUBCQDPCAIJAQ9nZXRNYXJrZXRBc3NldHMABQtiQXNzZXRJZFN0cgQRbGlxdWlkYXRpb25Qcm9maXQJAGUCBQlhc3NldDFVc2QJAGsDBQlhc3NldDBVc2QJAGUCBQZTY2FsZTgFB3BlbmFsdHkFBlNjYWxlOAQMc0Fzc2V0Q2hhbmdlCQBrAwUKYXNzZXQwU29sZAUHU2NhbGUxNgUFc1JhdGUEDGJBc3NldENoYW5nZQkAawMJAGsDBQxhc3NldDFCb3VnaHQFB1NjYWxlMTYFBWJSYXRlCQBlAgUGU2NhbGU4CQBrAwURbGlxdWlkYXRpb25Qcm9maXQFBlNjYWxlOAUJYXNzZXQxVXNkBQZTY2FsZTgDCQBmAgUKYXNzZXQwU29sZAULYXNzZXRBbW91bnQJAAIBAiNtb3JlIGFzc2V0cyBleGNoYW5nZWQgdGhhbiBleHBlY3RlZAMJAGYCAAAFEWxpcXVpZGF0aW9uUHJvZml0CQACAQIvcHJpY2UgaW1wYWN0IGlzIGJpZ2dlciB0aGFuIGxpcXVpZGF0aW9uIHBlbmFsdHkJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgkAZQIFEGN1cnJlbnRTUG9zaXRpb24FDHNBc3NldENoYW5nZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FC2JBc3NldElkU3RyCQBlAgUQY3VycmVudEJQb3NpdGlvbgUMYkFzc2V0Q2hhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgUMc0Fzc2V0Q2hhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgUMYkFzc2V0Q2hhbmdlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELbGlxdWlkYXRlVjIDBWRlYnVnB2FkZHJlc3MLc0Fzc2V0SWRTdHIDAwMJAQIhPQIIBQFpBmNhbGxlcgkBB0FkZHJlc3MBARoBV3eqztF4Vuipnl6rle+/6eFxWHVeMppxgQkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFX1+EjUY58q4ha1dcol3XYiHXTj64jBabhBwkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFXq92qIvOYuR9F2CzUp+r5EmKviTZqUDtyBwkAAgECKHRlbXBvcmFyaWx5IGF2YWlsYWJsZSBmb3Igd2hpdGVsaXN0IG9ubHkDCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQECGJBc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC2JBc3NldElkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBBQhiQXNzZXRJZAQMYkFzc2V0QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQOdXNlckNvbGxhdGVyYWwJARJjYWxjVXNlckNvbGxhdGVyYWwBBQdhZGRyZXNzAwkAAAIFDnVzZXJDb2xsYXRlcmFsBQ51c2VyQ29sbGF0ZXJhbAMJAGYCBQ51c2VyQ29sbGF0ZXJhbAAACQACAQIYdXNlciBjYW4ndCBiZSBsaXF1aWRhdGVkBAxtYXJrZXRBc3NldHMJAQ9nZXRNYXJrZXRBc3NldHMABAlhc3NldDFOdW0JAQV2YWx1ZQEJAM8IAgUMbWFya2V0QXNzZXRzBQtiQXNzZXRJZFN0cgQJYXNzZXQwTnVtCQEFdmFsdWUBCQDPCAIFDG1hcmtldEFzc2V0cwULc0Fzc2V0SWRTdHIEDSR0MDI4ODI1Mjg4ODcJAQ1nZXRBY3R1YWxSYXRlAgULYkFzc2V0SWRTdHICBWJSYXRlBAViUmF0ZQgFDSR0MDI4ODI1Mjg4ODcCXzEEC3JhdGVzUmVzdWx0CAUNJHQwMjg4MjUyODg4NwJfMgQLYXNzZXQxUHJpY2UICQENZ2V0VG9rZW5QcmljZQEFC2JBc3NldElkU3RyAl8yBAthc3NldDFTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQULYkFzc2V0SWRTdHIECmJBbW91bnRVc2QJAGsDBQxiQXNzZXRBbW91bnQFC2Fzc2V0MVByaWNlBQthc3NldDFTY2FsZQQHcGVuYWx0eQkBDXBhcnNlSW50VmFsdWUBCQEFdmFsdWUBCQCRAwIJALUJAgkBDHRyeUdldFN0cmluZwECD3NldHVwX3BlbmFsdGllcwIBLAUJYXNzZXQxTnVtBAthc3NldDBQcmljZQgJAQ1nZXRUb2tlblByaWNlAQULc0Fzc2V0SWRTdHICXzEEC2Fzc2V0MFNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBBQtzQXNzZXRJZFN0cgQKc0Ftb3VudFVzZAkAawMFCmJBbW91bnRVc2QJAGQCBQZTY2FsZTgFB3BlbmFsdHkFBlNjYWxlOAQMc0Fzc2V0QW1vdW50CQBrAwUKc0Ftb3VudFVzZAULYXNzZXQwU2NhbGUFC2Fzc2V0MFByaWNlBAdiQW1vdW50CQBrAwUMYkFzc2V0QW1vdW50BQdTY2FsZTE2BQViUmF0ZQQHc0Ftb3VudAkAawMFDHNBc3NldEFtb3VudAUHU2NhbGUxNggJAJEDAgULcmF0ZXNSZXN1bHQJAGQCCQBoAgUJYXNzZXQwTnVtAAMAAQV2YWx1ZQQQY3VycmVudFNQb3NpdGlvbgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIEE2N1cnJlbnRCUG9zaXRpb25WYWwJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FC2JBc3NldElkU3RyBBBjdXJyZW50QlBvc2l0aW9uAwkAZgIFE2N1cnJlbnRCUG9zaXRpb25WYWwAAAUTY3VycmVudEJQb3NpdGlvblZhbAkAAgECIHVzZXIgaGFzIG5vIGJvcnJvdyBpbiB0aGlzIHRva2VuAwkAZgIFB3NBbW91bnQFEGN1cnJlbnRTUG9zaXRpb24JAAIBAjJwb3NpdGlvbiB0byBsaXF1aWRhdGUgaXMgYmlnZ2VyIHRoYW4gdXNlcidzIHN1cHBseQMFBWRlYnVnCQACAQIVbGlxdWlkYXRpb24gd2lsbCBwYXNzCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQxzQXNzZXRBbW91bnQJAQ1nZXRBc3NldEJ5dGVzAQULc0Fzc2V0SWRTdHIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgkAZQIFEGN1cnJlbnRTUG9zaXRpb24FB3NBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgkAZQIFEGN1cnJlbnRCUG9zaXRpb24FB2JBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FC3NBc3NldElkU3RyBQdzQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgUHYkFtb3VudAUDbmlsBQtyYXRlc1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFnZXRVc2VyQ29sbGF0ZXJhbAQFZGVidWcHYWRkcmVzcw1taW51c0JvcnJvd2VkC2FmdGVyQ2hhbmdlBAZhc3NldHMJAQ9nZXRNYXJrZXRBc3NldHMABARsdHZzCQC1CQIJAQx0cnlHZXRTdHJpbmcBAgpzZXR1cF9sdHZzAgEsBANsdHMJALUJAgkBDHRyeUdldFN0cmluZwECCXNldHVwX2x0cwIBLAQFcmF0ZXMICQENZ2V0QWN0dWFsUmF0ZQIJAJEDAgUGYXNzZXRzAAACBXNSYXRlAl8yBA1jaGFuZ2VIYW5kbGVyCQC1CQIFC2FmdGVyQ2hhbmdlAgEsCgEBZgIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0CQCQAwEFBmFzc2V0cwUFYWNjdW0EDHVzZXJTdXBwbGllZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwkAkQMCBQZhc3NldHMFBG5leHQEDHVzZXJCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwkAkQMCBQZhc3NldHMFBG5leHQEE25lZWRUb2tlbkFjY291bnRpbmcDCQAAAgULYWZ0ZXJDaGFuZ2UCAAMDCQECIT0CBQx1c2VyQm9ycm93ZWQAAAYJAQIhPQIFDHVzZXJTdXBwbGllZAAABgcGAwUTbmVlZFRva2VuQWNjb3VudGluZwQKYXNzZXRTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQkAkQMCBQZhc3NldHMFBG5leHQECmFzc2V0UHJpY2UJAQ1nZXRUb2tlblByaWNlAQkAkQMCBQZhc3NldHMFBG5leHQJAGUCCQBkAgUFYWNjdW0JAGsDCQBrAwkAawMJAGQCBQx1c2VyU3VwcGxpZWQDAwMJAQIhPQIFC2FmdGVyQ2hhbmdlAgAJAAACCQCRAwIFDWNoYW5nZUhhbmRsZXIAAAkAkQMCBQZhc3NldHMFBG5leHQHCQAAAgkAkQMCBQ1jaGFuZ2VIYW5kbGVyAAECCHN1cHBsaWVkBwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDWNoYW5nZUhhbmRsZXIAAgAACAkAkQMCBQVyYXRlcwkAaAIFBG5leHQAAwV2YWx1ZQUHU2NhbGUxNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGx0dnMFBG5leHQFBlNjYWxlOAgFCmFzc2V0UHJpY2UCXzEFCmFzc2V0U2NhbGUDBQ1taW51c0JvcnJvd2VkCQBrAwkAawMJAGsDCQBkAgUMdXNlckJvcnJvd2VkAwMDCQECIT0CBQthZnRlckNoYW5nZQIACQAAAgkAkQMCBQ1jaGFuZ2VIYW5kbGVyAAAJAJEDAgUGYXNzZXRzBQRuZXh0BwkAAAIJAJEDAgUNY2hhbmdlSGFuZGxlcgABAghib3Jyb3dlZAcJAQ1wYXJzZUludFZhbHVlAQkAkQMC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", "height": 3535204, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5CMJWj2WcjjSEDUjeLX8T5HzHfvoNF8ytxgAjjVByRGp Next: CNQqajwmdCTUwuwf7o4Aqjymbu41jMn2pZes42rbmNWV Diff:
OldNewDifferences
143143 then $Tuple4(2000000, 30000000, 80000000, 50000000)
144144 else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == s))
145145 then $Tuple4(2000000, 30000000, 80000000, 50000000)
146- else $Tuple4(0, 20000000, 80000000, 80000000)
146+ else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == s))
147+ then $Tuple4(2000000, 40000000, 80000000, 100000000)
148+ else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == s))
149+ then $Tuple4(2000000, 30000000, 80000000, 80000000)
150+ else $Tuple4(0, 20000000, 80000000, 80000000)
147151 }
148152
149153
220224
221225
222226 func ac (A) = {
223- let ad = invoke(addressFromStringValue("3P8pvmcBi9JeBrnPgWDTaPWrWmGzxiDkpTu"), "getTWAP60", [A, false], nil)
227+ let ad = invoke(addressFromStringValue("3PPXVKjN6nRMzXeegcYhfiic96pd2c98Ekm"), "getTWAP60", [A, false], nil)
224228 if ((ad == ad))
225229 then {
226230 let ae = {
462466 @Callable(am)
463467 func unstakeToken (A,ar) = if ((am.caller != this))
464468 then throw("only for internal smart contract invocations")
465- else if ((A == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
469+ else if ((A == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
466470 then {
467- let aK = q("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
468- let aJ = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "unstake", [ar], nil)
471+ let aK = q("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
472+ let aJ = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [ar], nil)
469473 if ((aJ == aJ))
470- then {
471- let aL = B("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
472- if ((aL == aL))
473- then {
474- let ad = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "claimRewards", nil, nil)
475- if ((ad == ad))
476- then {
477- let aM = invoke(this, "addInterest", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (B("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p") - aL)], nil)
478- if ((aM == aM))
479- then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (aK - ar))]
480- else throw("Strict value is not equal to itself.")
481- }
482- else throw("Strict value is not equal to itself.")
483- }
484- else throw("Strict value is not equal to itself.")
485- }
474+ then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aK - ar))]
486475 else throw("Strict value is not equal to itself.")
487476 }
488- else if ((A == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
477+ else if ((A == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
489478 then {
490- let aK = q("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
491- let aJ = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [ar], nil)
479+ let aK = q("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
480+ let aJ = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [ar], nil)
492481 if ((aJ == aJ))
493- then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aK - ar))]
482+ then {
483+ let aL = B("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
484+ if ((aL == aL))
485+ then {
486+ let aM = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
487+ if ((aM == aM))
488+ then {
489+ let aN = {
490+ let s = aM
491+ if ($isInstanceOf(s, "List[Any]"))
492+ then {
493+ let af = s
494+ let aO = af[1]
495+ let aP = aO
496+ if ($isInstanceOf(aP, "String"))
497+ then {
498+ let aO = aP
499+ let aQ = parseIntValue(split(split(aO, "_")[1], ":")[1])
500+ let aR = parseIntValue(split(split(aO, "_")[0], ":")[1])
501+ if (if ((aQ != 0))
502+ then true
503+ else (aR != 0))
504+ then {
505+ let aS = B("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
506+ if ((aS == aS))
507+ then {
508+ let aT = B("WAVES")
509+ if ((aT == aT))
510+ then {
511+ let ad = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
512+ if ((ad == ad))
513+ then {
514+ let aU = B("WAVES")
515+ if ((aU == aU))
516+ then {
517+ let aV = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (aU - aT))])
518+ if ((aV == aV))
519+ then {
520+ let aW = B("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
521+ if ((aW == aW))
522+ then {
523+ let aX = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (aW - aS))])
524+ if ((aX == aX))
525+ then {
526+ let aY = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (B("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - aL)], nil)
527+ if ((aY == aY))
528+ then 2
529+ else throw("Strict value is not equal to itself.")
530+ }
531+ else throw("Strict value is not equal to itself.")
532+ }
533+ else throw("Strict value is not equal to itself.")
534+ }
535+ else throw("Strict value is not equal to itself.")
536+ }
537+ else throw("Strict value is not equal to itself.")
538+ }
539+ else throw("Strict value is not equal to itself.")
540+ }
541+ else throw("Strict value is not equal to itself.")
542+ }
543+ else throw("Strict value is not equal to itself.")
544+ }
545+ else 1
546+ }
547+ else 1
548+ }
549+ else 0
550+ }
551+ if ((aN == aN))
552+ then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aK - ar))]
553+ else throw("Strict value is not equal to itself.")
554+ }
555+ else throw("Strict value is not equal to itself.")
556+ }
557+ else throw("Strict value is not equal to itself.")
558+ }
494559 else throw("Strict value is not equal to itself.")
495560 }
496- else if ((A == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
497- then {
498- let aK = q("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
499- let aJ = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [ar], nil)
500- if ((aJ == aJ))
501- then {
502- let aL = B("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
503- if ((aL == aL))
504- then {
505- let ad = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
506- if ((ad == ad))
507- then {
508- let aN = {
509- let s = ad
510- if ($isInstanceOf(s, "List[Any]"))
511- then {
512- let af = s
513- let aO = af[1]
514- let aP = aO
515- if ($isInstanceOf(aP, "String"))
516- then {
517- let aO = aP
518- let aQ = parseIntValue(split(split(aO, "_")[1], ":")[1])
519- let aR = parseIntValue(split(split(aO, "_")[0], ":")[1])
520- if (if ((aQ != 0))
521- then true
522- else (aR != 0))
523- then {
524- let aS = B("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
525- if ((aS == aS))
526- then {
527- let aT = B("WAVES")
528- if ((aT == aT))
529- then {
530- let aM = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
531- if ((aM == aM))
532- then {
533- let aU = B("WAVES")
534- if ((aU == aU))
535- then {
536- let aV = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (aU - aT))])
537- if ((aV == aV))
538- then {
539- let aW = B("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
540- if ((aW == aW))
541- then {
542- let aX = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (aW - aS))])
543- if ((aX == aX))
544- then {
545- let aY = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (B("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - aL)], nil)
546- if ((aY == aY))
547- then 2
548- else throw("Strict value is not equal to itself.")
549- }
550- else throw("Strict value is not equal to itself.")
551- }
552- else throw("Strict value is not equal to itself.")
553- }
554- else throw("Strict value is not equal to itself.")
555- }
556- else throw("Strict value is not equal to itself.")
557- }
558- else throw("Strict value is not equal to itself.")
559- }
560- else throw("Strict value is not equal to itself.")
561- }
562- else throw("Strict value is not equal to itself.")
563- }
564- else 1
565- }
566- else 1
567- }
568- else 0
569- }
570- if ((aN == aN))
571- then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aK - ar))]
572- else throw("Strict value is not equal to itself.")
573- }
574- else throw("Strict value is not equal to itself.")
575- }
576- else throw("Strict value is not equal to itself.")
577- }
578- else throw("Strict value is not equal to itself.")
579- }
580- else nil
561+ else nil
581562
582563
583564
775756 let bD = fraction(an, c, ap)
776757 let bE = q(((aj + "_supplied_") + bv))
777758 let bF = q(((aj + "_borrowed_") + bw))
778- let bG = if ((bF != 0))
759+ let bG = if ((bF > 0))
779760 then bF
780761 else throw("user has no borrow in this token")
781762 if ((by > 0))
808789 let bT = parseIntValue(split(v("setup_penalties"), ",")[value(indexOf(E(), bw))])
809790 let bU = (bS - fraction(bP, (a - bT), a))
810791 let bV = fraction(bL, c, ap)
811- let bW = fraction(bM, c, aF)
792+ let bW = fraction(fraction(bM, c, aF), (a - fraction(bU, a, bS)), a)
812793 if ((bL > an))
813794 then throw("more assets exchanged than expected")
814795 else if ((0 > bU))
867848 let cg = fraction(bD, c, bA[((cb * 3) + 1)].value)
868849 let bE = q(((aj + "_supplied_") + bv))
869850 let bF = q(((aj + "_borrowed_") + bw))
870- let bG = if ((bF != 0))
851+ let bG = if ((bF > 0))
871852 then bF
872853 else throw("user has no borrow in this token")
873854 if ((cg > bE))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 100000000
55
66 let b = 10000000000
77
88 let c = (a * a)
99
1010 let d = 1440
1111
1212 func e (f) = {
1313 func g (h,i) = ((h + toString(i)) + ",")
1414
1515 let j = f
1616 let k = size(j)
1717 let l = ""
1818 func m (n,o) = if ((o >= k))
1919 then n
2020 else g(n, j[o])
2121
2222 func p (n,o) = if ((o >= k))
2323 then n
2424 else throw("List size exceeds 6")
2525
2626 p(m(m(m(m(m(m(l, 0), 1), 2), 3), 4), 5), 6)
2727 }
2828
2929
3030 func q (r) = {
3131 let s = getInteger(this, r)
3232 if ($isInstanceOf(s, "Int"))
3333 then {
3434 let t = s
3535 t
3636 }
3737 else 0
3838 }
3939
4040
4141 func u (r) = {
4242 let s = getBoolean(this, r)
4343 if ($isInstanceOf(s, "Boolean"))
4444 then {
4545 let t = s
4646 t
4747 }
4848 else false
4949 }
5050
5151
5252 func v (r) = {
5353 let s = getString(this, r)
5454 if ($isInstanceOf(s, "String"))
5555 then {
5656 let t = s
5757 t
5858 }
5959 else ""
6060 }
6161
6262
6363 func w (r) = {
6464 let s = getBinary(this, r)
6565 if ($isInstanceOf(s, "ByteVector"))
6666 then {
6767 let t = s
6868 t
6969 }
7070 else base58''
7171 }
7272
7373
7474 func x (y) = {
7575 let s = y
7676 if ($isInstanceOf(s, "ByteVector"))
7777 then {
7878 let t = s
7979 toBase58String(t)
8080 }
8181 else "WAVES"
8282 }
8383
8484
8585 func z (A) = if ((A == "WAVES"))
8686 then unit
8787 else fromBase58String(A)
8888
8989
9090 func B (A) = if ((A == "WAVES"))
9191 then wavesBalance(this).available
9292 else assetBalance(this, fromBase58String(A))
9393
9494
9595 let C = Address(base58'3P4kBiU4wr2yV1S5gMfu3MdkVvy7kxXHsKe')
9696
9797 let D = 20
9898
9999 func E () = split(v("setup_tokens"), ",")
100100
101101
102102 func F () = {
103103 let G = v("setup_maxsupply")
104104 if ((G == ""))
105105 then [-1, -1, -1, -1, -1, -1, -1]
106106 else split(G, ",")
107107 }
108108
109109
110110 func H (A) = {
111111 let I = fraction(q(("total_supplied_" + A)), q((A + "_sRate")), c)
112112 if ((I == 0))
113113 then 0
114114 else fraction(a, fraction(q(("total_borrowed_" + A)), q((A + "_bRate")), c), I)
115115 }
116116
117117
118118 func J (A) = {
119119 let s = A
120120 if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == s))
121121 then $Tuple4(2000000, 25000000, 80000000, 100000000)
122122 else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == s))
123123 then $Tuple4(2000000, 25000000, 80000000, 100000000)
124124 else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == s))
125125 then $Tuple4(2000000, 25000000, 80000000, 100000000)
126126 else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == s))
127127 then $Tuple4(2000000, 40000000, 80000000, 150000000)
128128 else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == s))
129129 then $Tuple4(0, 20000000, 80000000, 40000000)
130130 else if (("WAVES" == s))
131131 then $Tuple4(2000000, 30000000, 80000000, 50000000)
132132 else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == s))
133133 then $Tuple4(0, 20000000, 80000000, 40000000)
134134 else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == s))
135135 then $Tuple4(0, 20000000, 80000000, 100000000)
136136 else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == s))
137137 then $Tuple4(0, 30000000, 80000000, 40000000)
138138 else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == s))
139139 then $Tuple4(0, 25000000, 80000000, 40000000)
140140 else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == s))
141141 then $Tuple4(2000000, 30000000, 80000000, 50000000)
142142 else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == s))
143143 then $Tuple4(2000000, 30000000, 80000000, 50000000)
144144 else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == s))
145145 then $Tuple4(2000000, 30000000, 80000000, 50000000)
146- else $Tuple4(0, 20000000, 80000000, 80000000)
146+ else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == s))
147+ then $Tuple4(2000000, 40000000, 80000000, 100000000)
148+ else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == s))
149+ then $Tuple4(2000000, 30000000, 80000000, 80000000)
150+ else $Tuple4(0, 20000000, 80000000, 80000000)
147151 }
148152
149153
150154 func K (A) = {
151155 let L = H(A)
152156 let M = J(A)
153157 let N = (M._1 + (if ((M._3 >= L))
154158 then fraction(L, M._2, M._3)
155159 else (M._2 + fraction((L - M._3), (M._4 - M._2), (100000000 - M._3)))))
156160 max([fraction(N, a, (d * 365)), 1])
157161 }
158162
159163
160164 func O (A) = {
161165 let P = K(A)
162166 let L = H(A)
163167 let Q = q("lastRateHeight")
164168 let R = max([q((A + "_bRate")), c])
165169 let S = (R + ((height - Q) * P))
166170 let T = max([q((A + "_sRate")), c])
167171 let U = (T + ((((height - Q) * fraction(P, L, a)) * (100 - D)) / 100))
168172 [IntegerEntry((A + "_sRate"), U), IntegerEntry((A + "_bRate"), S), IntegerEntry("lastRateHeight", height)]
169173 }
170174
171175
172176 func V (A,W) = {
173177 func g (h,X) = {
174178 let Y = O(X)
175179 $Tuple2(if ((X != A))
176180 then h._1
177181 else if ((W == "sRate"))
178182 then Y[0].value
179183 else Y[1].value, (h._2 ++ Y))
180184 }
181185
182186 let j = E()
183187 let k = size(j)
184188 let l = $Tuple2(0, nil)
185189 func m (n,o) = if ((o >= k))
186190 then n
187191 else g(n, j[o])
188192
189193 func p (n,o) = if ((o >= k))
190194 then n
191195 else throw("List size exceeds 6")
192196
193197 p(m(m(m(m(m(m(l, 0), 1), 2), 3), 4), 5), 6)
194198 }
195199
196200
197201 func Z (A) = {
198202 let aa = O(A)
199203 let I = fraction(q(("total_supplied_" + A)), aa[0].value, c)
200204 fraction(a, fraction(q(("total_borrowed_" + A)), aa[1].value, c), I)
201205 }
202206
203207
204208 func ab () = {
205209 func g (h,X) = (h ++ O(X))
206210
207211 let j = E()
208212 let k = size(j)
209213 let l = nil
210214 func m (n,o) = if ((o >= k))
211215 then n
212216 else g(n, j[o])
213217
214218 func p (n,o) = if ((o >= k))
215219 then n
216220 else throw("List size exceeds 6")
217221
218222 p(m(m(m(m(m(m(l, 0), 1), 2), 3), 4), 5), 6)
219223 }
220224
221225
222226 func ac (A) = {
223- let ad = invoke(addressFromStringValue("3P8pvmcBi9JeBrnPgWDTaPWrWmGzxiDkpTu"), "getTWAP60", [A, false], nil)
227+ let ad = invoke(addressFromStringValue("3PPXVKjN6nRMzXeegcYhfiic96pd2c98Ekm"), "getTWAP60", [A, false], nil)
224228 if ((ad == ad))
225229 then {
226230 let ae = {
227231 let s = ad
228232 if ($isInstanceOf(s, "(Int, Int)"))
229233 then {
230234 let af = s
231235 af
232236 }
233237 else throw("error of price oracle")
234238 }
235239 if ((ae == ae))
236240 then ae
237241 else throw("Strict value is not equal to itself.")
238242 }
239243 else throw("Strict value is not equal to itself.")
240244 }
241245
242246
243247 func ag (A) = {
244248 let ah = if ((A == "WAVES"))
245249 then 8
246250 else value(assetInfo(fromBase58String(A))).decimals
247251 pow(10, 0, ah, 0, 0, DOWN)
248252 }
249253
250254
251255 func ai (aj) = {
252256 let ak = invoke(this, "getUserCollateral", [false, aj, true, ""], nil)
253257 if ((ak == ak))
254258 then {
255259 let al = {
256260 let s = ak
257261 if ($isInstanceOf(s, "Int"))
258262 then {
259263 let af = s
260264 af
261265 }
262266 else throw("issue while doing in-dapp invocation")
263267 }
264268 if ((al == al))
265269 then al
266270 else throw("Strict value is not equal to itself.")
267271 }
268272 else throw("Strict value is not equal to itself.")
269273 }
270274
271275
272276 @Callable(am)
273277 func supply () = if (!(u("setup_active")))
274278 then throw("market is stopped")
275279 else if (if ((size(am.payments) != 1))
276280 then true
277281 else (am.payments[0].amount == 0))
278282 then throw("1 payment has to be attached")
279283 else {
280284 let A = x(am.payments[0].assetId)
281285 let an = am.payments[0].amount
282286 let ao = V(A, "sRate")
283287 let ap = ao._1
284288 let aq = ao._2
285289 let ar = fraction(an, c, ap, DOWN)
286290 let aj = toString(am.caller)
287291 let as = {
288292 let s = getString(("setup_maxSupply_" + A))
289293 if ($isInstanceOf(s, "String"))
290294 then {
291295 let af = s
292296 parseIntValue(af)
293297 }
294298 else 0
295299 }
296300 let at = ac(A)
297301 let au = (q(((aj + "_supplied_") + A)) + ar)
298302 let N = V(A, "sRate")._1
299303 let av = ag(A)
300304 let aw = fraction(fraction(au, N, c), at._1, av)
301305 if ((indexOf(v("setup_tokens"), A) == unit))
302306 then throw("this asset is not supported by the market")
303307 else if (if ((as != 0))
304308 then (aw > as)
305309 else false)
306310 then throw("max total supply for this token reached in the pool")
307311 else ([IntegerEntry(((aj + "_supplied_") + A), au), IntegerEntry(("total_supplied_" + A), (q(("total_supplied_" + A)) + ar))] ++ aq)
308312 }
309313
310314
311315
312316 @Callable(am)
313317 func withdraw (A,an) = {
314318 let ax = V(A, "sRate")
315319 let ap = ax._1
316320 let aq = ax._2
317321 let ar = fraction(an, c, ap, CEILING)
318322 let aj = toString(am.caller)
319323 let ay = q(("total_supplied_" + A))
320324 let az = q(("total_borrowed_" + A))
321325 let aA = q(((aj + "_supplied_") + A))
322326 let aB = q(((aj + "_borrowed_") + A))
323327 let aC = invoke(this, "getUserCollateral", [false, aj, true, ((A + ",supplied,") + toString(-(ar)))], nil)
324328 if ((aC == aC))
325329 then {
326330 let aD = {
327331 let s = aC
328332 if ($isInstanceOf(s, "Int"))
329333 then {
330334 let af = s
331335 af
332336 }
333337 else throw("can't get user collateral value")
334338 }
335339 if (!(u("setup_active")))
336340 then throw("market is stopped")
337341 else if ((0 > aD))
338342 then throw("you dont have enough collateral for this operation")
339343 else if ((ar > (ay - az)))
340344 then throw("this amount is not available on the market")
341345 else if ((ar > (aA - aB)))
342346 then throw("this amount is not available for this user")
343347 else ([IntegerEntry(((aj + "_supplied_") + A), (q(((aj + "_supplied_") + A)) - ar)), IntegerEntry(("total_supplied_" + A), (q(("total_supplied_" + A)) - ar)), ScriptTransfer(am.caller, an, z(A))] ++ aq)
344348 }
345349 else throw("Strict value is not equal to itself.")
346350 }
347351
348352
349353
350354 @Callable(am)
351355 func borrow (A,an) = {
352356 let aj = toString(am.caller)
353357 let aE = V(A, "bRate")
354358 let aF = aE._1
355359 let aq = aE._2
356360 let ar = fraction(an, c, aF, CEILING)
357361 let aC = invoke(this, "getUserCollateral", [false, aj, true, ((A + ",borrowed,") + toString(ar))], nil)
358362 if ((aC == aC))
359363 then {
360364 let aD = {
361365 let s = aC
362366 if ($isInstanceOf(s, "Int"))
363367 then {
364368 let af = s
365369 af
366370 }
367371 else throw("can't get user collateral value")
368372 }
369373 if (!(u("setup_active")))
370374 then throw("market is stopped")
371375 else if ((0 > aD))
372376 then throw("you have to supply more to borrow")
373377 else {
374378 let ay = q(("total_supplied_" + A))
375379 let az = q(("total_borrowed_" + A))
376380 let aB = q(((aj + "_borrowed_") + A))
377381 if ((ar > (ay - az)))
378382 then throw("this amount is not available")
379383 else ([IntegerEntry(((aj + "_borrowed_") + A), (aB + ar)), IntegerEntry(("total_borrowed_" + A), (az + ar)), ScriptTransfer(am.caller, an, z(A))] ++ aq)
380384 }
381385 }
382386 else throw("Strict value is not equal to itself.")
383387 }
384388
385389
386390
387391 @Callable(am)
388392 func repay () = if (!(u("setup_active")))
389393 then throw("market is stopped")
390394 else if (if ((size(am.payments) != 1))
391395 then true
392396 else (am.payments[0].amount == 0))
393397 then throw("1 payment has to be attached")
394398 else {
395399 let A = x(am.payments[0].assetId)
396400 let an = am.payments[0].amount
397401 let aG = V(A, "bRate")
398402 let aF = aG._1
399403 let aq = aG._2
400404 let ar = fraction(an, c, aF, CEILING)
401405 let aj = toString(am.caller)
402406 let ay = q(("total_supplied_" + A))
403407 let az = q(("total_borrowed_" + A))
404408 let aB = q(((aj + "_borrowed_") + A))
405409 let aH = (aB - ar)
406410 let aI = if ((aH >= 0))
407411 then ar
408412 else aB
409413 if ((indexOf(v("setup_tokens"), A) == unit))
410414 then throw("this asset is not supported by the market")
411415 else (([IntegerEntry(((aj + "_borrowed_") + A), (aB - aI)), IntegerEntry(("total_borrowed_" + A), (az - aI))] ++ aq) ++ (if ((aH >= 0))
412416 then nil
413417 else [ScriptTransfer(am.caller, -(aH), am.payments[0].assetId)]))
414418 }
415419
416420
417421
418422 @Callable(am)
419423 func stakeTokenAll (A) = if ((am.caller != this))
420424 then throw("only for internal smart contract invocations")
421425 else {
422426 let ar = B(A)
423427 let aJ = invoke(this, "stakeToken", [A, ar], nil)
424428 if ((aJ == aJ))
425429 then nil
426430 else throw("Strict value is not equal to itself.")
427431 }
428432
429433
430434
431435 @Callable(am)
432436 func stakeToken (A,ar) = if ((am.caller != this))
433437 then throw("only for internal smart contract invocations")
434438 else if ((A == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
435439 then {
436440 let aK = q("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
437441 let aJ = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', ar)])
438442 if ((aJ == aJ))
439443 then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (aK + ar))]
440444 else throw("Strict value is not equal to itself.")
441445 }
442446 else if ((A == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
443447 then {
444448 let aK = q("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
445449 let aJ = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', ar)])
446450 if ((aJ == aJ))
447451 then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aK + ar))]
448452 else throw("Strict value is not equal to itself.")
449453 }
450454 else if ((A == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
451455 then {
452456 let aK = q("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
453457 let aJ = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', ar)])
454458 if ((aJ == aJ))
455459 then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aK + ar))]
456460 else throw("Strict value is not equal to itself.")
457461 }
458462 else nil
459463
460464
461465
462466 @Callable(am)
463467 func unstakeToken (A,ar) = if ((am.caller != this))
464468 then throw("only for internal smart contract invocations")
465- else if ((A == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
469+ else if ((A == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
466470 then {
467- let aK = q("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
468- let aJ = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "unstake", [ar], nil)
471+ let aK = q("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
472+ let aJ = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [ar], nil)
469473 if ((aJ == aJ))
470- then {
471- let aL = B("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
472- if ((aL == aL))
473- then {
474- let ad = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "claimRewards", nil, nil)
475- if ((ad == ad))
476- then {
477- let aM = invoke(this, "addInterest", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (B("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p") - aL)], nil)
478- if ((aM == aM))
479- then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (aK - ar))]
480- else throw("Strict value is not equal to itself.")
481- }
482- else throw("Strict value is not equal to itself.")
483- }
484- else throw("Strict value is not equal to itself.")
485- }
474+ then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aK - ar))]
486475 else throw("Strict value is not equal to itself.")
487476 }
488- else if ((A == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
477+ else if ((A == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
489478 then {
490- let aK = q("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
491- let aJ = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [ar], nil)
479+ let aK = q("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
480+ let aJ = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [ar], nil)
492481 if ((aJ == aJ))
493- then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aK - ar))]
482+ then {
483+ let aL = B("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
484+ if ((aL == aL))
485+ then {
486+ let aM = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
487+ if ((aM == aM))
488+ then {
489+ let aN = {
490+ let s = aM
491+ if ($isInstanceOf(s, "List[Any]"))
492+ then {
493+ let af = s
494+ let aO = af[1]
495+ let aP = aO
496+ if ($isInstanceOf(aP, "String"))
497+ then {
498+ let aO = aP
499+ let aQ = parseIntValue(split(split(aO, "_")[1], ":")[1])
500+ let aR = parseIntValue(split(split(aO, "_")[0], ":")[1])
501+ if (if ((aQ != 0))
502+ then true
503+ else (aR != 0))
504+ then {
505+ let aS = B("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
506+ if ((aS == aS))
507+ then {
508+ let aT = B("WAVES")
509+ if ((aT == aT))
510+ then {
511+ let ad = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
512+ if ((ad == ad))
513+ then {
514+ let aU = B("WAVES")
515+ if ((aU == aU))
516+ then {
517+ let aV = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (aU - aT))])
518+ if ((aV == aV))
519+ then {
520+ let aW = B("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
521+ if ((aW == aW))
522+ then {
523+ let aX = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (aW - aS))])
524+ if ((aX == aX))
525+ then {
526+ let aY = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (B("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - aL)], nil)
527+ if ((aY == aY))
528+ then 2
529+ else throw("Strict value is not equal to itself.")
530+ }
531+ else throw("Strict value is not equal to itself.")
532+ }
533+ else throw("Strict value is not equal to itself.")
534+ }
535+ else throw("Strict value is not equal to itself.")
536+ }
537+ else throw("Strict value is not equal to itself.")
538+ }
539+ else throw("Strict value is not equal to itself.")
540+ }
541+ else throw("Strict value is not equal to itself.")
542+ }
543+ else throw("Strict value is not equal to itself.")
544+ }
545+ else 1
546+ }
547+ else 1
548+ }
549+ else 0
550+ }
551+ if ((aN == aN))
552+ then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aK - ar))]
553+ else throw("Strict value is not equal to itself.")
554+ }
555+ else throw("Strict value is not equal to itself.")
556+ }
557+ else throw("Strict value is not equal to itself.")
558+ }
494559 else throw("Strict value is not equal to itself.")
495560 }
496- else if ((A == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
497- then {
498- let aK = q("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
499- let aJ = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [ar], nil)
500- if ((aJ == aJ))
501- then {
502- let aL = B("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
503- if ((aL == aL))
504- then {
505- let ad = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
506- if ((ad == ad))
507- then {
508- let aN = {
509- let s = ad
510- if ($isInstanceOf(s, "List[Any]"))
511- then {
512- let af = s
513- let aO = af[1]
514- let aP = aO
515- if ($isInstanceOf(aP, "String"))
516- then {
517- let aO = aP
518- let aQ = parseIntValue(split(split(aO, "_")[1], ":")[1])
519- let aR = parseIntValue(split(split(aO, "_")[0], ":")[1])
520- if (if ((aQ != 0))
521- then true
522- else (aR != 0))
523- then {
524- let aS = B("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
525- if ((aS == aS))
526- then {
527- let aT = B("WAVES")
528- if ((aT == aT))
529- then {
530- let aM = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
531- if ((aM == aM))
532- then {
533- let aU = B("WAVES")
534- if ((aU == aU))
535- then {
536- let aV = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (aU - aT))])
537- if ((aV == aV))
538- then {
539- let aW = B("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
540- if ((aW == aW))
541- then {
542- let aX = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (aW - aS))])
543- if ((aX == aX))
544- then {
545- let aY = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (B("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - aL)], nil)
546- if ((aY == aY))
547- then 2
548- else throw("Strict value is not equal to itself.")
549- }
550- else throw("Strict value is not equal to itself.")
551- }
552- else throw("Strict value is not equal to itself.")
553- }
554- else throw("Strict value is not equal to itself.")
555- }
556- else throw("Strict value is not equal to itself.")
557- }
558- else throw("Strict value is not equal to itself.")
559- }
560- else throw("Strict value is not equal to itself.")
561- }
562- else throw("Strict value is not equal to itself.")
563- }
564- else 1
565- }
566- else 1
567- }
568- else 0
569- }
570- if ((aN == aN))
571- then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aK - ar))]
572- else throw("Strict value is not equal to itself.")
573- }
574- else throw("Strict value is not equal to itself.")
575- }
576- else throw("Strict value is not equal to itself.")
577- }
578- else throw("Strict value is not equal to itself.")
579- }
580- else nil
561+ else nil
581562
582563
583564
584565 @Callable(am)
585566 func addInterest (A,ar) = if ((am.caller != this))
586567 then throw("only for self invocation")
587568 else {
588569 let aZ = q(("autostake_lastEarned_" + A))
589570 let ba = q(("autostake_lastBlock_" + A))
590571 let bb = fraction(ar, 80, 100)
591572 let bc = if (if ((ba == height))
592573 then true
593574 else (ar == 0))
594575 then nil
595576 else [IntegerEntry(("autostake_preLastEarned_" + A), aZ), IntegerEntry(("autostake_preLastBlock_" + A), ba), IntegerEntry(("autostake_lastEarned_" + A), (aZ + bb)), IntegerEntry(("autostake_lastBlock_" + A), height)]
596577 (bc ++ [IntegerEntry((A + "_sRate"), (q((A + "_sRate")) + fraction(c, bb, q(("total_supplied_" + A)))))])
597578 }
598579
599580
600581
601582 @Callable(am)
602583 func addInterestEXTERNAL () = {
603584 let ar = fraction(am.payments[0].amount, 80, 100)
604585 let y = am.payments[0].assetId
605586 let A = x(y)
606587 let aZ = q(("autostake_lastEarned_" + A))
607588 let ba = q(("autostake_lastBlock_" + A))
608589 let bc = if (if ((ba == height))
609590 then true
610591 else (ar == 0))
611592 then nil
612593 else [IntegerEntry(("autostake_preLastEarned_" + A), aZ), IntegerEntry(("autostake_preLastBlock_" + A), ba), IntegerEntry(("autostake_lastEarned_" + A), (aZ + ar)), IntegerEntry(("autostake_lastBlock_" + A), height)]
613594 (bc ++ [IntegerEntry((A + "_sRate"), (q((A + "_sRate")) + fraction(c, ar, q(("total_supplied_" + A)))))])
614595 }
615596
616597
617598
618599 @Callable(am)
619600 func preInit (bd,be,bf,bg) = {
620601 func g (h,X) = (h ++ [IntegerEntry((X + "_bRate"), c), IntegerEntry((X + "_sRate"), c)])
621602
622603 if ((am.caller != this))
623604 then throw("admin only")
624605 else {
625606 let aa = {
626607 let j = split(bd, ",")
627608 let k = size(j)
628609 let l = nil
629610 func m (n,o) = if ((o >= k))
630611 then n
631612 else g(n, j[o])
632613
633614 func p (n,o) = if ((o >= k))
634615 then n
635616 else throw("List size exceeds 6")
636617
637618 p(m(m(m(m(m(m(l, 0), 1), 2), 3), 4), 5), 6)
638619 }
639620 ([StringEntry("setup_tokens", bd), StringEntry("setup_ltvs", be), StringEntry("setup_lts", bf), StringEntry("setup_penalties", bg), BooleanEntry("setup_active", true)] ++ aa)
640621 }
641622 }
642623
643624
644625
645626 @Callable(am)
646627 func updateParameter (r,bh) = if (if ((am.caller != this))
647628 then (am.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
648629 else false)
649630 then throw("admin only")
650631 else [IntegerEntry(r, parseIntValue(bh))]
651632
652633
653634
654635 @Callable(am)
655636 func updateString (r,bh) = if (if ((am.caller != this))
656637 then (am.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
657638 else false)
658639 then throw("admin only")
659640 else [StringEntry(r, bh)]
660641
661642
662643
663644 @Callable(am)
664645 func claimToReserveFund (bi) = {
665646 let bj = E()
666647 let aa = V(bj[0], "sRate")._2
667648 let f = [0, 1, 2, 3, 4, 5]
668649 func g (h,bk) = if ((bk >= size(bj)))
669650 then h
670651 else {
671652 let A = bj[bk]
672653 let bl = v(("autostake_amount_" + A))
673654 let ar = ((((B(A) + q(("autostake_amount_" + A))) + (if ((bl != ""))
674655 then parseIntValue(bl)
675656 else 0)) + fraction(q(("total_borrowed_" + A)), aa[((bk * 3) + 1)].value, c)) - fraction(q(("total_supplied_" + A)), aa[(bk * 3)].value, c))
676657 let aJ = if ((q(("autostake_amount_" + A)) > 0))
677658 then invoke(this, "unstakeToken", [A, max([ar, 0])], nil)
678659 else 0
679660 if ((aJ == aJ))
680661 then (h ++ [ar])
681662 else throw("Strict value is not equal to itself.")
682663 }
683664
684665 let bm = {
685666 let j = f
686667 let k = size(j)
687668 let l = nil
688669 func m (n,o) = if ((o >= k))
689670 then n
690671 else g(n, j[o])
691672
692673 func p (n,o) = if ((o >= k))
693674 then n
694675 else throw("List size exceeds 6")
695676
696677 p(m(m(m(m(m(m(l, 0), 1), 2), 3), 4), 5), 6)
697678 }
698679 func bn (h,bk) = if ((bk >= size(bj)))
699680 then h
700681 else {
701682 let A = bj[bk]
702683 (h ++ [ScriptTransfer(C, max([bm[bk], 0]), z(A))])
703684 }
704685
705686 if (bi)
706687 then throw(e(bm))
707688 else $Tuple2({
708689 let j = f
709690 let k = size(j)
710691 let l = nil
711692 func bo (n,o) = if ((o >= k))
712693 then n
713694 else bn(n, j[o])
714695
715696 func bp (n,o) = if ((o >= k))
716697 then n
717698 else throw("List size exceeds 6")
718699
719700 bp(bo(bo(bo(bo(bo(bo(l, 0), 1), 2), 3), 4), 5), 6)
720701 }, bm)
721702 }
722703
723704
724705
725706 @Callable(am)
726707 func reSetup (A) = {
727708 let bq = q("resetup_lastUpdate")
728709 if ((d > (height - bq)))
729710 then throw("can be updated only once per day")
730711 else {
731712 let bf = split(v("setup_lts"), ",")
732713 let bj = E()
733714 let L = Z(A)
734715 let br = q((("setup_" + A) + "_tempLT"))
735716 let bs = parseIntValue(bj[value(indexOf(bj, A))])
736717 if ((L > 90000000))
737718 then [IntegerEntry((("setup_" + A) + "_tempLT"), fraction(br, 9975, 10000))]
738719 else if (if ((bs > br))
739720 then (90000000 > L)
740721 else false)
741722 then [IntegerEntry((("setup_" + A) + "_tempLT"), fraction(br, 10025, 10000))]
742723 else nil
743724 }
744725 }
745726
746727
747728
748729 @Callable(am)
749730 func shutdown (bt) = {
750731 let bu = [base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL', base58'3PAxdDSmN758L5SHSGRC5apEtQE2aApZotG', base58'3PJKmXoHJvVeQXjSJdhtkUcFDtdiQqMbUTD', base58'3PQdNxynJy5mche2kxMVc5shXWzK8Gstq3o', base58'3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3', base58'3P6Ksahs71SiKQgQ4qaZuFAVhqncdi2nvJQ']
751732 if ((indexOf(bu, am.caller.bytes) == unit))
752733 then throw("user not in a whitelist")
753734 else [BooleanEntry("setup_active", !(bt))]
754735 }
755736
756737
757738
758739 @Callable(am)
759740 func liquidate (bi,aj,an,bv,bw,bx) = if (if ((am.caller != Address(base58'3PCqdm1mAoQqR46oZotFanmqb5CLUvrKEo2')))
760741 then (am.caller != Address(base58'3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3'))
761742 else false)
762743 then throw("temporarily listed for whitelist only")
763744 else if (!(u("setup_active")))
764745 then throw("market is stopped")
765746 else {
766747 let by = ai(aj)
767748 if ((by == by))
768749 then {
769750 let bz = V(bv, "sRate")
770751 let ap = bz._1
771752 let bA = bz._2
772753 let bB = V(bw, "bRate")
773754 let aF = bB._1
774755 let bC = bB._2
775756 let bD = fraction(an, c, ap)
776757 let bE = q(((aj + "_supplied_") + bv))
777758 let bF = q(((aj + "_borrowed_") + bw))
778- let bG = if ((bF != 0))
759+ let bG = if ((bF > 0))
779760 then bF
780761 else throw("user has no borrow in this token")
781762 if ((by > 0))
782763 then throw("user can't be liquidated")
783764 else if ((bD > bE))
784765 then throw("position to liquidate is bigger than user's supply")
785766 else {
786767 let bH = Address(base58'3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU')
787768 let bI = B(bv)
788769 if ((bI == bI))
789770 then {
790771 let bJ = B(bw)
791772 if ((bJ == bJ))
792773 then {
793774 let bK = invoke(bH, "swap", [bx, 0], [AttachedPayment(z(bv), an)])
794775 if ((bK == bK))
795776 then {
796777 let bL = (bI - B(bv))
797778 if ((bL == bL))
798779 then {
799780 let bM = (B(bw) - bJ)
800781 if ((bM == bM))
801782 then {
802783 let bN = ac(bv)._1
803784 let bO = ag(bv)
804785 let bP = fraction(bL, bN, bO)
805786 let bQ = ac(bw)._2
806787 let bR = ag(bw)
807788 let bS = fraction(bM, bQ, bR)
808789 let bT = parseIntValue(split(v("setup_penalties"), ",")[value(indexOf(E(), bw))])
809790 let bU = (bS - fraction(bP, (a - bT), a))
810791 let bV = fraction(bL, c, ap)
811- let bW = fraction(bM, c, aF)
792+ let bW = fraction(fraction(bM, c, aF), (a - fraction(bU, a, bS)), a)
812793 if ((bL > an))
813794 then throw("more assets exchanged than expected")
814795 else if ((0 > bU))
815796 then throw("price impact is bigger than liquidation penalty")
816797 else [IntegerEntry(((aj + "_supplied_") + bv), (bE - bV)), IntegerEntry(((aj + "_borrowed_") + bw), (bG - bW)), IntegerEntry(("total_supplied_" + bv), (q(("total_supplied_" + bv)) - bV)), IntegerEntry(("total_borrowed_" + bw), (q(("total_borrowed_" + bw)) - bW))]
817798 }
818799 else throw("Strict value is not equal to itself.")
819800 }
820801 else throw("Strict value is not equal to itself.")
821802 }
822803 else throw("Strict value is not equal to itself.")
823804 }
824805 else throw("Strict value is not equal to itself.")
825806 }
826807 else throw("Strict value is not equal to itself.")
827808 }
828809 }
829810 else throw("Strict value is not equal to itself.")
830811 }
831812
832813
833814
834815 @Callable(am)
835816 func liquidateV2 (bi,aj,bv) = if (if (if ((am.caller != Address(base58'3PCqdm1mAoQqR46oZotFanmqb5CLUvrKEo2')))
836817 then (am.caller != Address(base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL'))
837818 else false)
838819 then (am.caller != Address(base58'3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3'))
839820 else false)
840821 then throw("temporarily available for whitelist only")
841822 else if (!(u("setup_active")))
842823 then throw("market is stopped")
843824 else {
844825 let bX = am.payments[0].assetId
845826 let bw = x(bX)
846827 let bY = am.payments[0].amount
847828 let by = ai(aj)
848829 if ((by == by))
849830 then if ((by > 0))
850831 then throw("user can't be liquidated")
851832 else {
852833 let bZ = E()
853834 let ca = value(indexOf(bZ, bw))
854835 let cb = value(indexOf(bZ, bv))
855836 let cc = V(bw, "bRate")
856837 let aF = cc._1
857838 let bA = cc._2
858839 let bQ = ac(bw)._2
859840 let bR = ag(bw)
860841 let cd = fraction(bY, bQ, bR)
861842 let bT = parseIntValue(value(split(v("setup_penalties"), ",")[ca]))
862843 let bN = ac(bv)._1
863844 let bO = ag(bv)
864845 let ce = fraction(cd, (a + bT), a)
865846 let bD = fraction(ce, bO, bN)
866847 let cf = fraction(bY, c, aF)
867848 let cg = fraction(bD, c, bA[((cb * 3) + 1)].value)
868849 let bE = q(((aj + "_supplied_") + bv))
869850 let bF = q(((aj + "_borrowed_") + bw))
870- let bG = if ((bF != 0))
851+ let bG = if ((bF > 0))
871852 then bF
872853 else throw("user has no borrow in this token")
873854 if ((cg > bE))
874855 then throw("position to liquidate is bigger than user's supply")
875856 else if (bi)
876857 then throw("liquidation will pass")
877858 else ([ScriptTransfer(am.caller, bD, z(bv)), IntegerEntry(((aj + "_supplied_") + bv), (bE - cg)), IntegerEntry(((aj + "_borrowed_") + bw), (bG - cf)), IntegerEntry(("total_supplied_" + bv), (q(("total_supplied_" + bv)) - cg)), IntegerEntry(("total_borrowed_" + bw), (q(("total_borrowed_" + bw)) - cf))] ++ bA)
878859 }
879860 else throw("Strict value is not equal to itself.")
880861 }
881862
882863
883864
884865 @Callable(am)
885866 func getUserCollateral (bi,aj,ch,ci) = {
886867 let bj = E()
887868 let be = split(v("setup_ltvs"), ",")
888869 let bf = split(v("setup_lts"), ",")
889870 let aa = V(bj[0], "sRate")._2
890871 let cj = split(ci, ",")
891872 func g (h,i) = if ((i >= size(bj)))
892873 then h
893874 else {
894875 let ck = q(((aj + "_supplied_") + bj[i]))
895876 let cl = q(((aj + "_borrowed_") + bj[i]))
896877 let cm = if ((ci == ""))
897878 then if (if ((cl != 0))
898879 then true
899880 else (ck != 0))
900881 then true
901882 else false
902883 else true
903884 if (cm)
904885 then {
905886 let av = ag(bj[i])
906887 let at = ac(bj[i])
907888 ((h + fraction(fraction(fraction((ck + (if (if (if ((ci != ""))
908889 then (cj[0] == bj[i])
909890 else false)
910891 then (cj[1] == "supplied")
911892 else false)
912893 then parseIntValue(cj[2])
913894 else 0)), aa[(i * 3)].value, c), parseIntValue(be[i]), a), at._1, av)) - (if (ch)
914895 then fraction(fraction(fraction((cl + (if (if (if ((ci != ""))
915896 then (cj[0] == bj[i])
916897 else false)
917898 then (cj[1] == "borrowed")
918899 else false)
919900 then parseIntValue(cj[2])
920901 else 0)), aa[((i * 3) + 1)].value, c), a, parseIntValue(bf[i])), at._2, av)
921902 else 0))
922903 }
923904 else h
924905 }
925906
926907 let cn = {
927908 let j = [0, 1, 2, 3, 4, 5]
928909 let k = size(j)
929910 let l = 0
930911 func m (n,o) = if ((o >= k))
931912 then n
932913 else g(n, j[o])
933914
934915 func p (n,o) = if ((o >= k))
935916 then n
936917 else throw("List size exceeds 6")
937918
938919 p(m(m(m(m(m(m(l, 0), 1), 2), 3), 4), 5), 6)
939920 }
940921 if (bi)
941922 then throw(toString(cn))
942923 else $Tuple2(aa, cn)
943924 }
944925
945926
946927
947928 @Callable(am)
948929 func getPrices (bi) = {
949930 let bj = E()
950931 func g (h,i) = if ((i >= size(bj)))
951932 then h
952933 else {
953934 let at = ac(bj[i])
954935 ((((h + toString(at._1)) + ",") + toString(at._2)) + "|")
955936 }
956937
957938 let cn = {
958939 let j = [0, 1, 2, 3, 4, 5]
959940 let k = size(j)
960941 let l = ""
961942 func m (n,o) = if ((o >= k))
962943 then n
963944 else g(n, j[o])
964945
965946 func p (n,o) = if ((o >= k))
966947 then n
967948 else throw("List size exceeds 6")
968949
969950 p(m(m(m(m(m(m(l, 0), 1), 2), 3), 4), 5), 6)
970951 }
971952 if (bi)
972953 then throw(cn)
973954 else $Tuple2(nil, cn)
974955 }
975956
976957
977958
978959 @Callable(am)
979960 func calculateUtilizationRatio (A,bi) = if (bi)
980961 then throw(toString(Z(A)))
981962 else $Tuple2(nil, Z(A))
982963
983964
984965
985966 @Callable(am)
986967 func calculateOutdatedUR (A,bi) = if (bi)
987968 then throw(toString(H(A)))
988969 else $Tuple2(nil, H(A))
989970
990971
991972
992973 @Callable(am)
993974 func calculateTokenRates (bi) = {
994975 func g (h,A) = {
995976 let aa = O(A)
996977 $Tuple2(((((h._1 + toString(aa[1].value)) + "|") + toString(aa[0].value)) + ","), (h._2 ++ aa))
997978 }
998979
999980 let bm = {
1000981 let j = E()
1001982 let k = size(j)
1002983 let l = $Tuple2("", nil)
1003984 func m (n,o) = if ((o >= k))
1004985 then n
1005986 else g(n, j[o])
1006987
1007988 func p (n,o) = if ((o >= k))
1008989 then n
1009990 else throw("List size exceeds 6")
1010991
1011992 p(m(m(m(m(m(m(l, 0), 1), 2), 3), 4), 5), 6)
1012993 }
1013994 if (bi)
1014995 then throw(bm._1)
1015996 else $Tuple2(bm._2, bm._1)
1016997 }
1017998
1018999
10191000
10201001 @Callable(am)
10211002 func calculateTokensInterest (bi) = {
10221003 func g (h,A) = {
10231004 let N = fraction(K(A), d, a)
10241005 ((h + toString(N)) + ",")
10251006 }
10261007
10271008 let bm = {
10281009 let j = E()
10291010 let k = size(j)
10301011 let l = ""
10311012 func m (n,o) = if ((o >= k))
10321013 then n
10331014 else g(n, j[o])
10341015
10351016 func p (n,o) = if ((o >= k))
10361017 then n
10371018 else throw("List size exceeds 6")
10381019
10391020 p(m(m(m(m(m(m(l, 0), 1), 2), 3), 4), 5), 6)
10401021 }
10411022 if (bi)
10421023 then throw(bm)
10431024 else $Tuple2(nil, bm)
10441025 }
10451026
10461027
10471028 @Verifier(co)
10481029 func cp () = sigVerify(co.bodyBytes, co.proofs[0], co.senderPublicKey)
10491030

github/deemru/w8io/3ef1775 
124.61 ms