tx · L2UPHXnuVo3LCR4DpQ6zRRatLUoQDXyaArzzreynmi1

3N3DnVffnUyZtz2MRbk5U7giN112WempMNd:  -0.04000000 Waves

2023.06.02 13:40 [2604947] smart account 3N3DnVffnUyZtz2MRbk5U7giN112WempMNd > SELF 0.00000000 Waves

{ "type": 13, "id": "L2UPHXnuVo3LCR4DpQ6zRRatLUoQDXyaArzzreynmi1", "fee": 4000000, "feeAssetId": null, "timestamp": 1685702473424, "version": 2, "chainId": 84, "sender": "3N3DnVffnUyZtz2MRbk5U7giN112WempMNd", "senderPublicKey": "3c1wAgvTRCNXCGMidVnB1j4gTYUqtwHR9tNNu2v4ZUNk", "proofs": [ "4G5TmoyDt9E7wFcVKKz5EFHHjCnEm18xDHfKzZU8tmsRnHBkubTiUTf7Zzx9YiT23UzRsNxbVKsJBdgm3jYrkwB5" ], "script": "base64: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QVZFUwUEdW5pdAkA2QQBBQphc3NldElkU3RyAQpnZXRCYWxhbmNlAQphc3NldElkU3RyAwkAAAIFCmFzc2V0SWRTdHICBVdBVkVTCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkA8AcCBQR0aGlzCQDZBAEFCmFzc2V0SWRTdHIBD2dldE1hcmtldEFzc2V0cwAJALUJAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwIBLAESZ2V0QXNzZXRzTWF4U3VwcGx5AAQBcwkBDHRyeUdldFN0cmluZwECD3NldHVwX21heHN1cHBseQMJAAACBQFzAgAJAMwIAgD///////////8BCQDMCAIA////////////AQkAzAgCAP///////////wEJAMwIAgD///////////8BCQDMCAIA////////////AQkAzAgCAP///////////wEJAMwIAgD///////////8BBQNuaWwJALUJAgUBcwIBLAENZ2V0T3V0ZGF0ZWRVcgEKYXNzZXRJZFN0cgQEZG93bgkAawMJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfc1JhdGUFB1NjYWxlMTYDCQAAAgUEZG93bgAAAAAJAGsDBQZTY2FsZTgJAGsDCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYXNzZXRJZFN0cgIGX2JSYXRlBQdTY2FsZTE2BQRkb3duAQtnZXRJbnRlcmVzdAEKYXNzZXRJZFN0cgQCdXIJAQ1nZXRPdXRkYXRlZFVyAQUKYXNzZXRJZFN0cgQFY3VydmUJAQxnZXRSYXRlQ3VydmUBBQphc3NldElkU3RyBARyYXRlCQBkAggFBWN1cnZlAl8xAwkAZwIIBQVjdXJ2ZQJfMwUCdXIJAGsDBQJ1cggFBWN1cnZlAl8yCAUFY3VydmUCXzMJAGQCCAUFY3VydmUCXzIJAGsDCQBlAgUCdXIIBQVjdXJ2ZQJfMwgFBWN1cnZlAl80CQBlAgCAwtcvCAUFY3VydmUCXzMJAJYDAQkAzAgCCQBrAwUEcmF0ZQUGU2NhbGU4CQBoAgUJZGF5QmxvY2tzAO0CCQDMCAIAAQUDbmlsARB0b2tlblJhdGVzUmVjYWxjAQphc3NldElkU3RyBAhpbnRlcmVzdAkBC2dldEludGVyZXN0AQUKYXNzZXRJZFN0cgQCdXIJAQ1nZXRPdXRkYXRlZFVyAQUKYXNzZXRJZFN0cgQQbGFzdFJlY2FsY0hlaWdodAkBDXRyeUdldEludGVnZXIBAg5sYXN0UmF0ZUhlaWdodAQJbGFzdEJSYXRlCQCWAwEJAMwIAgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9iUmF0ZQkAzAgCBQdTY2FsZTE2BQNuaWwECG5ld0JSYXRlCQBkAgUJbGFzdEJSYXRlCQBoAgkAZQIFBmhlaWdodAUQbGFzdFJlY2FsY0hlaWdodAUIaW50ZXJlc3QECWxhc3RTUmF0ZQkAlgMBCQDMCAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfc1JhdGUJAMwIAgUHU2NhbGUxNgUDbmlsBAhuZXdTUmF0ZQkAZAIFCWxhc3RTUmF0ZQkAaQIJAGgCCQBoAgkAZQIFBmhlaWdodAUQbGFzdFJlY2FsY0hlaWdodAkAawMFCGludGVyZXN0BQJ1cgUGU2NhbGU4CQBlAgBkBQtyZXNlcnZlRnVuZABkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQUIbmV3U1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYXNzZXRJZFN0cgIGX2JSYXRlBQhuZXdCUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIObGFzdFJhdGVIZWlnaHQFBmhlaWdodAUDbmlsAQ1nZXRBY3R1YWxSYXRlAgphc3NldElkU3RyCHJhdGVUeXBlCgEBZgIFYWNjdW0FdG9rZW4EBnJlY2FsYwkBEHRva2VuUmF0ZXNSZWNhbGMBBQV0b2tlbgkAlAoCAwkBAiE9AgUFdG9rZW4FCmFzc2V0SWRTdHIIBQVhY2N1bQJfMQMJAAACBQhyYXRlVHlwZQIFc1JhdGUICQCRAwIFBnJlY2FsYwAABXZhbHVlCAkAkQMCBQZyZWNhbGMAAQV2YWx1ZQkAzggCCAUFYWNjdW0CXzIFBnJlY2FsYwoAAiRsCQEPZ2V0TWFya2V0QXNzZXRzAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAABQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBBWdldFVyAQphc3NldElkU3RyBAVyYXRlcwkBEHRva2VuUmF0ZXNSZWNhbGMBBQphc3NldElkU3RyBARkb3duCQBrAwkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cggJAJEDAgUFcmF0ZXMAAAV2YWx1ZQUHU2NhbGUxNgkAawMFBlNjYWxlOAkAawMJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIICQCRAwIFBXJhdGVzAAEFdmFsdWUFB1NjYWxlMTYFBGRvd24BC3JhdGVzUmVjYWxjAAoBAWYCBWFjY3VtBXRva2VuCQDOCAIFBWFjY3VtCQEQdG9rZW5SYXRlc1JlY2FsYwEFBXRva2VuCgACJGwJAQ9nZXRNYXJrZXRBc3NldHMACgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAQ1nZXRUb2tlblByaWNlAQphc3NldElkU3RyBARpbnYzCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCW9yYWNsZVN0cgIJZ2V0VFdBUDYwCQDMCAIFCmFzc2V0SWRTdHIJAMwIAgcFA25pbAUDbmlsAwkAAAIFBGludjMFBGludjMEBWRhdGEzBAckbWF0Y2gwBQRpbnYzAwkAAQIFByRtYXRjaDACCihJbnQsIEludCkEAXgFByRtYXRjaDAFAXgJAAIBAhVlcnJvciBvZiBwcmljZSBvcmFjbGUDCQAAAgUFZGF0YTMFBWRhdGEzBQVkYXRhMwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEOY2FsY0Fzc2V0U2NhbGUBCmFzc2V0SWRTdHIECGRlY2ltYWxzAwkAAAIFCmFzc2V0SWRTdHICBVdBVkVTAAgICQEFdmFsdWUBCQDsBwEJANkEAQUKYXNzZXRJZFN0cghkZWNpbWFscwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04BEmNhbGNVc2VyQ29sbGF0ZXJhbAEHYWRkcmVzcwQUdXNlckNvbGxhdGVyYWxJbnZva2UJAPwHBAUEdGhpcwIRZ2V0VXNlckNvbGxhdGVyYWwJAMwIAgcJAMwIAgUHYWRkcmVzcwkAzAgCBgkAzAgCAgAFA25pbAUDbmlsAwkAAAIFFHVzZXJDb2xsYXRlcmFsSW52b2tlBRR1c2VyQ29sbGF0ZXJhbEludm9rZQQTdXNlckNvbGxhdGVyYWxWYWx1ZQQHJG1hdGNoMAUUdXNlckNvbGxhdGVyYWxJbnZva2UDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQIkaXNzdWUgd2hpbGUgZG9pbmcgaW4tZGFwcCBpbnZvY2F0aW9uAwkAAAIFE3VzZXJDb2xsYXRlcmFsVmFsdWUFE3VzZXJDb2xsYXRlcmFsVmFsdWUFE3VzZXJDb2xsYXRlcmFsVmFsdWUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDnN1cHBseUludGVybmFsAwphc3NldElkU3RyC2Fzc2V0QW1vdW50B2FkZHJlc3MDCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQECyR0MDU4NzA1OTM3CQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBXNSYXRlBAVzUmF0ZQgFCyR0MDU4NzA1OTM3Al8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFCyR0MDU4NzA1OTM3Al8yBAZhbW91bnQJAG4EBQthc3NldEFtb3VudAUHU2NhbGUxNgUFc1JhdGUFBERPV04ECW1heFN1cHBseQQHJG1hdGNoMAkAoggBCQCsAgICEHNldHVwX21heFN1cHBseV8FCmFzc2V0SWRTdHIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAF4BQckbWF0Y2gwCQENcGFyc2VJbnRWYWx1ZQEFAXgAAAQKYXNzZXRQcmljZQkBDWdldFRva2VuUHJpY2UBBQphc3NldElkU3RyBBBuZXdUb3RhbFN1cHBsaWVkCQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUGYW1vdW50BARyYXRlCAkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgVzUmF0ZQJfMQQKYXNzZXRTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQUKYXNzZXRJZFN0cgQTbmV3VG90YWxTdXBwbGllZFVzZAkAawMJAGsDBRBuZXdUb3RhbFN1cHBsaWVkBQRyYXRlBQdTY2FsZTE2CAUKYXNzZXRQcmljZQJfMQUKYXNzZXRTY2FsZQMJAAACCQCzCQIJAQx0cnlHZXRTdHJpbmcBAgxzZXR1cF90b2tlbnMFCmFzc2V0SWRTdHIFBHVuaXQJAAIBAil0aGlzIGFzc2V0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIG1hcmtldAMDCQECIT0CBQltYXhTdXBwbHkAAAkAZgIFE25ld1RvdGFsU3VwcGxpZWRVc2QFCW1heFN1cHBseQcJAAIBAjNtYXggdG90YWwgc3VwcGx5IGZvciB0aGlzIHRva2VuIHJlYWNoZWQgaW4gdGhlIHBvb2wJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUQbmV3VG90YWxTdXBwbGllZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIJAGQCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBQZhbW91bnQFA25pbAURcmF0ZXNSZWNhbGNSZXN1bHQFC2Fzc2V0QW1vdW50AQ5ib3Jyb3dJbnRlcm5hbAMKYXNzZXRJZFN0cgthc3NldEFtb3VudAdhZGRyZXNzBAskdDA3MjE2NzI4MwkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgViUmF0ZQQFYlJhdGUIBQskdDA3MjE2NzI4MwJfMQQRcmF0ZXNSZWNhbGNSZXN1bHQIBQskdDA3MjE2NzI4MwJfMgQGYW1vdW50CQBuBAULYXNzZXRBbW91bnQFB1NjYWxlMTYFBWJSYXRlBQdDRUlMSU5HBBJjb2xsYXRlcmFsVmFsdWVJbnYJAPwHBAUEdGhpcwIRZ2V0VXNlckNvbGxhdGVyYWwJAMwIAgcJAMwIAgUHYWRkcmVzcwkAzAgCBgkAzAgCCQCsAgIJAKwCAgUKYXNzZXRJZFN0cgIKLGJvcnJvd2VkLAkApAMBBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFEmNvbGxhdGVyYWxWYWx1ZUludgUSY29sbGF0ZXJhbFZhbHVlSW52BA9jb2xsYXRlcmFsVmFsdWUEByRtYXRjaDAFEmNvbGxhdGVyYWxWYWx1ZUludgMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAh9jYW4ndCBnZXQgdXNlciBjb2xsYXRlcmFsIHZhbHVlAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkBA1hc3NldFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBA1hc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyBBF1c2VyQXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgMJAGYCBQZhbW91bnQJAGUCBQ1hc3NldFN1cHBsaWVkBQ1hc3NldEJvcnJvd2VkCQACAQIcdGhpcyBhbW91bnQgaXMgbm90IGF2YWlsYWJsZQkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyCQBkAgURdXNlckFzc2V0Qm9ycm93ZWQFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIJAGQCBQ1hc3NldEJvcnJvd2VkBQZhbW91bnQFA25pbAURcmF0ZXNSZWNhbGNSZXN1bHQFC2Fzc2V0QW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuGwFpAQ1mbGFzaFBvc2l0aW9uBwR1c2VyC3NBc3NldElkU3RyC2JBc3NldElkU3RyB2JBbW91bnQPY2FsbGJhY2tBZGRyZXNzEGNhbGxiYWNrRnVuY3Rpb24MY2FsbGJhY2tBcmdzBAlib3Jyb3dSZXMJAQ5ib3Jyb3dJbnRlcm5hbAMFC2JBc3NldElkU3RyBQdiQW1vdW50BQR1c2VyBAhiQXNzZXRJZAkBDWdldEFzc2V0Qnl0ZXMBBQtiQXNzZXRJZFN0cgQIY2FsbGJhY2sJAP0HBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUPY2FsbGJhY2tBZGRyZXNzBRBjYWxsYmFja0Z1bmN0aW9uCQC1CQIFDGNhbGxiYWNrQXJncwIBLAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIYkFzc2V0SWQFB2JBbW91bnQFA25pbAMJAAACBQhjYWxsYmFjawUIY2FsbGJhY2sEB3NBbW91bnQKAAFABQhjYWxsYmFjawMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUHc0Ftb3VudAUHc0Ftb3VudAQJc3VwcGx5UmVzCQEOc3VwcGx5SW50ZXJuYWwDBQtzQXNzZXRJZFN0cgUHc0Ftb3VudAUEdXNlcgQPY29sbGF0ZXJhbFZhbHVlCgABQAkA/AcEBQR0aGlzAhFnZXRVc2VyQ29sbGF0ZXJhbAkAzAgCBwkAzAgCBQR1c2VyCQDMCAIGCQDMCAIJAKwCAgkArAICBQtzQXNzZXRJZFN0cgIKLHN1cHBsaWVkLAkApAMBBQdzQW1vdW50BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUPY29sbGF0ZXJhbFZhbHVlBQ9jb2xsYXRlcmFsVmFsdWUEC2JvcnJvd1ZhbHVlCgABQAkA/AcEBQR0aGlzAhFnZXRVc2VyQ29sbGF0ZXJhbAkAzAgCBwkAzAgCBQR1c2VyCQDMCAIGCQDMCAIJAKwCAgkArAICBQtiQXNzZXRJZFN0cgIKLGJvcnJvd2VkLAkApAMBBQdiQW1vdW50BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgULYm9ycm93VmFsdWUFC2JvcnJvd1ZhbHVlAwkAZgIFC2JvcnJvd1ZhbHVlBQ9jb2xsYXRlcmFsVmFsdWUJAAIBAh5ub3QgZW5vdWdoIGNvbGxhdGVyYWwgcHJvdmlkZWQJAM4IAggFCWJvcnJvd1JlcwJfMQgFCXN1cHBseVJlcwJfMQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQZzdXBwbHkAAwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAAACQACAQIcMSBwYXltZW50IGhhcyB0byBiZSBhdHRhY2hlZAQKYXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAthc3NldEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAQ5zdXBwbHlJbnRlcm5hbAMFCmFzc2V0SWRTdHIFC2Fzc2V0QW1vdW50CQClCAEIBQFpBmNhbGxlcgFpAQh3aXRoZHJhdwIKYXNzZXRJZFN0cgthc3NldEFtb3VudAQNJHQwMTA4MjgxMDg5NQkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgVzUmF0ZQQFc1JhdGUIBQ0kdDAxMDgyODEwODk1Al8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFDSR0MDEwODI4MTA4OTUCXzIEBmFtb3VudAkAbgQFC2Fzc2V0QW1vdW50BQdTY2FsZTE2BQVzUmF0ZQUHQ0VJTElORwQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEDWFzc2V0U3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIEDWFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIEEXVzZXJBc3NldFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyBBF1c2VyQXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgQSY29sbGF0ZXJhbFZhbHVlSW52CQD8BwQFBHRoaXMCEWdldFVzZXJDb2xsYXRlcmFsCQDMCAIHCQDMCAIFB2FkZHJlc3MJAMwIAgYJAMwIAgkArAICCQCsAgIFCmFzc2V0SWRTdHICCixzdXBwbGllZCwJAKQDAQkBAS0BBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFEmNvbGxhdGVyYWxWYWx1ZUludgUSY29sbGF0ZXJhbFZhbHVlSW52BA9jb2xsYXRlcmFsVmFsdWUEByRtYXRjaDAFEmNvbGxhdGVyYWxWYWx1ZUludgMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAh9jYW4ndCBnZXQgdXNlciBjb2xsYXRlcmFsIHZhbHVlAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkAwkAZgIAAAUPY29sbGF0ZXJhbFZhbHVlCQACAQIyeW91IGRvbnQgaGF2ZSBlbm91Z2ggY29sbGF0ZXJhbCBmb3IgdGhpcyBvcGVyYXRpb24DCQBmAgUGYW1vdW50CQBlAgUNYXNzZXRTdXBwbGllZAUNYXNzZXRCb3Jyb3dlZAkAAgECKnRoaXMgYW1vdW50IGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIG1hcmtldAMJAGYCBQZhbW91bnQJAGUCBRF1c2VyQXNzZXRTdXBwbGllZAURdXNlckFzc2V0Qm9ycm93ZWQJAAIBAip0aGlzIGFtb3VudCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyCQBlAgkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUGYW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULYXNzZXRBbW91bnQJAQ1nZXRBc3NldEJ5dGVzAQUKYXNzZXRJZFN0cgUDbmlsBRFyYXRlc1JlY2FsY1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQZib3Jyb3cCCmFzc2V0SWRTdHILYXNzZXRBbW91bnQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBANyZXMJAQ5ib3Jyb3dJbnRlcm5hbAMFCmFzc2V0SWRTdHIFC2Fzc2V0QW1vdW50BQdhZGRyZXNzBAZhbW91bnQIBQNyZXMCXzIJAM4IAggFA3JlcwJfMQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAkBDWdldEFzc2V0Qnl0ZXMBBQphc3NldElkU3RyBQNuaWwBaQEFcmVwYXkAAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkAwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAAACQACAQIcMSBwYXltZW50IGhhcyB0byBiZSBhdHRhY2hlZAQKYXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAthc3NldEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEDSR0MDEyOTYyMTMwMjkJAQ1nZXRBY3R1YWxSYXRlAgUKYXNzZXRJZFN0cgIFYlJhdGUEBWJSYXRlCAUNJHQwMTI5NjIxMzAyOQJfMQQRcmF0ZXNSZWNhbGNSZXN1bHQIBQ0kdDAxMjk2MjEzMDI5Al8yBAZhbW91bnQJAG4EBQthc3NldEFtb3VudAUHU2NhbGUxNgUFYlJhdGUFB0NFSUxJTkcEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBA1hc3NldFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBA1hc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyBBF1c2VyQXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgQKYW1vdW50TGVmdAkAZQIFEXVzZXJBc3NldEJvcnJvd2VkBQZhbW91bnQEC3JlcGF5QW1vdW50AwkAZwIFCmFtb3VudExlZnQAAAUGYW1vdW50BRF1c2VyQXNzZXRCb3Jyb3dlZAMJAAACCQCzCQIJAQx0cnlHZXRTdHJpbmcBAgxzZXR1cF90b2tlbnMFCmFzc2V0SWRTdHIFBHVuaXQJAAIBAil0aGlzIGFzc2V0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIG1hcmtldAkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyCQBlAgURdXNlckFzc2V0Qm9ycm93ZWQFC3JlcGF5QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgkAZQIFDWFzc2V0Qm9ycm93ZWQFC3JlcGF5QW1vdW50BQNuaWwFEXJhdGVzUmVjYWxjUmVzdWx0AwkAZwIFCmFtb3VudExlZnQAAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkBAS0BBQphbW91bnRMZWZ0CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA25pbAFpAQhyZXBheUZvcgEHYWRkcmVzcwMJAQEhAQkBDXRyeUdldEJvb2xlYW4BAgxzZXR1cF9hY3RpdmUJAAIBAhFtYXJrZXQgaXMgc3RvcHBlZAMDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEGCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAAkAAgECHDEgcGF5bWVudCBoYXMgdG8gYmUgYXR0YWNoZWQECmFzc2V0SWRTdHIJAQ5nZXRBc3NldFN0cmluZwEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLYXNzZXRBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BA0kdDAxNDQ0NzE0NTE0CQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBWJSYXRlBAViUmF0ZQgFDSR0MDE0NDQ3MTQ1MTQCXzEEEXJhdGVzUmVjYWxjUmVzdWx0CAUNJHQwMTQ0NDcxNDUxNAJfMgQGYW1vdW50CQBuBAULYXNzZXRBbW91bnQFB1NjYWxlMTYFBWJSYXRlBQdDRUlMSU5HBA1hc3NldFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBA1hc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyBBF1c2VyQXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgQKYW1vdW50TGVmdAkAZQIFEXVzZXJBc3NldEJvcnJvd2VkBQZhbW91bnQEC3JlcGF5QW1vdW50AwkAZwIFCmFtb3VudExlZnQAAAUGYW1vdW50BRF1c2VyQXNzZXRCb3Jyb3dlZAMJAAACCQCzCQIJAQx0cnlHZXRTdHJpbmcBAgxzZXR1cF90b2tlbnMFCmFzc2V0SWRTdHIFBHVuaXQJAAIBAil0aGlzIGFzc2V0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIG1hcmtldAkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyCQBlAgURdXNlckFzc2V0Qm9ycm93ZWQFC3JlcGF5QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgkAZQIFDWFzc2V0Qm9ycm93ZWQFC3JlcGF5QW1vdW50BQNuaWwFEXJhdGVzUmVjYWxjUmVzdWx0AwkAZwIFCmFtb3VudExlZnQAAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkBAS0BBQphbW91bnRMZWZ0CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA25pbAFpAQ1zdGFrZVRva2VuQWxsAQphc3NldElkU3RyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIsb25seSBmb3IgaW50ZXJuYWwgc21hcnQgY29udHJhY3QgaW52b2NhdGlvbnMEBmFtb3VudAkBCmdldEJhbGFuY2UBBQphc3NldElkU3RyBANpbnYJAPwHBAUEdGhpcwIKc3Rha2VUb2tlbgkAzAgCBQphc3NldElkU3RyCQDMCAIFBmFtb3VudAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpzdGFrZVRva2VuAgphc3NldElkU3RyBmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECLG9ubHkgZm9yIGludGVybmFsIHNtYXJ0IGNvbnRyYWN0IGludm9jYXRpb25zAwkAAAIFCmFzc2V0SWRTdHICLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwBAxhbW91bnRTdGFrZWQJAQ10cnlHZXRJbnRlZ2VyAQI9YXV0b3N0YWtlX2Ftb3VudF9ERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAQDaW52CQD8BwQJAQdBZGRyZXNzAQEaAVfkDqc2T5IL15fPpB0/NRvPQ2rrqjzzcZ0CBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIBILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRBQZhbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAzAgCCQEMSW50ZWdlckVudHJ5AgI9YXV0b3N0YWtlX2Ftb3VudF9ERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAkAZAIFDGFtb3VudFN0YWtlZAUGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUKYXNzZXRJZFN0cgIsOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEEDGFtb3VudFN0YWtlZAkBDXRyeUdldEludGVnZXIBAj1hdXRvc3Rha2VfYW1vdW50Xzh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxBANpbnYJAPwHBAkBB0FkZHJlc3MBARoBV/cVNRHF7XKFU1QQ8N0bTeJqPNO0aHcpWgIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgEgdRYQOIB2DVVlfknzrrHb5hmcahBoH8lVYfpKRlp3MBwFBmFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQDMCAIJAQxJbnRlZ2VyRW50cnkCAj1hdXRvc3Rha2VfYW1vdW50Xzh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxCQBkAgUMYW1vdW50U3Rha2VkBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQphc3NldElkU3RyAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAQMYW1vdW50U3Rha2VkCQENdHJ5R2V0SW50ZWdlcgECPWF1dG9zdGFrZV9hbW91bnRfQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wEA2ludgkA/AcECQEHQWRkcmVzcwEBGgFXa2g44QPUmoyfEhvGLLwjBzkLze0S1wpfAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCASCS0fRK4hEBK/R+6t4hjj3F+8nyfc6Hsu1SGfA6TiRY9QUGYW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAMwIAgkBDEludGVnZXJFbnRyeQICPWF1dG9zdGFrZV9hbW91bnRfQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wJAGQCBQxhbW91bnRTdGFrZWQFBmFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwBaQEMdW5zdGFrZVRva2VuAgphc3NldElkU3RyBmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECLG9ubHkgZm9yIGludGVybmFsIHNtYXJ0IGNvbnRyYWN0IGludm9jYXRpb25zAwkAAAIFCmFzc2V0SWRTdHICLDh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxBAxhbW91bnRTdGFrZWQJAQ10cnlHZXRJbnRlZ2VyAQI9YXV0b3N0YWtlX2Ftb3VudF84dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQQDaW52CQD8BwQJAQdBZGRyZXNzAQEaAVf3FTURxe1yhVNUEPDdG03iajzTtGh3KVoCB3VuU3Rha2UJAMwIAgUGYW1vdW50BQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgkAzAgCCQEMSW50ZWdlckVudHJ5AgI9YXV0b3N0YWtlX2Ftb3VudF84dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQkAZQIFDGFtb3VudFN0YWtlZAUGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUKYXNzZXRJZFN0cgIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wEDGFtb3VudFN0YWtlZAkBDXRyeUdldEludGVnZXIBAj1hdXRvc3Rha2VfYW1vdW50X0F0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBANpbnYJAPwHBAkBB0FkZHJlc3MBARoBV2toOOED1JqMnxIbxiy8Iwc5C83tEtcKXwIHdW5zdGFrZQkAzAgCBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BARiYWwwCQEKZ2V0QmFsYW5jZQECLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMAwkAAAIFBGJhbDAFBGJhbDAEBGludjIJAPwHBAkBB0FkZHJlc3MBARoBV/t16usT/RnAywjcj2CzfgO6EY6tj7fQ6wIXZ25zYnRSZXdhcmRzU1lTUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAACBQRpbnYyBQRpbnYyBAx0b3B1cFJld2FyZHMEByRtYXRjaDAFBGludjIDCQABAgUHJG1hdGNoMAIJTGlzdFtBbnldBAF4BQckbWF0Y2gwBAhzZWNvbmRFbAkAkQMCBQF4AAEEByRtYXRjaDEFCHNlY29uZEVsAwkAAQIFByRtYXRjaDECBlN0cmluZwQIc2Vjb25kRWwFByRtYXRjaDEECXVzZG5WYWx1ZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCCQC1CQIFCHNlY29uZEVsAgFfAAECAToAAQQKd2F2ZXNWYWx1ZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCCQC1CQIFCHNlY29uZEVsAgFfAAACAToAAQMDCQECIT0CBQl1c2RuVmFsdWUAAAYJAQIhPQIFCndhdmVzVmFsdWUAAAQIdXNkbkJhbDAJAQpnZXRCYWxhbmNlAQIsREcyeEZrUGREd0tVb0JrekdBaFF0THBTR3pmWExpQ1lQRXplS0gyQWQyNHADCQAAAgUIdXNkbkJhbDAFCHVzZG5CYWwwBAl3YXZlc0JhbDAJAQpnZXRCYWxhbmNlAQIFV0FWRVMDCQAAAgUJd2F2ZXNCYWwwBQl3YXZlc0JhbDAEBGludjMJAPwHBAkBB0FkZHJlc3MBARoBV2toOOED1JqMnxIbxiy8Iwc5C83tEtcKXwIMY2xhaW1SZXdhcmRzBQNuaWwFA25pbAMJAAACBQRpbnYzBQRpbnYzBAl3YXZlc0JhbDEJAQpnZXRCYWxhbmNlAQIFV0FWRVMDCQAAAgUJd2F2ZXNCYWwxBQl3YXZlc0JhbDEEBGludjQJAPwHBAkBB0FkZHJlc3MBARoBV84UFJ0WWAPkQ0x69aXssp+tv82zg/kpogIEc3dhcAkAzAgCAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAkAZQIFCXdhdmVzQmFsMQUJd2F2ZXNCYWwwBQNuaWwDCQAAAgUEaW52NAUEaW52NAQIdXNkbkJhbDEJAQpnZXRCYWxhbmNlAQIsREcyeEZrUGREd0tVb0JrekdBaFF0THBTR3pmWExpQ1lQRXplS0gyQWQyNHADCQAAAgUIdXNkbkJhbDEFCHVzZG5CYWwxBARpbnY1CQD8BwQJAQdBZGRyZXNzAQEaAVdA6qFcZYEoPXSEW1dgnvvjeSu33Iq0kHcCBHN3YXAJAMwIAgIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIBILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRCQBlAgUIdXNkbkJhbDEFCHVzZG5CYWwwBQNuaWwDCQAAAgUEaW52NQUEaW52NQQEaW52NgkA/AcEBQR0aGlzAgthZGRJbnRlcmVzdAkAzAgCAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAkAzAgCCQBlAgkBCmdldEJhbGFuY2UBAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAUEYmFsMAUDbmlsBQNuaWwDCQAAAgUEaW52NgUEaW52NgACCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAEAAQAAAwkAAAIFDHRvcHVwUmV3YXJkcwUMdG9wdXBSZXdhcmRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAj1hdXRvc3Rha2VfYW1vdW50X0F0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMCQBlAgUMYW1vdW50U3Rha2VkBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAWkBC2FkZEludGVyZXN0Agphc3NldElkU3RyBmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECGG9ubHkgZm9yIHNlbGYgaW52b2NhdGlvbgQGZWFybmVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIVYXV0b3N0YWtlX2xhc3RFYXJuZWRfBQphc3NldElkU3RyBApsYXN0SGVpZ2h0CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIUYXV0b3N0YWtlX2xhc3RCbG9ja18FCmFzc2V0SWRTdHIEC2NsZWFuQW1vdW50CQBrAwUGYW1vdW50AFAAZAQMc3RhdGVDaGFuZ2VzAwMJAAACBQpsYXN0SGVpZ2h0BQZoZWlnaHQGCQAAAgUGYW1vdW50AAAFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhhhdXRvc3Rha2VfcHJlTGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIFBmVhcm5lZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhdhdXRvc3Rha2VfcHJlTGFzdEJsb2NrXwUKYXNzZXRJZFN0cgUKbGFzdEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhVhdXRvc3Rha2VfbGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIJAGQCBQZlYXJuZWQFC2NsZWFuQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICFGF1dG9zdGFrZV9sYXN0QmxvY2tfBQphc3NldElkU3RyBQZoZWlnaHQFA25pbAkAzggCBQxzdGF0ZUNoYW5nZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlCQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQkAawMFB1NjYWxlMTYFC2NsZWFuQW1vdW50CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBQNuaWwBaQETYWRkSW50ZXJlc3RFWFRFUk5BTAAEBmFtb3VudAkAawMICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AFAAZAQHYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAphc3NldElkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBBQdhc3NldElkBAZlYXJuZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhVhdXRvc3Rha2VfbGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIECmxhc3RIZWlnaHQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhRhdXRvc3Rha2VfbGFzdEJsb2NrXwUKYXNzZXRJZFN0cgQMc3RhdGVDaGFuZ2VzAwMJAAACBQpsYXN0SGVpZ2h0BQZoZWlnaHQGCQAAAgUGYW1vdW50AAAFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhhhdXRvc3Rha2VfcHJlTGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIFBmVhcm5lZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhdhdXRvc3Rha2VfcHJlTGFzdEJsb2NrXwUKYXNzZXRJZFN0cgUKbGFzdEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhVhdXRvc3Rha2VfbGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIJAGQCBQZlYXJuZWQFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhRhdXRvc3Rha2VfbGFzdEJsb2NrXwUKYXNzZXRJZFN0cgUGaGVpZ2h0BQNuaWwJAM4IAgUMc3RhdGVDaGFuZ2VzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfc1JhdGUJAGsDBQdTY2FsZTE2BQZhbW91bnQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIFA25pbAFpAQdwcmVJbml0BAZ0b2tlbnMEbHR2cwNsdHMJcGVuYWx0aWVzCgEBZgIFYWNjdW0FdG9rZW4JAM4IAgUFYWNjdW0JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUFdG9rZW4CBl9iUmF0ZQUHU2NhbGUxNgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQV0b2tlbgIGX3NSYXRlBQdTY2FsZTE2BQNuaWwDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgphZG1pbiBvbmx5BAVyYXRlcwoAAiRsCQC1CQIFBnRva2VucwIBLAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQICDHNldHVwX3Rva2VucwUGdG9rZW5zCQDMCAIJAQtTdHJpbmdFbnRyeQICCnNldHVwX2x0dnMFBGx0dnMJAMwIAgkBC1N0cmluZ0VudHJ5AgIJc2V0dXBfbHRzBQNsdHMJAMwIAgkBC1N0cmluZ0VudHJ5AgIPc2V0dXBfcGVuYWx0aWVzBQlwZW5hbHRpZXMJAMwIAgkBDEJvb2xlYW5FbnRyeQICDHNldHVwX2FjdGl2ZQYFA25pbAUFcmF0ZXMBaQEMaW5pdE5ld1Rva2VuBAV0b2tlbgNsdHYCbHQHcGVuYWx0eQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCmFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgIMc2V0dXBfdG9rZW5zCQCsAgIJAKwCAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwIBLAUFdG9rZW4JAMwIAgkBC1N0cmluZ0VudHJ5AgIKc2V0dXBfbHR2cwkArAICCQCsAgIJAQx0cnlHZXRTdHJpbmcBAgpzZXR1cF9sdHZzAgEsBQNsdHYJAMwIAgkBC1N0cmluZ0VudHJ5AgIJc2V0dXBfbHRzCQCsAgIJAKwCAgkBDHRyeUdldFN0cmluZwECCXNldHVwX2x0cwIBLAUCbHQJAMwIAgkBC1N0cmluZ0VudHJ5AgIPc2V0dXBfcGVuYWx0aWVzCQCsAgIJAKwCAgkBDHRyeUdldFN0cmluZwECD3NldHVwX3BlbmFsdGllcwIBLAUHcGVuYWx0eQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQV0b2tlbgIGX2JSYXRlBQdTY2FsZTE2CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBXRva2VuAgZfc1JhdGUFB1NjYWxlMTYFA25pbAFpAQ91cGRhdGVQYXJhbWV0ZXICA2tleQN2YWwDAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQECIT0CCAUBaQZjYWxsZXIJAQdBZGRyZXNzAQEaAVcUeViFwPoaZ+cUNI0M98TwbUXt9hz5PUEHCQACAQIKYWRtaW4gb25seQkAzAgCCQEMSW50ZWdlckVudHJ5AgUDa2V5CQENcGFyc2VJbnRWYWx1ZQEFA3ZhbAUDbmlsAWkBDHVwZGF0ZVN0cmluZwIDa2V5A3ZhbAMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAQIhPQIIBQFpBmNhbGxlcgkBB0FkZHJlc3MBARoBVxR5WIXA+hpn5xQ0jQz3xPBtRe32HPk9QQcJAAIBAgphZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwBaQESY2xhaW1Ub1Jlc2VydmVGdW5kAQVkZWJ1ZwQGYXNzZXRzCQEPZ2V0TWFya2V0QXNzZXRzAAQFcmF0ZXMICQENZ2V0QWN0dWFsUmF0ZQIJAJEDAgUGYXNzZXRzAAACBXNSYXRlAl8yBAJsaQkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgEBZgIFYWNjdW0BbgMJAGcCBQFuCQCQAwEFBmFzc2V0cwUFYWNjdW0ECmFzc2V0SWRTdHIJAJEDAgUGYXNzZXRzBQFuBA9hdXRvc3Rha2VBbW91bnQJAQx0cnlHZXRTdHJpbmcBCQCsAgICEWF1dG9zdGFrZV9hbW91bnRfBQphc3NldElkU3RyBAZhbW91bnQJAGUCCQBkAgkAZAIJAGQCCQEKZ2V0QmFsYW5jZQEFCmFzc2V0SWRTdHIJAQ10cnlHZXRJbnRlZ2Vy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XwUKYXNzZXRJZFN0cgIHX3RlbXBMVAkAawMFBnRlbXBMVACpTgCQTgUDbmlsBQNuaWwBaQEIc2h1dGRvd24BCHNodXRkb3duAwkAAAIJAM8IAgURc2h1dGRvd25XaGl0ZWxpc3QICAUBaQZjYWxsZXIFYnl0ZXMFBHVuaXQJAAIBAhd1c2VyIG5vdCBpbiBhIHdoaXRlbGlzdAkAzAgCCQEMQm9vbGVhbkVudHJ5AgIMc2V0dXBfYWN0aXZlCQEBIQEFCHNodXRkb3duBQNuaWwBaQEJbGlxdWlkYXRlBgVkZWJ1ZwdhZGRyZXNzC2Fzc2V0QW1vdW50C3NBc3NldElkU3RyC2JBc3NldElkU3RyCHJvdXRlU3RyAwkBASEBCQEWdmVyaWZ5TGlxdWlkYXRvclJpZ2h0cwEIBQFpBmNhbGxlcgkAAgECKHRlbXBvcmFyaWx5IGF2YWlsYWJsZSBmb3Igd2hpdGVsaXN0IG9ubHkDCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQEDnVzZXJDb2xsYXRlcmFsCQESY2FsY1VzZXJDb2xsYXRlcmFsAQUHYWRkcmVzcwMJAAACBQ51c2VyQ29sbGF0ZXJhbAUOdXNlckNvbGxhdGVyYWwEDSR0MDI3OTUwMjgwMTIJAQ1nZXRBY3R1YWxSYXRlAgULc0Fzc2V0SWRTdHICBXNSYXRlBAVzUmF0ZQgFDSR0MDI3OTUwMjgwMTICXzEEC3JhdGVzUmVzdWx0CAUNJHQwMjc5NTAyODAxMgJfMgQNJHQwMjgwMTcyODA4NgkBDWdldEFjdHVhbFJhdGUCBQtiQXNzZXRJZFN0cgIFYlJhdGUEBWJSYXRlCAUNJHQwMjgwMTcyODA4NgJfMQQScmF0ZXNSZWNhbGNSZXN1bHQyCAUNJHQwMjgwMTcyODA4NgJfMgQMc0Fzc2V0QW1vdW50CQBrAwULYXNzZXRBbW91bnQFB1NjYWxlMTYFBXNSYXRlBBBjdXJyZW50U1Bvc2l0aW9uCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgQTY3VycmVudEJQb3NpdGlvblZhbAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIEEGN1cnJlbnRCUG9zaXRpb24DCQBmAgUTY3VycmVudEJQb3NpdGlvblZhbAAABRNjdXJyZW50QlBvc2l0aW9uVmFsCQACAQIgdXNlciBoYXMgbm8gYm9ycm93IGluIHRoaXMgdG9rZW4DCQBmAgUOdXNlckNvbGxhdGVyYWwAAAkAAgECGHVzZXIgY2FuJ3QgYmUgbGlxdWlkYXRlZAMJAGYCBQxzQXNzZXRBbW91bnQFEGN1cnJlbnRTUG9zaXRpb24JAAIBAjJwb3NpdGlvbiB0byBsaXF1aWRhdGUgaXMgYmlnZ2VyIHRoYW4gdXNlcidzIHN1cHBseQQOYmFsYW5jZTBCZWZvcmUJAQpnZXRCYWxhbmNlAQULc0Fzc2V0SWRTdHIDCQAAAgUOYmFsYW5jZTBCZWZvcmUFDmJhbGFuY2UwQmVmb3JlBA5iYWxhbmNlMUJlZm9yZQkBCmdldEJhbGFuY2UBBQtiQXNzZXRJZFN0cgMJAAACBQ5iYWxhbmNlMUJlZm9yZQUOYmFsYW5jZTFCZWZvcmUEDmV4Y2hhbmdlSW52b2tlCQD8BwQFEWFnZ3JlZ2F0b3JBZGRyZXNzAgRzd2FwCQDMCAIFCHJvdXRlU3RyCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0QXNzZXRCeXRlcwEFC3NBc3NldElkU3RyBQthc3NldEFtb3VudAUDbmlsAwkAAAIFDmV4Y2hhbmdlSW52b2tlBQ5leGNoYW5nZUludm9rZQQKYXNzZXQwU29sZAkAZQIFDmJhbGFuY2UwQmVmb3JlCQEKZ2V0QmFsYW5jZQEFC3NBc3NldElkU3RyAwkAAAIFCmFzc2V0MFNvbGQFCmFzc2V0MFNvbGQEDGFzc2V0MUJvdWdodAkAZQIJAQpnZXRCYWxhbmNlAQULYkFzc2V0SWRTdHIFDmJhbGFuY2UxQmVmb3JlAwkAAAIFDGFzc2V0MUJvdWdodAUMYXNzZXQxQm91Z2h0BAthc3NldDBQcmljZQgJAQ1nZXRUb2tlblByaWNlAQULc0Fzc2V0SWRTdHICXzEEC2Fzc2V0MFNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBBQtzQXNzZXRJZFN0cgQJYXNzZXQwVXNkCQBrAwUKYXNzZXQwU29sZAULYXNzZXQwUHJpY2UFC2Fzc2V0MFNjYWxlBAthc3NldDFQcmljZQgJAQ1nZXRUb2tlblByaWNlAQULYkFzc2V0SWRTdHICXzIEC2Fzc2V0MVNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBBQtiQXNzZXRJZFN0cgQJYXNzZXQxVXNkCQBrAwUMYXNzZXQxQm91Z2h0BQthc3NldDFQcmljZQULYXNzZXQxU2NhbGUEB3BlbmFsdHkJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAQx0cnlHZXRTdHJpbmcBAg9zZXR1cF9wZW5hbHRpZXMCASwJAQV2YWx1ZQEJAM8IAgkBD2dldE1hcmtldEFzc2V0cwAFC2JBc3NldElkU3RyBBFsaXF1aWRhdGlvblByb2ZpdAkAZQIFCWFzc2V0MVVzZAkAawMFCWFzc2V0MFVzZAkAZQIFBlNjYWxlOAUHcGVuYWx0eQUGU2NhbGU4BAxzQXNzZXRDaGFuZ2UJAGsDBQphc3NldDBTb2xkBQdTY2FsZTE2BQVzUmF0ZQQMYkFzc2V0Q2hhbmdlCQBrAwkAawMFDGFzc2V0MUJvdWdodAUHU2NhbGUxNgUFYlJhdGUJAGUCBQZTY2FsZTgJAGsDBRFsaXF1aWRhdGlvblByb2ZpdAUGU2NhbGU4BQlhc3NldDFVc2QFBlNjYWxlOAMJAGYCBQphc3NldDBTb2xkBQthc3NldEFtb3VudAkAAgECI21vcmUgYXNzZXRzIGV4Y2hhbmdlZCB0aGFuIGV4cGVjdGVkAwkAZgIAAAURbGlxdWlkYXRpb25Qcm9maXQJAAIBAi9wcmljZSBpbXBhY3QgaXMgYmlnZ2VyIHRoYW4gbGlxdWlkYXRpb24gcGVuYWx0eQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FC3NBc3NldElkU3RyCQBlAgUQY3VycmVudFNQb3NpdGlvbgUMc0Fzc2V0Q2hhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIJAGUCBRBjdXJyZW50QlBvc2l0aW9uBQxiQXNzZXRDaGFuZ2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FC3NBc3NldElkU3RyBQxzQXNzZXRDaGFuZ2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FC2JBc3NldElkU3RyBQxiQXNzZXRDaGFuZ2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtsaXF1aWRhdGVWMgMFZGVidWcHYWRkcmVzcwtzQXNzZXRJZFN0cgMJAQEhAQkBFnZlcmlmeUxpcXVpZGF0b3JSaWdodHMBCAUBaQZjYWxsZXIJAAIBAih0ZW1wb3JhcmlseSBhdmFpbGFibGUgZm9yIHdoaXRlbGlzdCBvbmx5AwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkBAhiQXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtiQXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQUIYkFzc2V0SWQEDGJBc3NldEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEDnVzZXJDb2xsYXRlcmFsCQESY2FsY1VzZXJDb2xsYXRlcmFsAQUHYWRkcmVzcwMJAAACBQ51c2VyQ29sbGF0ZXJhbAUOdXNlckNvbGxhdGVyYWwDCQBmAgUOdXNlckNvbGxhdGVyYWwAAAkAAgECGHVzZXIgY2FuJ3QgYmUgbGlxdWlkYXRlZAQMbWFya2V0QXNzZXRzCQEPZ2V0TWFya2V0QXNzZXRzAAQJYXNzZXQxTnVtCQEFdmFsdWUBCQDPCAIFDG1hcmtldEFzc2V0cwULYkFzc2V0SWRTdHIECWFzc2V0ME51bQkBBXZhbHVlAQkAzwgCBQxtYXJrZXRBc3NldHMFC3NBc3NldElkU3RyBA0kdDAzMTI0MTMxMzAzCQENZ2V0QWN0dWFsUmF0ZQIFC2JBc3NldElkU3RyAgViUmF0ZQQFYlJhdGUIBQ0kdDAzMTI0MTMxMzAzAl8xBAtyYXRlc1Jlc3VsdAgFDSR0MDMxMjQxMzEzMDMCXzIEC2Fzc2V0MVByaWNlCAkBDWdldFRva2VuUHJpY2UBBQtiQXNzZXRJZFN0cgJfMgQLYXNzZXQxU2NhbGUJAQ5jYWxjQXNzZXRTY2FsZQEFC2JBc3NldElkU3RyBApiQW1vdW50VXNkCQBrAwUMYkFzc2V0QW1vdW50BQthc3NldDFQcmljZQULYXNzZXQxU2NhbGUEB3BlbmFsdHkJAQ1wYXJzZUludFZhbHVlAQkBBXZhbHVlAQkAkQMCCQC1CQIJAQx0cnlHZXRTdHJpbmcBAg9zZXR1cF9wZW5hbHRpZXMCASwFCWFzc2V0MU51bQQLYXNzZXQwUHJpY2UICQENZ2V0VG9rZW5QcmljZQEFC3NBc3NldElkU3RyAl8xBAthc3NldDBTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQULc0Fzc2V0SWRTdHIECnNBbW91bnRVc2QJAGsDBQpiQW1vdW50VXNkCQBkAgUGU2NhbGU4BQdwZW5hbHR5BQZTY2FsZTgEDHNBc3NldEFtb3VudAkAawMFCnNBbW91bnRVc2QFC2Fzc2V0MFNjYWxlBQthc3NldDBQcmljZQQHYkFtb3VudAkAawMFDGJBc3NldEFtb3VudAUHU2NhbGUxNgUFYlJhdGUEB3NBbW91bnQJAGsDBQxzQXNzZXRBbW91bnQFB1NjYWxlMTYICQCRAwIFC3JhdGVzUmVzdWx0CQBkAgkAaAIFCWFzc2V0ME51bQADAAEFdmFsdWUEEGN1cnJlbnRTUG9zaXRpb24JAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FC3NBc3NldElkU3RyBBNjdXJyZW50QlBvc2l0aW9uVmFsCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgQQY3VycmVudEJQb3NpdGlvbgMJAGYCBRNjdXJyZW50QlBvc2l0aW9uVmFsAAAFE2N1cnJlbnRCUG9zaXRpb25WYWwJAAIBAiB1c2VyIGhhcyBubyBib3Jyb3cgaW4gdGhpcyB0b2tlbgMJAGYCBQdzQW1vdW50BRBjdXJyZW50U1Bvc2l0aW9uCQACAQIycG9zaXRpb24gdG8gbGlxdWlkYXRlIGlzIGJpZ2dlciB0aGFuIHVzZXIncyBzdXBwbHkDBQVkZWJ1ZwkAAgECFWxpcXVpZGF0aW9uIHdpbGwgcGFzcwkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUMc0Fzc2V0QW1vdW50CQENZ2V0QXNzZXRCeXRlcwEFC3NBc3NldElkU3RyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIJAGUCBRBjdXJyZW50U1Bvc2l0aW9uBQdzQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIJAGUCBRBjdXJyZW50QlBvc2l0aW9uBQdiQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgUHc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg90b3RhbF9ib3Jyb3dlZF8FC2JBc3NldElkU3RyCQBlAgkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIFB2JBbW91bnQFA25pbAULcmF0ZXNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERZ2V0VXNlckNvbGxhdGVyYWwEBWRlYnVnB2FkZHJlc3MNbWludXNCb3Jyb3dlZAthZnRlckNoYW5nZQQGYXNzZXRzCQEPZ2V0TWFya2V0QXNzZXRzAAQEbHR2cwkAtQkCCQEMdHJ5R2V0U3RyaW5nAQIKc2V0dXBfbHR2cwIBLAQDbHRzCQC1CQIJAQx0cnlHZXRTdHJpbmcBAglzZXR1cF9sdHMCASwEBXJhdGVzCAkBDWdldEFjdHVhbFJhdGUCCQCRAwIFBmFzc2V0cwAAAgVzUmF0ZQJfMgQNY2hhbmdlSGFuZGxlcgkAtQkCBQthZnRlckNoYW5nZQIBLAoBAWYCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAkAkAMBBQZhc3NldHMFBWFjY3VtBAx1c2VyU3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8JAJEDAgUGYXNzZXRzBQRuZXh0BAx1c2VyQm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8JAJEDAgUGYXNzZXRzBQRuZXh0BBNuZWVkVG9rZW5BY2NvdW50aW5nAwkAAAIFC2FmdGVyQ2hhbmdlAgADAwkBAiE9AgUMdXNlckJvcnJvd2VkAAAGCQECIT0CBQx1c2VyU3VwcGxpZWQAAAYHBgMFE25lZWRUb2tlbkFjY291bnRpbmcECmFzc2V0U2NhbGUJAQ5jYWxjQXNzZXRTY2FsZQEJAJEDAgUGYXNzZXRzBQRuZXh0BAphc3NldFByaWNlCQENZ2V0VG9rZW5QcmljZQEJAJEDAgUGYXNzZXRzBQRuZXh0CQBlAgkAZAIFBWFjY3VtCQBrAwkAawMJAGsDCQBkAgUMdXNlclN1cHBsaWVkAwMDCQECIT0CBQthZnRlckNoYW5nZQIACQAAAgkAkQMCBQ1jaGFuZ2VIYW5kbGVyAAAJAJEDAgUGYXNzZXRzBQRuZXh0BwkAAAIJAJEDAgUNY2hhbmdlSGFuZGxlcgABAghzdXBwbGllZAcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ1jaGFuZ2VIYW5kbGVyAAIAAAgJAJEDAgUFcmF0ZXMJAGgCBQRuZXh0AAMFdmFsdWUFB1NjYWxlMTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsdHZzBQRuZXh0BQZTY2FsZTgIBQphc3NldFByaWNlAl8xBQphc3NldFNjYWxlAwUNbWludXNCb3Jyb3dlZAkAawMJAGsDCQBrAwkAZAIFDHVzZXJCb3Jyb3dlZAMDAwkBAiE9AgULYWZ0ZXJDaGFuZ2UCAAkAAAIJAJEDAgUNY2hhbmdlSGFuZGxlcgAACQCRAwIFBmFzc2V0cwUEbmV4dAcJAAACCQCRAwIFDWNoYW5nZUhhbmRsZXIAAQIIYm9ycm93ZWQHCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUNY2hhbmdlSGFuZGxlcgACAAAICQCRAwIFBXJhdGVzCQBkAgkAaAIFBG5leHQAAwABBXZhbHVlBQdTY2FsZTE2BQZTY2FsZTgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNsdHMFBG5leHQIBQphc3NldFByaWNlAl8yBQphc3NldFNjYWxlAAAFBWFjY3VtBAZyZXN1bHQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAwUFZGVidWcJAAIBCQCkAwEFBnJlc3VsdAkAlAoCBQVyYXRlcwUGcmVzdWx0AWkBDGdldEFzc2V0RGVidAMFZGVidWcHYWRkcmVzcwphc3NldElkU3RyBAx1c2VyQm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIECmFzc2V0U2NhbGUJAQ5jYWxjQXNzZXRTY2FsZQEFCmFzc2V0SWRTdHIEBHJhdGUICQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBWJSYXRlAl8xBAZyZXN1bHQJAGsDBQx1c2VyQm9ycm93ZWQFBHJhdGUFB1NjYWxlMTYDBQVkZWJ1ZwkAAgEJAKQDAQUGcmVzdWx0CQCUCgIFA25pbAUGcmVzdWx0AWkBCWdldFByaWNlcwEFZGVidWcEBmFzc2V0cwkBD2dldE1hcmtldEFzc2V0cwAKAQFmAgVhY2N1bQRuZXh0AwkAZwIFBG5leHQJAJADAQUGYXNzZXRzBQVhY2N1bQQKYXNzZXRQcmljZQkBDWdldFRva2VuUHJpY2UBCQCRAwIFBmFzc2V0cwUEbmV4dAkArAICCQCsAgIJAKwCAgkArAICBQVhY2N1bQkApAMBCAUKYXNzZXRQcmljZQJfMQIBLAkApAMBCAUKYXNzZXRQcmljZQJfMgIBfAQGcmVzdWx0CgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgMFBWRlYnVnCQACAQUGcmVzdWx0CQCUCgIFA25pbAUGcmVzdWx0AWkBGWNhbGN1bGF0ZVV0aWxpemF0aW9uUmF0aW8CCmFzc2V0SWRTdHIFZGVidWcDBQVkZWJ1ZwkAAgEJAKQDAQkBBWdldFVyAQUKYXNzZXRJZFN0cgkAlAoCBQNuaWwJAQVnZXRVcgEFCmFzc2V0SWRTdHIBaQETY2FsY3VsYXRlT3V0ZGF0ZWRVUgIKYXNzZXRJZFN0cgVkZWJ1ZwMFBWRlYnVnCQACAQkApAMBCQENZ2V0T3V0ZGF0ZWRVcgEFCmFzc2V0SWRTdHIJAJQKAgUDbmlsCQENZ2V0T3V0ZGF0ZWRVcgEFCmFzc2V0SWRTdHIBaQETY2FsY3VsYXRlVG9rZW5SYXRlcwEFZGVidWcKAQFmAgVhY2N1bQphc3NldElkU3RyBAVyYXRlcwkBEHRva2VuUmF0ZXNSZWNhbGMBBQphc3NldElkU3RyCQCUCgIJAKwCAgkArAICCQCsAgIJAKwCAggFBWFjY3VtAl8xCQCkAwEICQCRAwIFBXJhdGVzAAEFdmFsdWUCAXwJAKQDAQgJAJEDAgUFcmF0ZXMAAAV2YWx1ZQIBLAkAzggCCAUFYWNjdW0CXzIFBXJhdGVzBAlwYXJhbWV0ZXIKAAIkbAkBD2dldE1hcmtldEFzc2V0cwAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgICAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAwUFZGVidWcJAAIBCAUJcGFyYW1ldGVyAl8xCQCUCgIIBQlwYXJhbWV0ZXICXzIIBQlwYXJhbWV0ZXICXzEBaQEXY2FsY3VsYXRlVG9rZW5zSW50ZXJlc3QBBWRlYnVnCgEBZgIFYWNjdW0KYXNzZXRJZFN0cgQEcmF0ZQkAawMJAQtnZXRJbnRlcmVzdAEFCmFzc2V0SWRTdHIFCWRheUJsb2NrcwUGU2NhbGU4CQCsAgIJAKwCAgUFYWNjdW0JAKQDAQUEcmF0ZQIBLAQJcGFyYW1ldGVyCgACJGwJAQ9nZXRNYXJrZXRBc3NldHMACgACJHMJAJADAQUCJGwKAAUkYWNjMAIACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAwUFZGVidWcJAAIBBQlwYXJhbWV0ZXIJAJQKAgUDbmlsBQlwYXJhbWV0ZXIBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5OluoaQ==", "height": 2604947, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CNBgizaFL5JEBKhkCkpo22hPiEqDbKEPxBTu7nUGXxfa Next: HuL3PdrDxgtddSUk5tzRx6rVgADLqfcrG5hVmegTVb7W Diff:
OldNewDifferences
695695
696696
697697 @Callable(aK)
698-func updateParameter (C,bE) = if (if ((aK.caller != this))
699- then (aK.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
700- else false)
698+func initNewToken (ad,bE,bF,bG) = if ((aK.caller != this))
701699 then throw("admin only")
702- else [IntegerEntry(C, parseIntValue(bE))]
700+ else [StringEntry("setup_tokens", ((F("setup_tokens") + ",") + ad)), StringEntry("setup_ltvs", ((F("setup_ltvs") + ",") + bE)), StringEntry("setup_lts", ((F("setup_lts") + ",") + bF)), StringEntry("setup_penalties", ((F("setup_penalties") + ",") + bG)), IntegerEntry((ad + "_bRate"), n), IntegerEntry((ad + "_sRate"), n)]
703701
704702
705703
706704 @Callable(aK)
707-func updateString (C,bE) = if (if ((aK.caller != this))
705+func updateParameter (C,bH) = if (if ((aK.caller != this))
708706 then (aK.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
709707 else false)
710708 then throw("admin only")
711- else [StringEntry(C, bE)]
709+ else [IntegerEntry(C, parseIntValue(bH))]
712710
713711
714712
715713 @Callable(aK)
716-func claimToReserveFund (bF) = {
717- let bG = L()
718- let ag = ab(bG[0], "sRate")._2
714+func updateString (C,bH) = if (if ((aK.caller != this))
715+ then (aK.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
716+ else false)
717+ then throw("admin only")
718+ else [StringEntry(C, bH)]
719+
720+
721+
722+@Callable(aK)
723+func claimToReserveFund (bI) = {
724+ let bJ = L()
725+ let ag = ab(bJ[0], "sRate")._2
719726 let q = [0, 1, 2, 3, 4, 5]
720- func r (s,bH) = if ((bH >= size(bG)))
727+ func r (s,bK) = if ((bK >= size(bJ)))
721728 then s
722729 else {
723- let j = bG[bH]
724- let bI = F(("autostake_amount_" + j))
725- let aw = ((((K(j) + B(("autostake_amount_" + j))) + (if ((bI != ""))
726- then parseIntValue(bI)
727- else 0)) + fraction(B(("total_borrowed_" + j)), ag[((bH * 3) + 1)].value, n)) - fraction(B(("total_supplied_" + j)), ag[(bH * 3)].value, n))
730+ let j = bJ[bK]
731+ let bL = F(("autostake_amount_" + j))
732+ let aw = ((((K(j) + B(("autostake_amount_" + j))) + (if ((bL != ""))
733+ then parseIntValue(bL)
734+ else 0)) + fraction(B(("total_borrowed_" + j)), ag[((bK * 3) + 1)].value, n)) - fraction(B(("total_supplied_" + j)), ag[(bK * 3)].value, n))
728735 let bg = if ((B(("autostake_amount_" + j)) > 0))
729736 then invoke(this, "unstakeToken", [j, max([aw, 0])], nil)
730737 else 0
733740 else throw("Strict value is not equal to itself.")
734741 }
735742
736- let bJ = {
743+ let bM = {
737744 let u = q
738745 let v = size(u)
739746 let w = nil
747754
748755 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
749756 }
750- func bK (s,bH) = if ((bH >= size(bG)))
757+ func bN (s,bK) = if ((bK >= size(bJ)))
751758 then s
752759 else {
753- let j = bG[bH]
754- (s ++ [ScriptTransfer(a, max([bJ[bH], 0]), J(j))])
760+ let j = bJ[bK]
761+ (s ++ [ScriptTransfer(a, max([bM[bK], 0]), J(j))])
755762 }
756763
757- if (bF)
758- then throw(p(bJ))
764+ if (bI)
765+ then throw(p(bM))
759766 else $Tuple2({
760767 let u = q
761768 let v = size(u)
762769 let w = nil
763- func bL (y,z) = if ((z >= v))
770+ func bO (y,z) = if ((z >= v))
764771 then y
765- else bK(y, u[z])
772+ else bN(y, u[z])
766773
767- func bM (y,z) = if ((z >= v))
774+ func bP (y,z) = if ((z >= v))
768775 then y
769776 else throw("List size exceeds 6")
770777
771- bM(bL(bL(bL(bL(bL(bL(w, 0), 1), 2), 3), 4), 5), 6)
772- }, bJ)
778+ bP(bO(bO(bO(bO(bO(bO(w, 0), 1), 2), 3), 4), 5), 6)
779+ }, bM)
773780 }
774781
775782
776783
777784 @Callable(aK)
778785 func reSetup (j) = {
779- let bN = B("resetup_lastUpdate")
780- if ((o > (height - bN)))
786+ let bQ = B("resetup_lastUpdate")
787+ if ((o > (height - bQ)))
781788 then throw("can be updated only once per day")
782789 else {
783790 let bC = split(F("setup_lts"), ",")
784- let bG = L()
791+ let bJ = L()
785792 let R = af(j)
786- let bO = B((("setup_" + j) + "_tempLT"))
787- let bP = parseIntValue(bG[value(indexOf(bG, j))])
793+ let bR = B((("setup_" + j) + "_tempLT"))
794+ let bF = parseIntValue(bJ[value(indexOf(bJ, j))])
788795 if ((R > 90000000))
789- then [IntegerEntry((("setup_" + j) + "_tempLT"), fraction(bO, 9975, 10000))]
790- else if (if ((bP > bO))
796+ then [IntegerEntry((("setup_" + j) + "_tempLT"), fraction(bR, 9975, 10000))]
797+ else if (if ((bF > bR))
791798 then (90000000 > R)
792799 else false)
793- then [IntegerEntry((("setup_" + j) + "_tempLT"), fraction(bO, 10025, 10000))]
800+ then [IntegerEntry((("setup_" + j) + "_tempLT"), fraction(bR, 10025, 10000))]
794801 else nil
795802 }
796803 }
798805
799806
800807 @Callable(aK)
801-func shutdown (bQ) = if ((indexOf(f, aK.caller.bytes) == unit))
808+func shutdown (bS) = if ((indexOf(f, aK.caller.bytes) == unit))
802809 then throw("user not in a whitelist")
803- else [BooleanEntry("setup_active", !(bQ))]
810+ else [BooleanEntry("setup_active", !(bS))]
804811
805812
806813
807814 @Callable(aK)
808-func liquidate (bF,h,as,aM,aN,bR) = if (!(g(aK.caller)))
815+func liquidate (bI,h,as,aM,aN,bT) = if (!(g(aK.caller)))
809816 then throw("temporarily available for whitelist only")
810817 else if (!(E("setup_active")))
811818 then throw("market is stopped")
812819 else {
813- let bS = ao(h)
814- if ((bS == bS))
820+ let bU = ao(h)
821+ if ((bU == bU))
815822 then {
816- let bT = ab(aM, "sRate")
817- let au = bT._1
818- let bU = bT._2
819- let bV = ab(aN, "bRate")
820- let aE = bV._1
823+ let bV = ab(aM, "sRate")
824+ let au = bV._1
821825 let bW = bV._2
822- let bX = fraction(as, n, au)
823- let bY = B(((h + "_supplied_") + aM))
824- let bZ = B(((h + "_borrowed_") + aN))
825- let ca = if ((bZ > 0))
826- then bZ
826+ let bX = ab(aN, "bRate")
827+ let aE = bX._1
828+ let bY = bX._2
829+ let bZ = fraction(as, n, au)
830+ let ca = B(((h + "_supplied_") + aM))
831+ let cb = B(((h + "_borrowed_") + aN))
832+ let cc = if ((cb > 0))
833+ then cb
827834 else throw("user has no borrow in this token")
828- if ((bS > 0))
835+ if ((bU > 0))
829836 then throw("user can't be liquidated")
830- else if ((bX > bY))
837+ else if ((bZ > ca))
831838 then throw("position to liquidate is bigger than user's supply")
832839 else {
833- let cb = K(aM)
834- if ((cb == cb))
840+ let cd = K(aM)
841+ if ((cd == cd))
835842 then {
836- let cc = K(aN)
837- if ((cc == cc))
843+ let ce = K(aN)
844+ if ((ce == ce))
838845 then {
839- let cd = invoke(d, "swap", [bR, 0], [AttachedPayment(J(aM), as)])
840- if ((cd == cd))
846+ let cf = invoke(d, "swap", [bT, 0], [AttachedPayment(J(aM), as)])
847+ if ((cf == cf))
841848 then {
842- let ce = (cb - K(aM))
843- if ((ce == ce))
849+ let cg = (cd - K(aM))
850+ if ((cg == cg))
844851 then {
845- let cf = (K(aN) - cc)
846- if ((cf == cf))
852+ let ch = (K(aN) - ce)
853+ if ((ch == ch))
847854 then {
848- let cg = ai(aM)._1
849- let ch = am(aM)
850- let ci = fraction(ce, cg, ch)
851- let cj = ai(aN)._2
852- let ck = am(aN)
853- let cl = fraction(cf, cj, ck)
854- let cm = parseIntValue(split(F("setup_penalties"), ",")[value(indexOf(L(), aN))])
855- let cn = (cl - fraction(ci, (l - cm), l))
856- let co = fraction(ce, n, au)
857- let cp = fraction(fraction(cf, n, aE), (l - fraction(cn, l, cl)), l)
858- if ((ce > as))
855+ let ci = ai(aM)._1
856+ let cj = am(aM)
857+ let ck = fraction(cg, ci, cj)
858+ let cl = ai(aN)._2
859+ let cm = am(aN)
860+ let cn = fraction(ch, cl, cm)
861+ let bG = parseIntValue(split(F("setup_penalties"), ",")[value(indexOf(L(), aN))])
862+ let co = (cn - fraction(ck, (l - bG), l))
863+ let cp = fraction(cg, n, au)
864+ let cq = fraction(fraction(ch, n, aE), (l - fraction(co, l, cn)), l)
865+ if ((cg > as))
859866 then throw("more assets exchanged than expected")
860- else if ((0 > cn))
867+ else if ((0 > co))
861868 then throw("price impact is bigger than liquidation penalty")
862- else [IntegerEntry(((h + "_supplied_") + aM), (bY - co)), IntegerEntry(((h + "_borrowed_") + aN), (ca - cp)), IntegerEntry(("total_supplied_" + aM), (B(("total_supplied_" + aM)) - co)), IntegerEntry(("total_borrowed_" + aN), (B(("total_borrowed_" + aN)) - cp))]
869+ else [IntegerEntry(((h + "_supplied_") + aM), (ca - cp)), IntegerEntry(((h + "_borrowed_") + aN), (cc - cq)), IntegerEntry(("total_supplied_" + aM), (B(("total_supplied_" + aM)) - cp)), IntegerEntry(("total_borrowed_" + aN), (B(("total_borrowed_" + aN)) - cq))]
863870 }
864871 else throw("Strict value is not equal to itself.")
865872 }
878885
879886
880887 @Callable(aK)
881-func liquidateV2 (bF,h,aM) = if (!(g(aK.caller)))
888+func liquidateV2 (bI,h,aM) = if (!(g(aK.caller)))
882889 then throw("temporarily available for whitelist only")
883890 else if (!(E("setup_active")))
884891 then throw("market is stopped")
885892 else {
886893 let aT = aK.payments[0].assetId
887894 let aN = H(aT)
888- let cq = aK.payments[0].amount
889- let bS = ao(h)
890- if ((bS == bS))
891- then if ((bS > 0))
895+ let cr = aK.payments[0].amount
896+ let bU = ao(h)
897+ if ((bU == bU))
898+ then if ((bU > 0))
892899 then throw("user can't be liquidated")
893900 else {
894- let cr = L()
895- let cs = value(indexOf(cr, aN))
896- let ct = value(indexOf(cr, aM))
897- let cu = ab(aN, "bRate")
898- let aE = cu._1
899- let bU = cu._2
900- let cj = ai(aN)._2
901- let ck = am(aN)
902- let cv = fraction(cq, cj, ck)
903- let cm = parseIntValue(value(split(F("setup_penalties"), ",")[cs]))
904- let cg = ai(aM)._1
905- let ch = am(aM)
906- let cw = fraction(cv, (l + cm), l)
907- let bX = fraction(cw, ch, cg)
908- let aO = fraction(cq, n, aE)
909- let aV = fraction(bX, n, bU[((ct * 3) + 1)].value)
910- let bY = B(((h + "_supplied_") + aM))
911- let bZ = B(((h + "_borrowed_") + aN))
912- let ca = if ((bZ > 0))
913- then bZ
901+ let cs = L()
902+ let ct = value(indexOf(cs, aN))
903+ let cu = value(indexOf(cs, aM))
904+ let cv = ab(aN, "bRate")
905+ let aE = cv._1
906+ let bW = cv._2
907+ let cl = ai(aN)._2
908+ let cm = am(aN)
909+ let cw = fraction(cr, cl, cm)
910+ let bG = parseIntValue(value(split(F("setup_penalties"), ",")[ct]))
911+ let ci = ai(aM)._1
912+ let cj = am(aM)
913+ let cx = fraction(cw, (l + bG), l)
914+ let bZ = fraction(cx, cj, ci)
915+ let aO = fraction(cr, n, aE)
916+ let aV = fraction(bZ, n, bW[((cu * 3) + 1)].value)
917+ let ca = B(((h + "_supplied_") + aM))
918+ let cb = B(((h + "_borrowed_") + aN))
919+ let cc = if ((cb > 0))
920+ then cb
914921 else throw("user has no borrow in this token")
915- if ((aV > bY))
922+ if ((aV > ca))
916923 then throw("position to liquidate is bigger than user's supply")
917- else if (bF)
924+ else if (bI)
918925 then throw("liquidation will pass")
919- else ([ScriptTransfer(aK.caller, bX, J(aM)), IntegerEntry(((h + "_supplied_") + aM), (bY - aV)), IntegerEntry(((h + "_borrowed_") + aN), (ca - aO)), IntegerEntry(("total_supplied_" + aM), (B(("total_supplied_" + aM)) - aV)), IntegerEntry(("total_borrowed_" + aN), (B(("total_borrowed_" + aN)) - aO))] ++ bU)
926+ else ([ScriptTransfer(aK.caller, bZ, J(aM)), IntegerEntry(((h + "_supplied_") + aM), (ca - aV)), IntegerEntry(((h + "_borrowed_") + aN), (cc - aO)), IntegerEntry(("total_supplied_" + aM), (B(("total_supplied_" + aM)) - aV)), IntegerEntry(("total_borrowed_" + aN), (B(("total_borrowed_" + aN)) - aO))] ++ bW)
920927 }
921928 else throw("Strict value is not equal to itself.")
922929 }
924931
925932
926933 @Callable(aK)
927-func getUserCollateral (bF,h,cx,cy) = {
928- let bG = L()
934+func getUserCollateral (bI,h,cy,cz) = {
935+ let bJ = L()
929936 let bB = split(F("setup_ltvs"), ",")
930937 let bC = split(F("setup_lts"), ",")
931- let ag = ab(bG[0], "sRate")._2
932- let cz = split(cy, ",")
933- func r (s,t) = if ((t >= size(bG)))
938+ let ag = ab(bJ[0], "sRate")._2
939+ let cA = split(cz, ",")
940+ func r (s,t) = if ((t >= size(bJ)))
934941 then s
935942 else {
936- let cA = B(((h + "_supplied_") + bG[t]))
937- let cB = B(((h + "_borrowed_") + bG[t]))
938- let cC = if ((cy == ""))
939- then if (if ((cB != 0))
943+ let cB = B(((h + "_supplied_") + bJ[t]))
944+ let cC = B(((h + "_borrowed_") + bJ[t]))
945+ let cD = if ((cz == ""))
946+ then if (if ((cC != 0))
940947 then true
941- else (cA != 0))
948+ else (cB != 0))
942949 then true
943950 else false
944951 else true
945- if (cC)
952+ if (cD)
946953 then {
947- let aA = am(bG[t])
948- let ay = ai(bG[t])
949- ((s + fraction(fraction(fraction((cA + (if (if (if ((cy != ""))
950- then (cz[0] == bG[t])
954+ let aA = am(bJ[t])
955+ let ay = ai(bJ[t])
956+ ((s + fraction(fraction(fraction((cB + (if (if (if ((cz != ""))
957+ then (cA[0] == bJ[t])
951958 else false)
952- then (cz[1] == "supplied")
959+ then (cA[1] == "supplied")
953960 else false)
954- then parseIntValue(cz[2])
955- else 0)), ag[(t * 3)].value, n), parseIntValue(bB[t]), l), ay._1, aA)) - (if (cx)
956- then fraction(fraction(fraction((cB + (if (if (if ((cy != ""))
957- then (cz[0] == bG[t])
961+ then parseIntValue(cA[2])
962+ else 0)), ag[(t * 3)].value, n), parseIntValue(bB[t]), l), ay._1, aA)) - (if (cy)
963+ then fraction(fraction(fraction((cC + (if (if (if ((cz != ""))
964+ then (cA[0] == bJ[t])
958965 else false)
959- then (cz[1] == "borrowed")
966+ then (cA[1] == "borrowed")
960967 else false)
961- then parseIntValue(cz[2])
968+ then parseIntValue(cA[2])
962969 else 0)), ag[((t * 3) + 1)].value, n), l, parseIntValue(bC[t])), ay._2, aA)
963970 else 0))
964971 }
965972 else s
966973 }
967974
968- let cD = {
975+ let cE = {
969976 let u = [0, 1, 2, 3, 4, 5]
970977 let v = size(u)
971978 let w = 0
979986
980987 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
981988 }
982- if (bF)
983- then throw(toString(cD))
984- else $Tuple2(ag, cD)
989+ if (bI)
990+ then throw(toString(cE))
991+ else $Tuple2(ag, cE)
985992 }
986993
987994
988995
989996 @Callable(aK)
990-func getAssetDebt (bF,h,j) = {
991- let cB = B(((h + "_borrowed_") + j))
997+func getAssetDebt (bI,h,j) = {
998+ let cC = B(((h + "_borrowed_") + j))
992999 let aA = am(j)
9931000 let T = ab(j, "bRate")._1
994- let cD = fraction(cB, T, n)
995- if (bF)
996- then throw(toString(cD))
997- else $Tuple2(nil, cD)
1001+ let cE = fraction(cC, T, n)
1002+ if (bI)
1003+ then throw(toString(cE))
1004+ else $Tuple2(nil, cE)
9981005 }
9991006
10001007
10011008
10021009 @Callable(aK)
1003-func getPrices (bF) = {
1004- let bG = L()
1005- func r (s,t) = if ((t >= size(bG)))
1010+func getPrices (bI) = {
1011+ let bJ = L()
1012+ func r (s,t) = if ((t >= size(bJ)))
10061013 then s
10071014 else {
1008- let ay = ai(bG[t])
1015+ let ay = ai(bJ[t])
10091016 ((((s + toString(ay._1)) + ",") + toString(ay._2)) + "|")
10101017 }
10111018
1012- let cD = {
1019+ let cE = {
10131020 let u = [0, 1, 2, 3, 4, 5]
10141021 let v = size(u)
10151022 let w = ""
10231030
10241031 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
10251032 }
1026- if (bF)
1027- then throw(cD)
1028- else $Tuple2(nil, cD)
1033+ if (bI)
1034+ then throw(cE)
1035+ else $Tuple2(nil, cE)
10291036 }
10301037
10311038
10321039
10331040 @Callable(aK)
1034-func calculateUtilizationRatio (j,bF) = if (bF)
1041+func calculateUtilizationRatio (j,bI) = if (bI)
10351042 then throw(toString(af(j)))
10361043 else $Tuple2(nil, af(j))
10371044
10381045
10391046
10401047 @Callable(aK)
1041-func calculateOutdatedUR (j,bF) = if (bF)
1048+func calculateOutdatedUR (j,bI) = if (bI)
10421049 then throw(toString(O(j)))
10431050 else $Tuple2(nil, O(j))
10441051
10451052
10461053
10471054 @Callable(aK)
1048-func calculateTokenRates (bF) = {
1055+func calculateTokenRates (bI) = {
10491056 func r (s,j) = {
10501057 let ag = U(j)
10511058 $Tuple2(((((s._1 + toString(ag[1].value)) + "|") + toString(ag[0].value)) + ","), (s._2 ++ ag))
10521059 }
10531060
1054- let bJ = {
1061+ let bM = {
10551062 let u = L()
10561063 let v = size(u)
10571064 let w = $Tuple2("", nil)
10651072
10661073 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
10671074 }
1068- if (bF)
1069- then throw(bJ._1)
1070- else $Tuple2(bJ._2, bJ._1)
1075+ if (bI)
1076+ then throw(bM._1)
1077+ else $Tuple2(bM._2, bM._1)
10711078 }
10721079
10731080
10741081
10751082 @Callable(aK)
1076-func calculateTokensInterest (bF) = {
1083+func calculateTokensInterest (bI) = {
10771084 func r (s,j) = {
10781085 let T = fraction(Q(j), o, l)
10791086 ((s + toString(T)) + ",")
10801087 }
10811088
1082- let bJ = {
1089+ let bM = {
10831090 let u = L()
10841091 let v = size(u)
10851092 let w = ""
10931100
10941101 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
10951102 }
1096- if (bF)
1097- then throw(bJ)
1098- else $Tuple2(nil, bJ)
1103+ if (bI)
1104+ then throw(bM)
1105+ else $Tuple2(nil, bM)
10991106 }
11001107
11011108
1102-@Verifier(cE)
1103-func cF () = sigVerify(cE.bodyBytes, cE.proofs[0], cE.senderPublicKey)
1109+@Verifier(cF)
1110+func cG () = sigVerify(cF.bodyBytes, cF.proofs[0], cF.senderPublicKey)
11041111
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'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')
1111
1212 let e = "3N4KbMnJH8FaM94jqxNFe2oyZ8GB7Z8yVBP"
1313
1414 let f = [base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL', base58'3PAxdDSmN758L5SHSGRC5apEtQE2aApZotG', base58'3PJKmXoHJvVeQXjSJdhtkUcFDtdiQqMbUTD', base58'3PQdNxynJy5mche2kxMVc5shXWzK8Gstq3o', base58'3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3', base58'3P6Ksahs71SiKQgQ4qaZuFAVhqncdi2nvJQ']
1515
1616 func g (h) = !((h != Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')))
1717
1818
1919 func i (j) = {
2020 let k = j
2121 if (("8DtMtpVwVq62sdcVFVzh6nuprgzG7LSjpLdHnQnrAFgY" == k))
2222 then $Tuple4(2000000, 25000000, 80000000, 100000000)
2323 else if (("25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT" == k))
2424 then $Tuple4(2000000, 25000000, 80000000, 100000000)
2525 else if (("WAVES" == k))
2626 then $Tuple4(2000000, 30000000, 80000000, 50000000)
2727 else $Tuple4(0, 20000000, 80000000, 80000000)
2828 }
2929
3030
3131 let l = 100000000
3232
3333 let m = 10000000000
3434
3535 let n = (l * l)
3636
3737 let o = 1440
3838
3939 func p (q) = {
4040 func r (s,t) = ((s + toString(t)) + ",")
4141
4242 let u = q
4343 let v = size(u)
4444 let w = ""
4545 func x (y,z) = if ((z >= v))
4646 then y
4747 else r(y, u[z])
4848
4949 func A (y,z) = if ((z >= v))
5050 then y
5151 else throw("List size exceeds 6")
5252
5353 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
5454 }
5555
5656
5757 func B (C) = {
5858 let k = getInteger(this, C)
5959 if ($isInstanceOf(k, "Int"))
6060 then {
6161 let D = k
6262 D
6363 }
6464 else 0
6565 }
6666
6767
6868 func E (C) = {
6969 let k = getBoolean(this, C)
7070 if ($isInstanceOf(k, "Boolean"))
7171 then {
7272 let D = k
7373 D
7474 }
7575 else false
7676 }
7777
7878
7979 func F (C) = {
8080 let k = getString(this, C)
8181 if ($isInstanceOf(k, "String"))
8282 then {
8383 let D = k
8484 D
8585 }
8686 else ""
8787 }
8888
8989
9090 func G (C) = {
9191 let k = getBinary(this, C)
9292 if ($isInstanceOf(k, "ByteVector"))
9393 then {
9494 let D = k
9595 D
9696 }
9797 else base58''
9898 }
9999
100100
101101 func H (I) = {
102102 let k = I
103103 if ($isInstanceOf(k, "ByteVector"))
104104 then {
105105 let D = k
106106 toBase58String(D)
107107 }
108108 else "WAVES"
109109 }
110110
111111
112112 func J (j) = if ((j == "WAVES"))
113113 then unit
114114 else fromBase58String(j)
115115
116116
117117 func K (j) = if ((j == "WAVES"))
118118 then wavesBalance(this).available
119119 else assetBalance(this, fromBase58String(j))
120120
121121
122122 func L () = split(F("setup_tokens"), ",")
123123
124124
125125 func M () = {
126126 let N = F("setup_maxsupply")
127127 if ((N == ""))
128128 then [-1, -1, -1, -1, -1, -1, -1]
129129 else split(N, ",")
130130 }
131131
132132
133133 func O (j) = {
134134 let P = fraction(B(("total_supplied_" + j)), B((j + "_sRate")), n)
135135 if ((P == 0))
136136 then 0
137137 else fraction(l, fraction(B(("total_borrowed_" + j)), B((j + "_bRate")), n), P)
138138 }
139139
140140
141141 func Q (j) = {
142142 let R = O(j)
143143 let S = i(j)
144144 let T = (S._1 + (if ((S._3 >= R))
145145 then fraction(R, S._2, S._3)
146146 else (S._2 + fraction((R - S._3), S._4, (100000000 - S._3)))))
147147 max([fraction(T, l, (o * 365)), 1])
148148 }
149149
150150
151151 func U (j) = {
152152 let V = Q(j)
153153 let R = O(j)
154154 let W = B("lastRateHeight")
155155 let X = max([B((j + "_bRate")), n])
156156 let Y = (X + ((height - W) * V))
157157 let Z = max([B((j + "_sRate")), n])
158158 let aa = (Z + ((((height - W) * fraction(V, R, l)) * (100 - b)) / 100))
159159 [IntegerEntry((j + "_sRate"), aa), IntegerEntry((j + "_bRate"), Y), IntegerEntry("lastRateHeight", height)]
160160 }
161161
162162
163163 func ab (j,ac) = {
164164 func r (s,ad) = {
165165 let ae = U(ad)
166166 $Tuple2(if ((ad != j))
167167 then s._1
168168 else if ((ac == "sRate"))
169169 then ae[0].value
170170 else ae[1].value, (s._2 ++ ae))
171171 }
172172
173173 let u = L()
174174 let v = size(u)
175175 let w = $Tuple2(0, nil)
176176 func x (y,z) = if ((z >= v))
177177 then y
178178 else r(y, u[z])
179179
180180 func A (y,z) = if ((z >= v))
181181 then y
182182 else throw("List size exceeds 6")
183183
184184 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
185185 }
186186
187187
188188 func af (j) = {
189189 let ag = U(j)
190190 let P = fraction(B(("total_supplied_" + j)), ag[0].value, n)
191191 fraction(l, fraction(B(("total_borrowed_" + j)), ag[1].value, n), P)
192192 }
193193
194194
195195 func ah () = {
196196 func r (s,ad) = (s ++ U(ad))
197197
198198 let u = L()
199199 let v = size(u)
200200 let w = nil
201201 func x (y,z) = if ((z >= v))
202202 then y
203203 else r(y, u[z])
204204
205205 func A (y,z) = if ((z >= v))
206206 then y
207207 else throw("List size exceeds 6")
208208
209209 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
210210 }
211211
212212
213213 func ai (j) = {
214214 let aj = invoke(addressFromStringValue(e), "getTWAP60", [j, false], nil)
215215 if ((aj == aj))
216216 then {
217217 let ak = {
218218 let k = aj
219219 if ($isInstanceOf(k, "(Int, Int)"))
220220 then {
221221 let al = k
222222 al
223223 }
224224 else throw("error of price oracle")
225225 }
226226 if ((ak == ak))
227227 then ak
228228 else throw("Strict value is not equal to itself.")
229229 }
230230 else throw("Strict value is not equal to itself.")
231231 }
232232
233233
234234 func am (j) = {
235235 let an = if ((j == "WAVES"))
236236 then 8
237237 else value(assetInfo(fromBase58String(j))).decimals
238238 pow(10, 0, an, 0, 0, DOWN)
239239 }
240240
241241
242242 func ao (h) = {
243243 let ap = invoke(this, "getUserCollateral", [false, h, true, ""], nil)
244244 if ((ap == ap))
245245 then {
246246 let aq = {
247247 let k = ap
248248 if ($isInstanceOf(k, "Int"))
249249 then {
250250 let al = k
251251 al
252252 }
253253 else throw("issue while doing in-dapp invocation")
254254 }
255255 if ((aq == aq))
256256 then aq
257257 else throw("Strict value is not equal to itself.")
258258 }
259259 else throw("Strict value is not equal to itself.")
260260 }
261261
262262
263263 func ar (j,as,h) = if (!(E("setup_active")))
264264 then throw("market is stopped")
265265 else {
266266 let at = ab(j, "sRate")
267267 let au = at._1
268268 let av = at._2
269269 let aw = fraction(as, n, au, DOWN)
270270 let ax = {
271271 let k = getString(("setup_maxSupply_" + j))
272272 if ($isInstanceOf(k, "String"))
273273 then {
274274 let al = k
275275 parseIntValue(al)
276276 }
277277 else 0
278278 }
279279 let ay = ai(j)
280280 let az = (B(((h + "_supplied_") + j)) + aw)
281281 let T = ab(j, "sRate")._1
282282 let aA = am(j)
283283 let aB = fraction(fraction(az, T, n), ay._1, aA)
284284 if ((indexOf(F("setup_tokens"), j) == unit))
285285 then throw("this asset is not supported by the market")
286286 else if (if ((ax != 0))
287287 then (aB > ax)
288288 else false)
289289 then throw("max total supply for this token reached in the pool")
290290 else $Tuple2(([IntegerEntry(((h + "_supplied_") + j), az), IntegerEntry(("total_supplied_" + j), (B(("total_supplied_" + j)) + aw))] ++ av), as)
291291 }
292292
293293
294294 func aC (j,as,h) = {
295295 let aD = ab(j, "bRate")
296296 let aE = aD._1
297297 let av = aD._2
298298 let aw = fraction(as, n, aE, CEILING)
299299 let aF = invoke(this, "getUserCollateral", [false, h, true, ((j + ",borrowed,") + toString(aw))], nil)
300300 if ((aF == aF))
301301 then {
302302 let aG = {
303303 let k = aF
304304 if ($isInstanceOf(k, "Int"))
305305 then {
306306 let al = k
307307 al
308308 }
309309 else throw("can't get user collateral value")
310310 }
311311 if (!(E("setup_active")))
312312 then throw("market is stopped")
313313 else {
314314 let aH = B(("total_supplied_" + j))
315315 let aI = B(("total_borrowed_" + j))
316316 let aJ = B(((h + "_borrowed_") + j))
317317 if ((aw > (aH - aI)))
318318 then throw("this amount is not available")
319319 else $Tuple2(([IntegerEntry(((h + "_borrowed_") + j), (aJ + aw)), IntegerEntry(("total_borrowed_" + j), (aI + aw))] ++ av), as)
320320 }
321321 }
322322 else throw("Strict value is not equal to itself.")
323323 }
324324
325325
326326 @Callable(aK)
327327 func flashPosition (aL,aM,aN,aO,aP,aQ,aR) = {
328328 let aS = aC(aN, aO, aL)
329329 let aT = J(aN)
330330 let aU = reentrantInvoke(addressFromStringValue(aP), aQ, split(aR, ","), [AttachedPayment(aT, aO)])
331331 if ((aU == aU))
332332 then {
333333 let aV = {
334334 let aW = aU
335335 if ($isInstanceOf(aW, "Int"))
336336 then aW
337337 else throw(($getType(aW) + " couldn't be cast to Int"))
338338 }
339339 if ((aV == aV))
340340 then {
341341 let aX = ar(aM, aV, aL)
342342 let aG = {
343343 let aW = invoke(this, "getUserCollateral", [false, aL, true, ((aM + ",supplied,") + toString(aV))], nil)
344344 if ($isInstanceOf(aW, "Int"))
345345 then aW
346346 else throw(($getType(aW) + " couldn't be cast to Int"))
347347 }
348348 if ((aG == aG))
349349 then {
350350 let aY = {
351351 let aW = invoke(this, "getUserCollateral", [false, aL, true, ((aN + ",borrowed,") + toString(aO))], nil)
352352 if ($isInstanceOf(aW, "Int"))
353353 then aW
354354 else throw(($getType(aW) + " couldn't be cast to Int"))
355355 }
356356 if ((aY == aY))
357357 then if ((aY > aG))
358358 then throw("not enough collateral provided")
359359 else (aS._1 ++ aX._1)
360360 else throw("Strict value is not equal to itself.")
361361 }
362362 else throw("Strict value is not equal to itself.")
363363 }
364364 else throw("Strict value is not equal to itself.")
365365 }
366366 else throw("Strict value is not equal to itself.")
367367 }
368368
369369
370370
371371 @Callable(aK)
372372 func supply () = if (if ((size(aK.payments) != 1))
373373 then true
374374 else (aK.payments[0].amount == 0))
375375 then throw("1 payment has to be attached")
376376 else {
377377 let j = H(aK.payments[0].assetId)
378378 let as = aK.payments[0].amount
379379 ar(j, as, toString(aK.caller))
380380 }
381381
382382
383383
384384 @Callable(aK)
385385 func withdraw (j,as) = {
386386 let aZ = ab(j, "sRate")
387387 let au = aZ._1
388388 let av = aZ._2
389389 let aw = fraction(as, n, au, CEILING)
390390 let h = toString(aK.caller)
391391 let aH = B(("total_supplied_" + j))
392392 let aI = B(("total_borrowed_" + j))
393393 let ba = B(((h + "_supplied_") + j))
394394 let aJ = B(((h + "_borrowed_") + j))
395395 let aF = invoke(this, "getUserCollateral", [false, h, true, ((j + ",supplied,") + toString(-(aw)))], nil)
396396 if ((aF == aF))
397397 then {
398398 let aG = {
399399 let k = aF
400400 if ($isInstanceOf(k, "Int"))
401401 then {
402402 let al = k
403403 al
404404 }
405405 else throw("can't get user collateral value")
406406 }
407407 if (!(E("setup_active")))
408408 then throw("market is stopped")
409409 else if ((0 > aG))
410410 then throw("you dont have enough collateral for this operation")
411411 else if ((aw > (aH - aI)))
412412 then throw("this amount is not available on the market")
413413 else if ((aw > (ba - aJ)))
414414 then throw("this amount is not available for this user")
415415 else ([IntegerEntry(((h + "_supplied_") + j), (B(((h + "_supplied_") + j)) - aw)), IntegerEntry(("total_supplied_" + j), (B(("total_supplied_" + j)) - aw)), ScriptTransfer(aK.caller, as, J(j))] ++ av)
416416 }
417417 else throw("Strict value is not equal to itself.")
418418 }
419419
420420
421421
422422 @Callable(aK)
423423 func borrow (j,as) = {
424424 let h = toString(aK.caller)
425425 let bb = aC(j, as, h)
426426 let aw = bb._2
427427 (bb._1 ++ [ScriptTransfer(aK.caller, aw, J(j))])
428428 }
429429
430430
431431
432432 @Callable(aK)
433433 func repay () = if (!(E("setup_active")))
434434 then throw("market is stopped")
435435 else if (if ((size(aK.payments) != 1))
436436 then true
437437 else (aK.payments[0].amount == 0))
438438 then throw("1 payment has to be attached")
439439 else {
440440 let j = H(aK.payments[0].assetId)
441441 let as = aK.payments[0].amount
442442 let bc = ab(j, "bRate")
443443 let aE = bc._1
444444 let av = bc._2
445445 let aw = fraction(as, n, aE, CEILING)
446446 let h = toString(aK.caller)
447447 let aH = B(("total_supplied_" + j))
448448 let aI = B(("total_borrowed_" + j))
449449 let aJ = B(((h + "_borrowed_") + j))
450450 let bd = (aJ - aw)
451451 let be = if ((bd >= 0))
452452 then aw
453453 else aJ
454454 if ((indexOf(F("setup_tokens"), j) == unit))
455455 then throw("this asset is not supported by the market")
456456 else (([IntegerEntry(((h + "_borrowed_") + j), (aJ - be)), IntegerEntry(("total_borrowed_" + j), (aI - be))] ++ av) ++ (if ((bd >= 0))
457457 then nil
458458 else [ScriptTransfer(aK.caller, -(bd), aK.payments[0].assetId)]))
459459 }
460460
461461
462462
463463 @Callable(aK)
464464 func repayFor (h) = if (!(E("setup_active")))
465465 then throw("market is stopped")
466466 else if (if ((size(aK.payments) != 1))
467467 then true
468468 else (aK.payments[0].amount == 0))
469469 then throw("1 payment has to be attached")
470470 else {
471471 let j = H(aK.payments[0].assetId)
472472 let as = aK.payments[0].amount
473473 let bf = ab(j, "bRate")
474474 let aE = bf._1
475475 let av = bf._2
476476 let aw = fraction(as, n, aE, CEILING)
477477 let aH = B(("total_supplied_" + j))
478478 let aI = B(("total_borrowed_" + j))
479479 let aJ = B(((h + "_borrowed_") + j))
480480 let bd = (aJ - aw)
481481 let be = if ((bd >= 0))
482482 then aw
483483 else aJ
484484 if ((indexOf(F("setup_tokens"), j) == unit))
485485 then throw("this asset is not supported by the market")
486486 else (([IntegerEntry(((h + "_borrowed_") + j), (aJ - be)), IntegerEntry(("total_borrowed_" + j), (aI - be))] ++ av) ++ (if ((bd >= 0))
487487 then nil
488488 else [ScriptTransfer(aK.caller, -(bd), aK.payments[0].assetId)]))
489489 }
490490
491491
492492
493493 @Callable(aK)
494494 func stakeTokenAll (j) = if ((aK.caller != this))
495495 then throw("only for internal smart contract invocations")
496496 else {
497497 let aw = K(j)
498498 let bg = invoke(this, "stakeToken", [j, aw], nil)
499499 if ((bg == bg))
500500 then nil
501501 else throw("Strict value is not equal to itself.")
502502 }
503503
504504
505505
506506 @Callable(aK)
507507 func stakeToken (j,aw) = if ((aK.caller != this))
508508 then throw("only for internal smart contract invocations")
509509 else if ((j == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
510510 then {
511511 let bh = B("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
512512 let bg = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', aw)])
513513 if ((bg == bg))
514514 then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (bh + aw))]
515515 else throw("Strict value is not equal to itself.")
516516 }
517517 else if ((j == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
518518 then {
519519 let bh = B("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
520520 let bg = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', aw)])
521521 if ((bg == bg))
522522 then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bh + aw))]
523523 else throw("Strict value is not equal to itself.")
524524 }
525525 else if ((j == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
526526 then {
527527 let bh = B("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
528528 let bg = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', aw)])
529529 if ((bg == bg))
530530 then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bh + aw))]
531531 else throw("Strict value is not equal to itself.")
532532 }
533533 else nil
534534
535535
536536
537537 @Callable(aK)
538538 func unstakeToken (j,aw) = if ((aK.caller != this))
539539 then throw("only for internal smart contract invocations")
540540 else if ((j == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
541541 then {
542542 let bh = B("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
543543 let bg = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [aw], nil)
544544 if ((bg == bg))
545545 then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bh - aw))]
546546 else throw("Strict value is not equal to itself.")
547547 }
548548 else if ((j == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
549549 then {
550550 let bh = B("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
551551 let bg = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [aw], nil)
552552 if ((bg == bg))
553553 then {
554554 let bi = K("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
555555 if ((bi == bi))
556556 then {
557557 let bj = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
558558 if ((bj == bj))
559559 then {
560560 let bk = {
561561 let k = bj
562562 if ($isInstanceOf(k, "List[Any]"))
563563 then {
564564 let al = k
565565 let bl = al[1]
566566 let bm = bl
567567 if ($isInstanceOf(bm, "String"))
568568 then {
569569 let bl = bm
570570 let bn = parseIntValue(split(split(bl, "_")[1], ":")[1])
571571 let bo = parseIntValue(split(split(bl, "_")[0], ":")[1])
572572 if (if ((bn != 0))
573573 then true
574574 else (bo != 0))
575575 then {
576576 let bp = K("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
577577 if ((bp == bp))
578578 then {
579579 let bq = K("WAVES")
580580 if ((bq == bq))
581581 then {
582582 let aj = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
583583 if ((aj == aj))
584584 then {
585585 let br = K("WAVES")
586586 if ((br == br))
587587 then {
588588 let bs = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (br - bq))])
589589 if ((bs == bs))
590590 then {
591591 let bt = K("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
592592 if ((bt == bt))
593593 then {
594594 let bu = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (bt - bp))])
595595 if ((bu == bu))
596596 then {
597597 let bv = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (K("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - bi)], nil)
598598 if ((bv == bv))
599599 then 2
600600 else throw("Strict value is not equal to itself.")
601601 }
602602 else throw("Strict value is not equal to itself.")
603603 }
604604 else throw("Strict value is not equal to itself.")
605605 }
606606 else throw("Strict value is not equal to itself.")
607607 }
608608 else throw("Strict value is not equal to itself.")
609609 }
610610 else throw("Strict value is not equal to itself.")
611611 }
612612 else throw("Strict value is not equal to itself.")
613613 }
614614 else throw("Strict value is not equal to itself.")
615615 }
616616 else 1
617617 }
618618 else 1
619619 }
620620 else 0
621621 }
622622 if ((bk == bk))
623623 then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bh - aw))]
624624 else throw("Strict value is not equal to itself.")
625625 }
626626 else throw("Strict value is not equal to itself.")
627627 }
628628 else throw("Strict value is not equal to itself.")
629629 }
630630 else throw("Strict value is not equal to itself.")
631631 }
632632 else nil
633633
634634
635635
636636 @Callable(aK)
637637 func addInterest (j,aw) = if ((aK.caller != this))
638638 then throw("only for self invocation")
639639 else {
640640 let bw = B(("autostake_lastEarned_" + j))
641641 let bx = B(("autostake_lastBlock_" + j))
642642 let by = fraction(aw, 80, 100)
643643 let bz = if (if ((bx == height))
644644 then true
645645 else (aw == 0))
646646 then nil
647647 else [IntegerEntry(("autostake_preLastEarned_" + j), bw), IntegerEntry(("autostake_preLastBlock_" + j), bx), IntegerEntry(("autostake_lastEarned_" + j), (bw + by)), IntegerEntry(("autostake_lastBlock_" + j), height)]
648648 (bz ++ [IntegerEntry((j + "_sRate"), (B((j + "_sRate")) + fraction(n, by, B(("total_supplied_" + j)))))])
649649 }
650650
651651
652652
653653 @Callable(aK)
654654 func addInterestEXTERNAL () = {
655655 let aw = fraction(aK.payments[0].amount, 80, 100)
656656 let I = aK.payments[0].assetId
657657 let j = H(I)
658658 let bw = B(("autostake_lastEarned_" + j))
659659 let bx = B(("autostake_lastBlock_" + j))
660660 let bz = if (if ((bx == height))
661661 then true
662662 else (aw == 0))
663663 then nil
664664 else [IntegerEntry(("autostake_preLastEarned_" + j), bw), IntegerEntry(("autostake_preLastBlock_" + j), bx), IntegerEntry(("autostake_lastEarned_" + j), (bw + aw)), IntegerEntry(("autostake_lastBlock_" + j), height)]
665665 (bz ++ [IntegerEntry((j + "_sRate"), (B((j + "_sRate")) + fraction(n, aw, B(("total_supplied_" + j)))))])
666666 }
667667
668668
669669
670670 @Callable(aK)
671671 func preInit (bA,bB,bC,bD) = {
672672 func r (s,ad) = (s ++ [IntegerEntry((ad + "_bRate"), n), IntegerEntry((ad + "_sRate"), n)])
673673
674674 if ((aK.caller != this))
675675 then throw("admin only")
676676 else {
677677 let ag = {
678678 let u = split(bA, ",")
679679 let v = size(u)
680680 let w = nil
681681 func x (y,z) = if ((z >= v))
682682 then y
683683 else r(y, u[z])
684684
685685 func A (y,z) = if ((z >= v))
686686 then y
687687 else throw("List size exceeds 6")
688688
689689 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
690690 }
691691 ([StringEntry("setup_tokens", bA), StringEntry("setup_ltvs", bB), StringEntry("setup_lts", bC), StringEntry("setup_penalties", bD), BooleanEntry("setup_active", true)] ++ ag)
692692 }
693693 }
694694
695695
696696
697697 @Callable(aK)
698-func updateParameter (C,bE) = if (if ((aK.caller != this))
699- then (aK.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
700- else false)
698+func initNewToken (ad,bE,bF,bG) = if ((aK.caller != this))
701699 then throw("admin only")
702- else [IntegerEntry(C, parseIntValue(bE))]
700+ else [StringEntry("setup_tokens", ((F("setup_tokens") + ",") + ad)), StringEntry("setup_ltvs", ((F("setup_ltvs") + ",") + bE)), StringEntry("setup_lts", ((F("setup_lts") + ",") + bF)), StringEntry("setup_penalties", ((F("setup_penalties") + ",") + bG)), IntegerEntry((ad + "_bRate"), n), IntegerEntry((ad + "_sRate"), n)]
703701
704702
705703
706704 @Callable(aK)
707-func updateString (C,bE) = if (if ((aK.caller != this))
705+func updateParameter (C,bH) = if (if ((aK.caller != this))
708706 then (aK.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
709707 else false)
710708 then throw("admin only")
711- else [StringEntry(C, bE)]
709+ else [IntegerEntry(C, parseIntValue(bH))]
712710
713711
714712
715713 @Callable(aK)
716-func claimToReserveFund (bF) = {
717- let bG = L()
718- let ag = ab(bG[0], "sRate")._2
714+func updateString (C,bH) = if (if ((aK.caller != this))
715+ then (aK.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
716+ else false)
717+ then throw("admin only")
718+ else [StringEntry(C, bH)]
719+
720+
721+
722+@Callable(aK)
723+func claimToReserveFund (bI) = {
724+ let bJ = L()
725+ let ag = ab(bJ[0], "sRate")._2
719726 let q = [0, 1, 2, 3, 4, 5]
720- func r (s,bH) = if ((bH >= size(bG)))
727+ func r (s,bK) = if ((bK >= size(bJ)))
721728 then s
722729 else {
723- let j = bG[bH]
724- let bI = F(("autostake_amount_" + j))
725- let aw = ((((K(j) + B(("autostake_amount_" + j))) + (if ((bI != ""))
726- then parseIntValue(bI)
727- else 0)) + fraction(B(("total_borrowed_" + j)), ag[((bH * 3) + 1)].value, n)) - fraction(B(("total_supplied_" + j)), ag[(bH * 3)].value, n))
730+ let j = bJ[bK]
731+ let bL = F(("autostake_amount_" + j))
732+ let aw = ((((K(j) + B(("autostake_amount_" + j))) + (if ((bL != ""))
733+ then parseIntValue(bL)
734+ else 0)) + fraction(B(("total_borrowed_" + j)), ag[((bK * 3) + 1)].value, n)) - fraction(B(("total_supplied_" + j)), ag[(bK * 3)].value, n))
728735 let bg = if ((B(("autostake_amount_" + j)) > 0))
729736 then invoke(this, "unstakeToken", [j, max([aw, 0])], nil)
730737 else 0
731738 if ((bg == bg))
732739 then (s ++ [aw])
733740 else throw("Strict value is not equal to itself.")
734741 }
735742
736- let bJ = {
743+ let bM = {
737744 let u = q
738745 let v = size(u)
739746 let w = nil
740747 func x (y,z) = if ((z >= v))
741748 then y
742749 else r(y, u[z])
743750
744751 func A (y,z) = if ((z >= v))
745752 then y
746753 else throw("List size exceeds 6")
747754
748755 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
749756 }
750- func bK (s,bH) = if ((bH >= size(bG)))
757+ func bN (s,bK) = if ((bK >= size(bJ)))
751758 then s
752759 else {
753- let j = bG[bH]
754- (s ++ [ScriptTransfer(a, max([bJ[bH], 0]), J(j))])
760+ let j = bJ[bK]
761+ (s ++ [ScriptTransfer(a, max([bM[bK], 0]), J(j))])
755762 }
756763
757- if (bF)
758- then throw(p(bJ))
764+ if (bI)
765+ then throw(p(bM))
759766 else $Tuple2({
760767 let u = q
761768 let v = size(u)
762769 let w = nil
763- func bL (y,z) = if ((z >= v))
770+ func bO (y,z) = if ((z >= v))
764771 then y
765- else bK(y, u[z])
772+ else bN(y, u[z])
766773
767- func bM (y,z) = if ((z >= v))
774+ func bP (y,z) = if ((z >= v))
768775 then y
769776 else throw("List size exceeds 6")
770777
771- bM(bL(bL(bL(bL(bL(bL(w, 0), 1), 2), 3), 4), 5), 6)
772- }, bJ)
778+ bP(bO(bO(bO(bO(bO(bO(w, 0), 1), 2), 3), 4), 5), 6)
779+ }, bM)
773780 }
774781
775782
776783
777784 @Callable(aK)
778785 func reSetup (j) = {
779- let bN = B("resetup_lastUpdate")
780- if ((o > (height - bN)))
786+ let bQ = B("resetup_lastUpdate")
787+ if ((o > (height - bQ)))
781788 then throw("can be updated only once per day")
782789 else {
783790 let bC = split(F("setup_lts"), ",")
784- let bG = L()
791+ let bJ = L()
785792 let R = af(j)
786- let bO = B((("setup_" + j) + "_tempLT"))
787- let bP = parseIntValue(bG[value(indexOf(bG, j))])
793+ let bR = B((("setup_" + j) + "_tempLT"))
794+ let bF = parseIntValue(bJ[value(indexOf(bJ, j))])
788795 if ((R > 90000000))
789- then [IntegerEntry((("setup_" + j) + "_tempLT"), fraction(bO, 9975, 10000))]
790- else if (if ((bP > bO))
796+ then [IntegerEntry((("setup_" + j) + "_tempLT"), fraction(bR, 9975, 10000))]
797+ else if (if ((bF > bR))
791798 then (90000000 > R)
792799 else false)
793- then [IntegerEntry((("setup_" + j) + "_tempLT"), fraction(bO, 10025, 10000))]
800+ then [IntegerEntry((("setup_" + j) + "_tempLT"), fraction(bR, 10025, 10000))]
794801 else nil
795802 }
796803 }
797804
798805
799806
800807 @Callable(aK)
801-func shutdown (bQ) = if ((indexOf(f, aK.caller.bytes) == unit))
808+func shutdown (bS) = if ((indexOf(f, aK.caller.bytes) == unit))
802809 then throw("user not in a whitelist")
803- else [BooleanEntry("setup_active", !(bQ))]
810+ else [BooleanEntry("setup_active", !(bS))]
804811
805812
806813
807814 @Callable(aK)
808-func liquidate (bF,h,as,aM,aN,bR) = if (!(g(aK.caller)))
815+func liquidate (bI,h,as,aM,aN,bT) = if (!(g(aK.caller)))
809816 then throw("temporarily available for whitelist only")
810817 else if (!(E("setup_active")))
811818 then throw("market is stopped")
812819 else {
813- let bS = ao(h)
814- if ((bS == bS))
820+ let bU = ao(h)
821+ if ((bU == bU))
815822 then {
816- let bT = ab(aM, "sRate")
817- let au = bT._1
818- let bU = bT._2
819- let bV = ab(aN, "bRate")
820- let aE = bV._1
823+ let bV = ab(aM, "sRate")
824+ let au = bV._1
821825 let bW = bV._2
822- let bX = fraction(as, n, au)
823- let bY = B(((h + "_supplied_") + aM))
824- let bZ = B(((h + "_borrowed_") + aN))
825- let ca = if ((bZ > 0))
826- then bZ
826+ let bX = ab(aN, "bRate")
827+ let aE = bX._1
828+ let bY = bX._2
829+ let bZ = fraction(as, n, au)
830+ let ca = B(((h + "_supplied_") + aM))
831+ let cb = B(((h + "_borrowed_") + aN))
832+ let cc = if ((cb > 0))
833+ then cb
827834 else throw("user has no borrow in this token")
828- if ((bS > 0))
835+ if ((bU > 0))
829836 then throw("user can't be liquidated")
830- else if ((bX > bY))
837+ else if ((bZ > ca))
831838 then throw("position to liquidate is bigger than user's supply")
832839 else {
833- let cb = K(aM)
834- if ((cb == cb))
840+ let cd = K(aM)
841+ if ((cd == cd))
835842 then {
836- let cc = K(aN)
837- if ((cc == cc))
843+ let ce = K(aN)
844+ if ((ce == ce))
838845 then {
839- let cd = invoke(d, "swap", [bR, 0], [AttachedPayment(J(aM), as)])
840- if ((cd == cd))
846+ let cf = invoke(d, "swap", [bT, 0], [AttachedPayment(J(aM), as)])
847+ if ((cf == cf))
841848 then {
842- let ce = (cb - K(aM))
843- if ((ce == ce))
849+ let cg = (cd - K(aM))
850+ if ((cg == cg))
844851 then {
845- let cf = (K(aN) - cc)
846- if ((cf == cf))
852+ let ch = (K(aN) - ce)
853+ if ((ch == ch))
847854 then {
848- let cg = ai(aM)._1
849- let ch = am(aM)
850- let ci = fraction(ce, cg, ch)
851- let cj = ai(aN)._2
852- let ck = am(aN)
853- let cl = fraction(cf, cj, ck)
854- let cm = parseIntValue(split(F("setup_penalties"), ",")[value(indexOf(L(), aN))])
855- let cn = (cl - fraction(ci, (l - cm), l))
856- let co = fraction(ce, n, au)
857- let cp = fraction(fraction(cf, n, aE), (l - fraction(cn, l, cl)), l)
858- if ((ce > as))
855+ let ci = ai(aM)._1
856+ let cj = am(aM)
857+ let ck = fraction(cg, ci, cj)
858+ let cl = ai(aN)._2
859+ let cm = am(aN)
860+ let cn = fraction(ch, cl, cm)
861+ let bG = parseIntValue(split(F("setup_penalties"), ",")[value(indexOf(L(), aN))])
862+ let co = (cn - fraction(ck, (l - bG), l))
863+ let cp = fraction(cg, n, au)
864+ let cq = fraction(fraction(ch, n, aE), (l - fraction(co, l, cn)), l)
865+ if ((cg > as))
859866 then throw("more assets exchanged than expected")
860- else if ((0 > cn))
867+ else if ((0 > co))
861868 then throw("price impact is bigger than liquidation penalty")
862- else [IntegerEntry(((h + "_supplied_") + aM), (bY - co)), IntegerEntry(((h + "_borrowed_") + aN), (ca - cp)), IntegerEntry(("total_supplied_" + aM), (B(("total_supplied_" + aM)) - co)), IntegerEntry(("total_borrowed_" + aN), (B(("total_borrowed_" + aN)) - cp))]
869+ else [IntegerEntry(((h + "_supplied_") + aM), (ca - cp)), IntegerEntry(((h + "_borrowed_") + aN), (cc - cq)), IntegerEntry(("total_supplied_" + aM), (B(("total_supplied_" + aM)) - cp)), IntegerEntry(("total_borrowed_" + aN), (B(("total_borrowed_" + aN)) - cq))]
863870 }
864871 else throw("Strict value is not equal to itself.")
865872 }
866873 else throw("Strict value is not equal to itself.")
867874 }
868875 else throw("Strict value is not equal to itself.")
869876 }
870877 else throw("Strict value is not equal to itself.")
871878 }
872879 else throw("Strict value is not equal to itself.")
873880 }
874881 }
875882 else throw("Strict value is not equal to itself.")
876883 }
877884
878885
879886
880887 @Callable(aK)
881-func liquidateV2 (bF,h,aM) = if (!(g(aK.caller)))
888+func liquidateV2 (bI,h,aM) = if (!(g(aK.caller)))
882889 then throw("temporarily available for whitelist only")
883890 else if (!(E("setup_active")))
884891 then throw("market is stopped")
885892 else {
886893 let aT = aK.payments[0].assetId
887894 let aN = H(aT)
888- let cq = aK.payments[0].amount
889- let bS = ao(h)
890- if ((bS == bS))
891- then if ((bS > 0))
895+ let cr = aK.payments[0].amount
896+ let bU = ao(h)
897+ if ((bU == bU))
898+ then if ((bU > 0))
892899 then throw("user can't be liquidated")
893900 else {
894- let cr = L()
895- let cs = value(indexOf(cr, aN))
896- let ct = value(indexOf(cr, aM))
897- let cu = ab(aN, "bRate")
898- let aE = cu._1
899- let bU = cu._2
900- let cj = ai(aN)._2
901- let ck = am(aN)
902- let cv = fraction(cq, cj, ck)
903- let cm = parseIntValue(value(split(F("setup_penalties"), ",")[cs]))
904- let cg = ai(aM)._1
905- let ch = am(aM)
906- let cw = fraction(cv, (l + cm), l)
907- let bX = fraction(cw, ch, cg)
908- let aO = fraction(cq, n, aE)
909- let aV = fraction(bX, n, bU[((ct * 3) + 1)].value)
910- let bY = B(((h + "_supplied_") + aM))
911- let bZ = B(((h + "_borrowed_") + aN))
912- let ca = if ((bZ > 0))
913- then bZ
901+ let cs = L()
902+ let ct = value(indexOf(cs, aN))
903+ let cu = value(indexOf(cs, aM))
904+ let cv = ab(aN, "bRate")
905+ let aE = cv._1
906+ let bW = cv._2
907+ let cl = ai(aN)._2
908+ let cm = am(aN)
909+ let cw = fraction(cr, cl, cm)
910+ let bG = parseIntValue(value(split(F("setup_penalties"), ",")[ct]))
911+ let ci = ai(aM)._1
912+ let cj = am(aM)
913+ let cx = fraction(cw, (l + bG), l)
914+ let bZ = fraction(cx, cj, ci)
915+ let aO = fraction(cr, n, aE)
916+ let aV = fraction(bZ, n, bW[((cu * 3) + 1)].value)
917+ let ca = B(((h + "_supplied_") + aM))
918+ let cb = B(((h + "_borrowed_") + aN))
919+ let cc = if ((cb > 0))
920+ then cb
914921 else throw("user has no borrow in this token")
915- if ((aV > bY))
922+ if ((aV > ca))
916923 then throw("position to liquidate is bigger than user's supply")
917- else if (bF)
924+ else if (bI)
918925 then throw("liquidation will pass")
919- else ([ScriptTransfer(aK.caller, bX, J(aM)), IntegerEntry(((h + "_supplied_") + aM), (bY - aV)), IntegerEntry(((h + "_borrowed_") + aN), (ca - aO)), IntegerEntry(("total_supplied_" + aM), (B(("total_supplied_" + aM)) - aV)), IntegerEntry(("total_borrowed_" + aN), (B(("total_borrowed_" + aN)) - aO))] ++ bU)
926+ else ([ScriptTransfer(aK.caller, bZ, J(aM)), IntegerEntry(((h + "_supplied_") + aM), (ca - aV)), IntegerEntry(((h + "_borrowed_") + aN), (cc - aO)), IntegerEntry(("total_supplied_" + aM), (B(("total_supplied_" + aM)) - aV)), IntegerEntry(("total_borrowed_" + aN), (B(("total_borrowed_" + aN)) - aO))] ++ bW)
920927 }
921928 else throw("Strict value is not equal to itself.")
922929 }
923930
924931
925932
926933 @Callable(aK)
927-func getUserCollateral (bF,h,cx,cy) = {
928- let bG = L()
934+func getUserCollateral (bI,h,cy,cz) = {
935+ let bJ = L()
929936 let bB = split(F("setup_ltvs"), ",")
930937 let bC = split(F("setup_lts"), ",")
931- let ag = ab(bG[0], "sRate")._2
932- let cz = split(cy, ",")
933- func r (s,t) = if ((t >= size(bG)))
938+ let ag = ab(bJ[0], "sRate")._2
939+ let cA = split(cz, ",")
940+ func r (s,t) = if ((t >= size(bJ)))
934941 then s
935942 else {
936- let cA = B(((h + "_supplied_") + bG[t]))
937- let cB = B(((h + "_borrowed_") + bG[t]))
938- let cC = if ((cy == ""))
939- then if (if ((cB != 0))
943+ let cB = B(((h + "_supplied_") + bJ[t]))
944+ let cC = B(((h + "_borrowed_") + bJ[t]))
945+ let cD = if ((cz == ""))
946+ then if (if ((cC != 0))
940947 then true
941- else (cA != 0))
948+ else (cB != 0))
942949 then true
943950 else false
944951 else true
945- if (cC)
952+ if (cD)
946953 then {
947- let aA = am(bG[t])
948- let ay = ai(bG[t])
949- ((s + fraction(fraction(fraction((cA + (if (if (if ((cy != ""))
950- then (cz[0] == bG[t])
954+ let aA = am(bJ[t])
955+ let ay = ai(bJ[t])
956+ ((s + fraction(fraction(fraction((cB + (if (if (if ((cz != ""))
957+ then (cA[0] == bJ[t])
951958 else false)
952- then (cz[1] == "supplied")
959+ then (cA[1] == "supplied")
953960 else false)
954- then parseIntValue(cz[2])
955- else 0)), ag[(t * 3)].value, n), parseIntValue(bB[t]), l), ay._1, aA)) - (if (cx)
956- then fraction(fraction(fraction((cB + (if (if (if ((cy != ""))
957- then (cz[0] == bG[t])
961+ then parseIntValue(cA[2])
962+ else 0)), ag[(t * 3)].value, n), parseIntValue(bB[t]), l), ay._1, aA)) - (if (cy)
963+ then fraction(fraction(fraction((cC + (if (if (if ((cz != ""))
964+ then (cA[0] == bJ[t])
958965 else false)
959- then (cz[1] == "borrowed")
966+ then (cA[1] == "borrowed")
960967 else false)
961- then parseIntValue(cz[2])
968+ then parseIntValue(cA[2])
962969 else 0)), ag[((t * 3) + 1)].value, n), l, parseIntValue(bC[t])), ay._2, aA)
963970 else 0))
964971 }
965972 else s
966973 }
967974
968- let cD = {
975+ let cE = {
969976 let u = [0, 1, 2, 3, 4, 5]
970977 let v = size(u)
971978 let w = 0
972979 func x (y,z) = if ((z >= v))
973980 then y
974981 else r(y, u[z])
975982
976983 func A (y,z) = if ((z >= v))
977984 then y
978985 else throw("List size exceeds 6")
979986
980987 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
981988 }
982- if (bF)
983- then throw(toString(cD))
984- else $Tuple2(ag, cD)
989+ if (bI)
990+ then throw(toString(cE))
991+ else $Tuple2(ag, cE)
985992 }
986993
987994
988995
989996 @Callable(aK)
990-func getAssetDebt (bF,h,j) = {
991- let cB = B(((h + "_borrowed_") + j))
997+func getAssetDebt (bI,h,j) = {
998+ let cC = B(((h + "_borrowed_") + j))
992999 let aA = am(j)
9931000 let T = ab(j, "bRate")._1
994- let cD = fraction(cB, T, n)
995- if (bF)
996- then throw(toString(cD))
997- else $Tuple2(nil, cD)
1001+ let cE = fraction(cC, T, n)
1002+ if (bI)
1003+ then throw(toString(cE))
1004+ else $Tuple2(nil, cE)
9981005 }
9991006
10001007
10011008
10021009 @Callable(aK)
1003-func getPrices (bF) = {
1004- let bG = L()
1005- func r (s,t) = if ((t >= size(bG)))
1010+func getPrices (bI) = {
1011+ let bJ = L()
1012+ func r (s,t) = if ((t >= size(bJ)))
10061013 then s
10071014 else {
1008- let ay = ai(bG[t])
1015+ let ay = ai(bJ[t])
10091016 ((((s + toString(ay._1)) + ",") + toString(ay._2)) + "|")
10101017 }
10111018
1012- let cD = {
1019+ let cE = {
10131020 let u = [0, 1, 2, 3, 4, 5]
10141021 let v = size(u)
10151022 let w = ""
10161023 func x (y,z) = if ((z >= v))
10171024 then y
10181025 else r(y, u[z])
10191026
10201027 func A (y,z) = if ((z >= v))
10211028 then y
10221029 else throw("List size exceeds 6")
10231030
10241031 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
10251032 }
1026- if (bF)
1027- then throw(cD)
1028- else $Tuple2(nil, cD)
1033+ if (bI)
1034+ then throw(cE)
1035+ else $Tuple2(nil, cE)
10291036 }
10301037
10311038
10321039
10331040 @Callable(aK)
1034-func calculateUtilizationRatio (j,bF) = if (bF)
1041+func calculateUtilizationRatio (j,bI) = if (bI)
10351042 then throw(toString(af(j)))
10361043 else $Tuple2(nil, af(j))
10371044
10381045
10391046
10401047 @Callable(aK)
1041-func calculateOutdatedUR (j,bF) = if (bF)
1048+func calculateOutdatedUR (j,bI) = if (bI)
10421049 then throw(toString(O(j)))
10431050 else $Tuple2(nil, O(j))
10441051
10451052
10461053
10471054 @Callable(aK)
1048-func calculateTokenRates (bF) = {
1055+func calculateTokenRates (bI) = {
10491056 func r (s,j) = {
10501057 let ag = U(j)
10511058 $Tuple2(((((s._1 + toString(ag[1].value)) + "|") + toString(ag[0].value)) + ","), (s._2 ++ ag))
10521059 }
10531060
1054- let bJ = {
1061+ let bM = {
10551062 let u = L()
10561063 let v = size(u)
10571064 let w = $Tuple2("", nil)
10581065 func x (y,z) = if ((z >= v))
10591066 then y
10601067 else r(y, u[z])
10611068
10621069 func A (y,z) = if ((z >= v))
10631070 then y
10641071 else throw("List size exceeds 6")
10651072
10661073 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
10671074 }
1068- if (bF)
1069- then throw(bJ._1)
1070- else $Tuple2(bJ._2, bJ._1)
1075+ if (bI)
1076+ then throw(bM._1)
1077+ else $Tuple2(bM._2, bM._1)
10711078 }
10721079
10731080
10741081
10751082 @Callable(aK)
1076-func calculateTokensInterest (bF) = {
1083+func calculateTokensInterest (bI) = {
10771084 func r (s,j) = {
10781085 let T = fraction(Q(j), o, l)
10791086 ((s + toString(T)) + ",")
10801087 }
10811088
1082- let bJ = {
1089+ let bM = {
10831090 let u = L()
10841091 let v = size(u)
10851092 let w = ""
10861093 func x (y,z) = if ((z >= v))
10871094 then y
10881095 else r(y, u[z])
10891096
10901097 func A (y,z) = if ((z >= v))
10911098 then y
10921099 else throw("List size exceeds 6")
10931100
10941101 A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
10951102 }
1096- if (bF)
1097- then throw(bJ)
1098- else $Tuple2(nil, bJ)
1103+ if (bI)
1104+ then throw(bM)
1105+ else $Tuple2(nil, bM)
10991106 }
11001107
11011108
1102-@Verifier(cE)
1103-func cF () = sigVerify(cE.bodyBytes, cE.proofs[0], cE.senderPublicKey)
1109+@Verifier(cF)
1110+func cG () = sigVerify(cF.bodyBytes, cF.proofs[0], cF.senderPublicKey)
11041111

github/deemru/w8io/026f985 
230.69 ms