tx · EDGgwmeiUTLyMeeEGdknoejyuRPnKv9GP3qQLfWp7Eak

3N3DnVffnUyZtz2MRbk5U7giN112WempMNd:  -0.04000000 Waves

2023.08.17 13:19 [2714469] smart account 3N3DnVffnUyZtz2MRbk5U7giN112WempMNd > SELF 0.00000000 Waves

{ "type": 13, "id": "EDGgwmeiUTLyMeeEGdknoejyuRPnKv9GP3qQLfWp7Eak", "fee": 4000000, "feeAssetId": null, "timestamp": 1692267545535, "version": 2, "chainId": 84, "sender": "3N3DnVffnUyZtz2MRbk5U7giN112WempMNd", "senderPublicKey": "3c1wAgvTRCNXCGMidVnB1j4gTYUqtwHR9tNNu2v4ZUNk", "proofs": [ "2DGGCX7MNGHi4Kbmgmxfo9vyRAgob9txZpFNGVhVkbf24BR2rqgjGiaDWbUqXsKZ7nKo9KmaZcgVARCwLNHA281J" ], "script": "base64:BgKhAQgCEgkKBwgICAEICAgSABIECgIIARIECgIIARIAEgMKAQgSAwoBCBIECgIIARIECgIIARIECgIIARIAEgYKBAgICAgSBgoECAgICBIECgIICBIECgIICBIDCgEEEgMKAQgSAwoBBBIICgYECAEICAgSBQoDBAgIEgYKBAQIBAgSBQoDBAgIEgMKAQQSBAoCCAQSBAoCCAQSAwoBBBIDCgEEJAAScmVzZXJ2ZUZ1bmRBZGRyZXNzCQEHQWRkcmVzcwEBGgFUeZG1LyVCo5RRTlF1JldW6VKUxeX5QOzZAAtyZXNlcnZlRnVuZAAUAAxmbGFzaExvYW5GZWUAwIQ9AAtheGx5QWRkcmVzcwkBB0FkZHJlc3MBARoBVEdh0UpNzn/72+6l9L3Wwi2aSOpC0rlhmwASYXhseUZhcm1pbmdBZGRyZXNzCQEHQWRkcmVzcwEBGgFUiFrCGKZVQmFa0TmuSd5FGDc6uNWQtIjpAAdheGx5TFBzCQDMCAICLDhEdE10cFZ3VnE2MnNkY1ZGVnpoNm51cHJnekc3TFNqcExkSG5RbnJBRmdZCQDMCAICLEZMZEMxNG5VVlJ5aVNZalZyTW8zWDRnOHJYUWpMYk5SYUdBeVFBbThWNjhWBQNuaWwAEWFnZ3JlZ2F0b3JBZGRyZXNzCQEHQWRkcmVzcwEBGgFUeZG1LyVCo5RRTlF1JldW6VKUxeX5QOzZAAlvcmFjbGVTdHICIzNONEtiTW5KSDhGYU05NGpxeE5GZTJveVo4R0I3Wjh5VkJQABFzaHV0ZG93bldoaXRlbGlzdAkAzAgCARoBVHmRtS8lQqOUUU5RdSZXVulSlMXl+UDs2QUDbmlsARZ2ZXJpZnlMaXF1aWRhdG9yUmlnaHRzAQdhZGRyZXNzCQEBIQEJAQIhPQIFB2FkZHJlc3MJAQdBZGRyZXNzAQEaAVR5kbUvJUKjlFFOUXUmV1bpUpTF5flA7NkBDGdldFJhdGVDdXJ2ZQEKYXNzZXRJZFN0cgQHJG1hdGNoMAUKYXNzZXRJZFN0cgMJAAACAiw4RHRNdHBWd1ZxNjJzZGNWRlZ6aDZudXByZ3pHN0xTanBMZEhuUW5yQUZnWQUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixGTGRDMTRuVVZSeWlTWWpWck1vM1g0ZzhyWFFqTGJOUmFHQXlRQW04VjY4VgUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiwyNUZFcUVqUmtxSzZ5Q2tpVDdMejZTQVl6N2dVRkN0eGZDQ2huclZGRDVBVAUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAgVXQVZFUwUHJG1hdGNoMAkAlgoEAICJegCAh6cOAIDokiYAgOHrFwkAlgoEAAAAgNrECQCA6JImAIDokiYABlNjYWxlOACAwtcvAAdTY2FsZTEwAIDIr6AlAAdTY2FsZTE2CQBoAgUGU2NhbGU4BQZTY2FsZTgACWRheUJsb2NrcwCgCwEKbGlJbnRUb1N0cgECbGkKAQFmAgVhY2N1bQRuZXh0CQCsAgIJAKwCAgUFYWNjdW0JAKQDAQUEbmV4dAIBLAoAAiRsBQJsaQoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgBDXRyeUdldEludGVnZXIBA2tleQQHJG1hdGNoMAkAmggCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDXRyeUdldEJvb2xlYW4BA2tleQQHJG1hdGNoMAkAmwgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcBDHRyeUdldFN0cmluZwEDa2V5BAckbWF0Y2gwCQCdCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWIFByRtYXRjaDAFAWICAAEMdHJ5R2V0QmluYXJ5AQNrZXkEByRtYXRjaDAJAJwIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAFAWIBAAEOZ2V0QXNzZXRTdHJpbmcBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiAgVXQVZFUwENZ2V0QXNzZXRCeXRlcwEKYXNzZXRJZFN0cgMJAAACBQphc3NldElkU3RyAgVXQVZFUwUEdW5pdAkA2QQBBQphc3NldElkU3RyAQpnZXRCYWxhbmNlAQphc3NldElkU3RyAwkAAAIFCmFzc2V0SWRTdHICBVdBVkVTCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkA8AcCBQR0aGlzCQDZBAEFCmFzc2V0SWRTdHIBD2dldE1hcmtldEFzc2V0cwAJALUJAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwIBLAESZ2V0QXNzZXRzTWF4U3VwcGx5AAQBcwkBDHRyeUdldFN0cmluZwECD3NldHVwX21heHN1cHBseQMJAAACBQFzAgAJAMwIAgD///////////8BCQDMCAIA////////////AQkAzAgCAP///////////wEJAMwIAgD///////////8BCQDMCAIA////////////AQkAzAgCAP///////////wEJAMwIAgD///////////8BBQNuaWwJALUJAgUBcwIBLAENZ2V0T3V0ZGF0ZWRVcgEKYXNzZXRJZFN0cgQEZG93bgkAawMJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfc1JhdGUFB1NjYWxlMTYDCQAAAgUEZG93bgAAAAAJAGsDBQZTY2FsZTgJAGsDCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYXNzZXRJZFN0cgIGX2JSYXRlBQdTY2FsZTE2BQRkb3duAQtnZXRJbnRlcmVzdAEKYXNzZXRJZFN0cgQCdXIJAQ1nZXRPdXRkYXRlZFVyAQUKYXNzZXRJZFN0cgQFY3VydmUJAQxnZXRSYXRlQ3VydmUBBQphc3NldElkU3RyBARyYXRlCQBkAggFBWN1cnZlAl8xAwkAZwIIBQVjdXJ2ZQJfMwUCdXIJAGsDBQJ1cggFBWN1cnZlAl8yCAUFY3VydmUCXzMJAGQCCAUFY3VydmUCXzIJAGsDCQBlAgUCdXIIBQVjdXJ2ZQJfMwgFBWN1cnZlAl80CQBlAgCAwtcvCAUFY3VydmUCXzMJAJYDAQkAzAgCCQBrAwUEcmF0ZQUGU2NhbGU4CQBoAgUJZGF5QmxvY2tzAO0CCQDMCAIAAQUDbmlsARB0b2tlblJhdGVzUmVjYWxjAQphc3NldElkU3RyBAhpbnRlcmVzdAkBC2dldEludGVyZXN0AQUKYXNzZXRJZFN0cgQCdXIJAQ1nZXRPdXRkYXRlZFVyAQUKYXNzZXRJZFN0cgQQbGFzdFJlY2FsY0hlaWdodAkBDXRyeUdldEludGVnZXIBAg5sYXN0UmF0ZUhlaWdodAQJbGFzdEJSYXRlCQCWAwEJAMwIAgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9iUmF0ZQkAzAgCBQdTY2FsZTE2BQNuaWwECG5ld0JSYXRlCQBkAgUJbGFzdEJSYXRlCQBoAgkAZQIFBmhlaWdodAUQbGFzdFJlY2FsY0hlaWdodAUIaW50ZXJlc3QECWxhc3RTUmF0ZQkAlgMBCQDMCAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfc1JhdGUJAMwIAgUHU2NhbGUxNgUDbmlsBAhuZXdTUmF0ZQkAZAIFCWxhc3RTUmF0ZQkAaQIJAGgCCQBoAgkAZQIFBmhlaWdodAUQbGFzdFJlY2FsY0hlaWdodAkAawMFCGludGVyZXN0BQJ1cgUGU2NhbGU4CQBlAgBkBQtyZXNlcnZlRnVuZABkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQUIbmV3U1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYXNzZXRJZFN0cgIGX2JSYXRlBQhuZXdCUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIObGFzdFJhdGVIZWlnaHQFBmhlaWdodAUDbmlsAQ1nZXRBY3R1YWxSYXRlAgphc3NldElkU3RyCHJhdGVUeXBlCgEBZgIFYWNjdW0FdG9rZW4EBnJlY2FsYwkBEHRva2VuUmF0ZXNSZWNhbGMBBQV0b2tlbgkAlAoCAwkBAiE9AgUFdG9rZW4FCmFzc2V0SWRTdHIIBQVhY2N1bQJfMQMJAAACBQhyYXRlVHlwZQIFc1JhdGUICQCRAwIFBnJlY2FsYwAABXZhbHVlCAkAkQMCBQZyZWNhbGMAAQV2YWx1ZQkAzggCCAUFYWNjdW0CXzIFBnJlY2FsYwoAAiRsCQEPZ2V0TWFya2V0QXNzZXRzAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAABQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDgJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAQVnZXRVcgEKYXNzZXRJZFN0cgQFcmF0ZXMJARB0b2tlblJhdGVzUmVjYWxjAQUKYXNzZXRJZFN0cgQEZG93bgkAawMJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIICQCRAwIFBXJhdGVzAAAFdmFsdWUFB1NjYWxlMTYJAGsDBQZTY2FsZTgJAGsDCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyCAkAkQMCBQVyYXRlcwABBXZhbHVlBQdTY2FsZTE2BQRkb3duAQtyYXRlc1JlY2FsYwAKAQFmAgVhY2N1bQV0b2tlbgkAzggCBQVhY2N1bQkBEHRva2VuUmF0ZXNSZWNhbGMBBQV0b2tlbgoAAiRsCQEPZ2V0TWFya2V0QXNzZXRzAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgBDWdldFRva2VuUHJpY2UBCmFzc2V0SWRTdHIEBGludjMJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUJb3JhY2xlU3RyAglnZXRUV0FQNjAJAMwIAgUKYXNzZXRJZFN0cgkAzAgCBwUDbmlsBQNuaWwDCQAAAgUEaW52MwUEaW52MwQFZGF0YTMEByRtYXRjaDAFBGludjMDCQABAgUHJG1hdGNoMAIKKEludCwgSW50KQQBeAUHJG1hdGNoMAUBeAkAAgECFWVycm9yIG9mIHByaWNlIG9yYWNsZQMJAAACBQVkYXRhMwUFZGF0YTMFBWRhdGEzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5jYWxjQXNzZXRTY2FsZQEKYXNzZXRJZFN0cgQIZGVjaW1hbHMDCQAAAgUKYXNzZXRJZFN0cgIFV0FWRVMACAgJAQV2YWx1ZQEJAOwHAQkA2QQBBQphc3NldElkU3RyCGRlY2ltYWxzCQBsBgAKAAAFCGRlY2ltYWxzAAAAAAUERE9XTgESY2FsY1VzZXJDb2xsYXRlcmFsAQdhZGRyZXNzBBR1c2VyQ29sbGF0ZXJhbEludm9rZQkA/AcEBQR0aGlzAhFnZXRVc2VyQ29sbGF0ZXJhbAkAzAgCBwkAzAgCBQdhZGRyZXNzCQDMCAIGCQDMCAICAAUDbmlsBQNuaWwDCQAAAgUUdXNlckNvbGxhdGVyYWxJbnZva2UFFHVzZXJDb2xsYXRlcmFsSW52b2tlBBN1c2VyQ29sbGF0ZXJhbFZhbHVlBAckbWF0Y2gwBRR1c2VyQ29sbGF0ZXJhbEludm9rZQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAiRpc3N1ZSB3aGlsZSBkb2luZyBpbi1kYXBwIGludm9jYXRpb24DCQAAAgUTdXNlckNvbGxhdGVyYWxWYWx1ZQUTdXNlckNvbGxhdGVyYWxWYWx1ZQUTdXNlckNvbGxhdGVyYWxWYWx1ZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEOc3VwcGx5SW50ZXJuYWwDCmFzc2V0SWRTdHILYXNzZXRBbW91bnQHYWRkcmVzcwMJAQEhAQkBDXRyeUdldEJvb2xlYW4BAgxzZXR1cF9hY3RpdmUJAAIBAhFtYXJrZXQgaXMgc3RvcHBlZAQLJHQwNjMxMzYzODAJAQ1nZXRBY3R1YWxSYXRlAgUKYXNzZXRJZFN0cgIFc1JhdGUEBXNSYXRlCAULJHQwNjMxMzYzODACXzEEEXJhdGVzUmVjYWxjUmVzdWx0CAULJHQwNjMxMzYzODACXzIEBmFtb3VudAkAbgQFC2Fzc2V0QW1vdW50BQdTY2FsZTE2BQVzUmF0ZQUERE9XTgQJbWF4U3VwcGx5BAckbWF0Y2gwCQCiCAEJAKwCAgIQc2V0dXBfbWF4U3VwcGx5XwUKYXNzZXRJZFN0cgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXgFByRtYXRjaDAJAQ1wYXJzZUludFZhbHVlAQUBeAAABAphc3NldFByaWNlCQENZ2V0VG9rZW5QcmljZQEFCmFzc2V0SWRTdHIEEG5ld1RvdGFsU3VwcGxpZWQJAGQCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyBQZhbW91bnQEBHJhdGUICQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBXNSYXRlAl8xBAphc3NldFNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBBQphc3NldElkU3RyBBNuZXdUb3RhbFN1cHBsaWVkVXNkCQBrAwkAawMFEG5ld1RvdGFsU3VwcGxpZWQFBHJhdGUFB1NjYWxlMTYIBQphc3NldFByaWNlAl8xBQphc3NldFNjYWxlAwkAAAIJALMJAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwUKYXNzZXRJZFN0cgUEdW5pdAkAAgECKXRoaXMgYXNzZXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbWFya2V0AwMJAQIhPQIFCW1heFN1cHBseQAACQBmAgUTbmV3VG90YWxTdXBwbGllZFVzZAUJbWF4U3VwcGx5BwkAAgECM21heCB0b3RhbCBzdXBwbHkgZm9yIHRoaXMgdG9rZW4gcmVhY2hlZCBpbiB0aGUgcG9vbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyBRBuZXdUb3RhbFN1cHBsaWVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIFBmFtb3VudAUDbmlsBRFyYXRlc1JlY2FsY1Jlc3VsdAULYXNzZXRBbW91bnQBDmJvcnJvd0ludGVybmFsAwphc3NldElkU3RyC2Fzc2V0QW1vdW50B2FkZHJlc3MECyR0MDc2NTk3NzI2CQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBWJSYXRlBAViUmF0ZQgFCyR0MDc2NTk3NzI2Al8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFCyR0MDc2NTk3NzI2Al8yBAZhbW91bnQJAG4EBQthc3NldEFtb3VudAUHU2NhbGUxNgUFYlJhdGUFB0NFSUxJTkcEEmNvbGxhdGVyYWxWYWx1ZUludgkA/AcEBQR0aGlzAhFnZXRVc2VyQ29sbGF0ZXJhbAkAzAgCBwkAzAgCBQdhZGRyZXNzCQDMCAIGCQDMCAIJAKwCAgkArAICBQphc3NldElkU3RyAgosYm9ycm93ZWQsCQCkAwEFBmFtb3VudAUDbmlsBQNuaWwDCQAAAgUSY29sbGF0ZXJhbFZhbHVlSW52BRJjb2xsYXRlcmFsVmFsdWVJbnYED2NvbGxhdGVyYWxWYWx1ZQQHJG1hdGNoMAUSY29sbGF0ZXJhbFZhbHVlSW52AwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECH2Nhbid0IGdldCB1c2VyIGNvbGxhdGVyYWwgdmFsdWUDCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQEDWFzc2V0U3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIEDWFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIEEXVzZXJBc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyAwkAZgIFBmFtb3VudAkAZQIFDWFzc2V0U3VwcGxpZWQFDWFzc2V0Qm9ycm93ZWQJAAIBAhx0aGlzIGFtb3VudCBpcyBub3QgYXZhaWxhYmxlCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIJAGQCBRF1c2VyQXNzZXRCb3Jyb3dlZAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgkAZAIFDWFzc2V0Qm9ycm93ZWQFBmFtb3VudAUDbmlsBRFyYXRlc1JlY2FsY1Jlc3VsdAULYXNzZXRBbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4bAWkBDWZsYXNoUG9zaXRpb24HBHVzZXILc0Fzc2V0SWRTdHILYkFzc2V0SWRTdHIHYkFtb3VudA9jYWxsYmFja0FkZHJlc3MQY2FsbGJhY2tGdW5jdGlvbgxjYWxsYmFja0FyZ3MECWJvcnJvd1JlcwkBDmJvcnJvd0ludGVybmFsAwULYkFzc2V0SWRTdHIFB2JBbW91bnQFBHVzZXIECGJBc3NldElkCQENZ2V0QXNzZXRCeXRlcwEFC2JBc3NldElkU3RyBAhjYWxsYmFjawkA/QcECQERQGV4dHJOYXRpdmUoMTA2MikBBQ9jYWxsYmFja0FkZHJlc3MFEGNhbGxiYWNrRnVuY3Rpb24JALUJAgUMY2FsbGJhY2tBcmdzAgEsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhiQXNzZXRJZAUHYkFtb3VudAUDbmlsAwkAAAIFCGNhbGxiYWNrBQhjYWxsYmFjawQHc0Ftb3VudAoAAUAFCGNhbGxiYWNrAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQdzQW1vdW50BQdzQW1vdW50BAlzdXBwbHlSZXMJAQ5zdXBwbHlJbnRlcm5hbAMFC3NBc3NldElkU3RyBQdzQW1vdW50BQR1c2VyBA9jb2xsYXRlcmFsVmFsdWUKAAFACQD8BwQFBHRoaXMCEWdldFVzZXJDb2xsYXRlcmFsCQDMCAIHCQDMCAIFBHVzZXIJAMwIAgYJAMwIAgkArAICCQCsAgIFC3NBc3NldElkU3RyAgosc3VwcGxpZWQsCQCkAwEFB3NBbW91bnQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQ9jb2xsYXRlcmFsVmFsdWUFD2NvbGxhdGVyYWxWYWx1ZQQLYm9ycm93VmFsdWUKAAFACQD8BwQFBHRoaXMCEWdldFVzZXJDb2xsYXRlcmFsCQDMCAIHCQDMCAIFBHVzZXIJAMwIAgYJAMwIAgkArAICCQCsAgIFC2JBc3NldElkU3RyAgosYm9ycm93ZWQsCQCkAwEFB2JBbW91bnQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQtib3Jyb3dWYWx1ZQULYm9ycm93VmFsdWUDCQBmAgULYm9ycm93VmFsdWUFD2NvbGxhdGVyYWxWYWx1ZQkAAgECHm5vdCBlbm91Z2ggY29sbGF0ZXJhbCBwcm92aWRlZAkAzggCCAUJYm9ycm93UmVzAl8xCAUJc3VwcGx5UmVzAl8xCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBnN1cHBseQADAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABBgkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AAAJAAIBAhwxIHBheW1lbnQgaGFzIHRvIGJlIGF0dGFjaGVkBAphc3NldElkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC2Fzc2V0QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQKYXhseU5vdGlmeQkA/AcEBRJheGx5RmFybWluZ0FkZHJlc3MCCmxlbmRBY3Rpb24JAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgUKYXNzZXRJZFN0cgUDbmlsBQNuaWwDCQAAAgUKYXhseU5vdGlmeQUKYXhseU5vdGlmeQkBDnN1cHBseUludGVybmFsAwUKYXNzZXRJZFN0cgULYXNzZXRBbW91bnQJAKUIAQgFAWkGY2FsbGVyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCHdpdGhkcmF3Agphc3NldElkU3RyC2Fzc2V0QW1vdW50BA0kdDAxMTM4NDExNDUxCQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBXNSYXRlBAVzUmF0ZQgFDSR0MDExMzg0MTE0NTECXzEEEXJhdGVzUmVjYWxjUmVzdWx0CAUNJHQwMTEzODQxMTQ1MQJfMgQGYW1vdW50CQBuBAULYXNzZXRBbW91bnQFB1NjYWxlMTYFBXNSYXRlBQdDRUlMSU5HBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQNYXNzZXRTdXBwbGllZAkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgQNYXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgQRdXNlckFzc2V0U3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIEEXVzZXJBc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyBApheGx5Tm90aWZ5CQD8BwQFEmF4bHlGYXJtaW5nQWRkcmVzcwIKbGVuZEFjdGlvbgkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCBQphc3NldElkU3RyBQNuaWwFA25pbAMJAAACBQpheGx5Tm90aWZ5BQpheGx5Tm90aWZ5BBJjb2xsYXRlcmFsVmFsdWVJbnYJAPwHBAUEdGhpcwIRZ2V0VXNlckNvbGxhdGVyYWwJAMwIAgcJAMwIAgUHYWRkcmVzcwkAzAgCBgkAzAgCCQCsAgIJAKwCAgUKYXNzZXRJZFN0cgIKLHN1cHBsaWVkLAkApAMBCQEBLQEFBmFtb3VudAUDbmlsBQNuaWwDCQAAAgUSY29sbGF0ZXJhbFZhbHVlSW52BRJjb2xsYXRlcmFsVmFsdWVJbnYED2NvbGxhdGVyYWxWYWx1ZQQHJG1hdGNoMAUSY29sbGF0ZXJhbFZhbHVlSW52AwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECH2Nhbid0IGdldCB1c2VyIGNvbGxhdGVyYWwgdmFsdWUDCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQDCQBmAgAABQ9jb2xsYXRlcmFsVmFsdWUJAAIBAjJ5b3UgZG9udCBoYXZlIGVub3VnaCBjb2xsYXRlcmFsIGZvciB0aGlzIG9wZXJhdGlvbgMJAGYCBQZhbW91bnQJAGUCBQ1hc3NldFN1cHBsaWVkBQ1hc3NldEJvcnJvd2VkCQACAQIqdGhpcyBhbW91bnQgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGUgbWFya2V0AwkAZgIFBmFtb3VudAkAZQIFEXVzZXJBc3NldFN1cHBsaWVkBRF1c2VyQXNzZXRCb3Jyb3dlZAkAAgECKnRoaXMgYW1vdW50IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlcgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBQZhbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQthc3NldEFtb3VudAkBDWdldEFzc2V0Qnl0ZXMBBQphc3NldElkU3RyBQNuaWwFEXJhdGVzUmVjYWxjUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBmJvcnJvdwIKYXNzZXRJZFN0cgthc3NldEFtb3VudAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEA3JlcwkBDmJvcnJvd0ludGVybmFsAwUKYXNzZXRJZFN0cgULYXNzZXRBbW91bnQFB2FkZHJlc3MEBmFtb3VudAgFA3JlcwJfMgkAzggCCAUDcmVzAl8xCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGYW1vdW50CQENZ2V0QXNzZXRCeXRlcwEFCmFzc2V0SWRTdHIFA25pbAFpAQVyZXBheQADCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQDAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABBgkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AAAJAAIBAhwxIHBheW1lbnQgaGFzIHRvIGJlIGF0dGFjaGVkBAphc3NldElkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC2Fzc2V0QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQNJHQwMTM2MjMxMzY5MAkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgViUmF0ZQQFYlJhdGUIBQ0kdDAxMzYyMzEzNjkwAl8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFDSR0MDEzNjIzMTM2OTACXzIEBmFtb3VudAkAbgQFC2Fzc2V0QW1vdW50BQdTY2FsZTE2BQViUmF0ZQUHQ0VJTElORwQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEDWFzc2V0U3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIEDWFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIEEXVzZXJBc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyBAphbW91bnRMZWZ0CQBlAgURdXNlckFzc2V0Qm9ycm93ZWQFBmFtb3VudAQLcmVwYXlBbW91bnQDCQBnAgUKYW1vdW50TGVmdAAABQZhbW91bnQFEXVzZXJBc3NldEJvcnJvd2VkAwkAAAIJALMJAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwUKYXNzZXRJZFN0cgUEdW5pdAkAAgECKXRoaXMgYXNzZXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbWFya2V0CQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIJAGUCBRF1c2VyQXNzZXRCb3Jyb3dlZAULcmVwYXlBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyCQBlAgUNYXNzZXRCb3Jyb3dlZAULcmVwYXlBbW91bnQFA25pbAURcmF0ZXNSZWNhbGNSZXN1bHQDCQBnAgUKYW1vdW50TGVmdAAABQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQEBLQEFCmFtb3VudExlZnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDbmlsAWkBCHJlcGF5Rm9yAQdhZGRyZXNzAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkAwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAAACQACAQIcMSBwYXltZW50IGhhcyB0byBiZSBhdHRhY2hlZAQKYXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAthc3NldEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEDSR0MDE1MTA4MTUxNzUJAQ1nZXRBY3R1YWxSYXRlAgUKYXNzZXRJZFN0cgIFYlJhdGUEBWJSYXRlCAUNJHQwMTUxMDgxNTE3NQJfMQQRcmF0ZXNSZWNhbGNSZXN1bHQIBQ0kdDAxNTEwODE1MTc1Al8yBAZhbW91bnQJAG4EBQthc3NldEFtb3VudAUHU2NhbGUxNgUFYlJhdGUFB0NFSUxJTkcEDWFzc2V0U3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIEDWFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIEEXVzZXJBc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyBAphbW91bnRMZWZ0CQBlAgURdXNlckFzc2V0Qm9ycm93ZWQFBmFtb3VudAQLcmVwYXlBbW91bnQDCQBnAgUKYW1vdW50TGVmdAAABQZhbW91bnQFEXVzZXJBc3NldEJvcnJvd2VkAwkAAAIJALMJAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwUKYXNzZXRJZFN0cgUEdW5pdAkAAgECKXRoaXMgYXNzZXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbWFya2V0CQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIJAGUCBRF1c2VyQXNzZXRCb3Jyb3dlZAULcmVwYXlBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyCQBlAgUNYXNzZXRCb3Jyb3dlZAULcmVwYXlBbW91bnQFA25pbAURcmF0ZXNSZWNhbGNSZXN1bHQDCQBnAgUKYW1vdW50TGVmdAAABQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQEBLQEFCmFtb3VudExlZnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDbmlsAWkBDXN0YWtlVG9rZW5BbGwBCmFzc2V0SWRTdHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAixvbmx5IGZvciBpbnRlcm5hbCBzbWFydCBjb250cmFjdCBpbnZvY2F0aW9ucwQGYW1vdW50CQEKZ2V0QmFsYW5jZQEFCmFzc2V0SWRTdHIEA2ludgkA/AcEBQR0aGlzAgpzdGFrZVRva2VuCQDMCAIFCmFzc2V0SWRTdHIJAMwIAgUGYW1vdW50BQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCnN0YWtlVG9rZW4CCmFzc2V0SWRTdHIGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIsb25seSBmb3IgaW50ZXJuYWwgc21hcnQgY29udHJhY3QgaW52b2NhdGlvbnMDCQAAAgUKYXNzZXRJZFN0cgIsREcyeEZrUGREd0tVb0JrekdBaFF0THBTR3pmWExpQ1lQRXplS0gyQWQyNHAEDGFtb3VudFN0YWtlZAkBDXRyeUdldEludGVnZXIBAj1hdXRvc3Rha2VfYW1vdW50X0RHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwBANpbnYJAPwHBAkBB0FkZHJlc3MBARoBV+QOpzZPkgvXl8+kHT81G89DauuqPPNxnQIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgEgtiYpwwT1zlORpA5LdSQvZIxRsfrfr1QpvUjSHSqyqtEFBmFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQDMCAIJAQxJbnRlZ2VyRW50cnkCAj1hdXRvc3Rha2VfYW1vdW50X0RHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwCQBkAgUMYW1vdW50U3Rha2VkBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQphc3NldElkU3RyAiw4dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQQMYW1vdW50U3Rha2VkCQENdHJ5R2V0SW50ZWdlcgECPWF1dG9zdGFrZV9hbW91bnRfOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEEA2ludgkA/AcECQEHQWRkcmVzcwEBGgFX9xU1EcXtcoVTVBDw3RtN4mo807RodylaAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCASB1FhA4gHYNVWV+SfOusdvmGZxqEGgfyVVh+kpGWncwHAUGYW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAMwIAgkBDEludGVnZXJFbnRyeQICPWF1dG9zdGFrZV9hbW91bnRfOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEJAGQCBQxhbW91bnRTdGFrZWQFBmFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFCmFzc2V0SWRTdHICLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBAxhbW91bnRTdGFrZWQJAQ10cnlHZXRJbnRlZ2VyAQI9YXV0b3N0YWtlX2Ftb3VudF9BdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAQDaW52CQD8BwQJAQdBZGRyZXNzAQEaAVdraDjhA9SajJ8SG8YsvCMHOQvN7RLXCl8CBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIBIJLR9EriEQEr9H7q3iGOPcX7yfJ9zoey7VIZ8DpOJFj1BQZhbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAzAgCCQEMSW50ZWdlckVudHJ5AgI9YXV0b3N0YWtlX2Ftb3VudF9BdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAkAZAIFDGFtb3VudFN0YWtlZAUGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAFpAQx1bnN0YWtlVG9rZW4CCmFzc2V0SWRTdHIGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIsb25seSBmb3IgaW50ZXJuYWwgc21hcnQgY29udHJhY3QgaW52b2NhdGlvbnMDCQAAAgUKYXNzZXRJZFN0cgIsOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEEDGFtb3VudFN0YWtlZAkBDXRyeUdldEludGVnZXIBAj1hdXRvc3Rha2VfYW1vdW50Xzh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxBANpbnYJAPwHBAkBB0FkZHJlc3MBARoBV/cVNRHF7XKFU1QQ8N0bTeJqPNO0aHcpWgIHdW5TdGFrZQkAzAgCBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52CQDMCAIJAQxJbnRlZ2VyRW50cnkCAj1hdXRvc3Rha2VfYW1vdW50Xzh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxCQBlAgUMYW1vdW50U3Rha2VkBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQphc3NldElkU3RyAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAQMYW1vdW50U3Rha2VkCQENdHJ5R2V0SW50ZWdlcgECPWF1dG9zdGFrZV9hbW91bnRfQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wEA2ludgkA/AcECQEHQWRkcmVzcwEBGgFXa2g44QPUmoyfEhvGLLwjBzkLze0S1wpfAgd1bnN0YWtlCQDMCAIFBmFtb3VudAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYEBGJhbDAJAQpnZXRCYWxhbmNlAQIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wDCQAAAgUEYmFsMAUEYmFsMAQEaW52MgkA/AcECQEHQWRkcmVzcwEBGgFX+3Xq6xP9GcDLCNyPYLN+A7oRjq2Pt9DrAhdnbnNidFJld2FyZHNTWVNSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAAIFBGludjIFBGludjIEDHRvcHVwUmV3YXJkcwQHJG1hdGNoMAUEaW52MgMJAAECBQckbWF0Y2gwAglMaXN0W0FueV0EAXgFByRtYXRjaDAECHNlY29uZEVsCQCRAwIFAXgAAQQHJG1hdGNoMQUIc2Vjb25kRWwDCQABAgUHJG1hdGNoMQIGU3RyaW5nBAhzZWNvbmRFbAUHJG1hdGNoMQQJdXNkblZhbHVlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIJALUJAgUIc2Vjb25kRWwCAV8AAQIBOgABBAp3YXZlc1ZhbHVlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIJALUJAgUIc2Vjb25kRWwCAV8AAAIBOgABAwMJAQIhPQIFCXVzZG5WYWx1ZQAABgkBAiE9AgUKd2F2ZXNWYWx1ZQAABAh1c2RuQmFsMAkBCmdldEJhbGFuY2UBAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAMJAAACBQh1c2RuQmFsMAUIdXNkbkJhbDAECXdhdmVzQmFsMAkBCmdldEJhbGFuY2UBAgVXQVZFUwMJAAACBQl3YXZlc0JhbDAFCXdhdmVzQmFsMAQEaW52MwkA/AcECQEHQWRkcmVzcwEBGgFXa2g44QPUmoyfEhvGLLwjBzkLze0S1wpfAgxjbGFpbVJld2FyZHMFA25pbAUDbmlsAwkAAAIFBGludjMFBGludjMECXdhdmVzQmFsMQkBCmdldEJhbGFuY2UBAgVXQVZFUwMJAAACBQl3YXZlc0JhbDEFCXdhdmVzQmFsMQQEaW52NAkA/AcECQEHQWRkcmVzcwEBGgFXzhQUnRZYA+RDTHr1peyyn62/zbOD+SmiAgRzd2FwCQDMCAICLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQR1bml0CQBlAgUJd2F2ZXNCYWwxBQl3YXZlc0JhbDAFA25pbAMJAAACBQRpbnY0BQRpbnY0BAh1c2RuQmFsMQkBCmdldEJhbGFuY2UBAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAMJAAACBQh1c2RuQmFsMQUIdXNkbkJhbDEEBGludjUJAPwHBAkBB0FkZHJlc3MBARoBV0DqoVxlgSg9dIRbV2Ce++N5K7fcirSQdwIEc3dhcAkAzAgCAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgEgtiYpwwT1zlORpA5LdSQvZIxRsfrfr1QpvUjSHSqyqtEJAGUCBQh1c2RuQmFsMQUIdXNkbkJhbDAFA25pbAMJAAACBQRpbnY1BQRpbnY1BARpbnY2CQD8BwQFBHRoaXMCC2FkZEludGVyZXN0CQDMCAICLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMCQDMCAIJAGUCCQEKZ2V0QmFsYW5jZQECLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBQRiYWwwBQNuaWwFA25pbAMJAAACBQRpbnY2BQRpbnY2AAIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAQABAAADCQAAAgUMdG9wdXBSZXdhcmRzBQx0b3B1cFJld2FyZHMJAMwIAgkBDEludGVnZXJFbnRyeQICPWF1dG9zdGFrZV9hbW91bnRfQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wJAGUCBQxhbW91bnRTdGFrZWQFBmFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwBaQELYWRkSW50ZXJlc3QCCmFzc2V0SWRTdHIGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIYb25seSBmb3Igc2VsZiBpbnZvY2F0aW9uBAZlYXJuZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhVhdXRvc3Rha2VfbGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIECmxhc3RIZWlnaHQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhRhdXRvc3Rha2VfbGFzdEJsb2NrXwUKYXNzZXRJZFN0cgQLY2xlYW5BbW91bnQJAGsDBQZhbW91bnQAUABkBAxzdGF0ZUNoYW5nZXMDAwkAAAIFCmxhc3RIZWlnaHQFBmhlaWdodAYJAAACBQZhbW91bnQAAAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICGGF1dG9zdGFrZV9wcmVMYXN0RWFybmVkXwUKYXNzZXRJZFN0cgUGZWFybmVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICF2F1dG9zdGFrZV9wcmVMYXN0QmxvY2tfBQphc3NldElkU3RyBQpsYXN0SGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICFWF1dG9zdGFrZV9sYXN0RWFybmVkXwUKYXNzZXRJZFN0cgkAZAIFBmVhcm5lZAULY2xlYW5BbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIUYXV0b3N0YWtlX2xhc3RCbG9ja18FCmFzc2V0SWRTdHIFBmhlaWdodAUDbmlsCQDOCAIFDHN0YXRlQ2hhbmdlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQphc3NldElkU3RyAgZfc1JhdGUJAGQCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlCQBrAwUHU2NhbGUxNgULY2xlYW5BbW91bnQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIFA25pbAFpARNhZGRJbnRlcmVzdEVYVEVSTkFMAAQGYW1vdW50CQBrAwgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAUABkBAdhc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQECmFzc2V0SWRTdHIJAQ5nZXRBc3NldFN0cmluZwEFB2Fzc2V0SWQEBmVhcm5lZAkBDXRyeUdldEludGVnZXIBCQCsAgICFWF1dG9zdGFrZV9sYXN0RWFybmVkXwUKYXNzZXRJZFN0cgQKbGFzdEhlaWdodAkBDXRyeUdldEludGVnZXIBCQCsAgICFGF1dG9zdGFrZV9sYXN0QmxvY2tfBQphc3NldElkU3RyBAxzdGF0ZUNoYW5nZXMDAwkAAAIFCmxhc3RIZWlnaHQFBmhlaWdodAYJAAACBQZhbW91bnQAAAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICGGF1dG9zdGFrZV9wcmVMYXN0RWFybmVkXwUKYXNzZXRJZFN0cgUGZWFybmVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICF2F1dG9zdGFrZV9wcmVMYXN0QmxvY2tfBQphc3NldElkU3RyBQpsYXN0SGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICFWF1dG9zdGFrZV9sYXN0RWFybmVkXwUKYXNzZXRJZFN0cgkAZAIFBmVhcm5lZAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICFGF1dG9zdGFrZV9sYXN0QmxvY2tfBQphc3NldElkU3RyBQZoZWlnaHQFA25pbAkAzggCBQxzdGF0ZUNoYW5nZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlCQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQkAawMFB1NjYWxlMTYFBmFtb3VudAkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUDbmlsAWkBB3ByZUluaXQEBnRva2VucwRsdHZzA2x0cwlwZW5hbHRpZXMKAQFmAgVhY2N1bQV0b2tlbgkAzggCBQVhY2N1bQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQV0b2tlbgIGX2JSYXRlBQdTY2FsZTE2CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBXRva2VuAgZfc1JhdGUFB1NjYWxlMTYFA25pbAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCmFkbWluIG9ubHkEBXJhdGVzCgACJGwJALUJAgUGdG9rZW5zAgEsCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA4CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQICDHNldHVwX3Rva2VucwUGdG9rZW5zCQDMCAIJAQtTdHJpbmdFbnRyeQICCnNldHVwX2x0dnMFBGx0dnMJAMwIAgkBC1N0cmluZ0VudHJ5AgIJc2V0dXBfbHRzBQNsdHMJAMwIAgkBC1N0cmluZ0VudHJ5AgIPc2V0dXBfcGVuYWx0aWVzBQlwZW5hbHRpZXMJAMwIAgkBDEJvb2xlYW5FbnRyeQICDHNldHVwX2FjdGl2ZQYFA25pbAUFcmF0ZXMBaQEMaW5pdE5ld1Rva2VuBAV0b2tlbgNsdHYCbHQHcGVuYWx0eQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCmFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgIMc2V0dXBfdG9rZW5zCQCsAgIJAKwCAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwIBLAUFdG9rZW4JAMwIAgkBC1N0cmluZ0VudHJ5AgIKc2V0dXBfbHR2cwkArAICCQCsAgIJAQx0cnlHZXRTdHJpbmcBAgpzZXR1cF9sdHZzAgEsBQNsdHYJAMwIAgkBC1N0cmluZ0VudHJ5AgIJc2V0dXBfbHRzCQCsAgIJAKwCAgkBDHRyeUdldFN0cmluZwECCXNldHVwX2x0cwIBLAUCbHQJAMwIAgkBC1N0cmluZ0VudHJ5AgIPc2V0dXBfcGVuYWx0aWVzCQCsAgIJAKwCAgkBDHRyeUdldFN0cmluZwECD3NldHVwX3BlbmFsdGllcwIBLAUHcGVuYWx0eQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQV0b2tlbgIGX2JSYXRlBQdTY2FsZTE2CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBXRva2VuAgZfc1JhdGUFB1NjYWxlMTYFA25pbAFpAQ91cGRhdGVQYXJhbWV0ZXICA2tleQN2YWwDAwMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFXFHlYhcD6GmfnFDSNDPfE8G1F7fYc+T1BBwkBAiE9AggFAWkGY2FsbGVy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CQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOAkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgFCXBhcmFtZXRlcgFpAQdyZVNldHVwAQphc3NldElkU3RyBAtsYXN0UmVzZXR1cAkBDXRyeUdldEludGVnZXIBAhJyZXNldHVwX2xhc3RVcGRhdGUDCQBmAgUJZGF5QmxvY2tzCQBlAgUGaGVpZ2h0BQtsYXN0UmVzZXR1cAkAAgECIGNhbiBiZSB1cGRhdGVkIG9ubHkgb25jZSBwZXIgZGF5BANsdHMJALUJAgkBDHRyeUdldFN0cmluZwECCXNldHVwX2x0cwIBLAQGYXNzZXRzCQEPZ2V0TWFya2V0QXNzZXRzAAQCdXIJAQVnZXRVcgEFCmFzc2V0SWRTdHIEBnRlbXBMVAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIGc2V0dXBfBQphc3NldElkU3RyAgdfdGVtcExUBAJsdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBmFzc2V0cwkBBXZhbHVlAQkAzwgCBQZhc3NldHMFCmFzc2V0SWRTdHIDCQBmAgUCdXIAgJX1KgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICBnNldHVwXwUKYXNzZXRJZFN0cgIHX3RlbXBMVAkAawMFBnRlbXBMVAD3TQCQTgUDbmlsAwMJAGYCBQJsdAUGdGVtcExUCQBmAgCAlfUqBQJ1cgcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAgZzZXR1cF8FCmFzc2V0SWRTdHICB190ZW1wTFQJAGsDBQZ0ZW1wTFQAqU4AkE4FA25pbAUDbmlsAWkBCHNodXRkb3duAQhzaHV0ZG93bgMJAAACCQDPCAIFEXNodXRkb3duV2hpdGVsaXN0CAgFAWkGY2FsbGVyBWJ5dGVzBQR1bml0CQACAQIXdXNlciBub3QgaW4gYSB3aGl0ZWxpc3QJAMwIAgkBDEJvb2xlYW5FbnRyeQICDHNldHVwX2FjdGl2ZQkBASEBBQhzaHV0ZG93bgUDbmlsAWkBCWxpcXVpZGF0ZQYFZGVidWcHYWRkcmVzcwthc3NldEFtb3VudAtzQXNzZXRJZFN0cgtiQXNzZXRJZFN0cghyb3V0ZVN0cgMJAQEhAQkBFnZlcmlmeUxpcXVpZGF0b3JSaWdodHMBCAUBaQZjYWxsZXIJAAIBAih0ZW1wb3JhcmlseSBhdmFpbGFibGUgZm9yIHdoaXRlbGlzdCBvbmx5AwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkBA51c2VyQ29sbGF0ZXJhbAkBEmNhbGNVc2VyQ29sbGF0ZXJhbAEFB2FkZHJlc3MDCQAAAgUOdXNlckNvbGxhdGVyYWwFDnVzZXJDb2xsYXRlcmFsBA0kdDAyODc0NzI4ODA5CQENZ2V0QWN0dWFsUmF0ZQIFC3NBc3NldElkU3RyAgVzUmF0ZQQFc1JhdGUIBQ0kdDAyODc0NzI4ODA5Al8xBAtyYXRlc1Jlc3VsdAgFDSR0MDI4NzQ3Mjg4MDkCXzIEDSR0MDI4ODE0Mjg4ODMJAQ1nZXRBY3R1YWxSYXRlAgULYkFzc2V0SWRTdHICBWJSYXRlBAViUmF0ZQgFDSR0MDI4ODE0Mjg4ODMCXzEEEnJhdGVzUmVjYWxjUmVzdWx0MggFDSR0MDI4ODE0Mjg4ODMCXzIEDHNBc3NldEFtb3VudAkAawMFC2Fzc2V0QW1vdW50BQdTY2FsZTE2BQVzUmF0ZQQQY3VycmVudFNQb3NpdGlvbgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIEE2N1cnJlbnRCUG9zaXRpb25WYWwJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FC2JBc3NldElkU3RyBBBjdXJyZW50QlBvc2l0aW9uAwkAZgIFE2N1cnJlbnRCUG9zaXRpb25WYWwAAAUTY3VycmVudEJQb3NpdGlvblZhbAkAAgECIHVzZXIgaGFzIG5vIGJvcnJvdyBpbiB0aGlzIHRva2VuAwkAZgIFDnVzZXJDb2xsYXRlcmFsAAAJAAIBAhh1c2VyIGNhbid0IGJlIGxpcXVpZGF0ZWQDCQBmAgUMc0Fzc2V0QW1vdW50BRBjdXJyZW50U1Bvc2l0aW9uCQACAQIycG9zaXRpb24gdG8gbGlxdWlkYXRlIGlzIGJpZ2dlciB0aGFuIHVzZXIncyBzdXBwbHkEDmJhbGFuY2UwQmVmb3JlCQEKZ2V0QmFsYW5jZQEFC3NBc3NldElkU3RyAwkAAAIFDmJhbGFuY2UwQmVmb3JlBQ5iYWxhbmNlMEJlZm9yZQQOYmFsYW5jZTFCZWZvcmUJAQpnZXRCYWxhbmNlAQULYkFzc2V0SWRTdHIDCQAAAgUOYmFsYW5jZTFCZWZvcmUFDmJhbGFuY2UxQmVmb3JlBA5leGNoYW5nZUludm9rZQkA/AcEBRFhZ2dyZWdhdG9yQWRkcmVzcwIEc3dhcAkAzAgCBQhyb3V0ZVN0cgkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEFzc2V0Qnl0ZXMBBQtzQXNzZXRJZFN0cgULYXNzZXRBbW91bnQFA25pbAMJAAACBQ5leGNoYW5nZUludm9rZQUOZXhjaGFuZ2VJbnZva2UECmFzc2V0MFNvbGQJAGUCBQ5iYWxhbmNlMEJlZm9yZQkBCmdldEJhbGFuY2UBBQtzQXNzZXRJZFN0cgMJAAACBQphc3NldDBTb2xkBQphc3NldDBTb2xkBAxhc3NldDFCb3VnaHQJAGUCCQEKZ2V0QmFsYW5jZQEFC2JBc3NldElkU3RyBQ5iYWxhbmNlMUJlZm9yZQMJAAACBQxhc3NldDFCb3VnaHQFDGFzc2V0MUJvdWdodAQLYXNzZXQwUHJpY2UICQENZ2V0VG9rZW5QcmljZQEFC3NBc3NldElkU3RyAl8xBAthc3NldDBTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQULc0Fzc2V0SWRTdHIECWFzc2V0MFVzZAkAawMFCmFzc2V0MFNvbGQFC2Fzc2V0MFByaWNlBQthc3NldDBTY2FsZQQLYXNzZXQxUHJpY2UICQENZ2V0VG9rZW5QcmljZQEFC2JBc3NldElkU3RyAl8yBAthc3NldDFTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQULYkFzc2V0SWRTdHIECWFzc2V0MVVzZAkAawMFDGFzc2V0MUJvdWdodAULYXNzZXQxUHJpY2UFC2Fzc2V0MVNjYWxlBAdwZW5hbHR5CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQEMdHJ5R2V0U3RyaW5nAQIPc2V0dXBfcGVuYWx0aWVzAgEsCQEFdmFsdWUBCQDPCAIJAQ9nZXRNYXJrZXRBc3NldHMABQtiQXNzZXRJZFN0cgQRbGlxdWlkYXRpb25Qcm9maXQJAGUCBQlhc3NldDFVc2QJAGsDBQlhc3NldDBVc2QJAGUCBQZTY2FsZTgFB3BlbmFsdHkFBlNjYWxlOAQMc0Fzc2V0Q2hhbmdlCQBrAwUKYXNzZXQwU29sZAUHU2NhbGUxNgUFc1JhdGUEDGJBc3NldENoYW5nZQkAawMJAGsDBQxhc3NldDFCb3VnaHQFB1NjYWxlMTYFBWJSYXRlCQBlAgUGU2NhbGU4CQBrAwURbGlxdWlkYXRpb25Qcm9maXQFBlNjYWxlOAUJYXNzZXQxVXNkBQZTY2FsZTgDCQBmAgUKYXNzZXQwU29sZAULYXNzZXRBbW91bnQJAAIBAiNtb3JlIGFzc2V0cyBleGNoYW5nZWQgdGhhbiBleHBlY3RlZAMJAGYCAAAFEWxpcXVpZGF0aW9uUHJvZml0CQACAQIvcHJpY2UgaW1wYWN0IGlzIGJpZ2dlciB0aGFuIGxpcXVpZGF0aW9uIHBlbmFsdHkJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgkAZQIFEGN1cnJlbnRTUG9zaXRpb24FDHNBc3NldENoYW5nZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FC2JBc3NldElkU3RyCQBlAgUQY3VycmVudEJQb3NpdGlvbgUMYkFzc2V0Q2hhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgUMc0Fzc2V0Q2hhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgUMYkFzc2V0Q2hhbmdlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELbGlxdWlkYXRlVjIDBWRlYnVnB2FkZHJlc3MLc0Fzc2V0SWRTdHIDCQEBIQEJARZ2ZXJpZnlMaXF1aWRhdG9yUmlnaHRzAQgFAWkGY2FsbGVyCQACAQIodGVtcG9yYXJpbHkgYXZhaWxhYmxlIGZvciB3aGl0ZWxpc3Qgb25seQMJAQEhAQkBDXRyeUdldEJvb2xlYW4BAgxzZXR1cF9hY3RpdmUJAAIBAhFtYXJrZXQgaXMgc3RvcHBlZAQIYkFzc2V0SWQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLYkFzc2V0SWRTdHIJAQ5nZXRBc3NldFN0cmluZwEFCGJBc3NldElkBAxiQXNzZXRBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BA51c2VyQ29sbGF0ZXJhbAkBEmNhbGNVc2VyQ29sbGF0ZXJhbAEFB2FkZHJlc3MDCQAAAgUOdXNlckNvbGxhdGVyYWwFDnVzZXJDb2xsYXRlcmFsAwkAZgIFDnVzZXJDb2xsYXRlcmFsAAAJAAIBAhh1c2VyIGNhbid0IGJlIGxpcXVpZGF0ZWQEDG1hcmtldEFzc2V0cwkBD2dldE1hcmtldEFzc2V0cwAECWFzc2V0MU51bQkBBXZhbHVlAQkAzwgCBQxtYXJrZXRBc3NldHMFC2JBc3NldElkU3RyBAlhc3NldDBOdW0JAQV2YWx1ZQEJAM8IAgUMbWFya2V0QXNzZXRzBQtzQXNzZXRJZFN0cgQNJHQwMzIwMzgzMjEwMAkBDWdldEFjdHVhbFJhdGUCBQtiQXNzZXRJZFN0cgIFYlJhdGUEBWJSYXRlCAUNJHQwMzIwMzgzMjEwMAJfMQQLcmF0ZXNSZXN1bHQIBQ0kdDAzMjAzODMyMTAwAl8yBAthc3NldDFQcmljZQgJAQ1nZXRUb2tlblByaWNlAQULYkFzc2V0SWRTdHICXzIEC2Fzc2V0MVNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBBQtiQXNzZXRJZFN0cgQKYkFtb3VudFVzZAkAawMFDGJBc3NldEFtb3VudAULYXNzZXQxUHJpY2UFC2Fzc2V0MVNjYWxlBAdwZW5hbHR5CQENcGFyc2VJbnRWYWx1ZQEJAQV2YWx1ZQEJAJEDAgkAtQkCCQEMdHJ5R2V0U3RyaW5nAQIPc2V0dXBfcGVuYWx0aWVzAgEsBQlhc3NldDFOdW0EC2Fzc2V0MFByaWNlCAkBDWdldFRva2VuUHJpY2UBBQtzQXNzZXRJZFN0cgJfMQQLYXNzZXQwU2NhbGUJAQ5jYWxjQXNzZXRTY2FsZQEFC3NBc3NldElkU3RyBApzQW1vdW50VXNkCQBrAwUKYkFtb3VudFVzZAkAZAIFBlNjYWxlOAUHcGVuYWx0eQUGU2NhbGU4BAxzQXNzZXRBbW91bnQJAGsDBQpzQW1vdW50VXNkBQthc3NldDBTY2FsZQULYXNzZXQwUHJpY2UEB2JBbW91bnQJAGsDBQxiQXNzZXRBbW91bnQFB1NjYWxlMTYFBWJSYXRlBAdzQW1vdW50CQBrAwUMc0Fzc2V0QW1vdW50BQdTY2FsZTE2CAkAkQMCBQtyYXRlc1Jlc3VsdAkAZAIJAGgCBQlhc3NldDBOdW0AAwABBXZhbHVlBANpbnYDCQECIT0CCQDPCAIFB2F4bHlMUHMFC3NBc3NldElkU3RyBQR1bml0BAVwb3NJZAkAkQMCCQC1CQIFB2FkZHJlc3MCAV8AAQQJYWRkcmVzc0lkCQCRAwIJALUJAgUHYWRkcmVzcwIBXwAACQD9BwQFC2F4bHlBZGRyZXNzAglsaXF1aWRhdGUJAMwIAgUJYWRkcmVzc0lkCQDMCAIFBXBvc0lkCQDMCAIFB3NBbW91bnQFA25pbAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYEEGN1cnJlbnRTUG9zaXRpb24JAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FC3NBc3NldElkU3RyBBNjdXJyZW50QlBvc2l0aW9uVmFsCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgQQY3VycmVudEJQb3NpdGlvbgMJAGYCBRNjdXJyZW50QlBvc2l0aW9uVmFsAAAFE2N1cnJlbnRCUG9zaXRpb25WYWwJAAIBAiB1c2VyIGhhcyBubyBib3Jyb3cgaW4gdGhpcyB0b2tlbgMJAGYCBQdzQW1vdW50BRBjdXJyZW50U1Bvc2l0aW9uCQACAQIycG9zaXRpb24gdG8gbGlxdWlkYXRlIGlzIGJpZ2dlciB0aGFuIHVzZXIncyBzdXBwbHkDBQVkZWJ1ZwkAAgECFWxpcXVpZGF0aW9uIHdpbGwgcGFzcwkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUMc0Fzc2V0QW1vdW50CQENZ2V0QXNzZXRCeXRlcwEFC3NBc3NldElkU3RyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIJAGUCBRBjdXJyZW50U1Bvc2l0aW9uBQdzQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIJAGUCBRBjdXJyZW50QlBvc2l0aW9uBQdiQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgUHc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg90b3RhbF9ib3Jyb3dlZF8FC2JBc3NldElkU3RyCQBlAgkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIFB2JBbW91bnQFA25pbAULcmF0ZXNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERZ2V0VXNlckNvbGxhdGVyYWwEBWRlYnVnB2FkZHJlc3MNbWludXNCb3Jyb3dlZAthZnRlckNoYW5nZQQGYXNzZXRzCQEPZ2V0TWFya2V0QXNzZXRzAAQEbHR2cwkAtQkCCQEMdHJ5R2V0U3RyaW5nAQIKc2V0dXBfbHR2cwIBLAQDbHRzCQC1CQIJAQx0cnlHZXRTdHJpbmcBAglzZXR1cF9sdHMCASwEBXJhdGVzCAkBDWdldEFjdHVhbFJhdGUCCQCRAwIFBmFzc2V0cwAAAgVzUmF0ZQJfMgQNY2hhbmdlSGFuZGxlcgkAtQkCBQthZnRlckNoYW5nZQIBLAoBAWYCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAkAkAMBBQZhc3NldHMFBWFjY3VtBAx1c2VyU3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8JAJEDAgUGYXNzZXRzBQRuZXh0BAx1c2VyQm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8JAJEDAgUGYXNzZXRzBQRuZXh0BBNuZWVkVG9rZW5BY2NvdW50aW5nAwkAAAIFC2FmdGVyQ2hhbmdlAgADAwkBAiE9AgUMdXNlckJvcnJvd2VkAAAGCQECIT0CBQx1c2VyU3VwcGxpZWQAAAYHBgMFE25lZWRUb2tlbkFjY291bnRpbmcECmFzc2V0U2NhbGUJAQ5jYWxjQXNzZXRTY2FsZQEJAJEDAgUGYXNzZXRzBQRuZXh0BAphc3NldFByaWNlCQENZ2V0VG9rZW5QcmljZQEJAJEDAgUGYXNzZXRzBQRuZXh0CQBlAgkAZAIFBWFjY3VtCQBrAwkAawMJAGsDCQBkAgUMdXNlclN1cHBsaWVkAwMDCQECIT0CBQthZnRlckNoYW5nZQIACQAAAgkA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BWdldFVyAQUKYXNzZXRJZFN0cgkAlAoCBQNuaWwJAQVnZXRVcgEFCmFzc2V0SWRTdHIBaQETY2FsY3VsYXRlT3V0ZGF0ZWRVUgIKYXNzZXRJZFN0cgVkZWJ1ZwMFBWRlYnVnCQACAQkApAMBCQENZ2V0T3V0ZGF0ZWRVcgEFCmFzc2V0SWRTdHIJAJQKAgUDbmlsCQENZ2V0T3V0ZGF0ZWRVcgEFCmFzc2V0SWRTdHIBaQETY2FsY3VsYXRlVG9rZW5SYXRlcwEFZGVidWcKAQFmAgVhY2N1bQphc3NldElkU3RyBAVyYXRlcwkBEHRva2VuUmF0ZXNSZWNhbGMBBQphc3NldElkU3RyCQCUCgIJAKwCAgkArAICCQCsAgIJAKwCAggFBWFjY3VtAl8xCQCkAwEICQCRAwIFBXJhdGVzAAEFdmFsdWUCAXwJAKQDAQgJAJEDAgUFcmF0ZXMAAAV2YWx1ZQIBLAkAzggCCAUFYWNjdW0CXzIFBXJhdGVzBAlwYXJhbWV0ZXIKAAIkbAkBD2dldE1hcmtldEFzc2V0cwAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgICAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA4CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAMFBWRlYnVnCQACAQgFCXBhcmFtZXRlcgJfMQkAlAoCCAUJcGFyYW1ldGVyAl8yCAUJcGFyYW1ldGVyAl8xAWkBF2NhbGN1bGF0ZVRva2Vuc0ludGVyZXN0AQVkZWJ1ZwoBAWYCBWFjY3VtCmFzc2V0SWRTdHIEBHJhdGUJAGsDCQELZ2V0SW50ZXJlc3QBBQphc3NldElkU3RyBQlkYXlCbG9ja3MFBlNjYWxlOAkArAICCQCsAgIFBWFjY3VtCQCkAwEFBHJhdGUCASwECXBhcmFtZXRlcgoAAiRsCQEPZ2V0TWFya2V0QXNzZXRzAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgDBQVkZWJ1ZwkAAgEFCXBhcmFtZXRlcgkAlAoCBQNuaWwFCXBhcmFtZXRlcgECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXnYhi1x", "height": 2714469, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EE9b1Xk5Ur9XqkbzszGLoiak6ySJy9KFEy6pkgEo5Dd8 Next: none Diff:
OldNewDifferences
99
1010 let d = Address(base58'3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS')
1111
12-let e = ["8DtMtpVwVq62sdcVFVzh6nuprgzG7LSjpLdHnQnrAFgY", "FLdC14nUVRyiSYjVrMo3X4g8rXQjLbNRaGAyQAm8V68V"]
12+let e = Address(base58'3N2M4PztorHwrfENp7D6LhYGgGodjiD1fjn')
1313
14-let f = Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')
14+let f = ["8DtMtpVwVq62sdcVFVzh6nuprgzG7LSjpLdHnQnrAFgY", "FLdC14nUVRyiSYjVrMo3X4g8rXQjLbNRaGAyQAm8V68V"]
1515
16-let g = "3N4KbMnJH8FaM94jqxNFe2oyZ8GB7Z8yVBP"
16+let g = Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')
1717
18-let h = [base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ']
18+let h = "3N4KbMnJH8FaM94jqxNFe2oyZ8GB7Z8yVBP"
1919
20-func i (j) = !((j != Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')))
20+let i = [base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ']
21+
22+func j (k) = !((k != Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')))
2123
2224
23-func k (l) = {
24- let m = l
25- if (("8DtMtpVwVq62sdcVFVzh6nuprgzG7LSjpLdHnQnrAFgY" == m))
25+func l (m) = {
26+ let n = m
27+ if (("8DtMtpVwVq62sdcVFVzh6nuprgzG7LSjpLdHnQnrAFgY" == n))
2628 then $Tuple4(2000000, 25000000, 80000000, 100000000)
27- else if (("FLdC14nUVRyiSYjVrMo3X4g8rXQjLbNRaGAyQAm8V68V" == m))
29+ else if (("FLdC14nUVRyiSYjVrMo3X4g8rXQjLbNRaGAyQAm8V68V" == n))
2830 then $Tuple4(2000000, 25000000, 80000000, 100000000)
29- else if (("25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT" == m))
31+ else if (("25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT" == n))
3032 then $Tuple4(2000000, 25000000, 80000000, 100000000)
31- else if (("WAVES" == m))
33+ else if (("WAVES" == n))
3234 then $Tuple4(2000000, 30000000, 80000000, 50000000)
3335 else $Tuple4(0, 20000000, 80000000, 80000000)
3436 }
3537
3638
37-let n = 100000000
39+let o = 100000000
3840
39-let o = 10000000000
41+let p = 10000000000
4042
41-let p = (n * n)
43+let q = (o * o)
4244
43-let q = 1440
45+let r = 1440
4446
45-func r (s) = {
46- func t (u,v) = ((u + toString(v)) + ",")
47+func s (t) = {
48+ func u (v,w) = ((v + toString(w)) + ",")
4749
48- let w = s
49- let x = size(w)
50- let y = ""
51- func z (A,B) = if ((B >= x))
52- then A
53- else t(A, w[B])
50+ let x = t
51+ let y = size(x)
52+ let z = ""
53+ func A (B,C) = if ((C >= y))
54+ then B
55+ else u(B, x[C])
5456
55- func C (A,B) = if ((B >= x))
56- then A
57+ func D (B,C) = if ((C >= y))
58+ then B
5759 else throw("List size exceeds 8")
5860
59- C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
61+ D(A(A(A(A(A(A(A(A(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
6062 }
6163
6264
63-func D (E) = {
64- let m = getInteger(this, E)
65- if ($isInstanceOf(m, "Int"))
65+func E (F) = {
66+ let n = getInteger(this, F)
67+ if ($isInstanceOf(n, "Int"))
6668 then {
67- let F = m
68- F
69+ let G = n
70+ G
6971 }
7072 else 0
7173 }
7274
7375
74-func G (E) = {
75- let m = getBoolean(this, E)
76- if ($isInstanceOf(m, "Boolean"))
76+func H (F) = {
77+ let n = getBoolean(this, F)
78+ if ($isInstanceOf(n, "Boolean"))
7779 then {
78- let F = m
79- F
80+ let G = n
81+ G
8082 }
8183 else false
8284 }
8385
8486
85-func H (E) = {
86- let m = getString(this, E)
87- if ($isInstanceOf(m, "String"))
87+func I (F) = {
88+ let n = getString(this, F)
89+ if ($isInstanceOf(n, "String"))
8890 then {
89- let F = m
90- F
91+ let G = n
92+ G
9193 }
9294 else ""
9395 }
9496
9597
96-func I (E) = {
97- let m = getBinary(this, E)
98- if ($isInstanceOf(m, "ByteVector"))
98+func J (F) = {
99+ let n = getBinary(this, F)
100+ if ($isInstanceOf(n, "ByteVector"))
99101 then {
100- let F = m
101- F
102+ let G = n
103+ G
102104 }
103105 else base58''
104106 }
105107
106108
107-func J (K) = {
108- let m = K
109- if ($isInstanceOf(m, "ByteVector"))
109+func K (L) = {
110+ let n = L
111+ if ($isInstanceOf(n, "ByteVector"))
110112 then {
111- let F = m
112- toBase58String(F)
113+ let G = n
114+ toBase58String(G)
113115 }
114116 else "WAVES"
115117 }
116118
117119
118-func L (l) = if ((l == "WAVES"))
120+func M (m) = if ((m == "WAVES"))
119121 then unit
120- else fromBase58String(l)
122+ else fromBase58String(m)
121123
122124
123-func M (l) = if ((l == "WAVES"))
125+func N (m) = if ((m == "WAVES"))
124126 then wavesBalance(this).available
125- else assetBalance(this, fromBase58String(l))
127+ else assetBalance(this, fromBase58String(m))
126128
127129
128-func N () = split(H("setup_tokens"), ",")
130+func O () = split(I("setup_tokens"), ",")
129131
130132
131-func O () = {
132- let P = H("setup_maxsupply")
133- if ((P == ""))
133+func P () = {
134+ let Q = I("setup_maxsupply")
135+ if ((Q == ""))
134136 then [-1, -1, -1, -1, -1, -1, -1]
135- else split(P, ",")
137+ else split(Q, ",")
136138 }
137139
138140
139-func Q (l) = {
140- let R = fraction(D(("total_supplied_" + l)), D((l + "_sRate")), p)
141- if ((R == 0))
141+func R (m) = {
142+ let S = fraction(E(("total_supplied_" + m)), E((m + "_sRate")), q)
143+ if ((S == 0))
142144 then 0
143- else fraction(n, fraction(D(("total_borrowed_" + l)), D((l + "_bRate")), p), R)
145+ else fraction(o, fraction(E(("total_borrowed_" + m)), E((m + "_bRate")), q), S)
144146 }
145147
146148
147-func S (l) = {
148- let T = Q(l)
149- let U = k(l)
150- let V = (U._1 + (if ((U._3 >= T))
151- then fraction(T, U._2, U._3)
152- else (U._2 + fraction((T - U._3), U._4, (100000000 - U._3)))))
153- max([fraction(V, n, (q * 365)), 1])
149+func T (m) = {
150+ let U = R(m)
151+ let V = l(m)
152+ let W = (V._1 + (if ((V._3 >= U))
153+ then fraction(U, V._2, V._3)
154+ else (V._2 + fraction((U - V._3), V._4, (100000000 - V._3)))))
155+ max([fraction(W, o, (r * 365)), 1])
154156 }
155157
156158
157-func W (l) = {
158- let X = S(l)
159- let T = Q(l)
160- let Y = D("lastRateHeight")
161- let Z = max([D((l + "_bRate")), p])
162- let aa = (Z + ((height - Y) * X))
163- let ab = max([D((l + "_sRate")), p])
164- let ac = (ab + ((((height - Y) * fraction(X, T, n)) * (100 - b)) / 100))
165-[IntegerEntry((l + "_sRate"), ac), IntegerEntry((l + "_bRate"), aa), IntegerEntry("lastRateHeight", height)]
159+func X (m) = {
160+ let Y = T(m)
161+ let U = R(m)
162+ let Z = E("lastRateHeight")
163+ let aa = max([E((m + "_bRate")), q])
164+ let ab = (aa + ((height - Z) * Y))
165+ let ac = max([E((m + "_sRate")), q])
166+ let ad = (ac + ((((height - Z) * fraction(Y, U, o)) * (100 - b)) / 100))
167+[IntegerEntry((m + "_sRate"), ad), IntegerEntry((m + "_bRate"), ab), IntegerEntry("lastRateHeight", height)]
166168 }
167169
168170
169-func ad (l,ae) = {
170- func t (u,af) = {
171- let ag = W(af)
172- $Tuple2(if ((af != l))
173- then u._1
174- else if ((ae == "sRate"))
175- then ag[0].value
176- else ag[1].value, (u._2 ++ ag))
171+func ae (m,af) = {
172+ func u (v,ag) = {
173+ let ah = X(ag)
174+ $Tuple2(if ((ag != m))
175+ then v._1
176+ else if ((af == "sRate"))
177+ then ah[0].value
178+ else ah[1].value, (v._2 ++ ah))
177179 }
178180
179- let w = N()
180- let x = size(w)
181- let y = $Tuple2(0, nil)
182- func z (A,B) = if ((B >= x))
183- then A
184- else t(A, w[B])
181+ let x = O()
182+ let y = size(x)
183+ let z = $Tuple2(0, nil)
184+ func A (B,C) = if ((C >= y))
185+ then B
186+ else u(B, x[C])
185187
186- func C (A,B) = if ((B >= x))
187- then A
188+ func D (B,C) = if ((C >= y))
189+ then B
188190 else throw("List size exceeds 8")
189191
190- C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
192+ D(A(A(A(A(A(A(A(A(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
191193 }
192194
193195
194-func ah (l) = {
195- let ai = W(l)
196- let R = fraction(D(("total_supplied_" + l)), ai[0].value, p)
197- fraction(n, fraction(D(("total_borrowed_" + l)), ai[1].value, p), R)
196+func ai (m) = {
197+ let aj = X(m)
198+ let S = fraction(E(("total_supplied_" + m)), aj[0].value, q)
199+ fraction(o, fraction(E(("total_borrowed_" + m)), aj[1].value, q), S)
198200 }
199201
200202
201-func aj () = {
202- func t (u,af) = (u ++ W(af))
203+func ak () = {
204+ func u (v,ag) = (v ++ X(ag))
203205
204- let w = N()
205- let x = size(w)
206- let y = nil
207- func z (A,B) = if ((B >= x))
208- then A
209- else t(A, w[B])
206+ let x = O()
207+ let y = size(x)
208+ let z = nil
209+ func A (B,C) = if ((C >= y))
210+ then B
211+ else u(B, x[C])
210212
211- func C (A,B) = if ((B >= x))
212- then A
213+ func D (B,C) = if ((C >= y))
214+ then B
213215 else throw("List size exceeds 8")
214216
215- C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
217+ D(A(A(A(A(A(A(A(A(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
216218 }
217219
218220
219-func ak (l) = {
220- let al = invoke(addressFromStringValue(g), "getTWAP60", [l, false], nil)
221- if ((al == al))
221+func al (m) = {
222+ let am = invoke(addressFromStringValue(h), "getTWAP60", [m, false], nil)
223+ if ((am == am))
222224 then {
223- let am = {
224- let m = al
225- if ($isInstanceOf(m, "(Int, Int)"))
225+ let an = {
226+ let n = am
227+ if ($isInstanceOf(n, "(Int, Int)"))
226228 then {
227- let an = m
228- an
229+ let ao = n
230+ ao
229231 }
230232 else throw("error of price oracle")
231233 }
232- if ((am == am))
233- then am
234+ if ((an == an))
235+ then an
234236 else throw("Strict value is not equal to itself.")
235237 }
236238 else throw("Strict value is not equal to itself.")
237239 }
238240
239241
240-func ao (l) = {
241- let ap = if ((l == "WAVES"))
242+func ap (m) = {
243+ let aq = if ((m == "WAVES"))
242244 then 8
243- else value(assetInfo(fromBase58String(l))).decimals
244- pow(10, 0, ap, 0, 0, DOWN)
245+ else value(assetInfo(fromBase58String(m))).decimals
246+ pow(10, 0, aq, 0, 0, DOWN)
245247 }
246248
247249
248-func aq (j) = {
249- let ar = invoke(this, "getUserCollateral", [false, j, true, ""], nil)
250- if ((ar == ar))
250+func ar (k) = {
251+ let as = invoke(this, "getUserCollateral", [false, k, true, ""], nil)
252+ if ((as == as))
251253 then {
252- let as = {
253- let m = ar
254- if ($isInstanceOf(m, "Int"))
254+ let at = {
255+ let n = as
256+ if ($isInstanceOf(n, "Int"))
255257 then {
256- let an = m
257- an
258+ let ao = n
259+ ao
258260 }
259261 else throw("issue while doing in-dapp invocation")
260262 }
261- if ((as == as))
262- then as
263+ if ((at == at))
264+ then at
263265 else throw("Strict value is not equal to itself.")
264266 }
265267 else throw("Strict value is not equal to itself.")
266268 }
267269
268270
269-func at (l,au,j) = if (!(G("setup_active")))
271+func au (m,av,k) = if (!(H("setup_active")))
270272 then throw("market is stopped")
271273 else {
272- let av = ad(l, "sRate")
273- let aw = av._1
274- let ax = av._2
275- let ay = fraction(au, p, aw, DOWN)
276- let az = {
277- let m = getString(("setup_maxSupply_" + l))
278- if ($isInstanceOf(m, "String"))
274+ let aw = ae(m, "sRate")
275+ let ax = aw._1
276+ let ay = aw._2
277+ let az = fraction(av, q, ax, DOWN)
278+ let aA = {
279+ let n = getString(("setup_maxSupply_" + m))
280+ if ($isInstanceOf(n, "String"))
279281 then {
280- let an = m
281- parseIntValue(an)
282+ let ao = n
283+ parseIntValue(ao)
282284 }
283285 else 0
284286 }
285- let aA = ak(l)
286- let aB = (D(((j + "_supplied_") + l)) + ay)
287- let V = ad(l, "sRate")._1
288- let aC = ao(l)
289- let aD = fraction(fraction(aB, V, p), aA._1, aC)
290- if ((indexOf(H("setup_tokens"), l) == unit))
287+ let aB = al(m)
288+ let aC = (E(((k + "_supplied_") + m)) + az)
289+ let W = ae(m, "sRate")._1
290+ let aD = ap(m)
291+ let aE = fraction(fraction(aC, W, q), aB._1, aD)
292+ if ((indexOf(I("setup_tokens"), m) == unit))
291293 then throw("this asset is not supported by the market")
292- else if (if ((az != 0))
293- then (aD > az)
294+ else if (if ((aA != 0))
295+ then (aE > aA)
294296 else false)
295297 then throw("max total supply for this token reached in the pool")
296- else $Tuple2(([IntegerEntry(((j + "_supplied_") + l), aB), IntegerEntry(("total_supplied_" + l), (D(("total_supplied_" + l)) + ay))] ++ ax), au)
298+ else $Tuple2(([IntegerEntry(((k + "_supplied_") + m), aC), IntegerEntry(("total_supplied_" + m), (E(("total_supplied_" + m)) + az))] ++ ay), av)
297299 }
298300
299301
300-func aE (l,au,j) = {
301- let aF = ad(l, "bRate")
302- let aG = aF._1
303- let ax = aF._2
304- let ay = fraction(au, p, aG, CEILING)
305- let aH = invoke(this, "getUserCollateral", [false, j, true, ((l + ",borrowed,") + toString(ay))], nil)
306- if ((aH == aH))
302+func aF (m,av,k) = {
303+ let aG = ae(m, "bRate")
304+ let aH = aG._1
305+ let ay = aG._2
306+ let az = fraction(av, q, aH, CEILING)
307+ let aI = invoke(this, "getUserCollateral", [false, k, true, ((m + ",borrowed,") + toString(az))], nil)
308+ if ((aI == aI))
307309 then {
308- let aI = {
309- let m = aH
310- if ($isInstanceOf(m, "Int"))
310+ let aJ = {
311+ let n = aI
312+ if ($isInstanceOf(n, "Int"))
311313 then {
312- let an = m
313- an
314+ let ao = n
315+ ao
314316 }
315317 else throw("can't get user collateral value")
316318 }
317- if (!(G("setup_active")))
319+ if (!(H("setup_active")))
318320 then throw("market is stopped")
319321 else {
320- let aJ = D(("total_supplied_" + l))
321- let aK = D(("total_borrowed_" + l))
322- let aL = D(((j + "_borrowed_") + l))
323- if ((ay > (aJ - aK)))
322+ let aK = E(("total_supplied_" + m))
323+ let aL = E(("total_borrowed_" + m))
324+ let aM = E(((k + "_borrowed_") + m))
325+ if ((az > (aK - aL)))
324326 then throw("this amount is not available")
325- else $Tuple2(([IntegerEntry(((j + "_borrowed_") + l), (aL + ay)), IntegerEntry(("total_borrowed_" + l), (aK + ay))] ++ ax), au)
327+ else $Tuple2(([IntegerEntry(((k + "_borrowed_") + m), (aM + az)), IntegerEntry(("total_borrowed_" + m), (aL + az))] ++ ay), av)
326328 }
327329 }
328330 else throw("Strict value is not equal to itself.")
329331 }
330332
331333
332-@Callable(aM)
333-func flashPosition (aN,aO,aP,aQ,aR,aS,aT) = {
334- let aU = aE(aP, aQ, aN)
335- let aV = L(aP)
336- let aW = reentrantInvoke(addressFromStringValue(aR), aS, split(aT, ","), [AttachedPayment(aV, aQ)])
337- if ((aW == aW))
334+@Callable(aN)
335+func flashPosition (aO,aP,aQ,aR,aS,aT,aU) = {
336+ let aV = aF(aQ, aR, aO)
337+ let aW = M(aQ)
338+ let aX = reentrantInvoke(addressFromStringValue(aS), aT, split(aU, ","), [AttachedPayment(aW, aR)])
339+ if ((aX == aX))
338340 then {
339- let aX = {
340- let aY = aW
341- if ($isInstanceOf(aY, "Int"))
342- then aY
343- else throw(($getType(aY) + " couldn't be cast to Int"))
341+ let aY = {
342+ let aZ = aX
343+ if ($isInstanceOf(aZ, "Int"))
344+ then aZ
345+ else throw(($getType(aZ) + " couldn't be cast to Int"))
344346 }
345- if ((aX == aX))
347+ if ((aY == aY))
346348 then {
347- let aZ = at(aO, aX, aN)
348- let aI = {
349- let aY = invoke(this, "getUserCollateral", [false, aN, true, ((aO + ",supplied,") + toString(aX))], nil)
350- if ($isInstanceOf(aY, "Int"))
351- then aY
352- else throw(($getType(aY) + " couldn't be cast to Int"))
349+ let ba = au(aP, aY, aO)
350+ let aJ = {
351+ let aZ = invoke(this, "getUserCollateral", [false, aO, true, ((aP + ",supplied,") + toString(aY))], nil)
352+ if ($isInstanceOf(aZ, "Int"))
353+ then aZ
354+ else throw(($getType(aZ) + " couldn't be cast to Int"))
353355 }
354- if ((aI == aI))
356+ if ((aJ == aJ))
355357 then {
356- let ba = {
357- let aY = invoke(this, "getUserCollateral", [false, aN, true, ((aP + ",borrowed,") + toString(aQ))], nil)
358- if ($isInstanceOf(aY, "Int"))
359- then aY
360- else throw(($getType(aY) + " couldn't be cast to Int"))
358+ let bb = {
359+ let aZ = invoke(this, "getUserCollateral", [false, aO, true, ((aQ + ",borrowed,") + toString(aR))], nil)
360+ if ($isInstanceOf(aZ, "Int"))
361+ then aZ
362+ else throw(($getType(aZ) + " couldn't be cast to Int"))
361363 }
362- if ((ba == ba))
363- then if ((ba > aI))
364+ if ((bb == bb))
365+ then if ((bb > aJ))
364366 then throw("not enough collateral provided")
365- else (aU._1 ++ aZ._1)
367+ else (aV._1 ++ ba._1)
366368 else throw("Strict value is not equal to itself.")
367369 }
368370 else throw("Strict value is not equal to itself.")
374376
375377
376378
377-@Callable(aM)
378-func supply () = if (if ((size(aM.payments) != 1))
379+@Callable(aN)
380+func supply () = if (if ((size(aN.payments) != 1))
379381 then true
380- else (aM.payments[0].amount == 0))
382+ else (aN.payments[0].amount == 0))
381383 then throw("1 payment has to be attached")
382384 else {
383- let l = J(aM.payments[0].assetId)
384- let au = aM.payments[0].amount
385- at(l, au, toString(aM.caller))
385+ let m = K(aN.payments[0].assetId)
386+ let av = aN.payments[0].amount
387+ let bc = invoke(e, "lendAction", [toString(aN.caller), m], nil)
388+ if ((bc == bc))
389+ then au(m, av, toString(aN.caller))
390+ else throw("Strict value is not equal to itself.")
386391 }
387392
388393
389394
390-@Callable(aM)
391-func withdraw (l,au) = {
392- let bb = ad(l, "sRate")
393- let aw = bb._1
394- let ax = bb._2
395- let ay = fraction(au, p, aw, CEILING)
396- let j = toString(aM.caller)
397- let aJ = D(("total_supplied_" + l))
398- let aK = D(("total_borrowed_" + l))
399- let bc = D(((j + "_supplied_") + l))
400- let aL = D(((j + "_borrowed_") + l))
401- let aH = invoke(this, "getUserCollateral", [false, j, true, ((l + ",supplied,") + toString(-(ay)))], nil)
402- if ((aH == aH))
395+@Callable(aN)
396+func withdraw (m,av) = {
397+ let bd = ae(m, "sRate")
398+ let ax = bd._1
399+ let ay = bd._2
400+ let az = fraction(av, q, ax, CEILING)
401+ let k = toString(aN.caller)
402+ let aK = E(("total_supplied_" + m))
403+ let aL = E(("total_borrowed_" + m))
404+ let be = E(((k + "_supplied_") + m))
405+ let aM = E(((k + "_borrowed_") + m))
406+ let bc = invoke(e, "lendAction", [toString(aN.caller), m], nil)
407+ if ((bc == bc))
403408 then {
404- let aI = {
405- let m = aH
406- if ($isInstanceOf(m, "Int"))
407- then {
408- let an = m
409- an
409+ let aI = invoke(this, "getUserCollateral", [false, k, true, ((m + ",supplied,") + toString(-(az)))], nil)
410+ if ((aI == aI))
411+ then {
412+ let aJ = {
413+ let n = aI
414+ if ($isInstanceOf(n, "Int"))
415+ then {
416+ let ao = n
417+ ao
418+ }
419+ else throw("can't get user collateral value")
410420 }
411- else throw("can't get user collateral value")
412- }
413- if (!(G("setup_active")))
414- then throw("market is stopped")
415- else if ((0 > aI))
416- then throw("you dont have enough collateral for this operation")
417- else if ((ay > (aJ - aK)))
418- then throw("this amount is not available on the market")
419- else if ((ay > (bc - aL)))
420- then throw("this amount is not available for this user")
421- else ([IntegerEntry(((j + "_supplied_") + l), (D(((j + "_supplied_") + l)) - ay)), IntegerEntry(("total_supplied_" + l), (D(("total_supplied_" + l)) - ay)), ScriptTransfer(aM.caller, au, L(l))] ++ ax)
421+ if (!(H("setup_active")))
422+ then throw("market is stopped")
423+ else if ((0 > aJ))
424+ then throw("you dont have enough collateral for this operation")
425+ else if ((az > (aK - aL)))
426+ then throw("this amount is not available on the market")
427+ else if ((az > (be - aM)))
428+ then throw("this amount is not available for this user")
429+ else ([IntegerEntry(((k + "_supplied_") + m), (E(((k + "_supplied_") + m)) - az)), IntegerEntry(("total_supplied_" + m), (E(("total_supplied_" + m)) - az)), ScriptTransfer(aN.caller, av, M(m))] ++ ay)
430+ }
431+ else throw("Strict value is not equal to itself.")
422432 }
423433 else throw("Strict value is not equal to itself.")
424434 }
425435
426436
427437
428-@Callable(aM)
429-func borrow (l,au) = {
430- let j = toString(aM.caller)
431- let bd = aE(l, au, j)
432- let ay = bd._2
433- (bd._1 ++ [ScriptTransfer(aM.caller, ay, L(l))])
438+@Callable(aN)
439+func borrow (m,av) = {
440+ let k = toString(aN.caller)
441+ let bf = aF(m, av, k)
442+ let az = bf._2
443+ (bf._1 ++ [ScriptTransfer(aN.caller, az, M(m))])
434444 }
435445
436446
437447
438-@Callable(aM)
439-func repay () = if (!(G("setup_active")))
448+@Callable(aN)
449+func repay () = if (!(H("setup_active")))
440450 then throw("market is stopped")
441- else if (if ((size(aM.payments) != 1))
451+ else if (if ((size(aN.payments) != 1))
442452 then true
443- else (aM.payments[0].amount == 0))
453+ else (aN.payments[0].amount == 0))
444454 then throw("1 payment has to be attached")
445455 else {
446- let l = J(aM.payments[0].assetId)
447- let au = aM.payments[0].amount
448- let be = ad(l, "bRate")
449- let aG = be._1
450- let ax = be._2
451- let ay = fraction(au, p, aG, CEILING)
452- let j = toString(aM.caller)
453- let aJ = D(("total_supplied_" + l))
454- let aK = D(("total_borrowed_" + l))
455- let aL = D(((j + "_borrowed_") + l))
456- let bf = (aL - ay)
457- let bg = if ((bf >= 0))
458- then ay
459- else aL
460- if ((indexOf(H("setup_tokens"), l) == unit))
456+ let m = K(aN.payments[0].assetId)
457+ let av = aN.payments[0].amount
458+ let bg = ae(m, "bRate")
459+ let aH = bg._1
460+ let ay = bg._2
461+ let az = fraction(av, q, aH, CEILING)
462+ let k = toString(aN.caller)
463+ let aK = E(("total_supplied_" + m))
464+ let aL = E(("total_borrowed_" + m))
465+ let aM = E(((k + "_borrowed_") + m))
466+ let bh = (aM - az)
467+ let bi = if ((bh >= 0))
468+ then az
469+ else aM
470+ if ((indexOf(I("setup_tokens"), m) == unit))
461471 then throw("this asset is not supported by the market")
462- else (([IntegerEntry(((j + "_borrowed_") + l), (aL - bg)), IntegerEntry(("total_borrowed_" + l), (aK - bg))] ++ ax) ++ (if ((bf >= 0))
472+ else (([IntegerEntry(((k + "_borrowed_") + m), (aM - bi)), IntegerEntry(("total_borrowed_" + m), (aL - bi))] ++ ay) ++ (if ((bh >= 0))
463473 then nil
464- else [ScriptTransfer(aM.caller, -(bf), aM.payments[0].assetId)]))
474+ else [ScriptTransfer(aN.caller, -(bh), aN.payments[0].assetId)]))
465475 }
466476
467477
468478
469-@Callable(aM)
470-func repayFor (j) = if (!(G("setup_active")))
479+@Callable(aN)
480+func repayFor (k) = if (!(H("setup_active")))
471481 then throw("market is stopped")
472- else if (if ((size(aM.payments) != 1))
482+ else if (if ((size(aN.payments) != 1))
473483 then true
474- else (aM.payments[0].amount == 0))
484+ else (aN.payments[0].amount == 0))
475485 then throw("1 payment has to be attached")
476486 else {
477- let l = J(aM.payments[0].assetId)
478- let au = aM.payments[0].amount
479- let bh = ad(l, "bRate")
480- let aG = bh._1
481- let ax = bh._2
482- let ay = fraction(au, p, aG, CEILING)
483- let aJ = D(("total_supplied_" + l))
484- let aK = D(("total_borrowed_" + l))
485- let aL = D(((j + "_borrowed_") + l))
486- let bf = (aL - ay)
487- let bg = if ((bf >= 0))
488- then ay
489- else aL
490- if ((indexOf(H("setup_tokens"), l) == unit))
487+ let m = K(aN.payments[0].assetId)
488+ let av = aN.payments[0].amount
489+ let bj = ae(m, "bRate")
490+ let aH = bj._1
491+ let ay = bj._2
492+ let az = fraction(av, q, aH, CEILING)
493+ let aK = E(("total_supplied_" + m))
494+ let aL = E(("total_borrowed_" + m))
495+ let aM = E(((k + "_borrowed_") + m))
496+ let bh = (aM - az)
497+ let bi = if ((bh >= 0))
498+ then az
499+ else aM
500+ if ((indexOf(I("setup_tokens"), m) == unit))
491501 then throw("this asset is not supported by the market")
492- else (([IntegerEntry(((j + "_borrowed_") + l), (aL - bg)), IntegerEntry(("total_borrowed_" + l), (aK - bg))] ++ ax) ++ (if ((bf >= 0))
502+ else (([IntegerEntry(((k + "_borrowed_") + m), (aM - bi)), IntegerEntry(("total_borrowed_" + m), (aL - bi))] ++ ay) ++ (if ((bh >= 0))
493503 then nil
494- else [ScriptTransfer(aM.caller, -(bf), aM.payments[0].assetId)]))
504+ else [ScriptTransfer(aN.caller, -(bh), aN.payments[0].assetId)]))
495505 }
496506
497507
498508
499-@Callable(aM)
500-func stakeTokenAll (l) = if ((aM.caller != this))
509+@Callable(aN)
510+func stakeTokenAll (m) = if ((aN.caller != this))
501511 then throw("only for internal smart contract invocations")
502512 else {
503- let ay = M(l)
504- let bi = invoke(this, "stakeToken", [l, ay], nil)
505- if ((bi == bi))
513+ let az = N(m)
514+ let bk = invoke(this, "stakeToken", [m, az], nil)
515+ if ((bk == bk))
506516 then nil
507517 else throw("Strict value is not equal to itself.")
508518 }
509519
510520
511521
512-@Callable(aM)
513-func stakeToken (l,ay) = if ((aM.caller != this))
522+@Callable(aN)
523+func stakeToken (m,az) = if ((aN.caller != this))
514524 then throw("only for internal smart contract invocations")
515- else if ((l == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
525+ else if ((m == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
516526 then {
517- let bj = D("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
518- let bi = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', ay)])
519- if ((bi == bi))
520- then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (bj + ay))]
527+ let bl = E("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
528+ let bk = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', az)])
529+ if ((bk == bk))
530+ then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (bl + az))]
521531 else throw("Strict value is not equal to itself.")
522532 }
523- else if ((l == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
533+ else if ((m == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
524534 then {
525- let bj = D("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
526- let bi = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', ay)])
527- if ((bi == bi))
528- then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bj + ay))]
535+ let bl = E("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
536+ let bk = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', az)])
537+ if ((bk == bk))
538+ then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bl + az))]
529539 else throw("Strict value is not equal to itself.")
530540 }
531- else if ((l == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
541+ else if ((m == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
532542 then {
533- let bj = D("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
534- let bi = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', ay)])
535- if ((bi == bi))
536- then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bj + ay))]
543+ let bl = E("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
544+ let bk = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', az)])
545+ if ((bk == bk))
546+ then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bl + az))]
537547 else throw("Strict value is not equal to itself.")
538548 }
539549 else nil
540550
541551
542552
543-@Callable(aM)
544-func unstakeToken (l,ay) = if ((aM.caller != this))
553+@Callable(aN)
554+func unstakeToken (m,az) = if ((aN.caller != this))
545555 then throw("only for internal smart contract invocations")
546- else if ((l == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
556+ else if ((m == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
547557 then {
548- let bj = D("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
549- let bi = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [ay], nil)
550- if ((bi == bi))
551- then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bj - ay))]
558+ let bl = E("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
559+ let bk = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [az], nil)
560+ if ((bk == bk))
561+ then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bl - az))]
552562 else throw("Strict value is not equal to itself.")
553563 }
554- else if ((l == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
564+ else if ((m == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
555565 then {
556- let bj = D("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
557- let bi = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [ay], nil)
558- if ((bi == bi))
566+ let bl = E("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
567+ let bk = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [az], nil)
568+ if ((bk == bk))
559569 then {
560- let bk = M("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
561- if ((bk == bk))
570+ let bm = N("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
571+ if ((bm == bm))
562572 then {
563- let bl = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
564- if ((bl == bl))
573+ let bn = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
574+ if ((bn == bn))
565575 then {
566- let bm = {
567- let m = bl
568- if ($isInstanceOf(m, "List[Any]"))
576+ let bo = {
577+ let n = bn
578+ if ($isInstanceOf(n, "List[Any]"))
569579 then {
570- let an = m
571- let bn = an[1]
572- let bo = bn
573- if ($isInstanceOf(bo, "String"))
580+ let ao = n
581+ let bp = ao[1]
582+ let bq = bp
583+ if ($isInstanceOf(bq, "String"))
574584 then {
575- let bn = bo
576- let bp = parseIntValue(split(split(bn, "_")[1], ":")[1])
577- let bq = parseIntValue(split(split(bn, "_")[0], ":")[1])
578- if (if ((bp != 0))
585+ let bp = bq
586+ let br = parseIntValue(split(split(bp, "_")[1], ":")[1])
587+ let bs = parseIntValue(split(split(bp, "_")[0], ":")[1])
588+ if (if ((br != 0))
579589 then true
580- else (bq != 0))
590+ else (bs != 0))
581591 then {
582- let br = M("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
583- if ((br == br))
592+ let bt = N("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
593+ if ((bt == bt))
584594 then {
585- let bs = M("WAVES")
586- if ((bs == bs))
595+ let bu = N("WAVES")
596+ if ((bu == bu))
587597 then {
588- let al = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
589- if ((al == al))
598+ let am = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
599+ if ((am == am))
590600 then {
591- let bt = M("WAVES")
592- if ((bt == bt))
601+ let bv = N("WAVES")
602+ if ((bv == bv))
593603 then {
594- let bu = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (bt - bs))])
595- if ((bu == bu))
604+ let bw = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (bv - bu))])
605+ if ((bw == bw))
596606 then {
597- let bv = M("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
598- if ((bv == bv))
607+ let bx = N("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
608+ if ((bx == bx))
599609 then {
600- let bw = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (bv - br))])
601- if ((bw == bw))
610+ let by = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (bx - bt))])
611+ if ((by == by))
602612 then {
603- let bx = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (M("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - bk)], nil)
604- if ((bx == bx))
613+ let bz = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (N("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - bm)], nil)
614+ if ((bz == bz))
605615 then 2
606616 else throw("Strict value is not equal to itself.")
607617 }
625635 }
626636 else 0
627637 }
628- if ((bm == bm))
629- then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bj - ay))]
638+ if ((bo == bo))
639+ then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bl - az))]
630640 else throw("Strict value is not equal to itself.")
631641 }
632642 else throw("Strict value is not equal to itself.")
639649
640650
641651
642-@Callable(aM)
643-func addInterest (l,ay) = if ((aM.caller != this))
652+@Callable(aN)
653+func addInterest (m,az) = if ((aN.caller != this))
644654 then throw("only for self invocation")
645655 else {
646- let by = D(("autostake_lastEarned_" + l))
647- let bz = D(("autostake_lastBlock_" + l))
648- let bA = fraction(ay, 80, 100)
649- let bB = if (if ((bz == height))
656+ let bA = E(("autostake_lastEarned_" + m))
657+ let bB = E(("autostake_lastBlock_" + m))
658+ let bC = fraction(az, 80, 100)
659+ let bD = if (if ((bB == height))
650660 then true
651- else (ay == 0))
661+ else (az == 0))
652662 then nil
653- else [IntegerEntry(("autostake_preLastEarned_" + l), by), IntegerEntry(("autostake_preLastBlock_" + l), bz), IntegerEntry(("autostake_lastEarned_" + l), (by + bA)), IntegerEntry(("autostake_lastBlock_" + l), height)]
654- (bB ++ [IntegerEntry((l + "_sRate"), (D((l + "_sRate")) + fraction(p, bA, D(("total_supplied_" + l)))))])
663+ else [IntegerEntry(("autostake_preLastEarned_" + m), bA), IntegerEntry(("autostake_preLastBlock_" + m), bB), IntegerEntry(("autostake_lastEarned_" + m), (bA + bC)), IntegerEntry(("autostake_lastBlock_" + m), height)]
664+ (bD ++ [IntegerEntry((m + "_sRate"), (E((m + "_sRate")) + fraction(q, bC, E(("total_supplied_" + m)))))])
655665 }
656666
657667
658668
659-@Callable(aM)
669+@Callable(aN)
660670 func addInterestEXTERNAL () = {
661- let ay = fraction(aM.payments[0].amount, 80, 100)
662- let K = aM.payments[0].assetId
663- let l = J(K)
664- let by = D(("autostake_lastEarned_" + l))
665- let bz = D(("autostake_lastBlock_" + l))
666- let bB = if (if ((bz == height))
671+ let az = fraction(aN.payments[0].amount, 80, 100)
672+ let L = aN.payments[0].assetId
673+ let m = K(L)
674+ let bA = E(("autostake_lastEarned_" + m))
675+ let bB = E(("autostake_lastBlock_" + m))
676+ let bD = if (if ((bB == height))
667677 then true
668- else (ay == 0))
678+ else (az == 0))
669679 then nil
670- else [IntegerEntry(("autostake_preLastEarned_" + l), by), IntegerEntry(("autostake_preLastBlock_" + l), bz), IntegerEntry(("autostake_lastEarned_" + l), (by + ay)), IntegerEntry(("autostake_lastBlock_" + l), height)]
671- (bB ++ [IntegerEntry((l + "_sRate"), (D((l + "_sRate")) + fraction(p, ay, D(("total_supplied_" + l)))))])
680+ else [IntegerEntry(("autostake_preLastEarned_" + m), bA), IntegerEntry(("autostake_preLastBlock_" + m), bB), IntegerEntry(("autostake_lastEarned_" + m), (bA + az)), IntegerEntry(("autostake_lastBlock_" + m), height)]
681+ (bD ++ [IntegerEntry((m + "_sRate"), (E((m + "_sRate")) + fraction(q, az, E(("total_supplied_" + m)))))])
672682 }
673683
674684
675685
676-@Callable(aM)
677-func preInit (bC,bD,bE,bF) = {
678- func t (u,af) = (u ++ [IntegerEntry((af + "_bRate"), p), IntegerEntry((af + "_sRate"), p)])
686+@Callable(aN)
687+func preInit (bE,bF,bG,bH) = {
688+ func u (v,ag) = (v ++ [IntegerEntry((ag + "_bRate"), q), IntegerEntry((ag + "_sRate"), q)])
679689
680- if ((aM.caller != this))
690+ if ((aN.caller != this))
681691 then throw("admin only")
682692 else {
683- let ai = {
684- let w = split(bC, ",")
685- let x = size(w)
686- let y = nil
687- func z (A,B) = if ((B >= x))
688- then A
689- else t(A, w[B])
693+ let aj = {
694+ let x = split(bE, ",")
695+ let y = size(x)
696+ let z = nil
697+ func A (B,C) = if ((C >= y))
698+ then B
699+ else u(B, x[C])
690700
691- func C (A,B) = if ((B >= x))
692- then A
701+ func D (B,C) = if ((C >= y))
702+ then B
693703 else throw("List size exceeds 8")
694704
695- C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
705+ D(A(A(A(A(A(A(A(A(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
696706 }
697- ([StringEntry("setup_tokens", bC), StringEntry("setup_ltvs", bD), StringEntry("setup_lts", bE), StringEntry("setup_penalties", bF), BooleanEntry("setup_active", true)] ++ ai)
707+ ([StringEntry("setup_tokens", bE), StringEntry("setup_ltvs", bF), StringEntry("setup_lts", bG), StringEntry("setup_penalties", bH), BooleanEntry("setup_active", true)] ++ aj)
698708 }
699709 }
700710
701711
702712
703-@Callable(aM)
704-func initNewToken (af,bG,bH,bI) = if ((aM.caller != this))
713+@Callable(aN)
714+func initNewToken (ag,bI,bJ,bK) = if ((aN.caller != this))
705715 then throw("admin only")
706- else [StringEntry("setup_tokens", ((H("setup_tokens") + ",") + af)), StringEntry("setup_ltvs", ((H("setup_ltvs") + ",") + bG)), StringEntry("setup_lts", ((H("setup_lts") + ",") + bH)), StringEntry("setup_penalties", ((H("setup_penalties") + ",") + bI)), IntegerEntry((af + "_bRate"), p), IntegerEntry((af + "_sRate"), p)]
716+ else [StringEntry("setup_tokens", ((I("setup_tokens") + ",") + ag)), StringEntry("setup_ltvs", ((I("setup_ltvs") + ",") + bI)), StringEntry("setup_lts", ((I("setup_lts") + ",") + bJ)), StringEntry("setup_penalties", ((I("setup_penalties") + ",") + bK)), IntegerEntry((ag + "_bRate"), q), IntegerEntry((ag + "_sRate"), q)]
707717
708718
709719
710-@Callable(aM)
711-func updateParameter (E,bJ) = if (if (if ((aM.caller != this))
712- then (aM.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
720+@Callable(aN)
721+func updateParameter (F,bL) = if (if (if ((aN.caller != this))
722+ then (aN.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
713723 else false)
714- then (aM.caller != Address(base58'3N8ZpuFLVKwxbpVFe1Pcs14hLCrujizpQsa'))
724+ then (aN.caller != Address(base58'3N8ZpuFLVKwxbpVFe1Pcs14hLCrujizpQsa'))
715725 else false)
716726 then throw("admin only")
717- else [IntegerEntry(E, parseIntValue(bJ))]
727+ else [IntegerEntry(F, parseIntValue(bL))]
718728
719729
720730
721-@Callable(aM)
722-func updateString (E,bJ) = if (if (if ((aM.caller != this))
723- then (aM.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
731+@Callable(aN)
732+func updateString (F,bL) = if (if (if ((aN.caller != this))
733+ then (aN.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
724734 else false)
725- then (aM.caller != Address(base58'3N8ZpuFLVKwxbpVFe1Pcs14hLCrujizpQsa'))
735+ then (aN.caller != Address(base58'3N8ZpuFLVKwxbpVFe1Pcs14hLCrujizpQsa'))
726736 else false)
727737 then throw("admin only")
728- else [StringEntry(E, bJ)]
738+ else [StringEntry(F, bL)]
729739
730740
731741
732-@Callable(aM)
733-func claimToReserveFund (bK) = {
734- let bL = N()
735- let ai = ad(bL[0], "sRate")._2
736- let s = [0, 1, 2, 3, 4, 5]
737- func t (u,bM) = if ((bM >= size(bL)))
738- then u
742+@Callable(aN)
743+func claimToReserveFund (bM) = {
744+ let bN = O()
745+ let aj = ae(bN[0], "sRate")._2
746+ let t = [0, 1, 2, 3, 4, 5]
747+ func u (v,bO) = if ((bO >= size(bN)))
748+ then v
739749 else {
740- let l = bL[bM]
741- let bN = H(("autostake_amount_" + l))
742- let ay = ((((M(l) + D(("autostake_amount_" + l))) + (if ((bN != ""))
743- then parseIntValue(bN)
744- else 0)) + fraction(D(("total_borrowed_" + l)), ai[((bM * 3) + 1)].value, p)) - fraction(D(("total_supplied_" + l)), ai[(bM * 3)].value, p))
745- let bi = if ((D(("autostake_amount_" + l)) > 0))
746- then invoke(this, "unstakeToken", [l, max([ay, 0])], nil)
750+ let m = bN[bO]
751+ let bP = I(("autostake_amount_" + m))
752+ let az = ((((N(m) + E(("autostake_amount_" + m))) + (if ((bP != ""))
753+ then parseIntValue(bP)
754+ else 0)) + fraction(E(("total_borrowed_" + m)), aj[((bO * 3) + 1)].value, q)) - fraction(E(("total_supplied_" + m)), aj[(bO * 3)].value, q))
755+ let bk = if ((E(("autostake_amount_" + m)) > 0))
756+ then invoke(this, "unstakeToken", [m, max([az, 0])], nil)
747757 else 0
748- if ((bi == bi))
749- then (u ++ [ay])
758+ if ((bk == bk))
759+ then (v ++ [az])
750760 else throw("Strict value is not equal to itself.")
751761 }
752762
753- let bO = {
754- let w = s
755- let x = size(w)
756- let y = nil
757- func z (A,B) = if ((B >= x))
758- then A
759- else t(A, w[B])
763+ let bQ = {
764+ let x = t
765+ let y = size(x)
766+ let z = nil
767+ func A (B,C) = if ((C >= y))
768+ then B
769+ else u(B, x[C])
760770
761- func C (A,B) = if ((B >= x))
762- then A
771+ func D (B,C) = if ((C >= y))
772+ then B
763773 else throw("List size exceeds 8")
764774
765- C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
775+ D(A(A(A(A(A(A(A(A(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
766776 }
767- func bP (u,bM) = if ((bM >= size(bL)))
768- then u
777+ func bR (v,bO) = if ((bO >= size(bN)))
778+ then v
769779 else {
770- let l = bL[bM]
771- (u ++ [ScriptTransfer(a, max([bO[bM], 0]), L(l))])
780+ let m = bN[bO]
781+ (v ++ [ScriptTransfer(a, max([bQ[bO], 0]), M(m))])
772782 }
773783
774- if (bK)
775- then throw(r(bO))
784+ if (bM)
785+ then throw(s(bQ))
776786 else $Tuple2({
777- let w = s
778- let x = size(w)
779- let y = nil
780- func bQ (A,B) = if ((B >= x))
781- then A
782- else bP(A, w[B])
787+ let x = t
788+ let y = size(x)
789+ let z = nil
790+ func bS (B,C) = if ((C >= y))
791+ then B
792+ else bR(B, x[C])
783793
784- func bR (A,B) = if ((B >= x))
785- then A
794+ func bT (B,C) = if ((C >= y))
795+ then B
786796 else throw("List size exceeds 8")
787797
788- bR(bQ(bQ(bQ(bQ(bQ(bQ(bQ(bQ(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
789- }, bO)
798+ bT(bS(bS(bS(bS(bS(bS(bS(bS(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
799+ }, bQ)
790800 }
791801
792802
793803
794-@Callable(aM)
795-func reSetup (l) = {
796- let bS = D("resetup_lastUpdate")
797- if ((q > (height - bS)))
804+@Callable(aN)
805+func reSetup (m) = {
806+ let bU = E("resetup_lastUpdate")
807+ if ((r > (height - bU)))
798808 then throw("can be updated only once per day")
799809 else {
800- let bE = split(H("setup_lts"), ",")
801- let bL = N()
802- let T = ah(l)
803- let bT = D((("setup_" + l) + "_tempLT"))
804- let bH = parseIntValue(bL[value(indexOf(bL, l))])
805- if ((T > 90000000))
806- then [IntegerEntry((("setup_" + l) + "_tempLT"), fraction(bT, 9975, 10000))]
807- else if (if ((bH > bT))
808- then (90000000 > T)
810+ let bG = split(I("setup_lts"), ",")
811+ let bN = O()
812+ let U = ai(m)
813+ let bV = E((("setup_" + m) + "_tempLT"))
814+ let bJ = parseIntValue(bN[value(indexOf(bN, m))])
815+ if ((U > 90000000))
816+ then [IntegerEntry((("setup_" + m) + "_tempLT"), fraction(bV, 9975, 10000))]
817+ else if (if ((bJ > bV))
818+ then (90000000 > U)
809819 else false)
810- then [IntegerEntry((("setup_" + l) + "_tempLT"), fraction(bT, 10025, 10000))]
820+ then [IntegerEntry((("setup_" + m) + "_tempLT"), fraction(bV, 10025, 10000))]
811821 else nil
812822 }
813823 }
814824
815825
816826
817-@Callable(aM)
818-func shutdown (bU) = if ((indexOf(h, aM.caller.bytes) == unit))
827+@Callable(aN)
828+func shutdown (bW) = if ((indexOf(i, aN.caller.bytes) == unit))
819829 then throw("user not in a whitelist")
820- else [BooleanEntry("setup_active", !(bU))]
830+ else [BooleanEntry("setup_active", !(bW))]
821831
822832
823833
824-@Callable(aM)
825-func liquidate (bK,j,au,aO,aP,bV) = if (!(i(aM.caller)))
834+@Callable(aN)
835+func liquidate (bM,k,av,aP,aQ,bX) = if (!(j(aN.caller)))
826836 then throw("temporarily available for whitelist only")
827- else if (!(G("setup_active")))
837+ else if (!(H("setup_active")))
828838 then throw("market is stopped")
829839 else {
830- let bW = aq(j)
831- if ((bW == bW))
840+ let bY = ar(k)
841+ if ((bY == bY))
832842 then {
833- let bX = ad(aO, "sRate")
834- let aw = bX._1
835- let bY = bX._2
836- let bZ = ad(aP, "bRate")
837- let aG = bZ._1
843+ let bZ = ae(aP, "sRate")
844+ let ax = bZ._1
838845 let ca = bZ._2
839- let cb = fraction(au, p, aw)
840- let cc = D(((j + "_supplied_") + aO))
841- let cd = D(((j + "_borrowed_") + aP))
842- let ce = if ((cd > 0))
843- then cd
846+ let cb = ae(aQ, "bRate")
847+ let aH = cb._1
848+ let cc = cb._2
849+ let cd = fraction(av, q, ax)
850+ let ce = E(((k + "_supplied_") + aP))
851+ let cf = E(((k + "_borrowed_") + aQ))
852+ let cg = if ((cf > 0))
853+ then cf
844854 else throw("user has no borrow in this token")
845- if ((bW > 0))
855+ if ((bY > 0))
846856 then throw("user can't be liquidated")
847- else if ((cb > cc))
857+ else if ((cd > ce))
848858 then throw("position to liquidate is bigger than user's supply")
849859 else {
850- let cf = M(aO)
851- if ((cf == cf))
860+ let ch = N(aP)
861+ if ((ch == ch))
852862 then {
853- let cg = M(aP)
854- if ((cg == cg))
863+ let ci = N(aQ)
864+ if ((ci == ci))
855865 then {
856- let ch = invoke(f, "swap", [bV, 0], [AttachedPayment(L(aO), au)])
857- if ((ch == ch))
866+ let cj = invoke(g, "swap", [bX, 0], [AttachedPayment(M(aP), av)])
867+ if ((cj == cj))
858868 then {
859- let ci = (cf - M(aO))
860- if ((ci == ci))
869+ let ck = (ch - N(aP))
870+ if ((ck == ck))
861871 then {
862- let cj = (M(aP) - cg)
863- if ((cj == cj))
872+ let cl = (N(aQ) - ci)
873+ if ((cl == cl))
864874 then {
865- let ck = ak(aO)._1
866- let cl = ao(aO)
867- let cm = fraction(ci, ck, cl)
868- let cn = ak(aP)._2
869- let co = ao(aP)
870- let cp = fraction(cj, cn, co)
871- let bI = parseIntValue(split(H("setup_penalties"), ",")[value(indexOf(N(), aP))])
872- let cq = (cp - fraction(cm, (n - bI), n))
873- let cr = fraction(ci, p, aw)
874- let cs = fraction(fraction(cj, p, aG), (n - fraction(cq, n, cp)), n)
875- if ((ci > au))
875+ let cm = al(aP)._1
876+ let cn = ap(aP)
877+ let co = fraction(ck, cm, cn)
878+ let cp = al(aQ)._2
879+ let cq = ap(aQ)
880+ let cr = fraction(cl, cp, cq)
881+ let bK = parseIntValue(split(I("setup_penalties"), ",")[value(indexOf(O(), aQ))])
882+ let cs = (cr - fraction(co, (o - bK), o))
883+ let ct = fraction(ck, q, ax)
884+ let cu = fraction(fraction(cl, q, aH), (o - fraction(cs, o, cr)), o)
885+ if ((ck > av))
876886 then throw("more assets exchanged than expected")
877- else if ((0 > cq))
887+ else if ((0 > cs))
878888 then throw("price impact is bigger than liquidation penalty")
879- else [IntegerEntry(((j + "_supplied_") + aO), (cc - cr)), IntegerEntry(((j + "_borrowed_") + aP), (ce - cs)), IntegerEntry(("total_supplied_" + aO), (D(("total_supplied_" + aO)) - cr)), IntegerEntry(("total_borrowed_" + aP), (D(("total_borrowed_" + aP)) - cs))]
889+ else [IntegerEntry(((k + "_supplied_") + aP), (ce - ct)), IntegerEntry(((k + "_borrowed_") + aQ), (cg - cu)), IntegerEntry(("total_supplied_" + aP), (E(("total_supplied_" + aP)) - ct)), IntegerEntry(("total_borrowed_" + aQ), (E(("total_borrowed_" + aQ)) - cu))]
880890 }
881891 else throw("Strict value is not equal to itself.")
882892 }
894904
895905
896906
897-@Callable(aM)
898-func liquidateV2 (bK,j,aO) = if (!(i(aM.caller)))
907+@Callable(aN)
908+func liquidateV2 (bM,k,aP) = if (!(j(aN.caller)))
899909 then throw("temporarily available for whitelist only")
900- else if (!(G("setup_active")))
910+ else if (!(H("setup_active")))
901911 then throw("market is stopped")
902912 else {
903- let aV = aM.payments[0].assetId
904- let aP = J(aV)
905- let ct = aM.payments[0].amount
906- let bW = aq(j)
907- if ((bW == bW))
908- then if ((bW > 0))
913+ let aW = aN.payments[0].assetId
914+ let aQ = K(aW)
915+ let cv = aN.payments[0].amount
916+ let bY = ar(k)
917+ if ((bY == bY))
918+ then if ((bY > 0))
909919 then throw("user can't be liquidated")
910920 else {
911- let cu = N()
912- let cv = value(indexOf(cu, aP))
913- let cw = value(indexOf(cu, aO))
914- let cx = ad(aP, "bRate")
915- let aG = cx._1
916- let bY = cx._2
917- let cn = ak(aP)._2
918- let co = ao(aP)
919- let cy = fraction(ct, cn, co)
920- let bI = parseIntValue(value(split(H("setup_penalties"), ",")[cv]))
921- let ck = ak(aO)._1
922- let cl = ao(aO)
923- let cz = fraction(cy, (n + bI), n)
924- let cb = fraction(cz, cl, ck)
925- let aQ = fraction(ct, p, aG)
926- let aX = fraction(cb, p, bY[((cw * 3) + 1)].value)
927- let bi = if ((indexOf(e, aO) != unit))
921+ let cw = O()
922+ let cx = value(indexOf(cw, aQ))
923+ let cy = value(indexOf(cw, aP))
924+ let cz = ae(aQ, "bRate")
925+ let aH = cz._1
926+ let ca = cz._2
927+ let cp = al(aQ)._2
928+ let cq = ap(aQ)
929+ let cA = fraction(cv, cp, cq)
930+ let bK = parseIntValue(value(split(I("setup_penalties"), ",")[cx]))
931+ let cm = al(aP)._1
932+ let cn = ap(aP)
933+ let cB = fraction(cA, (o + bK), o)
934+ let cd = fraction(cB, cn, cm)
935+ let aR = fraction(cv, q, aH)
936+ let aY = fraction(cd, q, ca[((cy * 3) + 1)].value)
937+ let bk = if ((indexOf(f, aP) != unit))
928938 then {
929- let cA = split(j, "_")[1]
930- let cB = split(j, "_")[0]
931- reentrantInvoke(d, "liquidate", [cB, cA, aX], nil)
939+ let cC = split(k, "_")[1]
940+ let cD = split(k, "_")[0]
941+ reentrantInvoke(d, "liquidate", [cD, cC, aY], nil)
932942 }
933943 else nil
934- if ((bi == bi))
944+ if ((bk == bk))
935945 then {
936- let cc = D(((j + "_supplied_") + aO))
937- let cd = D(((j + "_borrowed_") + aP))
938- let ce = if ((cd > 0))
939- then cd
946+ let ce = E(((k + "_supplied_") + aP))
947+ let cf = E(((k + "_borrowed_") + aQ))
948+ let cg = if ((cf > 0))
949+ then cf
940950 else throw("user has no borrow in this token")
941- if ((aX > cc))
951+ if ((aY > ce))
942952 then throw("position to liquidate is bigger than user's supply")
943- else if (bK)
953+ else if (bM)
944954 then throw("liquidation will pass")
945- else ([ScriptTransfer(aM.caller, cb, L(aO)), IntegerEntry(((j + "_supplied_") + aO), (cc - aX)), IntegerEntry(((j + "_borrowed_") + aP), (ce - aQ)), IntegerEntry(("total_supplied_" + aO), (D(("total_supplied_" + aO)) - aX)), IntegerEntry(("total_borrowed_" + aP), (D(("total_borrowed_" + aP)) - aQ))] ++ bY)
955+ else ([ScriptTransfer(aN.caller, cd, M(aP)), IntegerEntry(((k + "_supplied_") + aP), (ce - aY)), IntegerEntry(((k + "_borrowed_") + aQ), (cg - aR)), IntegerEntry(("total_supplied_" + aP), (E(("total_supplied_" + aP)) - aY)), IntegerEntry(("total_borrowed_" + aQ), (E(("total_borrowed_" + aQ)) - aR))] ++ ca)
946956 }
947957 else throw("Strict value is not equal to itself.")
948958 }
951961
952962
953963
954-@Callable(aM)
955-func getUserCollateral (bK,j,cC,cD) = {
956- let bL = N()
957- let bD = split(H("setup_ltvs"), ",")
958- let bE = split(H("setup_lts"), ",")
959- let ai = ad(bL[0], "sRate")._2
960- let cE = split(cD, ",")
961- func t (u,v) = if ((v >= size(bL)))
962- then u
964+@Callable(aN)
965+func getUserCollateral (bM,k,cE,cF) = {
966+ let bN = O()
967+ let bF = split(I("setup_ltvs"), ",")
968+ let bG = split(I("setup_lts"), ",")
969+ let aj = ae(bN[0], "sRate")._2
970+ let cG = split(cF, ",")
971+ func u (v,w) = if ((w >= size(bN)))
972+ then v
963973 else {
964- let cF = D(((j + "_supplied_") + bL[v]))
965- let cG = D(((j + "_borrowed_") + bL[v]))
966- let cH = if ((cD == ""))
967- then if (if ((cG != 0))
974+ let cH = E(((k + "_supplied_") + bN[w]))
975+ let cI = E(((k + "_borrowed_") + bN[w]))
976+ let cJ = if ((cF == ""))
977+ then if (if ((cI != 0))
968978 then true
969- else (cF != 0))
979+ else (cH != 0))
970980 then true
971981 else false
972982 else true
973- if (cH)
983+ if (cJ)
974984 then {
975- let aC = ao(bL[v])
976- let aA = ak(bL[v])
977- ((u + fraction(fraction(fraction((cF + (if (if (if ((cD != ""))
978- then (cE[0] == bL[v])
985+ let aD = ap(bN[w])
986+ let aB = al(bN[w])
987+ ((v + fraction(fraction(fraction((cH + (if (if (if ((cF != ""))
988+ then (cG[0] == bN[w])
979989 else false)
980- then (cE[1] == "supplied")
990+ then (cG[1] == "supplied")
981991 else false)
982- then parseIntValue(cE[2])
983- else 0)), ai[(v * 3)].value, p), parseIntValue(bD[v]), n), aA._1, aC)) - (if (cC)
984- then fraction(fraction(fraction((cG + (if (if (if ((cD != ""))
985- then (cE[0] == bL[v])
992+ then parseIntValue(cG[2])
993+ else 0)), aj[(w * 3)].value, q), parseIntValue(bF[w]), o), aB._1, aD)) - (if (cE)
994+ then fraction(fraction(fraction((cI + (if (if (if ((cF != ""))
995+ then (cG[0] == bN[w])
986996 else false)
987- then (cE[1] == "borrowed")
997+ then (cG[1] == "borrowed")
988998 else false)
989- then parseIntValue(cE[2])
990- else 0)), ai[((v * 3) + 1)].value, p), n, parseIntValue(bE[v])), aA._2, aC)
999+ then parseIntValue(cG[2])
1000+ else 0)), aj[((w * 3) + 1)].value, q), o, parseIntValue(bG[w])), aB._2, aD)
9911001 else 0))
9921002 }
993- else u
1003+ else v
9941004 }
9951005
996- let cI = {
997- let w = [0, 1, 2, 3, 4, 5]
998- let x = size(w)
999- let y = 0
1000- func z (A,B) = if ((B >= x))
1001- then A
1002- else t(A, w[B])
1006+ let cK = {
1007+ let x = [0, 1, 2, 3, 4, 5]
1008+ let y = size(x)
1009+ let z = 0
1010+ func A (B,C) = if ((C >= y))
1011+ then B
1012+ else u(B, x[C])
10031013
1004- func C (A,B) = if ((B >= x))
1005- then A
1014+ func D (B,C) = if ((C >= y))
1015+ then B
10061016 else throw("List size exceeds 8")
10071017
1008- C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1018+ D(A(A(A(A(A(A(A(A(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
10091019 }
1010- if (bK)
1011- then throw(toString(cI))
1012- else $Tuple2(nil, cI)
1020+ if (bM)
1021+ then throw(toString(cK))
1022+ else $Tuple2(nil, cK)
10131023 }
10141024
10151025
10161026
1017-@Callable(aM)
1018-func getAssetDebt (bK,j,l) = {
1019- let cG = D(((j + "_borrowed_") + l))
1020- let aC = ao(l)
1021- let V = ad(l, "bRate")._1
1022- let cI = fraction(cG, V, p)
1023- if (bK)
1024- then throw(toString(cI))
1025- else $Tuple2(nil, cI)
1027+@Callable(aN)
1028+func getAssetDebt (bM,k,m) = {
1029+ let cI = E(((k + "_borrowed_") + m))
1030+ let aD = ap(m)
1031+ let W = ae(m, "bRate")._1
1032+ let cK = fraction(cI, W, q)
1033+ if (bM)
1034+ then throw(toString(cK))
1035+ else $Tuple2(nil, cK)
10261036 }
10271037
10281038
10291039
1030-@Callable(aM)
1031-func getPrices (bK) = {
1032- let bL = N()
1033- func t (u,v) = if ((v >= size(bL)))
1034- then u
1040+@Callable(aN)
1041+func getPrices (bM) = {
1042+ let bN = O()
1043+ func u (v,w) = if ((w >= size(bN)))
1044+ then v
10351045 else {
1036- let aA = ak(bL[v])
1037- ((((u + toString(aA._1)) + ",") + toString(aA._2)) + "|")
1046+ let aB = al(bN[w])
1047+ ((((v + toString(aB._1)) + ",") + toString(aB._2)) + "|")
10381048 }
10391049
1040- let cI = {
1041- let w = [0, 1, 2, 3, 4, 5]
1042- let x = size(w)
1043- let y = ""
1044- func z (A,B) = if ((B >= x))
1045- then A
1046- else t(A, w[B])
1050+ let cK = {
1051+ let x = [0, 1, 2, 3, 4, 5]
1052+ let y = size(x)
1053+ let z = ""
1054+ func A (B,C) = if ((C >= y))
1055+ then B
1056+ else u(B, x[C])
10471057
1048- func C (A,B) = if ((B >= x))
1049- then A
1058+ func D (B,C) = if ((C >= y))
1059+ then B
10501060 else throw("List size exceeds 8")
10511061
1052- C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1062+ D(A(A(A(A(A(A(A(A(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
10531063 }
1054- if (bK)
1055- then throw(cI)
1056- else $Tuple2(nil, cI)
1064+ if (bM)
1065+ then throw(cK)
1066+ else $Tuple2(nil, cK)
10571067 }
10581068
10591069
10601070
1061-@Callable(aM)
1062-func calculateUtilizationRatio (l,bK) = if (bK)
1063- then throw(toString(ah(l)))
1064- else $Tuple2(nil, ah(l))
1071+@Callable(aN)
1072+func calculateUtilizationRatio (m,bM) = if (bM)
1073+ then throw(toString(ai(m)))
1074+ else $Tuple2(nil, ai(m))
10651075
10661076
10671077
1068-@Callable(aM)
1069-func calculateOutdatedUR (l,bK) = if (bK)
1070- then throw(toString(Q(l)))
1071- else $Tuple2(nil, Q(l))
1078+@Callable(aN)
1079+func calculateOutdatedUR (m,bM) = if (bM)
1080+ then throw(toString(R(m)))
1081+ else $Tuple2(nil, R(m))
10721082
10731083
10741084
1075-@Callable(aM)
1076-func calculateTokenRates (bK) = {
1077- func t (u,l) = {
1078- let ai = W(l)
1079- $Tuple2(((((u._1 + toString(ai[1].value)) + "|") + toString(ai[0].value)) + ","), (u._2 ++ ai))
1085+@Callable(aN)
1086+func calculateTokenRates (bM) = {
1087+ func u (v,m) = {
1088+ let aj = X(m)
1089+ $Tuple2(((((v._1 + toString(aj[1].value)) + "|") + toString(aj[0].value)) + ","), (v._2 ++ aj))
10801090 }
10811091
1082- let bO = {
1083- let w = N()
1084- let x = size(w)
1085- let y = $Tuple2("", nil)
1086- func z (A,B) = if ((B >= x))
1087- then A
1088- else t(A, w[B])
1092+ let bQ = {
1093+ let x = O()
1094+ let y = size(x)
1095+ let z = $Tuple2("", nil)
1096+ func A (B,C) = if ((C >= y))
1097+ then B
1098+ else u(B, x[C])
10891099
1090- func C (A,B) = if ((B >= x))
1091- then A
1100+ func D (B,C) = if ((C >= y))
1101+ then B
10921102 else throw("List size exceeds 8")
10931103
1094- C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1104+ D(A(A(A(A(A(A(A(A(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
10951105 }
1096- if (bK)
1097- then throw(bO._1)
1098- else $Tuple2(bO._2, bO._1)
1106+ if (bM)
1107+ then throw(bQ._1)
1108+ else $Tuple2(bQ._2, bQ._1)
10991109 }
11001110
11011111
11021112
1103-@Callable(aM)
1104-func calculateTokensInterest (bK) = {
1105- func t (u,l) = {
1106- let V = fraction(S(l), q, n)
1107- ((u + toString(V)) + ",")
1113+@Callable(aN)
1114+func calculateTokensInterest (bM) = {
1115+ func u (v,m) = {
1116+ let W = fraction(T(m), r, o)
1117+ ((v + toString(W)) + ",")
11081118 }
11091119
1110- let bO = {
1111- let w = N()
1112- let x = size(w)
1113- let y = ""
1114- func z (A,B) = if ((B >= x))
1115- then A
1116- else t(A, w[B])
1120+ let bQ = {
1121+ let x = O()
1122+ let y = size(x)
1123+ let z = ""
1124+ func A (B,C) = if ((C >= y))
1125+ then B
1126+ else u(B, x[C])
11171127
1118- func C (A,B) = if ((B >= x))
1119- then A
1128+ func D (B,C) = if ((C >= y))
1129+ then B
11201130 else throw("List size exceeds 8")
11211131
1122- C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1132+ D(A(A(A(A(A(A(A(A(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
11231133 }
1124- if (bK)
1125- then throw(bO)
1126- else $Tuple2(nil, bO)
1134+ if (bM)
1135+ then throw(bQ)
1136+ else $Tuple2(nil, bQ)
11271137 }
11281138
11291139
1130-@Verifier(cJ)
1131-func cK () = sigVerify(cJ.bodyBytes, cJ.proofs[0], cJ.senderPublicKey)
1140+@Verifier(cL)
1141+func cM () = sigVerify(cL.bodyBytes, cL.proofs[0], cL.senderPublicKey)
11321142
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')
55
66 let b = 20
77
88 let c = 1000000
99
1010 let d = Address(base58'3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS')
1111
12-let e = ["8DtMtpVwVq62sdcVFVzh6nuprgzG7LSjpLdHnQnrAFgY", "FLdC14nUVRyiSYjVrMo3X4g8rXQjLbNRaGAyQAm8V68V"]
12+let e = Address(base58'3N2M4PztorHwrfENp7D6LhYGgGodjiD1fjn')
1313
14-let f = Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')
14+let f = ["8DtMtpVwVq62sdcVFVzh6nuprgzG7LSjpLdHnQnrAFgY", "FLdC14nUVRyiSYjVrMo3X4g8rXQjLbNRaGAyQAm8V68V"]
1515
16-let g = "3N4KbMnJH8FaM94jqxNFe2oyZ8GB7Z8yVBP"
16+let g = Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')
1717
18-let h = [base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ']
18+let h = "3N4KbMnJH8FaM94jqxNFe2oyZ8GB7Z8yVBP"
1919
20-func i (j) = !((j != Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')))
20+let i = [base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ']
21+
22+func j (k) = !((k != Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')))
2123
2224
23-func k (l) = {
24- let m = l
25- if (("8DtMtpVwVq62sdcVFVzh6nuprgzG7LSjpLdHnQnrAFgY" == m))
25+func l (m) = {
26+ let n = m
27+ if (("8DtMtpVwVq62sdcVFVzh6nuprgzG7LSjpLdHnQnrAFgY" == n))
2628 then $Tuple4(2000000, 25000000, 80000000, 100000000)
27- else if (("FLdC14nUVRyiSYjVrMo3X4g8rXQjLbNRaGAyQAm8V68V" == m))
29+ else if (("FLdC14nUVRyiSYjVrMo3X4g8rXQjLbNRaGAyQAm8V68V" == n))
2830 then $Tuple4(2000000, 25000000, 80000000, 100000000)
29- else if (("25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT" == m))
31+ else if (("25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT" == n))
3032 then $Tuple4(2000000, 25000000, 80000000, 100000000)
31- else if (("WAVES" == m))
33+ else if (("WAVES" == n))
3234 then $Tuple4(2000000, 30000000, 80000000, 50000000)
3335 else $Tuple4(0, 20000000, 80000000, 80000000)
3436 }
3537
3638
37-let n = 100000000
39+let o = 100000000
3840
39-let o = 10000000000
41+let p = 10000000000
4042
41-let p = (n * n)
43+let q = (o * o)
4244
43-let q = 1440
45+let r = 1440
4446
45-func r (s) = {
46- func t (u,v) = ((u + toString(v)) + ",")
47+func s (t) = {
48+ func u (v,w) = ((v + toString(w)) + ",")
4749
48- let w = s
49- let x = size(w)
50- let y = ""
51- func z (A,B) = if ((B >= x))
52- then A
53- else t(A, w[B])
50+ let x = t
51+ let y = size(x)
52+ let z = ""
53+ func A (B,C) = if ((C >= y))
54+ then B
55+ else u(B, x[C])
5456
55- func C (A,B) = if ((B >= x))
56- then A
57+ func D (B,C) = if ((C >= y))
58+ then B
5759 else throw("List size exceeds 8")
5860
59- C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
61+ D(A(A(A(A(A(A(A(A(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
6062 }
6163
6264
63-func D (E) = {
64- let m = getInteger(this, E)
65- if ($isInstanceOf(m, "Int"))
65+func E (F) = {
66+ let n = getInteger(this, F)
67+ if ($isInstanceOf(n, "Int"))
6668 then {
67- let F = m
68- F
69+ let G = n
70+ G
6971 }
7072 else 0
7173 }
7274
7375
74-func G (E) = {
75- let m = getBoolean(this, E)
76- if ($isInstanceOf(m, "Boolean"))
76+func H (F) = {
77+ let n = getBoolean(this, F)
78+ if ($isInstanceOf(n, "Boolean"))
7779 then {
78- let F = m
79- F
80+ let G = n
81+ G
8082 }
8183 else false
8284 }
8385
8486
85-func H (E) = {
86- let m = getString(this, E)
87- if ($isInstanceOf(m, "String"))
87+func I (F) = {
88+ let n = getString(this, F)
89+ if ($isInstanceOf(n, "String"))
8890 then {
89- let F = m
90- F
91+ let G = n
92+ G
9193 }
9294 else ""
9395 }
9496
9597
96-func I (E) = {
97- let m = getBinary(this, E)
98- if ($isInstanceOf(m, "ByteVector"))
98+func J (F) = {
99+ let n = getBinary(this, F)
100+ if ($isInstanceOf(n, "ByteVector"))
99101 then {
100- let F = m
101- F
102+ let G = n
103+ G
102104 }
103105 else base58''
104106 }
105107
106108
107-func J (K) = {
108- let m = K
109- if ($isInstanceOf(m, "ByteVector"))
109+func K (L) = {
110+ let n = L
111+ if ($isInstanceOf(n, "ByteVector"))
110112 then {
111- let F = m
112- toBase58String(F)
113+ let G = n
114+ toBase58String(G)
113115 }
114116 else "WAVES"
115117 }
116118
117119
118-func L (l) = if ((l == "WAVES"))
120+func M (m) = if ((m == "WAVES"))
119121 then unit
120- else fromBase58String(l)
122+ else fromBase58String(m)
121123
122124
123-func M (l) = if ((l == "WAVES"))
125+func N (m) = if ((m == "WAVES"))
124126 then wavesBalance(this).available
125- else assetBalance(this, fromBase58String(l))
127+ else assetBalance(this, fromBase58String(m))
126128
127129
128-func N () = split(H("setup_tokens"), ",")
130+func O () = split(I("setup_tokens"), ",")
129131
130132
131-func O () = {
132- let P = H("setup_maxsupply")
133- if ((P == ""))
133+func P () = {
134+ let Q = I("setup_maxsupply")
135+ if ((Q == ""))
134136 then [-1, -1, -1, -1, -1, -1, -1]
135- else split(P, ",")
137+ else split(Q, ",")
136138 }
137139
138140
139-func Q (l) = {
140- let R = fraction(D(("total_supplied_" + l)), D((l + "_sRate")), p)
141- if ((R == 0))
141+func R (m) = {
142+ let S = fraction(E(("total_supplied_" + m)), E((m + "_sRate")), q)
143+ if ((S == 0))
142144 then 0
143- else fraction(n, fraction(D(("total_borrowed_" + l)), D((l + "_bRate")), p), R)
145+ else fraction(o, fraction(E(("total_borrowed_" + m)), E((m + "_bRate")), q), S)
144146 }
145147
146148
147-func S (l) = {
148- let T = Q(l)
149- let U = k(l)
150- let V = (U._1 + (if ((U._3 >= T))
151- then fraction(T, U._2, U._3)
152- else (U._2 + fraction((T - U._3), U._4, (100000000 - U._3)))))
153- max([fraction(V, n, (q * 365)), 1])
149+func T (m) = {
150+ let U = R(m)
151+ let V = l(m)
152+ let W = (V._1 + (if ((V._3 >= U))
153+ then fraction(U, V._2, V._3)
154+ else (V._2 + fraction((U - V._3), V._4, (100000000 - V._3)))))
155+ max([fraction(W, o, (r * 365)), 1])
154156 }
155157
156158
157-func W (l) = {
158- let X = S(l)
159- let T = Q(l)
160- let Y = D("lastRateHeight")
161- let Z = max([D((l + "_bRate")), p])
162- let aa = (Z + ((height - Y) * X))
163- let ab = max([D((l + "_sRate")), p])
164- let ac = (ab + ((((height - Y) * fraction(X, T, n)) * (100 - b)) / 100))
165-[IntegerEntry((l + "_sRate"), ac), IntegerEntry((l + "_bRate"), aa), IntegerEntry("lastRateHeight", height)]
159+func X (m) = {
160+ let Y = T(m)
161+ let U = R(m)
162+ let Z = E("lastRateHeight")
163+ let aa = max([E((m + "_bRate")), q])
164+ let ab = (aa + ((height - Z) * Y))
165+ let ac = max([E((m + "_sRate")), q])
166+ let ad = (ac + ((((height - Z) * fraction(Y, U, o)) * (100 - b)) / 100))
167+[IntegerEntry((m + "_sRate"), ad), IntegerEntry((m + "_bRate"), ab), IntegerEntry("lastRateHeight", height)]
166168 }
167169
168170
169-func ad (l,ae) = {
170- func t (u,af) = {
171- let ag = W(af)
172- $Tuple2(if ((af != l))
173- then u._1
174- else if ((ae == "sRate"))
175- then ag[0].value
176- else ag[1].value, (u._2 ++ ag))
171+func ae (m,af) = {
172+ func u (v,ag) = {
173+ let ah = X(ag)
174+ $Tuple2(if ((ag != m))
175+ then v._1
176+ else if ((af == "sRate"))
177+ then ah[0].value
178+ else ah[1].value, (v._2 ++ ah))
177179 }
178180
179- let w = N()
180- let x = size(w)
181- let y = $Tuple2(0, nil)
182- func z (A,B) = if ((B >= x))
183- then A
184- else t(A, w[B])
181+ let x = O()
182+ let y = size(x)
183+ let z = $Tuple2(0, nil)
184+ func A (B,C) = if ((C >= y))
185+ then B
186+ else u(B, x[C])
185187
186- func C (A,B) = if ((B >= x))
187- then A
188+ func D (B,C) = if ((C >= y))
189+ then B
188190 else throw("List size exceeds 8")
189191
190- C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
192+ D(A(A(A(A(A(A(A(A(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
191193 }
192194
193195
194-func ah (l) = {
195- let ai = W(l)
196- let R = fraction(D(("total_supplied_" + l)), ai[0].value, p)
197- fraction(n, fraction(D(("total_borrowed_" + l)), ai[1].value, p), R)
196+func ai (m) = {
197+ let aj = X(m)
198+ let S = fraction(E(("total_supplied_" + m)), aj[0].value, q)
199+ fraction(o, fraction(E(("total_borrowed_" + m)), aj[1].value, q), S)
198200 }
199201
200202
201-func aj () = {
202- func t (u,af) = (u ++ W(af))
203+func ak () = {
204+ func u (v,ag) = (v ++ X(ag))
203205
204- let w = N()
205- let x = size(w)
206- let y = nil
207- func z (A,B) = if ((B >= x))
208- then A
209- else t(A, w[B])
206+ let x = O()
207+ let y = size(x)
208+ let z = nil
209+ func A (B,C) = if ((C >= y))
210+ then B
211+ else u(B, x[C])
210212
211- func C (A,B) = if ((B >= x))
212- then A
213+ func D (B,C) = if ((C >= y))
214+ then B
213215 else throw("List size exceeds 8")
214216
215- C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
217+ D(A(A(A(A(A(A(A(A(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
216218 }
217219
218220
219-func ak (l) = {
220- let al = invoke(addressFromStringValue(g), "getTWAP60", [l, false], nil)
221- if ((al == al))
221+func al (m) = {
222+ let am = invoke(addressFromStringValue(h), "getTWAP60", [m, false], nil)
223+ if ((am == am))
222224 then {
223- let am = {
224- let m = al
225- if ($isInstanceOf(m, "(Int, Int)"))
225+ let an = {
226+ let n = am
227+ if ($isInstanceOf(n, "(Int, Int)"))
226228 then {
227- let an = m
228- an
229+ let ao = n
230+ ao
229231 }
230232 else throw("error of price oracle")
231233 }
232- if ((am == am))
233- then am
234+ if ((an == an))
235+ then an
234236 else throw("Strict value is not equal to itself.")
235237 }
236238 else throw("Strict value is not equal to itself.")
237239 }
238240
239241
240-func ao (l) = {
241- let ap = if ((l == "WAVES"))
242+func ap (m) = {
243+ let aq = if ((m == "WAVES"))
242244 then 8
243- else value(assetInfo(fromBase58String(l))).decimals
244- pow(10, 0, ap, 0, 0, DOWN)
245+ else value(assetInfo(fromBase58String(m))).decimals
246+ pow(10, 0, aq, 0, 0, DOWN)
245247 }
246248
247249
248-func aq (j) = {
249- let ar = invoke(this, "getUserCollateral", [false, j, true, ""], nil)
250- if ((ar == ar))
250+func ar (k) = {
251+ let as = invoke(this, "getUserCollateral", [false, k, true, ""], nil)
252+ if ((as == as))
251253 then {
252- let as = {
253- let m = ar
254- if ($isInstanceOf(m, "Int"))
254+ let at = {
255+ let n = as
256+ if ($isInstanceOf(n, "Int"))
255257 then {
256- let an = m
257- an
258+ let ao = n
259+ ao
258260 }
259261 else throw("issue while doing in-dapp invocation")
260262 }
261- if ((as == as))
262- then as
263+ if ((at == at))
264+ then at
263265 else throw("Strict value is not equal to itself.")
264266 }
265267 else throw("Strict value is not equal to itself.")
266268 }
267269
268270
269-func at (l,au,j) = if (!(G("setup_active")))
271+func au (m,av,k) = if (!(H("setup_active")))
270272 then throw("market is stopped")
271273 else {
272- let av = ad(l, "sRate")
273- let aw = av._1
274- let ax = av._2
275- let ay = fraction(au, p, aw, DOWN)
276- let az = {
277- let m = getString(("setup_maxSupply_" + l))
278- if ($isInstanceOf(m, "String"))
274+ let aw = ae(m, "sRate")
275+ let ax = aw._1
276+ let ay = aw._2
277+ let az = fraction(av, q, ax, DOWN)
278+ let aA = {
279+ let n = getString(("setup_maxSupply_" + m))
280+ if ($isInstanceOf(n, "String"))
279281 then {
280- let an = m
281- parseIntValue(an)
282+ let ao = n
283+ parseIntValue(ao)
282284 }
283285 else 0
284286 }
285- let aA = ak(l)
286- let aB = (D(((j + "_supplied_") + l)) + ay)
287- let V = ad(l, "sRate")._1
288- let aC = ao(l)
289- let aD = fraction(fraction(aB, V, p), aA._1, aC)
290- if ((indexOf(H("setup_tokens"), l) == unit))
287+ let aB = al(m)
288+ let aC = (E(((k + "_supplied_") + m)) + az)
289+ let W = ae(m, "sRate")._1
290+ let aD = ap(m)
291+ let aE = fraction(fraction(aC, W, q), aB._1, aD)
292+ if ((indexOf(I("setup_tokens"), m) == unit))
291293 then throw("this asset is not supported by the market")
292- else if (if ((az != 0))
293- then (aD > az)
294+ else if (if ((aA != 0))
295+ then (aE > aA)
294296 else false)
295297 then throw("max total supply for this token reached in the pool")
296- else $Tuple2(([IntegerEntry(((j + "_supplied_") + l), aB), IntegerEntry(("total_supplied_" + l), (D(("total_supplied_" + l)) + ay))] ++ ax), au)
298+ else $Tuple2(([IntegerEntry(((k + "_supplied_") + m), aC), IntegerEntry(("total_supplied_" + m), (E(("total_supplied_" + m)) + az))] ++ ay), av)
297299 }
298300
299301
300-func aE (l,au,j) = {
301- let aF = ad(l, "bRate")
302- let aG = aF._1
303- let ax = aF._2
304- let ay = fraction(au, p, aG, CEILING)
305- let aH = invoke(this, "getUserCollateral", [false, j, true, ((l + ",borrowed,") + toString(ay))], nil)
306- if ((aH == aH))
302+func aF (m,av,k) = {
303+ let aG = ae(m, "bRate")
304+ let aH = aG._1
305+ let ay = aG._2
306+ let az = fraction(av, q, aH, CEILING)
307+ let aI = invoke(this, "getUserCollateral", [false, k, true, ((m + ",borrowed,") + toString(az))], nil)
308+ if ((aI == aI))
307309 then {
308- let aI = {
309- let m = aH
310- if ($isInstanceOf(m, "Int"))
310+ let aJ = {
311+ let n = aI
312+ if ($isInstanceOf(n, "Int"))
311313 then {
312- let an = m
313- an
314+ let ao = n
315+ ao
314316 }
315317 else throw("can't get user collateral value")
316318 }
317- if (!(G("setup_active")))
319+ if (!(H("setup_active")))
318320 then throw("market is stopped")
319321 else {
320- let aJ = D(("total_supplied_" + l))
321- let aK = D(("total_borrowed_" + l))
322- let aL = D(((j + "_borrowed_") + l))
323- if ((ay > (aJ - aK)))
322+ let aK = E(("total_supplied_" + m))
323+ let aL = E(("total_borrowed_" + m))
324+ let aM = E(((k + "_borrowed_") + m))
325+ if ((az > (aK - aL)))
324326 then throw("this amount is not available")
325- else $Tuple2(([IntegerEntry(((j + "_borrowed_") + l), (aL + ay)), IntegerEntry(("total_borrowed_" + l), (aK + ay))] ++ ax), au)
327+ else $Tuple2(([IntegerEntry(((k + "_borrowed_") + m), (aM + az)), IntegerEntry(("total_borrowed_" + m), (aL + az))] ++ ay), av)
326328 }
327329 }
328330 else throw("Strict value is not equal to itself.")
329331 }
330332
331333
332-@Callable(aM)
333-func flashPosition (aN,aO,aP,aQ,aR,aS,aT) = {
334- let aU = aE(aP, aQ, aN)
335- let aV = L(aP)
336- let aW = reentrantInvoke(addressFromStringValue(aR), aS, split(aT, ","), [AttachedPayment(aV, aQ)])
337- if ((aW == aW))
334+@Callable(aN)
335+func flashPosition (aO,aP,aQ,aR,aS,aT,aU) = {
336+ let aV = aF(aQ, aR, aO)
337+ let aW = M(aQ)
338+ let aX = reentrantInvoke(addressFromStringValue(aS), aT, split(aU, ","), [AttachedPayment(aW, aR)])
339+ if ((aX == aX))
338340 then {
339- let aX = {
340- let aY = aW
341- if ($isInstanceOf(aY, "Int"))
342- then aY
343- else throw(($getType(aY) + " couldn't be cast to Int"))
341+ let aY = {
342+ let aZ = aX
343+ if ($isInstanceOf(aZ, "Int"))
344+ then aZ
345+ else throw(($getType(aZ) + " couldn't be cast to Int"))
344346 }
345- if ((aX == aX))
347+ if ((aY == aY))
346348 then {
347- let aZ = at(aO, aX, aN)
348- let aI = {
349- let aY = invoke(this, "getUserCollateral", [false, aN, true, ((aO + ",supplied,") + toString(aX))], nil)
350- if ($isInstanceOf(aY, "Int"))
351- then aY
352- else throw(($getType(aY) + " couldn't be cast to Int"))
349+ let ba = au(aP, aY, aO)
350+ let aJ = {
351+ let aZ = invoke(this, "getUserCollateral", [false, aO, true, ((aP + ",supplied,") + toString(aY))], nil)
352+ if ($isInstanceOf(aZ, "Int"))
353+ then aZ
354+ else throw(($getType(aZ) + " couldn't be cast to Int"))
353355 }
354- if ((aI == aI))
356+ if ((aJ == aJ))
355357 then {
356- let ba = {
357- let aY = invoke(this, "getUserCollateral", [false, aN, true, ((aP + ",borrowed,") + toString(aQ))], nil)
358- if ($isInstanceOf(aY, "Int"))
359- then aY
360- else throw(($getType(aY) + " couldn't be cast to Int"))
358+ let bb = {
359+ let aZ = invoke(this, "getUserCollateral", [false, aO, true, ((aQ + ",borrowed,") + toString(aR))], nil)
360+ if ($isInstanceOf(aZ, "Int"))
361+ then aZ
362+ else throw(($getType(aZ) + " couldn't be cast to Int"))
361363 }
362- if ((ba == ba))
363- then if ((ba > aI))
364+ if ((bb == bb))
365+ then if ((bb > aJ))
364366 then throw("not enough collateral provided")
365- else (aU._1 ++ aZ._1)
367+ else (aV._1 ++ ba._1)
366368 else throw("Strict value is not equal to itself.")
367369 }
368370 else throw("Strict value is not equal to itself.")
369371 }
370372 else throw("Strict value is not equal to itself.")
371373 }
372374 else throw("Strict value is not equal to itself.")
373375 }
374376
375377
376378
377-@Callable(aM)
378-func supply () = if (if ((size(aM.payments) != 1))
379+@Callable(aN)
380+func supply () = if (if ((size(aN.payments) != 1))
379381 then true
380- else (aM.payments[0].amount == 0))
382+ else (aN.payments[0].amount == 0))
381383 then throw("1 payment has to be attached")
382384 else {
383- let l = J(aM.payments[0].assetId)
384- let au = aM.payments[0].amount
385- at(l, au, toString(aM.caller))
385+ let m = K(aN.payments[0].assetId)
386+ let av = aN.payments[0].amount
387+ let bc = invoke(e, "lendAction", [toString(aN.caller), m], nil)
388+ if ((bc == bc))
389+ then au(m, av, toString(aN.caller))
390+ else throw("Strict value is not equal to itself.")
386391 }
387392
388393
389394
390-@Callable(aM)
391-func withdraw (l,au) = {
392- let bb = ad(l, "sRate")
393- let aw = bb._1
394- let ax = bb._2
395- let ay = fraction(au, p, aw, CEILING)
396- let j = toString(aM.caller)
397- let aJ = D(("total_supplied_" + l))
398- let aK = D(("total_borrowed_" + l))
399- let bc = D(((j + "_supplied_") + l))
400- let aL = D(((j + "_borrowed_") + l))
401- let aH = invoke(this, "getUserCollateral", [false, j, true, ((l + ",supplied,") + toString(-(ay)))], nil)
402- if ((aH == aH))
395+@Callable(aN)
396+func withdraw (m,av) = {
397+ let bd = ae(m, "sRate")
398+ let ax = bd._1
399+ let ay = bd._2
400+ let az = fraction(av, q, ax, CEILING)
401+ let k = toString(aN.caller)
402+ let aK = E(("total_supplied_" + m))
403+ let aL = E(("total_borrowed_" + m))
404+ let be = E(((k + "_supplied_") + m))
405+ let aM = E(((k + "_borrowed_") + m))
406+ let bc = invoke(e, "lendAction", [toString(aN.caller), m], nil)
407+ if ((bc == bc))
403408 then {
404- let aI = {
405- let m = aH
406- if ($isInstanceOf(m, "Int"))
407- then {
408- let an = m
409- an
409+ let aI = invoke(this, "getUserCollateral", [false, k, true, ((m + ",supplied,") + toString(-(az)))], nil)
410+ if ((aI == aI))
411+ then {
412+ let aJ = {
413+ let n = aI
414+ if ($isInstanceOf(n, "Int"))
415+ then {
416+ let ao = n
417+ ao
418+ }
419+ else throw("can't get user collateral value")
410420 }
411- else throw("can't get user collateral value")
412- }
413- if (!(G("setup_active")))
414- then throw("market is stopped")
415- else if ((0 > aI))
416- then throw("you dont have enough collateral for this operation")
417- else if ((ay > (aJ - aK)))
418- then throw("this amount is not available on the market")
419- else if ((ay > (bc - aL)))
420- then throw("this amount is not available for this user")
421- else ([IntegerEntry(((j + "_supplied_") + l), (D(((j + "_supplied_") + l)) - ay)), IntegerEntry(("total_supplied_" + l), (D(("total_supplied_" + l)) - ay)), ScriptTransfer(aM.caller, au, L(l))] ++ ax)
421+ if (!(H("setup_active")))
422+ then throw("market is stopped")
423+ else if ((0 > aJ))
424+ then throw("you dont have enough collateral for this operation")
425+ else if ((az > (aK - aL)))
426+ then throw("this amount is not available on the market")
427+ else if ((az > (be - aM)))
428+ then throw("this amount is not available for this user")
429+ else ([IntegerEntry(((k + "_supplied_") + m), (E(((k + "_supplied_") + m)) - az)), IntegerEntry(("total_supplied_" + m), (E(("total_supplied_" + m)) - az)), ScriptTransfer(aN.caller, av, M(m))] ++ ay)
430+ }
431+ else throw("Strict value is not equal to itself.")
422432 }
423433 else throw("Strict value is not equal to itself.")
424434 }
425435
426436
427437
428-@Callable(aM)
429-func borrow (l,au) = {
430- let j = toString(aM.caller)
431- let bd = aE(l, au, j)
432- let ay = bd._2
433- (bd._1 ++ [ScriptTransfer(aM.caller, ay, L(l))])
438+@Callable(aN)
439+func borrow (m,av) = {
440+ let k = toString(aN.caller)
441+ let bf = aF(m, av, k)
442+ let az = bf._2
443+ (bf._1 ++ [ScriptTransfer(aN.caller, az, M(m))])
434444 }
435445
436446
437447
438-@Callable(aM)
439-func repay () = if (!(G("setup_active")))
448+@Callable(aN)
449+func repay () = if (!(H("setup_active")))
440450 then throw("market is stopped")
441- else if (if ((size(aM.payments) != 1))
451+ else if (if ((size(aN.payments) != 1))
442452 then true
443- else (aM.payments[0].amount == 0))
453+ else (aN.payments[0].amount == 0))
444454 then throw("1 payment has to be attached")
445455 else {
446- let l = J(aM.payments[0].assetId)
447- let au = aM.payments[0].amount
448- let be = ad(l, "bRate")
449- let aG = be._1
450- let ax = be._2
451- let ay = fraction(au, p, aG, CEILING)
452- let j = toString(aM.caller)
453- let aJ = D(("total_supplied_" + l))
454- let aK = D(("total_borrowed_" + l))
455- let aL = D(((j + "_borrowed_") + l))
456- let bf = (aL - ay)
457- let bg = if ((bf >= 0))
458- then ay
459- else aL
460- if ((indexOf(H("setup_tokens"), l) == unit))
456+ let m = K(aN.payments[0].assetId)
457+ let av = aN.payments[0].amount
458+ let bg = ae(m, "bRate")
459+ let aH = bg._1
460+ let ay = bg._2
461+ let az = fraction(av, q, aH, CEILING)
462+ let k = toString(aN.caller)
463+ let aK = E(("total_supplied_" + m))
464+ let aL = E(("total_borrowed_" + m))
465+ let aM = E(((k + "_borrowed_") + m))
466+ let bh = (aM - az)
467+ let bi = if ((bh >= 0))
468+ then az
469+ else aM
470+ if ((indexOf(I("setup_tokens"), m) == unit))
461471 then throw("this asset is not supported by the market")
462- else (([IntegerEntry(((j + "_borrowed_") + l), (aL - bg)), IntegerEntry(("total_borrowed_" + l), (aK - bg))] ++ ax) ++ (if ((bf >= 0))
472+ else (([IntegerEntry(((k + "_borrowed_") + m), (aM - bi)), IntegerEntry(("total_borrowed_" + m), (aL - bi))] ++ ay) ++ (if ((bh >= 0))
463473 then nil
464- else [ScriptTransfer(aM.caller, -(bf), aM.payments[0].assetId)]))
474+ else [ScriptTransfer(aN.caller, -(bh), aN.payments[0].assetId)]))
465475 }
466476
467477
468478
469-@Callable(aM)
470-func repayFor (j) = if (!(G("setup_active")))
479+@Callable(aN)
480+func repayFor (k) = if (!(H("setup_active")))
471481 then throw("market is stopped")
472- else if (if ((size(aM.payments) != 1))
482+ else if (if ((size(aN.payments) != 1))
473483 then true
474- else (aM.payments[0].amount == 0))
484+ else (aN.payments[0].amount == 0))
475485 then throw("1 payment has to be attached")
476486 else {
477- let l = J(aM.payments[0].assetId)
478- let au = aM.payments[0].amount
479- let bh = ad(l, "bRate")
480- let aG = bh._1
481- let ax = bh._2
482- let ay = fraction(au, p, aG, CEILING)
483- let aJ = D(("total_supplied_" + l))
484- let aK = D(("total_borrowed_" + l))
485- let aL = D(((j + "_borrowed_") + l))
486- let bf = (aL - ay)
487- let bg = if ((bf >= 0))
488- then ay
489- else aL
490- if ((indexOf(H("setup_tokens"), l) == unit))
487+ let m = K(aN.payments[0].assetId)
488+ let av = aN.payments[0].amount
489+ let bj = ae(m, "bRate")
490+ let aH = bj._1
491+ let ay = bj._2
492+ let az = fraction(av, q, aH, CEILING)
493+ let aK = E(("total_supplied_" + m))
494+ let aL = E(("total_borrowed_" + m))
495+ let aM = E(((k + "_borrowed_") + m))
496+ let bh = (aM - az)
497+ let bi = if ((bh >= 0))
498+ then az
499+ else aM
500+ if ((indexOf(I("setup_tokens"), m) == unit))
491501 then throw("this asset is not supported by the market")
492- else (([IntegerEntry(((j + "_borrowed_") + l), (aL - bg)), IntegerEntry(("total_borrowed_" + l), (aK - bg))] ++ ax) ++ (if ((bf >= 0))
502+ else (([IntegerEntry(((k + "_borrowed_") + m), (aM - bi)), IntegerEntry(("total_borrowed_" + m), (aL - bi))] ++ ay) ++ (if ((bh >= 0))
493503 then nil
494- else [ScriptTransfer(aM.caller, -(bf), aM.payments[0].assetId)]))
504+ else [ScriptTransfer(aN.caller, -(bh), aN.payments[0].assetId)]))
495505 }
496506
497507
498508
499-@Callable(aM)
500-func stakeTokenAll (l) = if ((aM.caller != this))
509+@Callable(aN)
510+func stakeTokenAll (m) = if ((aN.caller != this))
501511 then throw("only for internal smart contract invocations")
502512 else {
503- let ay = M(l)
504- let bi = invoke(this, "stakeToken", [l, ay], nil)
505- if ((bi == bi))
513+ let az = N(m)
514+ let bk = invoke(this, "stakeToken", [m, az], nil)
515+ if ((bk == bk))
506516 then nil
507517 else throw("Strict value is not equal to itself.")
508518 }
509519
510520
511521
512-@Callable(aM)
513-func stakeToken (l,ay) = if ((aM.caller != this))
522+@Callable(aN)
523+func stakeToken (m,az) = if ((aN.caller != this))
514524 then throw("only for internal smart contract invocations")
515- else if ((l == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
525+ else if ((m == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
516526 then {
517- let bj = D("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
518- let bi = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', ay)])
519- if ((bi == bi))
520- then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (bj + ay))]
527+ let bl = E("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
528+ let bk = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', az)])
529+ if ((bk == bk))
530+ then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (bl + az))]
521531 else throw("Strict value is not equal to itself.")
522532 }
523- else if ((l == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
533+ else if ((m == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
524534 then {
525- let bj = D("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
526- let bi = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', ay)])
527- if ((bi == bi))
528- then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bj + ay))]
535+ let bl = E("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
536+ let bk = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', az)])
537+ if ((bk == bk))
538+ then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bl + az))]
529539 else throw("Strict value is not equal to itself.")
530540 }
531- else if ((l == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
541+ else if ((m == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
532542 then {
533- let bj = D("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
534- let bi = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', ay)])
535- if ((bi == bi))
536- then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bj + ay))]
543+ let bl = E("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
544+ let bk = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', az)])
545+ if ((bk == bk))
546+ then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bl + az))]
537547 else throw("Strict value is not equal to itself.")
538548 }
539549 else nil
540550
541551
542552
543-@Callable(aM)
544-func unstakeToken (l,ay) = if ((aM.caller != this))
553+@Callable(aN)
554+func unstakeToken (m,az) = if ((aN.caller != this))
545555 then throw("only for internal smart contract invocations")
546- else if ((l == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
556+ else if ((m == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
547557 then {
548- let bj = D("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
549- let bi = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [ay], nil)
550- if ((bi == bi))
551- then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bj - ay))]
558+ let bl = E("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
559+ let bk = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [az], nil)
560+ if ((bk == bk))
561+ then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bl - az))]
552562 else throw("Strict value is not equal to itself.")
553563 }
554- else if ((l == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
564+ else if ((m == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
555565 then {
556- let bj = D("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
557- let bi = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [ay], nil)
558- if ((bi == bi))
566+ let bl = E("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
567+ let bk = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [az], nil)
568+ if ((bk == bk))
559569 then {
560- let bk = M("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
561- if ((bk == bk))
570+ let bm = N("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
571+ if ((bm == bm))
562572 then {
563- let bl = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
564- if ((bl == bl))
573+ let bn = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
574+ if ((bn == bn))
565575 then {
566- let bm = {
567- let m = bl
568- if ($isInstanceOf(m, "List[Any]"))
576+ let bo = {
577+ let n = bn
578+ if ($isInstanceOf(n, "List[Any]"))
569579 then {
570- let an = m
571- let bn = an[1]
572- let bo = bn
573- if ($isInstanceOf(bo, "String"))
580+ let ao = n
581+ let bp = ao[1]
582+ let bq = bp
583+ if ($isInstanceOf(bq, "String"))
574584 then {
575- let bn = bo
576- let bp = parseIntValue(split(split(bn, "_")[1], ":")[1])
577- let bq = parseIntValue(split(split(bn, "_")[0], ":")[1])
578- if (if ((bp != 0))
585+ let bp = bq
586+ let br = parseIntValue(split(split(bp, "_")[1], ":")[1])
587+ let bs = parseIntValue(split(split(bp, "_")[0], ":")[1])
588+ if (if ((br != 0))
579589 then true
580- else (bq != 0))
590+ else (bs != 0))
581591 then {
582- let br = M("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
583- if ((br == br))
592+ let bt = N("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
593+ if ((bt == bt))
584594 then {
585- let bs = M("WAVES")
586- if ((bs == bs))
595+ let bu = N("WAVES")
596+ if ((bu == bu))
587597 then {
588- let al = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
589- if ((al == al))
598+ let am = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
599+ if ((am == am))
590600 then {
591- let bt = M("WAVES")
592- if ((bt == bt))
601+ let bv = N("WAVES")
602+ if ((bv == bv))
593603 then {
594- let bu = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (bt - bs))])
595- if ((bu == bu))
604+ let bw = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (bv - bu))])
605+ if ((bw == bw))
596606 then {
597- let bv = M("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
598- if ((bv == bv))
607+ let bx = N("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
608+ if ((bx == bx))
599609 then {
600- let bw = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (bv - br))])
601- if ((bw == bw))
610+ let by = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (bx - bt))])
611+ if ((by == by))
602612 then {
603- let bx = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (M("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - bk)], nil)
604- if ((bx == bx))
613+ let bz = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (N("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - bm)], nil)
614+ if ((bz == bz))
605615 then 2
606616 else throw("Strict value is not equal to itself.")
607617 }
608618 else throw("Strict value is not equal to itself.")
609619 }
610620 else throw("Strict value is not equal to itself.")
611621 }
612622 else throw("Strict value is not equal to itself.")
613623 }
614624 else throw("Strict value is not equal to itself.")
615625 }
616626 else throw("Strict value is not equal to itself.")
617627 }
618628 else throw("Strict value is not equal to itself.")
619629 }
620630 else throw("Strict value is not equal to itself.")
621631 }
622632 else 1
623633 }
624634 else 1
625635 }
626636 else 0
627637 }
628- if ((bm == bm))
629- then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bj - ay))]
638+ if ((bo == bo))
639+ then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bl - az))]
630640 else throw("Strict value is not equal to itself.")
631641 }
632642 else throw("Strict value is not equal to itself.")
633643 }
634644 else throw("Strict value is not equal to itself.")
635645 }
636646 else throw("Strict value is not equal to itself.")
637647 }
638648 else nil
639649
640650
641651
642-@Callable(aM)
643-func addInterest (l,ay) = if ((aM.caller != this))
652+@Callable(aN)
653+func addInterest (m,az) = if ((aN.caller != this))
644654 then throw("only for self invocation")
645655 else {
646- let by = D(("autostake_lastEarned_" + l))
647- let bz = D(("autostake_lastBlock_" + l))
648- let bA = fraction(ay, 80, 100)
649- let bB = if (if ((bz == height))
656+ let bA = E(("autostake_lastEarned_" + m))
657+ let bB = E(("autostake_lastBlock_" + m))
658+ let bC = fraction(az, 80, 100)
659+ let bD = if (if ((bB == height))
650660 then true
651- else (ay == 0))
661+ else (az == 0))
652662 then nil
653- else [IntegerEntry(("autostake_preLastEarned_" + l), by), IntegerEntry(("autostake_preLastBlock_" + l), bz), IntegerEntry(("autostake_lastEarned_" + l), (by + bA)), IntegerEntry(("autostake_lastBlock_" + l), height)]
654- (bB ++ [IntegerEntry((l + "_sRate"), (D((l + "_sRate")) + fraction(p, bA, D(("total_supplied_" + l)))))])
663+ else [IntegerEntry(("autostake_preLastEarned_" + m), bA), IntegerEntry(("autostake_preLastBlock_" + m), bB), IntegerEntry(("autostake_lastEarned_" + m), (bA + bC)), IntegerEntry(("autostake_lastBlock_" + m), height)]
664+ (bD ++ [IntegerEntry((m + "_sRate"), (E((m + "_sRate")) + fraction(q, bC, E(("total_supplied_" + m)))))])
655665 }
656666
657667
658668
659-@Callable(aM)
669+@Callable(aN)
660670 func addInterestEXTERNAL () = {
661- let ay = fraction(aM.payments[0].amount, 80, 100)
662- let K = aM.payments[0].assetId
663- let l = J(K)
664- let by = D(("autostake_lastEarned_" + l))
665- let bz = D(("autostake_lastBlock_" + l))
666- let bB = if (if ((bz == height))
671+ let az = fraction(aN.payments[0].amount, 80, 100)
672+ let L = aN.payments[0].assetId
673+ let m = K(L)
674+ let bA = E(("autostake_lastEarned_" + m))
675+ let bB = E(("autostake_lastBlock_" + m))
676+ let bD = if (if ((bB == height))
667677 then true
668- else (ay == 0))
678+ else (az == 0))
669679 then nil
670- else [IntegerEntry(("autostake_preLastEarned_" + l), by), IntegerEntry(("autostake_preLastBlock_" + l), bz), IntegerEntry(("autostake_lastEarned_" + l), (by + ay)), IntegerEntry(("autostake_lastBlock_" + l), height)]
671- (bB ++ [IntegerEntry((l + "_sRate"), (D((l + "_sRate")) + fraction(p, ay, D(("total_supplied_" + l)))))])
680+ else [IntegerEntry(("autostake_preLastEarned_" + m), bA), IntegerEntry(("autostake_preLastBlock_" + m), bB), IntegerEntry(("autostake_lastEarned_" + m), (bA + az)), IntegerEntry(("autostake_lastBlock_" + m), height)]
681+ (bD ++ [IntegerEntry((m + "_sRate"), (E((m + "_sRate")) + fraction(q, az, E(("total_supplied_" + m)))))])
672682 }
673683
674684
675685
676-@Callable(aM)
677-func preInit (bC,bD,bE,bF) = {
678- func t (u,af) = (u ++ [IntegerEntry((af + "_bRate"), p), IntegerEntry((af + "_sRate"), p)])
686+@Callable(aN)
687+func preInit (bE,bF,bG,bH) = {
688+ func u (v,ag) = (v ++ [IntegerEntry((ag + "_bRate"), q), IntegerEntry((ag + "_sRate"), q)])
679689
680- if ((aM.caller != this))
690+ if ((aN.caller != this))
681691 then throw("admin only")
682692 else {
683- let ai = {
684- let w = split(bC, ",")
685- let x = size(w)
686- let y = nil
687- func z (A,B) = if ((B >= x))
688- then A
689- else t(A, w[B])
693+ let aj = {
694+ let x = split(bE, ",")
695+ let y = size(x)
696+ let z = nil
697+ func A (B,C) = if ((C >= y))
698+ then B
699+ else u(B, x[C])
690700
691- func C (A,B) = if ((B >= x))
692- then A
701+ func D (B,C) = if ((C >= y))
702+ then B
693703 else throw("List size exceeds 8")
694704
695- C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
705+ D(A(A(A(A(A(A(A(A(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
696706 }
697- ([StringEntry("setup_tokens", bC), StringEntry("setup_ltvs", bD), StringEntry("setup_lts", bE), StringEntry("setup_penalties", bF), BooleanEntry("setup_active", true)] ++ ai)
707+ ([StringEntry("setup_tokens", bE), StringEntry("setup_ltvs", bF), StringEntry("setup_lts", bG), StringEntry("setup_penalties", bH), BooleanEntry("setup_active", true)] ++ aj)
698708 }
699709 }
700710
701711
702712
703-@Callable(aM)
704-func initNewToken (af,bG,bH,bI) = if ((aM.caller != this))
713+@Callable(aN)
714+func initNewToken (ag,bI,bJ,bK) = if ((aN.caller != this))
705715 then throw("admin only")
706- else [StringEntry("setup_tokens", ((H("setup_tokens") + ",") + af)), StringEntry("setup_ltvs", ((H("setup_ltvs") + ",") + bG)), StringEntry("setup_lts", ((H("setup_lts") + ",") + bH)), StringEntry("setup_penalties", ((H("setup_penalties") + ",") + bI)), IntegerEntry((af + "_bRate"), p), IntegerEntry((af + "_sRate"), p)]
716+ else [StringEntry("setup_tokens", ((I("setup_tokens") + ",") + ag)), StringEntry("setup_ltvs", ((I("setup_ltvs") + ",") + bI)), StringEntry("setup_lts", ((I("setup_lts") + ",") + bJ)), StringEntry("setup_penalties", ((I("setup_penalties") + ",") + bK)), IntegerEntry((ag + "_bRate"), q), IntegerEntry((ag + "_sRate"), q)]
707717
708718
709719
710-@Callable(aM)
711-func updateParameter (E,bJ) = if (if (if ((aM.caller != this))
712- then (aM.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
720+@Callable(aN)
721+func updateParameter (F,bL) = if (if (if ((aN.caller != this))
722+ then (aN.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
713723 else false)
714- then (aM.caller != Address(base58'3N8ZpuFLVKwxbpVFe1Pcs14hLCrujizpQsa'))
724+ then (aN.caller != Address(base58'3N8ZpuFLVKwxbpVFe1Pcs14hLCrujizpQsa'))
715725 else false)
716726 then throw("admin only")
717- else [IntegerEntry(E, parseIntValue(bJ))]
727+ else [IntegerEntry(F, parseIntValue(bL))]
718728
719729
720730
721-@Callable(aM)
722-func updateString (E,bJ) = if (if (if ((aM.caller != this))
723- then (aM.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
731+@Callable(aN)
732+func updateString (F,bL) = if (if (if ((aN.caller != this))
733+ then (aN.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
724734 else false)
725- then (aM.caller != Address(base58'3N8ZpuFLVKwxbpVFe1Pcs14hLCrujizpQsa'))
735+ then (aN.caller != Address(base58'3N8ZpuFLVKwxbpVFe1Pcs14hLCrujizpQsa'))
726736 else false)
727737 then throw("admin only")
728- else [StringEntry(E, bJ)]
738+ else [StringEntry(F, bL)]
729739
730740
731741
732-@Callable(aM)
733-func claimToReserveFund (bK) = {
734- let bL = N()
735- let ai = ad(bL[0], "sRate")._2
736- let s = [0, 1, 2, 3, 4, 5]
737- func t (u,bM) = if ((bM >= size(bL)))
738- then u
742+@Callable(aN)
743+func claimToReserveFund (bM) = {
744+ let bN = O()
745+ let aj = ae(bN[0], "sRate")._2
746+ let t = [0, 1, 2, 3, 4, 5]
747+ func u (v,bO) = if ((bO >= size(bN)))
748+ then v
739749 else {
740- let l = bL[bM]
741- let bN = H(("autostake_amount_" + l))
742- let ay = ((((M(l) + D(("autostake_amount_" + l))) + (if ((bN != ""))
743- then parseIntValue(bN)
744- else 0)) + fraction(D(("total_borrowed_" + l)), ai[((bM * 3) + 1)].value, p)) - fraction(D(("total_supplied_" + l)), ai[(bM * 3)].value, p))
745- let bi = if ((D(("autostake_amount_" + l)) > 0))
746- then invoke(this, "unstakeToken", [l, max([ay, 0])], nil)
750+ let m = bN[bO]
751+ let bP = I(("autostake_amount_" + m))
752+ let az = ((((N(m) + E(("autostake_amount_" + m))) + (if ((bP != ""))
753+ then parseIntValue(bP)
754+ else 0)) + fraction(E(("total_borrowed_" + m)), aj[((bO * 3) + 1)].value, q)) - fraction(E(("total_supplied_" + m)), aj[(bO * 3)].value, q))
755+ let bk = if ((E(("autostake_amount_" + m)) > 0))
756+ then invoke(this, "unstakeToken", [m, max([az, 0])], nil)
747757 else 0
748- if ((bi == bi))
749- then (u ++ [ay])
758+ if ((bk == bk))
759+ then (v ++ [az])
750760 else throw("Strict value is not equal to itself.")
751761 }
752762
753- let bO = {
754- let w = s
755- let x = size(w)
756- let y = nil
757- func z (A,B) = if ((B >= x))
758- then A
759- else t(A, w[B])
763+ let bQ = {
764+ let x = t
765+ let y = size(x)
766+ let z = nil
767+ func A (B,C) = if ((C >= y))
768+ then B
769+ else u(B, x[C])
760770
761- func C (A,B) = if ((B >= x))
762- then A
771+ func D (B,C) = if ((C >= y))
772+ then B
763773 else throw("List size exceeds 8")
764774
765- C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
775+ D(A(A(A(A(A(A(A(A(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
766776 }
767- func bP (u,bM) = if ((bM >= size(bL)))
768- then u
777+ func bR (v,bO) = if ((bO >= size(bN)))
778+ then v
769779 else {
770- let l = bL[bM]
771- (u ++ [ScriptTransfer(a, max([bO[bM], 0]), L(l))])
780+ let m = bN[bO]
781+ (v ++ [ScriptTransfer(a, max([bQ[bO], 0]), M(m))])
772782 }
773783
774- if (bK)
775- then throw(r(bO))
784+ if (bM)
785+ then throw(s(bQ))
776786 else $Tuple2({
777- let w = s
778- let x = size(w)
779- let y = nil
780- func bQ (A,B) = if ((B >= x))
781- then A
782- else bP(A, w[B])
787+ let x = t
788+ let y = size(x)
789+ let z = nil
790+ func bS (B,C) = if ((C >= y))
791+ then B
792+ else bR(B, x[C])
783793
784- func bR (A,B) = if ((B >= x))
785- then A
794+ func bT (B,C) = if ((C >= y))
795+ then B
786796 else throw("List size exceeds 8")
787797
788- bR(bQ(bQ(bQ(bQ(bQ(bQ(bQ(bQ(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
789- }, bO)
798+ bT(bS(bS(bS(bS(bS(bS(bS(bS(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
799+ }, bQ)
790800 }
791801
792802
793803
794-@Callable(aM)
795-func reSetup (l) = {
796- let bS = D("resetup_lastUpdate")
797- if ((q > (height - bS)))
804+@Callable(aN)
805+func reSetup (m) = {
806+ let bU = E("resetup_lastUpdate")
807+ if ((r > (height - bU)))
798808 then throw("can be updated only once per day")
799809 else {
800- let bE = split(H("setup_lts"), ",")
801- let bL = N()
802- let T = ah(l)
803- let bT = D((("setup_" + l) + "_tempLT"))
804- let bH = parseIntValue(bL[value(indexOf(bL, l))])
805- if ((T > 90000000))
806- then [IntegerEntry((("setup_" + l) + "_tempLT"), fraction(bT, 9975, 10000))]
807- else if (if ((bH > bT))
808- then (90000000 > T)
810+ let bG = split(I("setup_lts"), ",")
811+ let bN = O()
812+ let U = ai(m)
813+ let bV = E((("setup_" + m) + "_tempLT"))
814+ let bJ = parseIntValue(bN[value(indexOf(bN, m))])
815+ if ((U > 90000000))
816+ then [IntegerEntry((("setup_" + m) + "_tempLT"), fraction(bV, 9975, 10000))]
817+ else if (if ((bJ > bV))
818+ then (90000000 > U)
809819 else false)
810- then [IntegerEntry((("setup_" + l) + "_tempLT"), fraction(bT, 10025, 10000))]
820+ then [IntegerEntry((("setup_" + m) + "_tempLT"), fraction(bV, 10025, 10000))]
811821 else nil
812822 }
813823 }
814824
815825
816826
817-@Callable(aM)
818-func shutdown (bU) = if ((indexOf(h, aM.caller.bytes) == unit))
827+@Callable(aN)
828+func shutdown (bW) = if ((indexOf(i, aN.caller.bytes) == unit))
819829 then throw("user not in a whitelist")
820- else [BooleanEntry("setup_active", !(bU))]
830+ else [BooleanEntry("setup_active", !(bW))]
821831
822832
823833
824-@Callable(aM)
825-func liquidate (bK,j,au,aO,aP,bV) = if (!(i(aM.caller)))
834+@Callable(aN)
835+func liquidate (bM,k,av,aP,aQ,bX) = if (!(j(aN.caller)))
826836 then throw("temporarily available for whitelist only")
827- else if (!(G("setup_active")))
837+ else if (!(H("setup_active")))
828838 then throw("market is stopped")
829839 else {
830- let bW = aq(j)
831- if ((bW == bW))
840+ let bY = ar(k)
841+ if ((bY == bY))
832842 then {
833- let bX = ad(aO, "sRate")
834- let aw = bX._1
835- let bY = bX._2
836- let bZ = ad(aP, "bRate")
837- let aG = bZ._1
843+ let bZ = ae(aP, "sRate")
844+ let ax = bZ._1
838845 let ca = bZ._2
839- let cb = fraction(au, p, aw)
840- let cc = D(((j + "_supplied_") + aO))
841- let cd = D(((j + "_borrowed_") + aP))
842- let ce = if ((cd > 0))
843- then cd
846+ let cb = ae(aQ, "bRate")
847+ let aH = cb._1
848+ let cc = cb._2
849+ let cd = fraction(av, q, ax)
850+ let ce = E(((k + "_supplied_") + aP))
851+ let cf = E(((k + "_borrowed_") + aQ))
852+ let cg = if ((cf > 0))
853+ then cf
844854 else throw("user has no borrow in this token")
845- if ((bW > 0))
855+ if ((bY > 0))
846856 then throw("user can't be liquidated")
847- else if ((cb > cc))
857+ else if ((cd > ce))
848858 then throw("position to liquidate is bigger than user's supply")
849859 else {
850- let cf = M(aO)
851- if ((cf == cf))
860+ let ch = N(aP)
861+ if ((ch == ch))
852862 then {
853- let cg = M(aP)
854- if ((cg == cg))
863+ let ci = N(aQ)
864+ if ((ci == ci))
855865 then {
856- let ch = invoke(f, "swap", [bV, 0], [AttachedPayment(L(aO), au)])
857- if ((ch == ch))
866+ let cj = invoke(g, "swap", [bX, 0], [AttachedPayment(M(aP), av)])
867+ if ((cj == cj))
858868 then {
859- let ci = (cf - M(aO))
860- if ((ci == ci))
869+ let ck = (ch - N(aP))
870+ if ((ck == ck))
861871 then {
862- let cj = (M(aP) - cg)
863- if ((cj == cj))
872+ let cl = (N(aQ) - ci)
873+ if ((cl == cl))
864874 then {
865- let ck = ak(aO)._1
866- let cl = ao(aO)
867- let cm = fraction(ci, ck, cl)
868- let cn = ak(aP)._2
869- let co = ao(aP)
870- let cp = fraction(cj, cn, co)
871- let bI = parseIntValue(split(H("setup_penalties"), ",")[value(indexOf(N(), aP))])
872- let cq = (cp - fraction(cm, (n - bI), n))
873- let cr = fraction(ci, p, aw)
874- let cs = fraction(fraction(cj, p, aG), (n - fraction(cq, n, cp)), n)
875- if ((ci > au))
875+ let cm = al(aP)._1
876+ let cn = ap(aP)
877+ let co = fraction(ck, cm, cn)
878+ let cp = al(aQ)._2
879+ let cq = ap(aQ)
880+ let cr = fraction(cl, cp, cq)
881+ let bK = parseIntValue(split(I("setup_penalties"), ",")[value(indexOf(O(), aQ))])
882+ let cs = (cr - fraction(co, (o - bK), o))
883+ let ct = fraction(ck, q, ax)
884+ let cu = fraction(fraction(cl, q, aH), (o - fraction(cs, o, cr)), o)
885+ if ((ck > av))
876886 then throw("more assets exchanged than expected")
877- else if ((0 > cq))
887+ else if ((0 > cs))
878888 then throw("price impact is bigger than liquidation penalty")
879- else [IntegerEntry(((j + "_supplied_") + aO), (cc - cr)), IntegerEntry(((j + "_borrowed_") + aP), (ce - cs)), IntegerEntry(("total_supplied_" + aO), (D(("total_supplied_" + aO)) - cr)), IntegerEntry(("total_borrowed_" + aP), (D(("total_borrowed_" + aP)) - cs))]
889+ else [IntegerEntry(((k + "_supplied_") + aP), (ce - ct)), IntegerEntry(((k + "_borrowed_") + aQ), (cg - cu)), IntegerEntry(("total_supplied_" + aP), (E(("total_supplied_" + aP)) - ct)), IntegerEntry(("total_borrowed_" + aQ), (E(("total_borrowed_" + aQ)) - cu))]
880890 }
881891 else throw("Strict value is not equal to itself.")
882892 }
883893 else throw("Strict value is not equal to itself.")
884894 }
885895 else throw("Strict value is not equal to itself.")
886896 }
887897 else throw("Strict value is not equal to itself.")
888898 }
889899 else throw("Strict value is not equal to itself.")
890900 }
891901 }
892902 else throw("Strict value is not equal to itself.")
893903 }
894904
895905
896906
897-@Callable(aM)
898-func liquidateV2 (bK,j,aO) = if (!(i(aM.caller)))
907+@Callable(aN)
908+func liquidateV2 (bM,k,aP) = if (!(j(aN.caller)))
899909 then throw("temporarily available for whitelist only")
900- else if (!(G("setup_active")))
910+ else if (!(H("setup_active")))
901911 then throw("market is stopped")
902912 else {
903- let aV = aM.payments[0].assetId
904- let aP = J(aV)
905- let ct = aM.payments[0].amount
906- let bW = aq(j)
907- if ((bW == bW))
908- then if ((bW > 0))
913+ let aW = aN.payments[0].assetId
914+ let aQ = K(aW)
915+ let cv = aN.payments[0].amount
916+ let bY = ar(k)
917+ if ((bY == bY))
918+ then if ((bY > 0))
909919 then throw("user can't be liquidated")
910920 else {
911- let cu = N()
912- let cv = value(indexOf(cu, aP))
913- let cw = value(indexOf(cu, aO))
914- let cx = ad(aP, "bRate")
915- let aG = cx._1
916- let bY = cx._2
917- let cn = ak(aP)._2
918- let co = ao(aP)
919- let cy = fraction(ct, cn, co)
920- let bI = parseIntValue(value(split(H("setup_penalties"), ",")[cv]))
921- let ck = ak(aO)._1
922- let cl = ao(aO)
923- let cz = fraction(cy, (n + bI), n)
924- let cb = fraction(cz, cl, ck)
925- let aQ = fraction(ct, p, aG)
926- let aX = fraction(cb, p, bY[((cw * 3) + 1)].value)
927- let bi = if ((indexOf(e, aO) != unit))
921+ let cw = O()
922+ let cx = value(indexOf(cw, aQ))
923+ let cy = value(indexOf(cw, aP))
924+ let cz = ae(aQ, "bRate")
925+ let aH = cz._1
926+ let ca = cz._2
927+ let cp = al(aQ)._2
928+ let cq = ap(aQ)
929+ let cA = fraction(cv, cp, cq)
930+ let bK = parseIntValue(value(split(I("setup_penalties"), ",")[cx]))
931+ let cm = al(aP)._1
932+ let cn = ap(aP)
933+ let cB = fraction(cA, (o + bK), o)
934+ let cd = fraction(cB, cn, cm)
935+ let aR = fraction(cv, q, aH)
936+ let aY = fraction(cd, q, ca[((cy * 3) + 1)].value)
937+ let bk = if ((indexOf(f, aP) != unit))
928938 then {
929- let cA = split(j, "_")[1]
930- let cB = split(j, "_")[0]
931- reentrantInvoke(d, "liquidate", [cB, cA, aX], nil)
939+ let cC = split(k, "_")[1]
940+ let cD = split(k, "_")[0]
941+ reentrantInvoke(d, "liquidate", [cD, cC, aY], nil)
932942 }
933943 else nil
934- if ((bi == bi))
944+ if ((bk == bk))
935945 then {
936- let cc = D(((j + "_supplied_") + aO))
937- let cd = D(((j + "_borrowed_") + aP))
938- let ce = if ((cd > 0))
939- then cd
946+ let ce = E(((k + "_supplied_") + aP))
947+ let cf = E(((k + "_borrowed_") + aQ))
948+ let cg = if ((cf > 0))
949+ then cf
940950 else throw("user has no borrow in this token")
941- if ((aX > cc))
951+ if ((aY > ce))
942952 then throw("position to liquidate is bigger than user's supply")
943- else if (bK)
953+ else if (bM)
944954 then throw("liquidation will pass")
945- else ([ScriptTransfer(aM.caller, cb, L(aO)), IntegerEntry(((j + "_supplied_") + aO), (cc - aX)), IntegerEntry(((j + "_borrowed_") + aP), (ce - aQ)), IntegerEntry(("total_supplied_" + aO), (D(("total_supplied_" + aO)) - aX)), IntegerEntry(("total_borrowed_" + aP), (D(("total_borrowed_" + aP)) - aQ))] ++ bY)
955+ else ([ScriptTransfer(aN.caller, cd, M(aP)), IntegerEntry(((k + "_supplied_") + aP), (ce - aY)), IntegerEntry(((k + "_borrowed_") + aQ), (cg - aR)), IntegerEntry(("total_supplied_" + aP), (E(("total_supplied_" + aP)) - aY)), IntegerEntry(("total_borrowed_" + aQ), (E(("total_borrowed_" + aQ)) - aR))] ++ ca)
946956 }
947957 else throw("Strict value is not equal to itself.")
948958 }
949959 else throw("Strict value is not equal to itself.")
950960 }
951961
952962
953963
954-@Callable(aM)
955-func getUserCollateral (bK,j,cC,cD) = {
956- let bL = N()
957- let bD = split(H("setup_ltvs"), ",")
958- let bE = split(H("setup_lts"), ",")
959- let ai = ad(bL[0], "sRate")._2
960- let cE = split(cD, ",")
961- func t (u,v) = if ((v >= size(bL)))
962- then u
964+@Callable(aN)
965+func getUserCollateral (bM,k,cE,cF) = {
966+ let bN = O()
967+ let bF = split(I("setup_ltvs"), ",")
968+ let bG = split(I("setup_lts"), ",")
969+ let aj = ae(bN[0], "sRate")._2
970+ let cG = split(cF, ",")
971+ func u (v,w) = if ((w >= size(bN)))
972+ then v
963973 else {
964- let cF = D(((j + "_supplied_") + bL[v]))
965- let cG = D(((j + "_borrowed_") + bL[v]))
966- let cH = if ((cD == ""))
967- then if (if ((cG != 0))
974+ let cH = E(((k + "_supplied_") + bN[w]))
975+ let cI = E(((k + "_borrowed_") + bN[w]))
976+ let cJ = if ((cF == ""))
977+ then if (if ((cI != 0))
968978 then true
969- else (cF != 0))
979+ else (cH != 0))
970980 then true
971981 else false
972982 else true
973- if (cH)
983+ if (cJ)
974984 then {
975- let aC = ao(bL[v])
976- let aA = ak(bL[v])
977- ((u + fraction(fraction(fraction((cF + (if (if (if ((cD != ""))
978- then (cE[0] == bL[v])
985+ let aD = ap(bN[w])
986+ let aB = al(bN[w])
987+ ((v + fraction(fraction(fraction((cH + (if (if (if ((cF != ""))
988+ then (cG[0] == bN[w])
979989 else false)
980- then (cE[1] == "supplied")
990+ then (cG[1] == "supplied")
981991 else false)
982- then parseIntValue(cE[2])
983- else 0)), ai[(v * 3)].value, p), parseIntValue(bD[v]), n), aA._1, aC)) - (if (cC)
984- then fraction(fraction(fraction((cG + (if (if (if ((cD != ""))
985- then (cE[0] == bL[v])
992+ then parseIntValue(cG[2])
993+ else 0)), aj[(w * 3)].value, q), parseIntValue(bF[w]), o), aB._1, aD)) - (if (cE)
994+ then fraction(fraction(fraction((cI + (if (if (if ((cF != ""))
995+ then (cG[0] == bN[w])
986996 else false)
987- then (cE[1] == "borrowed")
997+ then (cG[1] == "borrowed")
988998 else false)
989- then parseIntValue(cE[2])
990- else 0)), ai[((v * 3) + 1)].value, p), n, parseIntValue(bE[v])), aA._2, aC)
999+ then parseIntValue(cG[2])
1000+ else 0)), aj[((w * 3) + 1)].value, q), o, parseIntValue(bG[w])), aB._2, aD)
9911001 else 0))
9921002 }
993- else u
1003+ else v
9941004 }
9951005
996- let cI = {
997- let w = [0, 1, 2, 3, 4, 5]
998- let x = size(w)
999- let y = 0
1000- func z (A,B) = if ((B >= x))
1001- then A
1002- else t(A, w[B])
1006+ let cK = {
1007+ let x = [0, 1, 2, 3, 4, 5]
1008+ let y = size(x)
1009+ let z = 0
1010+ func A (B,C) = if ((C >= y))
1011+ then B
1012+ else u(B, x[C])
10031013
1004- func C (A,B) = if ((B >= x))
1005- then A
1014+ func D (B,C) = if ((C >= y))
1015+ then B
10061016 else throw("List size exceeds 8")
10071017
1008- C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1018+ D(A(A(A(A(A(A(A(A(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
10091019 }
1010- if (bK)
1011- then throw(toString(cI))
1012- else $Tuple2(nil, cI)
1020+ if (bM)
1021+ then throw(toString(cK))
1022+ else $Tuple2(nil, cK)
10131023 }
10141024
10151025
10161026
1017-@Callable(aM)
1018-func getAssetDebt (bK,j,l) = {
1019- let cG = D(((j + "_borrowed_") + l))
1020- let aC = ao(l)
1021- let V = ad(l, "bRate")._1
1022- let cI = fraction(cG, V, p)
1023- if (bK)
1024- then throw(toString(cI))
1025- else $Tuple2(nil, cI)
1027+@Callable(aN)
1028+func getAssetDebt (bM,k,m) = {
1029+ let cI = E(((k + "_borrowed_") + m))
1030+ let aD = ap(m)
1031+ let W = ae(m, "bRate")._1
1032+ let cK = fraction(cI, W, q)
1033+ if (bM)
1034+ then throw(toString(cK))
1035+ else $Tuple2(nil, cK)
10261036 }
10271037
10281038
10291039
1030-@Callable(aM)
1031-func getPrices (bK) = {
1032- let bL = N()
1033- func t (u,v) = if ((v >= size(bL)))
1034- then u
1040+@Callable(aN)
1041+func getPrices (bM) = {
1042+ let bN = O()
1043+ func u (v,w) = if ((w >= size(bN)))
1044+ then v
10351045 else {
1036- let aA = ak(bL[v])
1037- ((((u + toString(aA._1)) + ",") + toString(aA._2)) + "|")
1046+ let aB = al(bN[w])
1047+ ((((v + toString(aB._1)) + ",") + toString(aB._2)) + "|")
10381048 }
10391049
1040- let cI = {
1041- let w = [0, 1, 2, 3, 4, 5]
1042- let x = size(w)
1043- let y = ""
1044- func z (A,B) = if ((B >= x))
1045- then A
1046- else t(A, w[B])
1050+ let cK = {
1051+ let x = [0, 1, 2, 3, 4, 5]
1052+ let y = size(x)
1053+ let z = ""
1054+ func A (B,C) = if ((C >= y))
1055+ then B
1056+ else u(B, x[C])
10471057
1048- func C (A,B) = if ((B >= x))
1049- then A
1058+ func D (B,C) = if ((C >= y))
1059+ then B
10501060 else throw("List size exceeds 8")
10511061
1052- C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1062+ D(A(A(A(A(A(A(A(A(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
10531063 }
1054- if (bK)
1055- then throw(cI)
1056- else $Tuple2(nil, cI)
1064+ if (bM)
1065+ then throw(cK)
1066+ else $Tuple2(nil, cK)
10571067 }
10581068
10591069
10601070
1061-@Callable(aM)
1062-func calculateUtilizationRatio (l,bK) = if (bK)
1063- then throw(toString(ah(l)))
1064- else $Tuple2(nil, ah(l))
1071+@Callable(aN)
1072+func calculateUtilizationRatio (m,bM) = if (bM)
1073+ then throw(toString(ai(m)))
1074+ else $Tuple2(nil, ai(m))
10651075
10661076
10671077
1068-@Callable(aM)
1069-func calculateOutdatedUR (l,bK) = if (bK)
1070- then throw(toString(Q(l)))
1071- else $Tuple2(nil, Q(l))
1078+@Callable(aN)
1079+func calculateOutdatedUR (m,bM) = if (bM)
1080+ then throw(toString(R(m)))
1081+ else $Tuple2(nil, R(m))
10721082
10731083
10741084
1075-@Callable(aM)
1076-func calculateTokenRates (bK) = {
1077- func t (u,l) = {
1078- let ai = W(l)
1079- $Tuple2(((((u._1 + toString(ai[1].value)) + "|") + toString(ai[0].value)) + ","), (u._2 ++ ai))
1085+@Callable(aN)
1086+func calculateTokenRates (bM) = {
1087+ func u (v,m) = {
1088+ let aj = X(m)
1089+ $Tuple2(((((v._1 + toString(aj[1].value)) + "|") + toString(aj[0].value)) + ","), (v._2 ++ aj))
10801090 }
10811091
1082- let bO = {
1083- let w = N()
1084- let x = size(w)
1085- let y = $Tuple2("", nil)
1086- func z (A,B) = if ((B >= x))
1087- then A
1088- else t(A, w[B])
1092+ let bQ = {
1093+ let x = O()
1094+ let y = size(x)
1095+ let z = $Tuple2("", nil)
1096+ func A (B,C) = if ((C >= y))
1097+ then B
1098+ else u(B, x[C])
10891099
1090- func C (A,B) = if ((B >= x))
1091- then A
1100+ func D (B,C) = if ((C >= y))
1101+ then B
10921102 else throw("List size exceeds 8")
10931103
1094- C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1104+ D(A(A(A(A(A(A(A(A(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
10951105 }
1096- if (bK)
1097- then throw(bO._1)
1098- else $Tuple2(bO._2, bO._1)
1106+ if (bM)
1107+ then throw(bQ._1)
1108+ else $Tuple2(bQ._2, bQ._1)
10991109 }
11001110
11011111
11021112
1103-@Callable(aM)
1104-func calculateTokensInterest (bK) = {
1105- func t (u,l) = {
1106- let V = fraction(S(l), q, n)
1107- ((u + toString(V)) + ",")
1113+@Callable(aN)
1114+func calculateTokensInterest (bM) = {
1115+ func u (v,m) = {
1116+ let W = fraction(T(m), r, o)
1117+ ((v + toString(W)) + ",")
11081118 }
11091119
1110- let bO = {
1111- let w = N()
1112- let x = size(w)
1113- let y = ""
1114- func z (A,B) = if ((B >= x))
1115- then A
1116- else t(A, w[B])
1120+ let bQ = {
1121+ let x = O()
1122+ let y = size(x)
1123+ let z = ""
1124+ func A (B,C) = if ((C >= y))
1125+ then B
1126+ else u(B, x[C])
11171127
1118- func C (A,B) = if ((B >= x))
1119- then A
1128+ func D (B,C) = if ((C >= y))
1129+ then B
11201130 else throw("List size exceeds 8")
11211131
1122- C(z(z(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1132+ D(A(A(A(A(A(A(A(A(z, 0), 1), 2), 3), 4), 5), 6), 7), 8)
11231133 }
1124- if (bK)
1125- then throw(bO)
1126- else $Tuple2(nil, bO)
1134+ if (bM)
1135+ then throw(bQ)
1136+ else $Tuple2(nil, bQ)
11271137 }
11281138
11291139
1130-@Verifier(cJ)
1131-func cK () = sigVerify(cJ.bodyBytes, cJ.proofs[0], cJ.senderPublicKey)
1140+@Verifier(cL)
1141+func cM () = sigVerify(cL.bodyBytes, cL.proofs[0], cL.senderPublicKey)
11321142

github/deemru/w8io/c3f4982 
496.52 ms