tx · 2TfAUi8mKJujJz9uxrxqcGeDcoLgnWZwsb9HkwwkmmxQ

3N4yYqBkTUq1mDdHhvAd3St7spCbm84DytS:  -0.02400000 Waves

2024.04.17 09:31 [3066416] smart account 3N4yYqBkTUq1mDdHhvAd3St7spCbm84DytS > SELF 0.00000000 Waves

{ "type": 13, "id": "2TfAUi8mKJujJz9uxrxqcGeDcoLgnWZwsb9HkwwkmmxQ", "fee": 2400000, "feeAssetId": null, "timestamp": 1713335500639, "version": 2, "chainId": 84, "sender": "3N4yYqBkTUq1mDdHhvAd3St7spCbm84DytS", "senderPublicKey": "8h7G4haeVwXKNHXNHsWkC1miUp5CQtk3WmpBKazQPxRh", "proofs": [ "4gc7KcgVavWNrXRe5xXHoy8AFgte5ibBJUJNunMEeBysjxMSfzdmM6wBHfvuRbaSPp1pfEAWMEA2rS1urdCkRy6y" ], "script": "base64:BgI6CAISAwoBARIDCgEBEgASAwoBCBIDCgEBEgMKAQgSAwoBCBIECgIICBIECgIYERIDCgEIEgASAwoBCEMADGNvbnRyYWN0RmlsZQIRbDJtcF9zdGFraW5nLnJpZGUAA1NFUAICX18ABnNjYWxlOACAwtcvAAdzY2FsZTE4AICAkLu61q3wDQANc2NhbGUxOEJpZ0ludAkAtgIBBQdzY2FsZTE4ABJBRERSRVNTX0JZVEVTX1NJWkUAGgANQkxPQ0tTX0lOX0RBWQCgCwEIdGhyb3dFcnIBA21zZwkAAgEJAKwCAgkArAICBQxjb250cmFjdEZpbGUCAjogBQNtc2cACmtleUFzc2V0SWQJALkJAgkAzAgCAgIlcwkAzAgCAgdhc3NldElkBQNuaWwFA1NFUAATa2V5RW1pc3Npb25QZXJCbG9jawkAuQkCCQDMCAICAiVzCQDMCAICEGVtaXNzaW9uUGVyQmxvY2sFA25pbAUDU0VQABlrZXlFbWlzc2lvblBlcmlvZEluQmxvY2tzCQC5CQIJAMwIAgICJXMJAMwIAgIWZW1pc3Npb25QZXJpb2RJbkJsb2NrcwUDbmlsBQNTRVAADWtleVN0YXJ0QmxvY2sJALkJAgkAzAgCAgIlcwkAzAgCAgpzdGFydEJsb2NrBQNuaWwFA1NFUAAQa2V5VG90YWxMcEFtb3VudAkAuQkCCQDMCAICAiVzCQDMCAICDXRvdGFsTHBBbW91bnQFA25pbAUDU0VQABNrZXlUb3RhbEFzc2V0QW1vdW50CQC5CQIJAMwIAgICJXMJAMwIAgIQdG90YWxBc3NldEFtb3VudAUDbmlsBQNTRVAAFmtleVRvdGFsTG9ja2VkTHBBbW91bnQJALkJAgkAzAgCAgIlcwkAzAgCAhN0b3RhbExvY2tlZExwQW1vdW50BQNuaWwFA1NFUAAVa2V5V2l0aGRyYXdMb2NrSGVpZ2h0CQC5CQIJAMwIAgICJXMJAMwIAgISd2l0aGRyYXdMb2NrSGVpZ2h0BQNuaWwFA1NFUAEPa2V5VXNlckxwQW1vdW50AQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIMdXNlckxwQW1vdW50CQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAEVa2V5VXNlckxvY2tlZExwQW1vdW50AQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgISdXNlckxvY2tlZExwQW1vdW50CQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAETa2V5VXNlclN0YWtpbmdOb2RlcwELdXNlckFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICEHVzZXJTdGFraW5nTm9kZXMJAMwIAgULdXNlckFkZHJlc3MFA25pbAUDU0VQARlrZXlVc2VyU3Rha2luZ05vZGVzU2hhcmVzAQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIWdXNlclN0YWtpbmdOb2Rlc1NoYXJlcwkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsBQNTRVABGmtleVVzZXJUb3RhbEFzc2V0V2l0aGRyYXduAQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgITdG90YWxBc3NldFdpdGhkcmF3bgkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsBQNTRVABF2tleVVzZXJUb3RhbEFzc2V0U3Rha2VkAQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIQdG90YWxBc3NldFN0YWtlZAkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsBQNTRVABCmtleUhpc3RvcnkDBHR5cGULdXNlckFkZHJlc3MEdHhJZAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQR0eXBlCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAIJANgEAQUEdHhJZAUDbmlsBQNTRVABDWZvcm1hdEhpc3RvcnkEC3RvdGFsUHJvZml0BXByaWNlEHRvdGFsQXNzZXRBbW91bnQNdG90YWxMcEFtb3VudAkAuQkCCQDMCAICCCVkJWQlZCVkCQDMCAIJAKQDAQULdG90YWxQcm9maXQJAMwIAgkApgMBBQVwcmljZQkAzAgCCQCkAwEFEHRvdGFsQXNzZXRBbW91bnQJAMwIAgkApAMBBQ10b3RhbExwQW1vdW50BQNuaWwFA1NFUAANdG90YWxMcEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRBrZXlUb3RhbExwQW1vdW50AAAAEHRvdGFsQXNzZXRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUTa2V5VG90YWxBc3NldEFtb3VudAAAABN0b3RhbExvY2tlZExwQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFFmtleVRvdGFsTG9ja2VkTHBBbW91bnQAAAANYXNzZXRJZFN0cmluZwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQprZXlBc3NldElkAgVXQVZFUwAMYXNzZXRJZEJ5dGVzAwkAAAIFDWFzc2V0SWRTdHJpbmcCBVdBVkVTBQR1bml0CQDZBAEFDWFzc2V0SWRTdHJpbmcAFmVtaXNzaW9uUGVyaW9kSW5CbG9ja3MJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUZa2V5RW1pc3Npb25QZXJpb2RJbkJsb2NrcwUNQkxPQ0tTX0lOX0RBWQAQZW1pc3Npb25QZXJCbG9jawkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRNrZXlFbWlzc2lvblBlckJsb2NrAAAAEWVtaXNzaW9uUGVyUGVyaW9kCQBoAgUQZW1pc3Npb25QZXJCbG9jawUWZW1pc3Npb25QZXJpb2RJbkJsb2NrcwASd2l0aGRyYXdMb2NrSGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFFWtleVdpdGhkcmF3TG9ja0hlaWdodAAAAA9BRE1JTl9MSVNUX1NJWkUABQAGUVVPUlVNAAMAEVRYSURfQllURVNfTEVOR1RIACABGGtleUFsbG93ZWRUeElkVm90ZVByZWZpeAEEdHhJZAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAglhbGxvd1R4SWQJAMwIAgUEdHhJZAUDbmlsBQNTRVABEGtleUZ1bGxBZG1pblZvdGUCBnByZWZpeAxhZG1pbkFkZHJlc3MJALkJAgkAzAgCBQZwcmVmaXgJAMwIAgUMYWRtaW5BZGRyZXNzBQNuaWwFA1NFUAETa2V5QWRtaW5BZGRyZXNzTGlzdAAJALkJAgkAzAgCAgIlcwkAzAgCAhBhZG1pbkFkZHJlc3NMaXN0BQNuaWwFA1NFUAEOa2V5QWxsb3dlZFR4SWQACQC5CQIJAMwIAgICJXMJAMwIAgIEdHhJZAUDbmlsBQNTRVABDGdldEFkbWluVm90ZQIGcHJlZml4BWFkbWluBAd2b3RlS2V5CQEQa2V5RnVsbEFkbWluVm90ZQIFBnByZWZpeAUFYWRtaW4JAQt2YWx1ZU9yRWxzZQIJAJ8IAQUHdm90ZUtleQAAAQ1nZXRBZG1pbnNMaXN0AAQHJG1hdGNoMAkAnQgCBQR0aGlzCQETa2V5QWRtaW5BZGRyZXNzTGlzdAADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQC1CQIFAXMFA1NFUAUDbmlsAQ1pc0luQWRtaW5MaXN0AQdhZGRyZXNzCQEPY29udGFpbnNFbGVtZW50AgkBDWdldEFkbWluc0xpc3QABQdhZGRyZXNzARJnZW5Wb3Rlc0tleXNIZWxwZXICAWEMYWRtaW5BZGRyZXNzBAskdDAzNzUxMzc3NQUBYQQGcmVzdWx0CAULJHQwMzc1MTM3NzUCXzEEBnByZWZpeAgFCyR0MDM3NTEzNzc1Al8yCQCUCgIJAM0IAgUGcmVzdWx0CQEQa2V5RnVsbEFkbWluVm90ZQIFBnByZWZpeAUMYWRtaW5BZGRyZXNzBQZwcmVmaXgBDGdlblZvdGVzS2V5cwEJa2V5UHJlZml4BAlhZG1pbkxpc3QJARNrZXlBZG1pbkFkZHJlc3NMaXN0AAQLJHQwMzkyMjQwMDYKAAIkbAkBDWdldEFkbWluc0xpc3QACgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwFCWtleVByZWZpeAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQESZ2VuVm90ZXNLZXlzSGVscGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQQGcmVzdWx0CAULJHQwMzkyMjQwMDYCXzEEBnByZWZpeAgFCyR0MDM5MjI0MDA2Al8yBQZyZXN1bHQBEGNvdW50Vm90ZXNIZWxwZXICBnJlc3VsdAd2b3RlS2V5CQBkAgUGcmVzdWx0CQELdmFsdWVPckVsc2UCCQCfCAEFB3ZvdGVLZXkAAAEKY291bnRWb3RlcwEGcHJlZml4BAV2b3RlcwkBDGdlblZvdGVzS2V5cwEFBnByZWZpeAoAAiRsBQV2b3RlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEQY291bnRWb3Rlc0hlbHBlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUBEGNsZWFyVm90ZXNIZWxwZXICBnJlc3VsdANrZXkJAM0IAgUGcmVzdWx0CQELRGVsZXRlRW50cnkBBQNrZXkBE2dldENsZWFyVm90ZUVudHJpZXMBBnByZWZpeAQFdm90ZXMJAQxnZW5Wb3Rlc0tleXMBBQZwcmVmaXgKAAIkbAUFdm90ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEGNsZWFyVm90ZXNIZWxwZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAQx2b3RlSU5URVJOQUwEE2NhbGxlckFkZHJlc3NTdHJpbmcJa2V5UHJlZml4CG1pblZvdGVzCnZvdGVSZXN1bHQEB3ZvdGVLZXkJARBrZXlGdWxsQWRtaW5Wb3RlAgUJa2V5UHJlZml4BRNjYWxsZXJBZGRyZXNzU3RyaW5nBBBhZG1pbkN1cnJlbnRWb3RlCQEMZ2V0QWRtaW5Wb3RlAgUJa2V5UHJlZml4BRNjYWxsZXJBZGRyZXNzU3RyaW5nBANlcnIDCQEBIQEJAQ1pc0luQWRtaW5MaXN0AQUTY2FsbGVyQWRkcmVzc1N0cmluZwkBCHRocm93RXJyAQkArAICCQCsAgICCUFkZHJlc3M6IAUTY2FsbGVyQWRkcmVzc1N0cmluZwISIG5vdCBpbiBBZG1pbiBsaXN0AwkAAAIFEGFkbWluQ3VycmVudFZvdGUAAQkBCHRocm93RXJyAQkArAICBQd2b3RlS2V5AhIgeW91IGFscmVhZHkgdm90ZWQFBHVuaXQDCQAAAgUDZXJyBQNlcnIEBXZvdGVzCQEKY291bnRWb3RlcwEFCWtleVByZWZpeAMJAGcCCQBkAgUFdm90ZXMAAQUIbWluVm90ZXMEEGNsZWFyVm90ZUVudHJpZXMJARNnZXRDbGVhclZvdGVFbnRyaWVzAQUJa2V5UHJlZml4CQDOCAIFEGNsZWFyVm90ZUVudHJpZXMFCnZvdGVSZXN1bHQJAMwIAgkBDEludGVnZXJFbnRyeQIFB3ZvdGVLZXkAAQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARlzdHJpbmdMaXN0VG9JbnRMaXN0SGVscGVyAgNhY2MFdmFsdWUJAM0IAgUDYWNjCQENcGFyc2VJbnRWYWx1ZQEFBXZhbHVlARhjYWxjVG90YWxQcm9maXRGb3JIZWlnaHQBAWgECnN0YXJ0QmxvY2sJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUNa2V5U3RhcnRCbG9jawUGaGVpZ2h0BAtzdGFydFBlcmlvZAkAawMFCnN0YXJ0QmxvY2sAAQUWZW1pc3Npb25QZXJpb2RJbkJsb2NrcwQOZWxhcHNlZFBlcmlvZHMJAGUCCQBpAgUBaAUWZW1pc3Npb25QZXJpb2RJbkJsb2NrcwULc3RhcnRQZXJpb2QJAJYDAQkAzAgCAAAJAMwIAgkAaAIFEWVtaXNzaW9uUGVyUGVyaW9kBQ5lbGFwc2VkUGVyaW9kcwUDbmlsAQ9jYWxjVG90YWxQcm9maXQACQEYY2FsY1RvdGFsUHJvZml0Rm9ySGVpZ2h0AQUGaGVpZ2h0ARRnZXRNYXhBc3NldEF2YWlsYWJsZQAEByRtYXRjaDAFDGFzc2V0SWRCeXRlcwMJAAECBQckbWF0Y2gwAgRVbml0BAF1BQckbWF0Y2gwCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDwBwIFBHRoaXMFAWIJAAIBAgtNYXRjaCBlcnJvcgErZ2V0VG90YWxBc3NldEFtb3VudFdpdGhQcm9maXRPck1heEF2YWlsYWJsZQAEGnRvdGFsQXNzZXRBbW91bnRXaXRoUHJvZml0CQBkAgUQdG90YWxBc3NldEFtb3VudAkBD2NhbGNUb3RhbFByb2ZpdAAEC3RvdGFsQW1vdW50CQCXAwEJAMwIAgUadG90YWxBc3NldEFtb3VudFdpdGhQcm9maXQJAMwIAgkBFGdldE1heEFzc2V0QXZhaWxhYmxlAAUDbmlsAwkAAAIFDXRvdGFsTHBBbW91bnQAAAAABQt0b3RhbEFtb3VudAEPZ2V0Q3VycmVudFByaWNlAAMJAQIhPQIFDXRvdGFsTHBBbW91bnQAAAkAvAIDCQC2AgEJAStnZXRUb3RhbEFzc2V0QW1vdW50V2l0aFByb2ZpdE9yTWF4QXZhaWxhYmxlAAUNc2NhbGUxOEJpZ0ludAkAtgIBBQ10b3RhbExwQW1vdW50BQ1zY2FsZTE4QmlnSW50ARJnZXRSZW1haW5pbmdCbG9ja3MAAwkAAAIFEGVtaXNzaW9uUGVyQmxvY2sAAAAACQBrAwkAZQIJARRnZXRNYXhBc3NldEF2YWlsYWJsZQAJAStnZXRUb3RhbEFzc2V0QW1vdW50V2l0aFByb2ZpdE9yTWF4QXZhaWxhYmxlAAABBRBlbWlzc2lvblBlckJsb2NrARdnZXRVc2VyU3Rha2luZ05vZGVzRGF0YQELdXNlckFkZHJlc3MECG5vZGVzUmF3CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJARNrZXlVc2VyU3Rha2luZ05vZGVzAQULdXNlckFkZHJlc3MCAAQJc2hhcmVzUmF3CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJARlrZXlVc2VyU3Rha2luZ05vZGVzU2hhcmVzAQULdXNlckFkZHJlc3MCAAQJbm9kZXNMaXN0AwkAAAIFCG5vZGVzUmF3AgAFA25pbAkAtQkCBQhub2Rlc1JhdwUDU0VQBBBzaGFyZXNTdHJpbmdMaXN0AwkAAAIFCXNoYXJlc1JhdwIABQNuaWwJALUJAgUJc2hhcmVzUmF3BQNTRVAECnNoYXJlc0xpc3QKAAIkbAUQc2hhcmVzU3RyaW5nTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEZc3RyaW5nTGlzdFRvSW50TGlzdEhlbHBlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUCQCUCgIFCW5vZGVzTGlzdAUKc2hhcmVzTGlzdAEPY2FsY0Fzc2V0RnJvbUxwAQhscEFtb3VudAkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALwCAwkAtgIBBQhscEFtb3VudAkBD2dldEN1cnJlbnRQcmljZQAFDXNjYWxlMThCaWdJbnQFA25pbAEPY2FsY0xwRnJvbUFzc2V0AQthc3NldEFtb3VudAkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALwCAwkAtgIBBQthc3NldEFtb3VudAUNc2NhbGUxOEJpZ0ludAkBD2dldEN1cnJlbnRQcmljZQAFA25pbAEPZ2V0VXNlckxwQW1vdW50AQt1c2VyQWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEPa2V5VXNlckxwQW1vdW50AQULdXNlckFkZHJlc3MAAAEVZ2V0VXNlckxvY2tlZExwQW1vdW50AQt1c2VyQWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEVa2V5VXNlckxvY2tlZExwQW1vdW50AQULdXNlckFkZHJlc3MAAAEgZ2V0VXNlckF2YWlsYWJsZUFzc2V0c1RvV2l0aGRyYXcBC3VzZXJBZGRyZXNzBAx1c2VyTHBBbW91bnQJAQ9nZXRVc2VyTHBBbW91bnQBBQt1c2VyQWRkcmVzcwkBD2NhbGNBc3NldEZyb21McAEFDHVzZXJMcEFtb3VudAEbZ2V0Q2xlYXJTdGFraW5nTm9kZXNBY3Rpb25zAQt1c2VyQWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQETa2V5VXNlclN0YWtpbmdOb2RlcwEFC3VzZXJBZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARlrZXlVc2VyU3Rha2luZ05vZGVzU2hhcmVzAQULdXNlckFkZHJlc3MFA25pbAEPZ2V0U3Rha2VBY3Rpb25zAgFpC3VzZXJBZGRyZXNzBAZjaGVja3MJAMwIAgMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEGCQEIdGhyb3dFcnIBAhhzaG91bGQgaW5jbHVkZSAxIHBheW1lbnQJAMwIAgMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFDGFzc2V0SWRCeXRlcwYJAQh0aHJvd0VycgEJAKwCAgIVcGF5bWVudCBzaG91bGQgYmUgaW4gBQ1hc3NldElkU3RyaW5nCQDMCAIDCQBmAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAAYCJ3BheW1lbnQgYW1vdW50IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMAkAzAgCAwkAAAIJAMgBAQkA2QQBBQt1c2VyQWRkcmVzcwUSQUREUkVTU19CWVRFU19TSVpFBgkBCHRocm93RXJyAQIZdXNlciBhZGRyZXNzIGlzIG5vdCB2YWxpZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBA1wYXltZW50QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQPcGF5bWVudExwQW1vdW50CQEPY2FsY0xwRnJvbUFzc2V0AQUNcGF5bWVudEFtb3VudAQMdXNlckxwQW1vdW50CQEPZ2V0VXNlckxwQW1vdW50AQULdXNlckFkZHJlc3MEFXVzZXJUb3RhbFN0YWtlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEXa2V5VXNlclRvdGFsQXNzZXRTdGFrZWQBBQt1c2VyQWRkcmVzcwAABBBuZXdUb3RhbExwQW1vdW50CQBkAgUNdG90YWxMcEFtb3VudAUPcGF5bWVudExwQW1vdW50BBNuZXdUb3RhbEFzc2V0QW1vdW50CQEPY2FsY0Fzc2V0RnJvbUxwAQUQbmV3VG90YWxMcEFtb3VudAQPbmV3VXNlckxwQW1vdW50CQBkAgUMdXNlckxwQW1vdW50BQ9wYXltZW50THBBbW91bnQEGG5ld1VzZXJUb3RhbFN0YWtlZEFtb3VudAkAZAIFFXVzZXJUb3RhbFN0YWtlZEFtb3VudAUNcGF5bWVudEFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQEKa2V5SGlzdG9yeQMCBXN0YWtlBQt1c2VyQWRkcmVzcwgFAWkNdHJhbnNhY3Rpb25JZAkBDWZvcm1hdEhpc3RvcnkECQEPY2FsY1RvdGFsUHJvZml0AAkBD2dldEN1cnJlbnRQcmljZQAFDXRvdGFsTHBBbW91bnQFEHRvdGFsQXNzZXRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtleVRvdGFsTHBBbW91bnQFEG5ld1RvdGFsTHBBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tleVRvdGFsQXNzZXRBbW91bnQFE25ld1RvdGFsQXNzZXRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9rZXlVc2VyTHBBbW91bnQBBQt1c2VyQWRkcmVzcwUPbmV3VXNlckxwQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEXa2V5VXNlclRvdGFsQXNzZXRTdGFrZWQBBQt1c2VyQWRkcmVzcwUYbmV3VXNlclRvdGFsU3Rha2VkQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rZXlTdGFydEJsb2NrBQZoZWlnaHQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgESZ2V0V2l0aGRyYXdBY3Rpb25zAgFpFWxwQXNzZXRXaXRoZHJhd0Ftb3VudAQLdXNlckFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAx1c2VyTHBBbW91bnQJAQ9nZXRVc2VyTHBBbW91bnQBBQt1c2VyQWRkcmVzcwQFY2hlY2sJAMwIAgMJAGYCBRVscEFzc2V0V2l0aGRyYXdBbW91bnQAAAYJAQh0aHJvd0VycgECH0xQIGFtb3VudCBzaG91bGQgYmUgbW9yZSB0aGFuIDAJAMwIAgMJAGcCBQx1c2VyTHBBbW91bnQFFWxwQXNzZXRXaXRoZHJhd0Ftb3VudAYJAQh0aHJvd0VycgEJAKwCAgkArAICAihjYW5ub3Qgd2l0aGRyYXcgbW9yZSB0aGFuIGF2YWlsYWJsZSBMUCAoCQCkAwEFDHVzZXJMcEFtb3VudAIBKQUDbmlsAwkAAAIFBWNoZWNrBQVjaGVjawQPbmV3VXNlckxwQW1vdW50CQBlAgUMdXNlckxwQW1vdW50BRVscEFzc2V0V2l0aGRyYXdBbW91bnQEE3dpdGhkcmF3QXNzZXRBbW91bnQJAQ9jYWxjQXNzZXRGcm9tTHABBRVscEFzc2V0V2l0aGRyYXdBbW91bnQEEG5ld1RvdGFsTHBBbW91bnQJAGUCBQ10b3RhbExwQW1vdW50BRVscEFzc2V0V2l0aGRyYXdBbW91bnQEE25ld1RvdGFsQXNzZXRBbW91bnQJAQ9jYWxjQXNzZXRGcm9tTHABBRBuZXdUb3RhbExwQW1vdW50BBd1c2VyVG90YWxBc3NldFdpdGhkcmF3bgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEaa2V5VXNlclRvdGFsQXNzZXRXaXRoZHJhd24BBQt1c2VyQWRkcmVzcwAABBpuZXdVc2VyVG90YWxBc3NldFdpdGhkcmF3bgkAZAIFF3VzZXJUb3RhbEFzc2V0V2l0aGRyYXduBRN3aXRoZHJhd0Fzc2V0QW1vdW50BBdjbGVhclN0YWtpbmdOb2Rlc0FjdGlvbgMJAAACBQ9uZXdVc2VyTHBBbW91bnQAAAkBG2dldENsZWFyU3Rha2luZ05vZGVzQWN0aW9ucwEFC3VzZXJBZGRyZXNzBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCCQEKa2V5SGlzdG9yeQMCCHdpdGhkcmF3BQt1c2VyQWRkcmVzcwgFAWkNdHJhbnNhY3Rpb25JZAkBDWZvcm1hdEhpc3RvcnkECQEPY2FsY1RvdGFsUHJvZml0AAkBD2dldEN1cnJlbnRQcmljZQAFDXRvdGFsTHBBbW91bnQFEHRvdGFsQXNzZXRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtleVRvdGFsTHBBbW91bnQFEG5ld1RvdGFsTHBBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tleVRvdGFsQXNzZXRBbW91bnQFE25ld1RvdGFsQXNzZXRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9rZXlVc2VyTHBBbW91bnQBBQt1c2VyQWRkcmVzcwUPbmV3VXNlckxwQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEaa2V5VXNlclRvdGFsQXNzZXRXaXRoZHJhd24BBQt1c2VyQWRkcmVzcwUabmV3VXNlclRvdGFsQXNzZXRXaXRoZHJhd24JAMwIAgkBDEludGVnZXJFbnRyeQIFDWtleVN0YXJ0QmxvY2sFBmhlaWdodAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFE3dpdGhkcmF3QXNzZXRBbW91bnQFDGFzc2V0SWRCeXRlcwUDbmlsBRdjbGVhclN0YWtpbmdOb2Rlc0FjdGlvbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEYZ2V0U2V0U3Rha2luZ05vZGVBY3Rpb25zAwt1c2VyQWRkcmVzcwtub2RlQWRkcmVzcwlub2RlU2hhcmUEBWNoZWNrCQDMCAIDCQAAAgkAyAEBCQDZBAEFC3VzZXJBZGRyZXNzBRJBRERSRVNTX0JZVEVTX1NJWkUGCQEIdGhyb3dFcnIBAhl1c2VyIGFkZHJlc3MgaXMgbm90IHZhbGlkCQDMCAIDCQAAAgkAyAEBCQDZBAEFC25vZGVBZGRyZXNzBRJBRERSRVNTX0JZVEVTX1NJWkUGCQEIdGhyb3dFcnIBAhlub2RlIGFkZHJlc3MgaXMgbm90IHZhbGlkBQNuaWwDCQAAAgUFY2hlY2sFBWNoZWNrCQDMCAIJAQtTdHJpbmdFbnRyeQIJARNrZXlVc2VyU3Rha2luZ05vZGVzAQULdXNlckFkZHJlc3MFC25vZGVBZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARlrZXlVc2VyU3Rha2luZ05vZGVzU2hhcmVzAQULdXNlckFkZHJlc3MJAKQDAQUJbm9kZVNoYXJlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4MAWkBE3NldEVtaXNzaW9uUGVyQmxvY2sBEGVtaXNzaW9uUGVyQmxvY2sEBWNoZWNrCQDMCAIDCQAAAggFAWkGY2FsbGVyBQR0aGlzBgkBCHRocm93RXJyAQIRcGVybWlzc2lvbiBkZW5pZWQFA25pbAMJAAACBQVjaGVjawUFY2hlY2sJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tleVRvdGFsQXNzZXRBbW91bnQJAStnZXRUb3RhbEFzc2V0QW1vdW50V2l0aFByb2ZpdE9yTWF4QXZhaWxhYmxlAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa2V5U3RhcnRCbG9jawUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrZXlFbWlzc2lvblBlckJsb2NrCQCWAwEJAMwIAgAACQDMCAIFEGVtaXNzaW9uUGVyQmxvY2sFA25pbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGXNldEVtaXNzaW9uUGVyaW9kSW5CbG9ja3MBAXAEBWNoZWNrCQDMCAIDCQBmAgUBcAAABgkBCHRocm93RXJyAQIoZW1pc3Npb24gcGVyaW9kIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMAkAzAgCAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwYJAQh0aHJvd0VycgECEXBlcm1pc3Npb24gZGVuaWVkBQNuaWwDCQAAAgUFY2hlY2sFBWNoZWNrCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrZXlUb3RhbEFzc2V0QW1vdW50CQErZ2V0VG90YWxBc3NldEFtb3VudFdpdGhQcm9maXRPck1heEF2YWlsYWJsZQAJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtleVN0YXJ0QmxvY2sFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgUZa2V5RW1pc3Npb25QZXJpb2RJbkJsb2NrcwUBcAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBXN0YWtlAAQLdXNlckFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyCQEPZ2V0U3Rha2VBY3Rpb25zAgUBaQULdXNlckFkZHJlc3MBaQEIc3Rha2VGb3IBC3VzZXJBZGRyZXNzCQEPZ2V0U3Rha2VBY3Rpb25zAgUBaQULdXNlckFkZHJlc3MBaQEId2l0aGRyYXcBE3dpdGhkcmF3QXNzZXRBbW91bnQEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQMdXNlckxwQW1vdW50CQEPZ2V0VXNlckxwQW1vdW50AQULdXNlckFkZHJlc3MEEmxwQW1vdW50VG9XaXRoZHJhdwkBD2NhbGNMcEZyb21Bc3NldAEFE3dpdGhkcmF3QXNzZXRBbW91bnQEHHVzZXJBdmFpbGFibGVBc3NldFRvV2l0aGRyYXcJASBnZXRVc2VyQXZhaWxhYmxlQXNzZXRzVG9XaXRoZHJhdwEFC3VzZXJBZGRyZXNzBBZtaW5XaXRoZHJhd0Fzc2V0QW1vdW50CQCgAwEJAL0CBAkBD2dldEN1cnJlbnRQcmljZQAJALYCAQABBQ1zY2FsZTE4QmlnSW50BQdDRUlMSU5HBAVjaGVjawkAzAgCAwMJAAACBRJ3aXRoZHJhd0xvY2tIZWlnaHQAAAYJAGYCBRJ3aXRoZHJhd0xvY2tIZWlnaHQFBmhlaWdodAYJAQh0aHJvd0VycgEJALkJAgkAzAgCAh13aXRoZHJhdyBpcyBsb2NrZWQgYXQgaGVpZ2h0OgkAzAgCCQCkAwEFEndpdGhkcmF3TG9ja0hlaWdodAUDbmlsAgEgCQDMCAIDCQBmAgUTd2l0aGRyYXdBc3NldEFtb3VudAAABgkBCHRocm93RXJyAQIld2l0aGRyYXcgYW1vdW50IHNob3VsZCBiZSBtb3JlIHRoYW4gMAkAzAgCAwkAZwIFHHVzZXJBdmFpbGFibGVBc3NldFRvV2l0aGRyYXcFE3dpdGhkcmF3QXNzZXRBbW91bnQGCQEIdGhyb3dFcnIBCQCsAgIJAKwCAgIlY2Fubm90IHdpdGhkcmF3IG1vcmUgdGhhbiBhdmFpbGFibGUgKAkApAMBBRx1c2VyQXZhaWxhYmxlQXNzZXRUb1dpdGhkcmF3AgEpCQDMCAIDCQBnAgUTd2l0aGRyYXdBc3NldEFtb3VudAUWbWluV2l0aGRyYXdBc3NldEFtb3VudAYJAQh0aHJvd0VycgEJAKwCAgkArAICAiR3aXRoZHJhdyBhbW91bnQgaXMgdG9vIHNtYWxsLiBNaW46ICgJAKQDAQUWbWluV2l0aGRyYXdBc3NldEFtb3VudAIBKQUDbmlsAwkAAAIFBWNoZWNrBQVjaGVjawkBEmdldFdpdGhkcmF3QWN0aW9ucwIFAWkJAJcDAQkAzAgCBQx1c2VyTHBBbW91bnQJAMwIAgkAZAIFEmxwQW1vdW50VG9XaXRoZHJhdwABBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOc2V0U3Rha2luZ05vZGUBC25vZGVBZGRyZXNzBAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIJARhnZXRTZXRTdGFraW5nTm9kZUFjdGlvbnMDBQt1c2VyQWRkcmVzcwULbm9kZUFkZHJlc3MAZAFpARZzdGFrZUFuZFNldFN0YWtpbmdOb2RlAQtub2RlQWRkcmVzcwQLdXNlckFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyCQDOCAIJAQ9nZXRTdGFrZUFjdGlvbnMCBQFpBQt1c2VyQWRkcmVzcwkBGGdldFNldFN0YWtpbmdOb2RlQWN0aW9ucwMFC3VzZXJBZGRyZXNzBQtub2RlQWRkcmVzcwBkAWkBEnN0YWtlRm9yU3dhcEhFTFBFUgILdXNlckFkZHJlc3MLbm9kZUFkZHJlc3MEBWNoZWNrCQDMCAIDCQAAAgkApQgBCAUBaQxvcmlnaW5DYWxsZXIFC3VzZXJBZGRyZXNzBgkBCHRocm93RXJyAQItaS5vcmlnaW5DYWxsZXIgc2hvdWxkIGJlIGVxdWFsIHRvIHVzZXJBZGRyZXNzBQNuaWwDCQAAAgUFY2hlY2sFBWNoZWNrBBVzZXRTdGFraW5nTm9kZUFjdGlvbnMDCQAAAgULbm9kZUFkZHJlc3MCAAUDbmlsCQEYZ2V0U2V0U3Rha2luZ05vZGVBY3Rpb25zAwULdXNlckFkZHJlc3MFC25vZGVBZGRyZXNzAGQJAM4IAgkBD2dldFN0YWtlQWN0aW9ucwIFAWkFC3VzZXJBZGRyZXNzBRVzZXRTdGFraW5nTm9kZUFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHYWlyZHJvcAILYWRkcmVzc0xpc3QKYW1vdW50TGlzdAoBA3N1bQIFYWNjdW0EbmV4dAMJAGYCAAAFBG5leHQJAQh0aHJvd0VycgECI25lZ2F0aXZlIGFtb3VudCB2YWx1ZSBpbiBhbW91bnRMaXN0CQBkAgUFYWNjdW0FBG5leHQEDWFtb3VudExpc3RTdW0KAAIkbAUKYW1vdW50TGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDc3VtAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA5MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgQFY2hlY2sJAMwIAgMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEGCQEIdGhyb3dFcnIBAhhzaG91bGQgaW5jbHVkZSAxIHBheW1lbnQJAMwIAgMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFDGFzc2V0SWRCeXRlcwYJAQh0aHJvd0VycgEJAKwCAgIVcGF5bWVudCBzaG91bGQgYmUgaW4gBQ1hc3NldElkU3RyaW5nCQDMCAIDCQBmAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAAYCJ3BheW1lbnQgYW1vdW50IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMAkAzAgCAwkAAAIJAJADAQULYWRkcmVzc0xpc3QJAJADAQUKYW1vdW50TGlzdAYJAQh0aHJvd0VycgECLWFkZHJlc3NMaXN0IHNob3VsZCBiZSBzYW1lIHNpemUgYXMgYW1vdW50TGlzdAkAzAgCAwkAZwIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQ1hbW91bnRMaXN0U3VtBgkBCHRocm93RXJyAQItcGF5bWVudCBhbW91bnQgaXMgbGVzcyB0aGFuIHN1bSBvZiBhbW91bnRMaXN0BQNuaWwDCQAAAgUFY2hlY2sFBWNoZWNrCgEWZ2V0QWlyZHJvcFN0YXRlQ2hhbmdlcwIFYWNjdW0LYXNzZXRBbW91bnQEDSR0MDE1NDI4MTU0NzkFBWFjY3VtBAZyZXN1bHQIBQ0kdDAxNTQyODE1NDc5Al8xBAVpbmRleAgFDSR0MDE1NDI4MTU0NzkCXzIEB3RvdGFsTHAIBQ0kdDAxNTQyODE1NDc5Al8zBA1wcm9jZXNzZWRMaXN0CAUNJHQwMTU0MjgxNTQ3OQJfNAQNYWRkcmVzc1N0cmluZwkAkQMCBQthZGRyZXNzTGlzdAUFaW5kZXgEB2FkZHJlc3MEByRtYXRjaDAJAKYIAQUNYWRkcmVzc1N0cmluZwMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBANhZHIFByRtYXRjaDAFA2FkcgkBCHRocm93RXJyAQIeaW52YWxpZCBhZGRyZXNzIGluIGFkZHJlc3NMaXN0BAJjaAkAzAgCAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUNcHJvY2Vzc2VkTGlzdAUHYWRkcmVzcwYJAQh0aHJvd0VycgECIGR1cGxpY2F0ZSBhZGRyZXNzIGlzIGFkZHJlc3NMaXN0BQNuaWwDCQAAAgUCY2gFAmNoBA1hZGRlZExwQW1vdW50CQEPY2FsY0xwRnJvbUFzc2V0AQULYXNzZXRBbW91bnQED3VzZXJMb2NrZWRMcEtleQkBFWtleVVzZXJMb2NrZWRMcEFtb3VudAEFDWFkZHJlc3NTdHJpbmcEC29sZExwQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFD3VzZXJMb2NrZWRMcEtleQAACQCWCgQJAM0IAgUGcmVzdWx0CQEMSW50ZWdlckVudHJ5AgUPdXNlckxvY2tlZExwS2V5CQBkAgULb2xkTHBBbW91bnQFDWFkZGVkTHBBbW91bnQJAGQCBQVpbmRleAABCQBkAgUHdG90YWxMcAUNYWRkZWRMcEFtb3VudAkAzQgCBQ1wcm9jZXNzZWRMaXN0BQdhZGRyZXNzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDAxNjI0MzE2MzYwCgACJGwFCmFtb3VudExpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQFA25pbAAAAAAFA25pbAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEWZ2V0QWlyZHJvcFN0YXRlQ2hhbmdlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgOTAJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoEDmFpcmRyb3BFbnRyaWVzCAUNJHQwMTYyNDMxNjM2MAJfMQQCX2EIBQ0kdDAxNjI0MzE2MzYwAl8yBBhhZGRlZFRvdGFsTG9ja2VkTHBBbW91bnQIBQ0kdDAxNjI0MzE2MzYwAl8zBAJfYggFDSR0MDE2MjQzMTYzNjACXzQEDW5ld1RvdGFsQXNzZXQJAQ9jYWxjQXNzZXRGcm9tTHABCQBkAgUNdG90YWxMcEFtb3VudAUYYWRkZWRUb3RhbExvY2tlZExwQW1vdW50CQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFFmtleVRvdGFsTG9ja2VkTHBBbW91bnQJAGQCBRN0b3RhbExvY2tlZExwQW1vdW50BRhhZGRlZFRvdGFsTG9ja2VkTHBBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtleVRvdGFsTHBBbW91bnQJAGQCBQ10b3RhbExwQW1vdW50BRhhZGRlZFRvdGFsTG9ja2VkTHBBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tleVRvdGFsQXNzZXRBbW91bnQFDW5ld1RvdGFsQXNzZXQJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtleVN0YXJ0QmxvY2sFBmhlaWdodAUDbmlsBQ5haXJkcm9wRW50cmllcwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARVnZXRVc2VyQXNzZXRzUkVBRE9OTFkBC3VzZXJBZGRyZXNzBAx1c2VyTHBBbW91bnQJAQ9nZXRVc2VyTHBBbW91bnQBBQt1c2VyQWRkcmVzcwQSdXNlckxvY2tlZExwQW1vdW50CQEVZ2V0VXNlckxvY2tlZExwQW1vdW50AQULdXNlckFkZHJlc3MEFXVzZXJMb2NrZWRBc3NldEFtb3VudAkBD2NhbGNBc3NldEZyb21McAEFEnVzZXJMb2NrZWRMcEFtb3VudAQcdXNlckF2YWlsYWJsZUFzc2V0VG9XaXRoZHJhdwkBIGdldFVzZXJBdmFpbGFibGVBc3NldHNUb1dpdGhkcmF3AQULdXNlckFkZHJlc3MEFXVzZXJUb3RhbFN0YWtlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEXa2V5VXNlclRvdGFsQXNzZXRTdGFrZWQBBQt1c2VyQWRkcmVzcwAABBd1c2VyVG90YWxBc3NldFdpdGhkcmF3bgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEaa2V5VXNlclRvdGFsQXNzZXRXaXRoZHJhd24BBQt1c2VyQWRkcmVzcwAABA0kdDAxNzcxMDE3ODAyCQEXZ2V0VXNlclN0YWtpbmdOb2Rlc0RhdGEBBQt1c2VyQWRkcmVzcwQUdXNlclN0YWtpbmdOb2Rlc0xpc3QIBQ0kdDAxNzcxMDE3ODAyAl8xBBl1c2VyU3Rha2luZ05vZGVTaGFyZXNMaXN0CAUNJHQwMTc3MTAxNzgwMgJfMgkAlAoCBQNuaWwJAJwKCgUMdXNlckxwQW1vdW50BRx1c2VyQXZhaWxhYmxlQXNzZXRUb1dpdGhkcmF3CQEPZ2V0Q3VycmVudFByaWNlAAUVdXNlclRvdGFsU3Rha2VkQW1vdW50BRd1c2VyVG90YWxBc3NldFdpdGhkcmF3bgUSdXNlckxvY2tlZExwQW1vdW50BRV1c2VyTG9ja2VkQXNzZXRBbW91bnQFFHVzZXJTdGFraW5nTm9kZXNMaXN0BRl1c2VyU3Rha2luZ05vZGVTaGFyZXNMaXN0CQESZ2V0UmVtYWluaW5nQmxvY2tzAAFpARZnZXRUb3RhbEFzc2V0c1JFQURPTkxZAAkAlAoCBQNuaWwJAJgKBgUNdG90YWxMcEFtb3VudAkBK2dldFRvdGFsQXNzZXRBbW91bnRXaXRoUHJvZml0T3JNYXhBdmFpbGFibGUACQEPZ2V0Q3VycmVudFByaWNlAAUTdG90YWxMb2NrZWRMcEFtb3VudAkBD2NhbGNBc3NldEZyb21McAEFE3RvdGFsTG9ja2VkTHBBbW91bnQJARJnZXRSZW1haW5pbmdCbG9ja3MAAWkBC3ZvdGVGb3JUeElkAQR0eElkBBNjYWxsZXJBZGRyZXNzU3RyaW5nCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMECWtleVByZWZpeAkBGGtleUFsbG93ZWRUeElkVm90ZVByZWZpeAEFBHR4SWQEBnJlc3VsdAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5QWxsb3dlZFR4SWQABQR0eElkBQNuaWwEEWFsbG93ZWRUeElkT3B0aW9uCQCdCAIFBHRoaXMJAQ5rZXlBbGxvd2VkVHhJZAAEA2VycgkAzAgCAwkAAAIJAMgBAQkA2QQBBQR0eElkBRFUWElEX0JZVEVTX0xFTkdUSAYJAQh0aHJvd0VycgEJAKwCAgUEdHhJZAISIGlzIG5vdCB2YWxpZCB0eElkCQDMCAIDAwkAAAIFEWFsbG93ZWRUeElkT3B0aW9uBQR1bml0BgkBAiE9AgkBBXZhbHVlAQURYWxsb3dlZFR4SWRPcHRpb24FBHR4SWQGCQEIdGhyb3dFcnIBCQCsAgIFBHR4SWQCEyBpcyBhbHJlYWR5IGFsbG93ZWQFA25pbAMJAAACBQNlcnIFA2VycgkBDHZvdGVJTlRFUk5BTAQFE2NhbGxlckFkZHJlc3NTdHJpbmcFCWtleVByZWZpeAUGUVVPUlVNBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABAhieUFkbWlucwkAAAIIBQJ0eAJpZAkA2QQBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlBbGxvd2VkVHhJZAACAAQHYnlPd25lcgMJAGcCCQCQAwEJAQ1nZXRBZG1pbnNMaXN0AAUGUVVPUlVNBwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQMFCGJ5QWRtaW5zBgUHYnlPd25lcgFre0I=", "height": 3066416, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: K6qhCjDGRdUw15DWpLt1CAdsCyZ9FuT3uGvnq6L7S8m Next: none Diff:
OldNewDifferences
3232
3333 let p = makeString(["%s", "totalLockedLpAmount"], b)
3434
35-func q (r) = makeString(["%s%s", "userLpAmount", r], b)
35+let q = makeString(["%s", "withdrawLockHeight"], b)
36+
37+func r (s) = makeString(["%s%s", "userLpAmount", s], b)
3638
3739
38-func s (r) = makeString(["%s%s", "userLockedLpAmount", r], b)
40+func t (s) = makeString(["%s%s", "userLockedLpAmount", s], b)
3941
4042
41-func t (r) = makeString(["%s%s", "userStakingNodes", r], b)
43+func u (s) = makeString(["%s%s", "userStakingNodes", s], b)
4244
4345
44-func u (r) = makeString(["%s%s", "userStakingNodesShares", r], b)
46+func v (s) = makeString(["%s%s", "userStakingNodesShares", s], b)
4547
4648
47-func v (r) = makeString(["%s%s", "totalAssetWithdrawn", r], b)
49+func w (s) = makeString(["%s%s", "totalAssetWithdrawn", s], b)
4850
4951
50-func w (r) = makeString(["%s%s", "totalAssetStaked", r], b)
52+func x (s) = makeString(["%s%s", "totalAssetStaked", s], b)
5153
5254
53-func x (y,r,z) = makeString(["%s%s%s", y, r, toBase58String(z)], b)
55+func y (z,s,A) = makeString(["%s%s%s", z, s, toBase58String(A)], b)
5456
5557
56-func A (B,C,D,E) = makeString(["%d%d%d%d", toString(B), toString(C), toString(D), toString(E)], b)
58+func B (C,D,E,F) = makeString(["%d%d%d%d", toString(C), toString(D), toString(E), toString(F)], b)
5759
5860
59-let E = valueOrElse(getInteger(this, n), 0)
61+let F = valueOrElse(getInteger(this, n), 0)
6062
61-let D = valueOrElse(getInteger(this, o), 0)
63+let E = valueOrElse(getInteger(this, o), 0)
6264
63-let F = valueOrElse(getInteger(this, p), 0)
65+let G = valueOrElse(getInteger(this, p), 0)
6466
65-let G = valueOrElse(getString(this, j), "WAVES")
67+let H = valueOrElse(getString(this, j), "WAVES")
6668
67-let H = if ((G == "WAVES"))
69+let I = if ((H == "WAVES"))
6870 then unit
69- else fromBase58String(G)
71+ else fromBase58String(H)
7072
71-let I = valueOrElse(getInteger(this, l), g)
73+let J = valueOrElse(getInteger(this, l), g)
7274
73-let J = valueOrElse(getInteger(this, k), 0)
75+let K = valueOrElse(getInteger(this, k), 0)
7476
75-let K = (J * I)
77+let L = (K * J)
7678
77-let L = 5
79+let M = valueOrElse(getInteger(this, q), 0)
7880
79-let M = 3
81+let N = 5
8082
81-let N = 32
83+let O = 3
8284
83-func O (z) = makeString(["%s%s%s", "allowTxId", z], b)
85+let P = 32
86+
87+func Q (A) = makeString(["%s%s%s", "allowTxId", A], b)
8488
8589
86-func P (Q,R) = makeString([Q, R], b)
90+func R (S,T) = makeString([S, T], b)
8791
8892
89-func S () = makeString(["%s", "adminAddressList"], b)
93+func U () = makeString(["%s", "adminAddressList"], b)
9094
9195
92-func T () = makeString(["%s", "txId"], b)
96+func V () = makeString(["%s", "txId"], b)
9397
9498
95-func U (Q,V) = {
96- let W = P(Q, V)
97- valueOrElse(getInteger(W), 0)
99+func W (S,X) = {
100+ let Y = R(S, X)
101+ valueOrElse(getInteger(Y), 0)
98102 }
99103
100104
101-func X () = {
102- let Y = getString(this, S())
103- if ($isInstanceOf(Y, "String"))
105+func Z () = {
106+ let aa = getString(this, U())
107+ if ($isInstanceOf(aa, "String"))
104108 then {
105- let Z = Y
106- split(Z, b)
109+ let ab = aa
110+ split(ab, b)
107111 }
108112 else nil
109113 }
110114
111115
112-func aa (ab) = containsElement(X(), ab)
116+func ac (ad) = containsElement(Z(), ad)
113117
114118
115-func ac (ad,R) = {
116- let ae = ad
117- let af = ae._1
118- let Q = ae._2
119- $Tuple2((af :+ P(Q, R)), Q)
119+func ae (af,T) = {
120+ let ag = af
121+ let ah = ag._1
122+ let S = ag._2
123+ $Tuple2((ah :+ R(S, T)), S)
120124 }
121125
122126
123-func ag (ah) = {
124- let ai = S()
125- let aj = {
126- let ak = X()
127- let al = size(ak)
128- let am = $Tuple2(nil, ah)
129- func an (ao,ap) = if ((ap >= al))
130- then ao
131- else ac(ao, ak[ap])
127+func ai (aj) = {
128+ let ak = U()
129+ let al = {
130+ let am = Z()
131+ let an = size(am)
132+ let ao = $Tuple2(nil, aj)
133+ func ap (aq,ar) = if ((ar >= an))
134+ then aq
135+ else ae(aq, am[ar])
132136
133- func aq (ao,ap) = if ((ap >= al))
134- then ao
137+ func as (aq,ar) = if ((ar >= an))
138+ then aq
135139 else throw("List size exceeds 5")
136140
137- aq(an(an(an(an(an(am, 0), 1), 2), 3), 4), 5)
141+ as(ap(ap(ap(ap(ap(ao, 0), 1), 2), 3), 4), 5)
138142 }
139- let af = aj._1
140- let Q = aj._2
141- af
143+ let ah = al._1
144+ let S = al._2
145+ ah
142146 }
143147
144148
145-func ar (af,W) = (af + valueOrElse(getInteger(W), 0))
149+func at (ah,Y) = (ah + valueOrElse(getInteger(Y), 0))
146150
147151
148-func as (Q) = {
149- let at = ag(Q)
150- let ak = at
151- let al = size(ak)
152- let am = 0
153- func an (ao,ap) = if ((ap >= al))
154- then ao
155- else ar(ao, ak[ap])
152+func au (S) = {
153+ let av = ai(S)
154+ let am = av
155+ let an = size(am)
156+ let ao = 0
157+ func ap (aq,ar) = if ((ar >= an))
158+ then aq
159+ else at(aq, am[ar])
156160
157- func aq (ao,ap) = if ((ap >= al))
158- then ao
161+ func as (aq,ar) = if ((ar >= an))
162+ then aq
159163 else throw("List size exceeds 5")
160164
161- aq(an(an(an(an(an(am, 0), 1), 2), 3), 4), 5)
165+ as(ap(ap(ap(ap(ap(ao, 0), 1), 2), 3), 4), 5)
162166 }
163167
164168
165-func au (af,av) = (af :+ DeleteEntry(av))
169+func aw (ah,ax) = (ah :+ DeleteEntry(ax))
166170
167171
168-func aw (Q) = {
169- let at = ag(Q)
170- let ak = at
171- let al = size(ak)
172- let am = nil
173- func an (ao,ap) = if ((ap >= al))
174- then ao
175- else au(ao, ak[ap])
172+func ay (S) = {
173+ let av = ai(S)
174+ let am = av
175+ let an = size(am)
176+ let ao = nil
177+ func ap (aq,ar) = if ((ar >= an))
178+ then aq
179+ else aw(aq, am[ar])
176180
177- func aq (ao,ap) = if ((ap >= al))
178- then ao
181+ func as (aq,ar) = if ((ar >= an))
182+ then aq
179183 else throw("List size exceeds 5")
180184
181- aq(an(an(an(an(an(am, 0), 1), 2), 3), 4), 5)
185+ as(ap(ap(ap(ap(ap(ao, 0), 1), 2), 3), 4), 5)
182186 }
183187
184188
185-func ax (ay,ah,az,aA) = {
186- let W = P(ah, ay)
187- let aB = U(ah, ay)
188- let aC = if (!(aa(ay)))
189- then h((("Address: " + ay) + " not in Admin list"))
190- else if ((aB == 1))
191- then h((W + " you already voted"))
189+func az (aA,aj,aB,aC) = {
190+ let Y = R(aj, aA)
191+ let aD = W(aj, aA)
192+ let aE = if (!(ac(aA)))
193+ then h((("Address: " + aA) + " not in Admin list"))
194+ else if ((aD == 1))
195+ then h((Y + " you already voted"))
192196 else unit
193- if ((aC == aC))
197+ if ((aE == aE))
194198 then {
195- let at = as(ah)
196- if (((at + 1) >= az))
199+ let av = au(aj)
200+ if (((av + 1) >= aB))
197201 then {
198- let aD = aw(ah)
199- (aD ++ aA)
202+ let aF = ay(aj)
203+ (aF ++ aC)
200204 }
201- else [IntegerEntry(W, 1)]
205+ else [IntegerEntry(Y, 1)]
202206 }
203207 else throw("Strict value is not equal to itself.")
204208 }
205209
206210
207-func aE (aF,aG) = (aF :+ parseIntValue(aG))
211+func aG (aH,aI) = (aH :+ parseIntValue(aI))
208212
209213
210-func aH (aI) = {
211- let aJ = valueOrElse(getInteger(this, m), height)
212- let aK = fraction(aJ, 1, I)
213- let aL = ((aI / I) - aK)
214- max([0, (K * aL)])
214+func aJ (aK) = {
215+ let aL = valueOrElse(getInteger(this, m), height)
216+ let aM = fraction(aL, 1, J)
217+ let aN = ((aK / J) - aM)
218+ max([0, (L * aN)])
215219 }
216220
217221
218-func aM () = aH(height)
222+func aO () = aJ(height)
219223
220224
221-func aN () = {
222- let Y = H
223- if ($isInstanceOf(Y, "Unit"))
225+func aP () = {
226+ let aa = I
227+ if ($isInstanceOf(aa, "Unit"))
224228 then {
225- let aO = Y
229+ let aQ = aa
226230 wavesBalance(this).available
227231 }
228- else if ($isInstanceOf(Y, "ByteVector"))
232+ else if ($isInstanceOf(aa, "ByteVector"))
229233 then {
230- let aP = Y
231- assetBalance(this, aP)
234+ let aR = aa
235+ assetBalance(this, aR)
232236 }
233237 else throw("Match error")
234238 }
235239
236240
237-func aQ () = {
238- let aR = (D + aM())
239- let aS = min([aR, aN()])
240- if ((E == 0))
241+func aS () = {
242+ let aT = (E + aO())
243+ let aU = min([aT, aP()])
244+ if ((F == 0))
241245 then 0
242- else aS
246+ else aU
243247 }
244248
245249
246-func aT () = if ((E != 0))
247- then fraction(toBigInt(aQ()), e, toBigInt(E))
250+func aV () = if ((F != 0))
251+ then fraction(toBigInt(aS()), e, toBigInt(F))
248252 else e
249253
250254
251-func aU () = if ((J == 0))
255+func aW () = if ((K == 0))
252256 then 0
253- else fraction((aN() - aQ()), 1, J)
257+ else fraction((aP() - aS()), 1, K)
254258
255259
256-func aV (r) = {
257- let aW = valueOrElse(getString(this, t(r)), "")
258- let aX = valueOrElse(getString(this, u(r)), "")
259- let aY = if ((aW == ""))
260+func aX (s) = {
261+ let aY = valueOrElse(getString(this, u(s)), "")
262+ let aZ = valueOrElse(getString(this, v(s)), "")
263+ let ba = if ((aY == ""))
260264 then nil
261- else split(aW, b)
262- let aZ = if ((aX == ""))
265+ else split(aY, b)
266+ let bb = if ((aZ == ""))
263267 then nil
264- else split(aX, b)
265- let ba = {
266- let ak = aZ
267- let al = size(ak)
268- let am = nil
269- func an (ao,ap) = if ((ap >= al))
270- then ao
271- else aE(ao, ak[ap])
268+ else split(aZ, b)
269+ let bc = {
270+ let am = bb
271+ let an = size(am)
272+ let ao = nil
273+ func ap (aq,ar) = if ((ar >= an))
274+ then aq
275+ else aG(aq, am[ar])
272276
273- func aq (ao,ap) = if ((ap >= al))
274- then ao
277+ func as (aq,ar) = if ((ar >= an))
278+ then aq
275279 else throw("List size exceeds 20")
276280
277- aq(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(am, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
281+ as(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ao, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
278282 }
279- $Tuple2(aY, ba)
283+ $Tuple2(ba, bc)
280284 }
281285
282286
283-func bb (bc) = max([0, toInt(fraction(toBigInt(bc), aT(), e))])
287+func bd (be) = max([0, toInt(fraction(toBigInt(be), aV(), e))])
284288
285289
286-func bd (be) = max([0, toInt(fraction(toBigInt(be), e, aT()))])
290+func bf (bg) = max([0, toInt(fraction(toBigInt(bg), e, aV()))])
287291
288292
289-func bf (r) = valueOrElse(getInteger(this, q(r)), 0)
293+func bh (s) = valueOrElse(getInteger(this, r(s)), 0)
290294
291295
292-func bg (r) = valueOrElse(getInteger(this, s(r)), 0)
296+func bi (s) = valueOrElse(getInteger(this, t(s)), 0)
293297
294298
295-func bh (r) = {
296- let bi = bf(r)
297- bb(bi)
299+func bj (s) = {
300+ let bk = bh(s)
301+ bd(bk)
298302 }
299303
300304
301-func bj (r) = [DeleteEntry(t(r)), DeleteEntry(u(r))]
305+func bl (s) = [DeleteEntry(u(s)), DeleteEntry(v(s))]
302306
303307
304-func bk (bl,r) = {
305- let bm = [if ((size(bl.payments) == 1))
308+func bm (bn,s) = {
309+ let bo = [if ((size(bn.payments) == 1))
306310 then true
307- else h("should include 1 payment"), if ((bl.payments[0].assetId == H))
311+ else h("should include 1 payment"), if ((bn.payments[0].assetId == I))
308312 then true
309- else h(("payment should be in " + G)), if ((bl.payments[0].amount > 0))
313+ else h(("payment should be in " + H)), if ((bn.payments[0].amount > 0))
310314 then true
311- else "payment amount should be greater than 0", if ((size(fromBase58String(r)) == f))
315+ else "payment amount should be greater than 0", if ((size(fromBase58String(s)) == f))
312316 then true
313317 else h("user address is not valid")]
314- if ((bm == bm))
318+ if ((bo == bo))
315319 then {
316- let bn = bl.payments[0].amount
317- let bo = bd(bn)
318- let bi = bf(r)
319- let bp = valueOrElse(getInteger(this, w(r)), 0)
320- let bq = (E + bo)
321- let br = bb(bq)
322- let bs = (bi + bo)
323- let bt = (bp + bn)
324-[StringEntry(x("stake", r, bl.transactionId), A(aM(), aT(), E, D)), IntegerEntry(n, bq), IntegerEntry(o, br), IntegerEntry(q(r), bs), IntegerEntry(w(r), bt), IntegerEntry(m, height)]
320+ let bp = bn.payments[0].amount
321+ let bq = bf(bp)
322+ let bk = bh(s)
323+ let br = valueOrElse(getInteger(this, x(s)), 0)
324+ let bs = (F + bq)
325+ let bt = bd(bs)
326+ let bu = (bk + bq)
327+ let bv = (br + bp)
328+[StringEntry(y("stake", s, bn.transactionId), B(aO(), aV(), F, E)), IntegerEntry(n, bs), IntegerEntry(o, bt), IntegerEntry(r(s), bu), IntegerEntry(x(s), bv), IntegerEntry(m, height)]
325329 }
326330 else throw("Strict value is not equal to itself.")
327331 }
328332
329333
330-func bu (bl,bv) = {
331- let r = toString(bl.caller)
332- let bi = bf(r)
333- let bw = [if ((bv > 0))
334+func bw (bn,bx) = {
335+ let s = toString(bn.caller)
336+ let bk = bh(s)
337+ let by = [if ((bx > 0))
334338 then true
335- else h("LP amount should be more than 0"), if ((bi >= bv))
339+ else h("LP amount should be more than 0"), if ((bk >= bx))
336340 then true
337- else h((("cannot withdraw more than available LP (" + toString(bi)) + ")"))]
338- if ((bw == bw))
341+ else h((("cannot withdraw more than available LP (" + toString(bk)) + ")"))]
342+ if ((by == by))
339343 then {
340- let bs = (bi - bv)
341- let bx = bb(bv)
342- let bq = (E - bv)
343- let br = bb(bq)
344- let by = valueOrElse(getInteger(this, v(r)), 0)
345- let bz = (by + bx)
346- let bA = if ((bs == 0))
347- then bj(r)
344+ let bu = (bk - bx)
345+ let bz = bd(bx)
346+ let bs = (F - bx)
347+ let bt = bd(bs)
348+ let bA = valueOrElse(getInteger(this, w(s)), 0)
349+ let bB = (bA + bz)
350+ let bC = if ((bu == 0))
351+ then bl(s)
348352 else nil
349- ([StringEntry(x("withdraw", r, bl.transactionId), A(aM(), aT(), E, D)), IntegerEntry(n, bq), IntegerEntry(o, br), IntegerEntry(q(r), bs), IntegerEntry(v(r), bz), IntegerEntry(m, height), ScriptTransfer(bl.caller, bx, H)] ++ bA)
353+ ([StringEntry(y("withdraw", s, bn.transactionId), B(aO(), aV(), F, E)), IntegerEntry(n, bs), IntegerEntry(o, bt), IntegerEntry(r(s), bu), IntegerEntry(w(s), bB), IntegerEntry(m, height), ScriptTransfer(bn.caller, bz, I)] ++ bC)
350354 }
351355 else throw("Strict value is not equal to itself.")
352356 }
353357
354358
355-func bB (r,bC,bD) = {
356- let bw = [if ((size(fromBase58String(r)) == f))
359+func bD (s,bE,bF) = {
360+ let by = [if ((size(fromBase58String(s)) == f))
357361 then true
358- else h("user address is not valid"), if ((size(fromBase58String(bC)) == f))
362+ else h("user address is not valid"), if ((size(fromBase58String(bE)) == f))
359363 then true
360364 else h("node address is not valid")]
361- if ((bw == bw))
362- then [StringEntry(t(r), bC), StringEntry(u(r), toString(bD))]
365+ if ((by == by))
366+ then [StringEntry(u(s), bE), StringEntry(v(s), toString(bF))]
363367 else throw("Strict value is not equal to itself.")
364368 }
365369
366370
367-@Callable(bl)
368-func setEmissionPerBlock (J) = {
369- let bw = [if ((bl.caller == this))
371+@Callable(bn)
372+func setEmissionPerBlock (K) = {
373+ let by = [if ((bn.caller == this))
370374 then true
371375 else h("permission denied")]
372- if ((bw == bw))
373- then [IntegerEntry(o, aQ()), IntegerEntry(m, height), IntegerEntry(k, max([0, J]))]
376+ if ((by == by))
377+ then [IntegerEntry(o, aS()), IntegerEntry(m, height), IntegerEntry(k, max([0, K]))]
374378 else throw("Strict value is not equal to itself.")
375379 }
376380
377381
378382
379-@Callable(bl)
380-func setEmissionPeriodInBlocks (bE) = {
381- let bw = [if ((bE > 0))
383+@Callable(bn)
384+func setEmissionPeriodInBlocks (bG) = {
385+ let by = [if ((bG > 0))
382386 then true
383- else h("emission period should be greater than 0"), if ((bl.caller == this))
387+ else h("emission period should be greater than 0"), if ((bn.caller == this))
384388 then true
385389 else h("permission denied")]
386- if ((bw == bw))
387- then [IntegerEntry(o, aQ()), IntegerEntry(m, height), IntegerEntry(l, bE)]
390+ if ((by == by))
391+ then [IntegerEntry(o, aS()), IntegerEntry(m, height), IntegerEntry(l, bG)]
388392 else throw("Strict value is not equal to itself.")
389393 }
390394
391395
392396
393-@Callable(bl)
397+@Callable(bn)
394398 func stake () = {
395- let r = toString(bl.caller)
396- bk(bl, r)
399+ let s = toString(bn.caller)
400+ bm(bn, s)
397401 }
398402
399403
400404
401-@Callable(bl)
402-func stakeFor (r) = bk(bl, r)
405+@Callable(bn)
406+func stakeFor (s) = bm(bn, s)
403407
404408
405409
406-@Callable(bl)
407-func withdraw (bx) = {
408- let r = toString(bl.caller)
409- let bi = bf(r)
410- let bF = bd(bx)
411- let bG = bh(r)
412- let bH = toInt(fraction(aT(), toBigInt(1), e, CEILING))
413- let bw = [if ((bx > 0))
410+@Callable(bn)
411+func withdraw (bz) = {
412+ let s = toString(bn.caller)
413+ let bk = bh(s)
414+ let bH = bf(bz)
415+ let bI = bj(s)
416+ let bJ = toInt(fraction(aV(), toBigInt(1), e, CEILING))
417+ let by = [if (if ((M == 0))
414418 then true
415- else h("withdraw amount should be more than 0"), if ((bG >= bx))
419+ else (M > height))
416420 then true
417- else h((("cannot withdraw more than available (" + toString(bG)) + ")")), if ((bx >= bH))
421+ else h(makeString(["withdraw is locked at height:", toString(M)], " ")), if ((bz > 0))
418422 then true
419- else h((("withdraw amount is too small. Min: (" + toString(bH)) + ")"))]
420- if ((bw == bw))
421- then bu(bl, min([bi, (bF + 1)]))
423+ else h("withdraw amount should be more than 0"), if ((bI >= bz))
424+ then true
425+ else h((("cannot withdraw more than available (" + toString(bI)) + ")")), if ((bz >= bJ))
426+ then true
427+ else h((("withdraw amount is too small. Min: (" + toString(bJ)) + ")"))]
428+ if ((by == by))
429+ then bw(bn, min([bk, (bH + 1)]))
422430 else throw("Strict value is not equal to itself.")
423431 }
424432
425433
426434
427-@Callable(bl)
428-func setStakingNode (bC) = {
429- let r = toString(bl.caller)
430- bB(r, bC, 100)
435+@Callable(bn)
436+func setStakingNode (bE) = {
437+ let s = toString(bn.caller)
438+ bD(s, bE, 100)
431439 }
432440
433441
434442
435-@Callable(bl)
436-func stakeAndSetStakingNode (bC) = {
437- let r = toString(bl.caller)
438- (bk(bl, r) ++ bB(r, bC, 100))
443+@Callable(bn)
444+func stakeAndSetStakingNode (bE) = {
445+ let s = toString(bn.caller)
446+ (bm(bn, s) ++ bD(s, bE, 100))
439447 }
440448
441449
442450
443-@Callable(bl)
444-func stakeForSwapHELPER (r,bC) = {
445- let bw = [if ((toString(bl.originCaller) == r))
451+@Callable(bn)
452+func stakeForSwapHELPER (s,bE) = {
453+ let by = [if ((toString(bn.originCaller) == s))
446454 then true
447455 else h("i.originCaller should be equal to userAddress")]
448- if ((bw == bw))
456+ if ((by == by))
449457 then {
450- let bI = if ((bC == ""))
458+ let bK = if ((bE == ""))
451459 then nil
452- else bB(r, bC, 100)
453- (bk(bl, r) ++ bI)
460+ else bD(s, bE, 100)
461+ (bm(bn, s) ++ bK)
454462 }
455463 else throw("Strict value is not equal to itself.")
456464 }
457465
458466
459467
460-@Callable(bl)
461-func airdrop (bJ,bK) = {
462- func bL (bM,bN) = if ((0 > bN))
468+@Callable(bn)
469+func airdrop (bL,bM) = {
470+ func bN (bO,bP) = if ((0 > bP))
463471 then h("negative amount value in amountList")
464- else (bM + bN)
472+ else (bO + bP)
465473
466- let bO = {
467- let ak = bK
468- let al = size(ak)
469- let am = 0
470- func an (ao,ap) = if ((ap >= al))
471- then ao
472- else bL(ao, ak[ap])
474+ let bQ = {
475+ let am = bM
476+ let an = size(am)
477+ let ao = 0
478+ func ap (aq,ar) = if ((ar >= an))
479+ then aq
480+ else bN(aq, am[ar])
473481
474- func aq (ao,ap) = if ((ap >= al))
475- then ao
482+ func as (aq,ar) = if ((ar >= an))
483+ then aq
476484 else throw("List size exceeds 90")
477485
478- aq(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(am, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90)
486+ as(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ao, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90)
479487 }
480- let bw = [if ((size(bl.payments) == 1))
488+ let by = [if ((size(bn.payments) == 1))
481489 then true
482- else h("should include 1 payment"), if ((bl.payments[0].assetId == H))
490+ else h("should include 1 payment"), if ((bn.payments[0].assetId == I))
483491 then true
484- else h(("payment should be in " + G)), if ((bl.payments[0].amount > 0))
492+ else h(("payment should be in " + H)), if ((bn.payments[0].amount > 0))
485493 then true
486- else "payment amount should be greater than 0", if ((size(bJ) == size(bK)))
494+ else "payment amount should be greater than 0", if ((size(bL) == size(bM)))
487495 then true
488- else h("addressList should be same size as amountList"), if ((bl.payments[0].amount >= bO))
496+ else h("addressList should be same size as amountList"), if ((bn.payments[0].amount >= bQ))
489497 then true
490498 else h("payment amount is less than sum of amountList")]
491- if ((bw == bw))
499+ if ((by == by))
492500 then {
493- func bP (bM,be) = {
494- let bQ = bM
495- let af = bQ._1
496- let bR = bQ._2
497- let bS = bQ._3
498- let bT = bQ._4
499- let bU = bJ[bR]
500- let ab = {
501- let Y = addressFromString(bU)
502- if ($isInstanceOf(Y, "Address"))
501+ func bR (bO,bg) = {
502+ let bS = bO
503+ let ah = bS._1
504+ let bT = bS._2
505+ let bU = bS._3
506+ let bV = bS._4
507+ let bW = bL[bT]
508+ let ad = {
509+ let aa = addressFromString(bW)
510+ if ($isInstanceOf(aa, "Address"))
503511 then {
504- let bV = Y
505- bV
512+ let bX = aa
513+ bX
506514 }
507515 else h("invalid address in addressList")
508516 }
509- let bW = [if (!(containsElement(bT, ab)))
517+ let bY = [if (!(containsElement(bV, ad)))
510518 then true
511519 else h("duplicate address is addressList")]
512- if ((bW == bW))
520+ if ((bY == bY))
513521 then {
514- let bX = bd(be)
515- let bY = s(bU)
516- let bZ = valueOrElse(getInteger(this, bY), 0)
517- $Tuple4((af :+ IntegerEntry(bY, (bZ + bX))), (bR + 1), (bS + bX), (bT :+ ab))
522+ let bZ = bf(bg)
523+ let ca = t(bW)
524+ let cb = valueOrElse(getInteger(this, ca), 0)
525+ $Tuple4((ah :+ IntegerEntry(ca, (cb + bZ))), (bT + 1), (bU + bZ), (bV :+ ad))
518526 }
519527 else throw("Strict value is not equal to itself.")
520528 }
521529
522- let ca = {
523- let ak = bK
524- let al = size(ak)
525- let am = $Tuple4(nil, 0, 0, nil)
526- func cb (ao,ap) = if ((ap >= al))
527- then ao
528- else bP(ao, ak[ap])
530+ let cc = {
531+ let am = bM
532+ let an = size(am)
533+ let ao = $Tuple4(nil, 0, 0, nil)
534+ func cd (aq,ar) = if ((ar >= an))
535+ then aq
536+ else bR(aq, am[ar])
529537
530- func cc (ao,ap) = if ((ap >= al))
531- then ao
538+ func ce (aq,ar) = if ((ar >= an))
539+ then aq
532540 else throw("List size exceeds 90")
533541
534- cc(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(am, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90)
542+ ce(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(ao, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90)
535543 }
536- let cd = ca._1
537- let ce = ca._2
538- let cf = ca._3
539- let cg = ca._4
540- let ch = bb((E + cf))
541- ([IntegerEntry(p, (F + cf)), IntegerEntry(n, (E + cf)), IntegerEntry(o, ch), IntegerEntry(m, height)] ++ cd)
544+ let cf = cc._1
545+ let cg = cc._2
546+ let ch = cc._3
547+ let ci = cc._4
548+ let cj = bd((F + ch))
549+ ([IntegerEntry(p, (G + ch)), IntegerEntry(n, (F + ch)), IntegerEntry(o, cj), IntegerEntry(m, height)] ++ cf)
542550 }
543551 else throw("Strict value is not equal to itself.")
544552 }
545553
546554
547555
548-@Callable(bl)
549-func getUserAssetsREADONLY (r) = {
550- let bi = bf(r)
551- let ci = bg(r)
552- let cj = bb(ci)
553- let bG = bh(r)
554- let bp = valueOrElse(getInteger(this, w(r)), 0)
555- let by = valueOrElse(getInteger(this, v(r)), 0)
556- let ck = aV(r)
557- let cl = ck._1
558- let cm = ck._2
559- $Tuple2(nil, $Tuple10(bi, bG, aT(), bp, by, ci, cj, cl, cm, aU()))
556+@Callable(bn)
557+func getUserAssetsREADONLY (s) = {
558+ let bk = bh(s)
559+ let ck = bi(s)
560+ let cl = bd(ck)
561+ let bI = bj(s)
562+ let br = valueOrElse(getInteger(this, x(s)), 0)
563+ let bA = valueOrElse(getInteger(this, w(s)), 0)
564+ let cm = aX(s)
565+ let cn = cm._1
566+ let co = cm._2
567+ $Tuple2(nil, $Tuple10(bk, bI, aV(), br, bA, ck, cl, cn, co, aW()))
560568 }
561569
562570
563571
564-@Callable(bl)
565-func getTotalAssetsREADONLY () = $Tuple2(nil, $Tuple6(E, aQ(), aT(), F, bb(F), aU()))
572+@Callable(bn)
573+func getTotalAssetsREADONLY () = $Tuple2(nil, $Tuple6(F, aS(), aV(), G, bd(G), aW()))
566574
567575
568576
569-@Callable(bl)
570-func voteForTxId (z) = {
571- let ay = toBase58String(bl.caller.bytes)
572- let ah = O(z)
573- let af = [StringEntry(T(), z)]
574- let cn = getString(this, T())
575- let aC = [if ((size(fromBase58String(z)) == N))
577+@Callable(bn)
578+func voteForTxId (A) = {
579+ let aA = toBase58String(bn.caller.bytes)
580+ let aj = Q(A)
581+ let ah = [StringEntry(V(), A)]
582+ let cp = getString(this, V())
583+ let aE = [if ((size(fromBase58String(A)) == P))
576584 then true
577- else h((z + " is not valid txId")), if (if ((cn == unit))
585+ else h((A + " is not valid txId")), if (if ((cp == unit))
578586 then true
579- else (value(cn) != z))
587+ else (value(cp) != A))
580588 then true
581- else h((z + " is already allowed"))]
582- if ((aC == aC))
583- then ax(ay, ah, M, af)
589+ else h((A + " is already allowed"))]
590+ if ((aE == aE))
591+ then az(aA, aj, O, ah)
584592 else throw("Strict value is not equal to itself.")
585593 }
586594
587595
588-@Verifier(co)
589-func cp () = {
590- let cq = (co.id == fromBase58String(valueOrElse(getString(this, T()), "")))
591- let cr = if ((size(X()) >= M))
596+@Verifier(cq)
597+func cr () = {
598+ let cs = (cq.id == fromBase58String(valueOrElse(getString(this, V()), "")))
599+ let ct = if ((size(Z()) >= O))
592600 then false
593- else sigVerify(co.bodyBytes, co.proofs[0], co.senderPublicKey)
594- if (cq)
601+ else sigVerify(cq.bodyBytes, cq.proofs[0], cq.senderPublicKey)
602+ if (cs)
595603 then true
596- else cr
604+ else ct
597605 }
598606
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "l2mp_staking.ride"
55
66 let b = "__"
77
88 let c = 100000000
99
1010 let d = 1000000000000000000
1111
1212 let e = toBigInt(d)
1313
1414 let f = 26
1515
1616 let g = 1440
1717
1818 func h (i) = throw(((a + ": ") + i))
1919
2020
2121 let j = makeString(["%s", "assetId"], b)
2222
2323 let k = makeString(["%s", "emissionPerBlock"], b)
2424
2525 let l = makeString(["%s", "emissionPeriodInBlocks"], b)
2626
2727 let m = makeString(["%s", "startBlock"], b)
2828
2929 let n = makeString(["%s", "totalLpAmount"], b)
3030
3131 let o = makeString(["%s", "totalAssetAmount"], b)
3232
3333 let p = makeString(["%s", "totalLockedLpAmount"], b)
3434
35-func q (r) = makeString(["%s%s", "userLpAmount", r], b)
35+let q = makeString(["%s", "withdrawLockHeight"], b)
36+
37+func r (s) = makeString(["%s%s", "userLpAmount", s], b)
3638
3739
38-func s (r) = makeString(["%s%s", "userLockedLpAmount", r], b)
40+func t (s) = makeString(["%s%s", "userLockedLpAmount", s], b)
3941
4042
41-func t (r) = makeString(["%s%s", "userStakingNodes", r], b)
43+func u (s) = makeString(["%s%s", "userStakingNodes", s], b)
4244
4345
44-func u (r) = makeString(["%s%s", "userStakingNodesShares", r], b)
46+func v (s) = makeString(["%s%s", "userStakingNodesShares", s], b)
4547
4648
47-func v (r) = makeString(["%s%s", "totalAssetWithdrawn", r], b)
49+func w (s) = makeString(["%s%s", "totalAssetWithdrawn", s], b)
4850
4951
50-func w (r) = makeString(["%s%s", "totalAssetStaked", r], b)
52+func x (s) = makeString(["%s%s", "totalAssetStaked", s], b)
5153
5254
53-func x (y,r,z) = makeString(["%s%s%s", y, r, toBase58String(z)], b)
55+func y (z,s,A) = makeString(["%s%s%s", z, s, toBase58String(A)], b)
5456
5557
56-func A (B,C,D,E) = makeString(["%d%d%d%d", toString(B), toString(C), toString(D), toString(E)], b)
58+func B (C,D,E,F) = makeString(["%d%d%d%d", toString(C), toString(D), toString(E), toString(F)], b)
5759
5860
59-let E = valueOrElse(getInteger(this, n), 0)
61+let F = valueOrElse(getInteger(this, n), 0)
6062
61-let D = valueOrElse(getInteger(this, o), 0)
63+let E = valueOrElse(getInteger(this, o), 0)
6264
63-let F = valueOrElse(getInteger(this, p), 0)
65+let G = valueOrElse(getInteger(this, p), 0)
6466
65-let G = valueOrElse(getString(this, j), "WAVES")
67+let H = valueOrElse(getString(this, j), "WAVES")
6668
67-let H = if ((G == "WAVES"))
69+let I = if ((H == "WAVES"))
6870 then unit
69- else fromBase58String(G)
71+ else fromBase58String(H)
7072
71-let I = valueOrElse(getInteger(this, l), g)
73+let J = valueOrElse(getInteger(this, l), g)
7274
73-let J = valueOrElse(getInteger(this, k), 0)
75+let K = valueOrElse(getInteger(this, k), 0)
7476
75-let K = (J * I)
77+let L = (K * J)
7678
77-let L = 5
79+let M = valueOrElse(getInteger(this, q), 0)
7880
79-let M = 3
81+let N = 5
8082
81-let N = 32
83+let O = 3
8284
83-func O (z) = makeString(["%s%s%s", "allowTxId", z], b)
85+let P = 32
86+
87+func Q (A) = makeString(["%s%s%s", "allowTxId", A], b)
8488
8589
86-func P (Q,R) = makeString([Q, R], b)
90+func R (S,T) = makeString([S, T], b)
8791
8892
89-func S () = makeString(["%s", "adminAddressList"], b)
93+func U () = makeString(["%s", "adminAddressList"], b)
9094
9195
92-func T () = makeString(["%s", "txId"], b)
96+func V () = makeString(["%s", "txId"], b)
9397
9498
95-func U (Q,V) = {
96- let W = P(Q, V)
97- valueOrElse(getInteger(W), 0)
99+func W (S,X) = {
100+ let Y = R(S, X)
101+ valueOrElse(getInteger(Y), 0)
98102 }
99103
100104
101-func X () = {
102- let Y = getString(this, S())
103- if ($isInstanceOf(Y, "String"))
105+func Z () = {
106+ let aa = getString(this, U())
107+ if ($isInstanceOf(aa, "String"))
104108 then {
105- let Z = Y
106- split(Z, b)
109+ let ab = aa
110+ split(ab, b)
107111 }
108112 else nil
109113 }
110114
111115
112-func aa (ab) = containsElement(X(), ab)
116+func ac (ad) = containsElement(Z(), ad)
113117
114118
115-func ac (ad,R) = {
116- let ae = ad
117- let af = ae._1
118- let Q = ae._2
119- $Tuple2((af :+ P(Q, R)), Q)
119+func ae (af,T) = {
120+ let ag = af
121+ let ah = ag._1
122+ let S = ag._2
123+ $Tuple2((ah :+ R(S, T)), S)
120124 }
121125
122126
123-func ag (ah) = {
124- let ai = S()
125- let aj = {
126- let ak = X()
127- let al = size(ak)
128- let am = $Tuple2(nil, ah)
129- func an (ao,ap) = if ((ap >= al))
130- then ao
131- else ac(ao, ak[ap])
127+func ai (aj) = {
128+ let ak = U()
129+ let al = {
130+ let am = Z()
131+ let an = size(am)
132+ let ao = $Tuple2(nil, aj)
133+ func ap (aq,ar) = if ((ar >= an))
134+ then aq
135+ else ae(aq, am[ar])
132136
133- func aq (ao,ap) = if ((ap >= al))
134- then ao
137+ func as (aq,ar) = if ((ar >= an))
138+ then aq
135139 else throw("List size exceeds 5")
136140
137- aq(an(an(an(an(an(am, 0), 1), 2), 3), 4), 5)
141+ as(ap(ap(ap(ap(ap(ao, 0), 1), 2), 3), 4), 5)
138142 }
139- let af = aj._1
140- let Q = aj._2
141- af
143+ let ah = al._1
144+ let S = al._2
145+ ah
142146 }
143147
144148
145-func ar (af,W) = (af + valueOrElse(getInteger(W), 0))
149+func at (ah,Y) = (ah + valueOrElse(getInteger(Y), 0))
146150
147151
148-func as (Q) = {
149- let at = ag(Q)
150- let ak = at
151- let al = size(ak)
152- let am = 0
153- func an (ao,ap) = if ((ap >= al))
154- then ao
155- else ar(ao, ak[ap])
152+func au (S) = {
153+ let av = ai(S)
154+ let am = av
155+ let an = size(am)
156+ let ao = 0
157+ func ap (aq,ar) = if ((ar >= an))
158+ then aq
159+ else at(aq, am[ar])
156160
157- func aq (ao,ap) = if ((ap >= al))
158- then ao
161+ func as (aq,ar) = if ((ar >= an))
162+ then aq
159163 else throw("List size exceeds 5")
160164
161- aq(an(an(an(an(an(am, 0), 1), 2), 3), 4), 5)
165+ as(ap(ap(ap(ap(ap(ao, 0), 1), 2), 3), 4), 5)
162166 }
163167
164168
165-func au (af,av) = (af :+ DeleteEntry(av))
169+func aw (ah,ax) = (ah :+ DeleteEntry(ax))
166170
167171
168-func aw (Q) = {
169- let at = ag(Q)
170- let ak = at
171- let al = size(ak)
172- let am = nil
173- func an (ao,ap) = if ((ap >= al))
174- then ao
175- else au(ao, ak[ap])
172+func ay (S) = {
173+ let av = ai(S)
174+ let am = av
175+ let an = size(am)
176+ let ao = nil
177+ func ap (aq,ar) = if ((ar >= an))
178+ then aq
179+ else aw(aq, am[ar])
176180
177- func aq (ao,ap) = if ((ap >= al))
178- then ao
181+ func as (aq,ar) = if ((ar >= an))
182+ then aq
179183 else throw("List size exceeds 5")
180184
181- aq(an(an(an(an(an(am, 0), 1), 2), 3), 4), 5)
185+ as(ap(ap(ap(ap(ap(ao, 0), 1), 2), 3), 4), 5)
182186 }
183187
184188
185-func ax (ay,ah,az,aA) = {
186- let W = P(ah, ay)
187- let aB = U(ah, ay)
188- let aC = if (!(aa(ay)))
189- then h((("Address: " + ay) + " not in Admin list"))
190- else if ((aB == 1))
191- then h((W + " you already voted"))
189+func az (aA,aj,aB,aC) = {
190+ let Y = R(aj, aA)
191+ let aD = W(aj, aA)
192+ let aE = if (!(ac(aA)))
193+ then h((("Address: " + aA) + " not in Admin list"))
194+ else if ((aD == 1))
195+ then h((Y + " you already voted"))
192196 else unit
193- if ((aC == aC))
197+ if ((aE == aE))
194198 then {
195- let at = as(ah)
196- if (((at + 1) >= az))
199+ let av = au(aj)
200+ if (((av + 1) >= aB))
197201 then {
198- let aD = aw(ah)
199- (aD ++ aA)
202+ let aF = ay(aj)
203+ (aF ++ aC)
200204 }
201- else [IntegerEntry(W, 1)]
205+ else [IntegerEntry(Y, 1)]
202206 }
203207 else throw("Strict value is not equal to itself.")
204208 }
205209
206210
207-func aE (aF,aG) = (aF :+ parseIntValue(aG))
211+func aG (aH,aI) = (aH :+ parseIntValue(aI))
208212
209213
210-func aH (aI) = {
211- let aJ = valueOrElse(getInteger(this, m), height)
212- let aK = fraction(aJ, 1, I)
213- let aL = ((aI / I) - aK)
214- max([0, (K * aL)])
214+func aJ (aK) = {
215+ let aL = valueOrElse(getInteger(this, m), height)
216+ let aM = fraction(aL, 1, J)
217+ let aN = ((aK / J) - aM)
218+ max([0, (L * aN)])
215219 }
216220
217221
218-func aM () = aH(height)
222+func aO () = aJ(height)
219223
220224
221-func aN () = {
222- let Y = H
223- if ($isInstanceOf(Y, "Unit"))
225+func aP () = {
226+ let aa = I
227+ if ($isInstanceOf(aa, "Unit"))
224228 then {
225- let aO = Y
229+ let aQ = aa
226230 wavesBalance(this).available
227231 }
228- else if ($isInstanceOf(Y, "ByteVector"))
232+ else if ($isInstanceOf(aa, "ByteVector"))
229233 then {
230- let aP = Y
231- assetBalance(this, aP)
234+ let aR = aa
235+ assetBalance(this, aR)
232236 }
233237 else throw("Match error")
234238 }
235239
236240
237-func aQ () = {
238- let aR = (D + aM())
239- let aS = min([aR, aN()])
240- if ((E == 0))
241+func aS () = {
242+ let aT = (E + aO())
243+ let aU = min([aT, aP()])
244+ if ((F == 0))
241245 then 0
242- else aS
246+ else aU
243247 }
244248
245249
246-func aT () = if ((E != 0))
247- then fraction(toBigInt(aQ()), e, toBigInt(E))
250+func aV () = if ((F != 0))
251+ then fraction(toBigInt(aS()), e, toBigInt(F))
248252 else e
249253
250254
251-func aU () = if ((J == 0))
255+func aW () = if ((K == 0))
252256 then 0
253- else fraction((aN() - aQ()), 1, J)
257+ else fraction((aP() - aS()), 1, K)
254258
255259
256-func aV (r) = {
257- let aW = valueOrElse(getString(this, t(r)), "")
258- let aX = valueOrElse(getString(this, u(r)), "")
259- let aY = if ((aW == ""))
260+func aX (s) = {
261+ let aY = valueOrElse(getString(this, u(s)), "")
262+ let aZ = valueOrElse(getString(this, v(s)), "")
263+ let ba = if ((aY == ""))
260264 then nil
261- else split(aW, b)
262- let aZ = if ((aX == ""))
265+ else split(aY, b)
266+ let bb = if ((aZ == ""))
263267 then nil
264- else split(aX, b)
265- let ba = {
266- let ak = aZ
267- let al = size(ak)
268- let am = nil
269- func an (ao,ap) = if ((ap >= al))
270- then ao
271- else aE(ao, ak[ap])
268+ else split(aZ, b)
269+ let bc = {
270+ let am = bb
271+ let an = size(am)
272+ let ao = nil
273+ func ap (aq,ar) = if ((ar >= an))
274+ then aq
275+ else aG(aq, am[ar])
272276
273- func aq (ao,ap) = if ((ap >= al))
274- then ao
277+ func as (aq,ar) = if ((ar >= an))
278+ then aq
275279 else throw("List size exceeds 20")
276280
277- aq(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(am, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
281+ as(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ao, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
278282 }
279- $Tuple2(aY, ba)
283+ $Tuple2(ba, bc)
280284 }
281285
282286
283-func bb (bc) = max([0, toInt(fraction(toBigInt(bc), aT(), e))])
287+func bd (be) = max([0, toInt(fraction(toBigInt(be), aV(), e))])
284288
285289
286-func bd (be) = max([0, toInt(fraction(toBigInt(be), e, aT()))])
290+func bf (bg) = max([0, toInt(fraction(toBigInt(bg), e, aV()))])
287291
288292
289-func bf (r) = valueOrElse(getInteger(this, q(r)), 0)
293+func bh (s) = valueOrElse(getInteger(this, r(s)), 0)
290294
291295
292-func bg (r) = valueOrElse(getInteger(this, s(r)), 0)
296+func bi (s) = valueOrElse(getInteger(this, t(s)), 0)
293297
294298
295-func bh (r) = {
296- let bi = bf(r)
297- bb(bi)
299+func bj (s) = {
300+ let bk = bh(s)
301+ bd(bk)
298302 }
299303
300304
301-func bj (r) = [DeleteEntry(t(r)), DeleteEntry(u(r))]
305+func bl (s) = [DeleteEntry(u(s)), DeleteEntry(v(s))]
302306
303307
304-func bk (bl,r) = {
305- let bm = [if ((size(bl.payments) == 1))
308+func bm (bn,s) = {
309+ let bo = [if ((size(bn.payments) == 1))
306310 then true
307- else h("should include 1 payment"), if ((bl.payments[0].assetId == H))
311+ else h("should include 1 payment"), if ((bn.payments[0].assetId == I))
308312 then true
309- else h(("payment should be in " + G)), if ((bl.payments[0].amount > 0))
313+ else h(("payment should be in " + H)), if ((bn.payments[0].amount > 0))
310314 then true
311- else "payment amount should be greater than 0", if ((size(fromBase58String(r)) == f))
315+ else "payment amount should be greater than 0", if ((size(fromBase58String(s)) == f))
312316 then true
313317 else h("user address is not valid")]
314- if ((bm == bm))
318+ if ((bo == bo))
315319 then {
316- let bn = bl.payments[0].amount
317- let bo = bd(bn)
318- let bi = bf(r)
319- let bp = valueOrElse(getInteger(this, w(r)), 0)
320- let bq = (E + bo)
321- let br = bb(bq)
322- let bs = (bi + bo)
323- let bt = (bp + bn)
324-[StringEntry(x("stake", r, bl.transactionId), A(aM(), aT(), E, D)), IntegerEntry(n, bq), IntegerEntry(o, br), IntegerEntry(q(r), bs), IntegerEntry(w(r), bt), IntegerEntry(m, height)]
320+ let bp = bn.payments[0].amount
321+ let bq = bf(bp)
322+ let bk = bh(s)
323+ let br = valueOrElse(getInteger(this, x(s)), 0)
324+ let bs = (F + bq)
325+ let bt = bd(bs)
326+ let bu = (bk + bq)
327+ let bv = (br + bp)
328+[StringEntry(y("stake", s, bn.transactionId), B(aO(), aV(), F, E)), IntegerEntry(n, bs), IntegerEntry(o, bt), IntegerEntry(r(s), bu), IntegerEntry(x(s), bv), IntegerEntry(m, height)]
325329 }
326330 else throw("Strict value is not equal to itself.")
327331 }
328332
329333
330-func bu (bl,bv) = {
331- let r = toString(bl.caller)
332- let bi = bf(r)
333- let bw = [if ((bv > 0))
334+func bw (bn,bx) = {
335+ let s = toString(bn.caller)
336+ let bk = bh(s)
337+ let by = [if ((bx > 0))
334338 then true
335- else h("LP amount should be more than 0"), if ((bi >= bv))
339+ else h("LP amount should be more than 0"), if ((bk >= bx))
336340 then true
337- else h((("cannot withdraw more than available LP (" + toString(bi)) + ")"))]
338- if ((bw == bw))
341+ else h((("cannot withdraw more than available LP (" + toString(bk)) + ")"))]
342+ if ((by == by))
339343 then {
340- let bs = (bi - bv)
341- let bx = bb(bv)
342- let bq = (E - bv)
343- let br = bb(bq)
344- let by = valueOrElse(getInteger(this, v(r)), 0)
345- let bz = (by + bx)
346- let bA = if ((bs == 0))
347- then bj(r)
344+ let bu = (bk - bx)
345+ let bz = bd(bx)
346+ let bs = (F - bx)
347+ let bt = bd(bs)
348+ let bA = valueOrElse(getInteger(this, w(s)), 0)
349+ let bB = (bA + bz)
350+ let bC = if ((bu == 0))
351+ then bl(s)
348352 else nil
349- ([StringEntry(x("withdraw", r, bl.transactionId), A(aM(), aT(), E, D)), IntegerEntry(n, bq), IntegerEntry(o, br), IntegerEntry(q(r), bs), IntegerEntry(v(r), bz), IntegerEntry(m, height), ScriptTransfer(bl.caller, bx, H)] ++ bA)
353+ ([StringEntry(y("withdraw", s, bn.transactionId), B(aO(), aV(), F, E)), IntegerEntry(n, bs), IntegerEntry(o, bt), IntegerEntry(r(s), bu), IntegerEntry(w(s), bB), IntegerEntry(m, height), ScriptTransfer(bn.caller, bz, I)] ++ bC)
350354 }
351355 else throw("Strict value is not equal to itself.")
352356 }
353357
354358
355-func bB (r,bC,bD) = {
356- let bw = [if ((size(fromBase58String(r)) == f))
359+func bD (s,bE,bF) = {
360+ let by = [if ((size(fromBase58String(s)) == f))
357361 then true
358- else h("user address is not valid"), if ((size(fromBase58String(bC)) == f))
362+ else h("user address is not valid"), if ((size(fromBase58String(bE)) == f))
359363 then true
360364 else h("node address is not valid")]
361- if ((bw == bw))
362- then [StringEntry(t(r), bC), StringEntry(u(r), toString(bD))]
365+ if ((by == by))
366+ then [StringEntry(u(s), bE), StringEntry(v(s), toString(bF))]
363367 else throw("Strict value is not equal to itself.")
364368 }
365369
366370
367-@Callable(bl)
368-func setEmissionPerBlock (J) = {
369- let bw = [if ((bl.caller == this))
371+@Callable(bn)
372+func setEmissionPerBlock (K) = {
373+ let by = [if ((bn.caller == this))
370374 then true
371375 else h("permission denied")]
372- if ((bw == bw))
373- then [IntegerEntry(o, aQ()), IntegerEntry(m, height), IntegerEntry(k, max([0, J]))]
376+ if ((by == by))
377+ then [IntegerEntry(o, aS()), IntegerEntry(m, height), IntegerEntry(k, max([0, K]))]
374378 else throw("Strict value is not equal to itself.")
375379 }
376380
377381
378382
379-@Callable(bl)
380-func setEmissionPeriodInBlocks (bE) = {
381- let bw = [if ((bE > 0))
383+@Callable(bn)
384+func setEmissionPeriodInBlocks (bG) = {
385+ let by = [if ((bG > 0))
382386 then true
383- else h("emission period should be greater than 0"), if ((bl.caller == this))
387+ else h("emission period should be greater than 0"), if ((bn.caller == this))
384388 then true
385389 else h("permission denied")]
386- if ((bw == bw))
387- then [IntegerEntry(o, aQ()), IntegerEntry(m, height), IntegerEntry(l, bE)]
390+ if ((by == by))
391+ then [IntegerEntry(o, aS()), IntegerEntry(m, height), IntegerEntry(l, bG)]
388392 else throw("Strict value is not equal to itself.")
389393 }
390394
391395
392396
393-@Callable(bl)
397+@Callable(bn)
394398 func stake () = {
395- let r = toString(bl.caller)
396- bk(bl, r)
399+ let s = toString(bn.caller)
400+ bm(bn, s)
397401 }
398402
399403
400404
401-@Callable(bl)
402-func stakeFor (r) = bk(bl, r)
405+@Callable(bn)
406+func stakeFor (s) = bm(bn, s)
403407
404408
405409
406-@Callable(bl)
407-func withdraw (bx) = {
408- let r = toString(bl.caller)
409- let bi = bf(r)
410- let bF = bd(bx)
411- let bG = bh(r)
412- let bH = toInt(fraction(aT(), toBigInt(1), e, CEILING))
413- let bw = [if ((bx > 0))
410+@Callable(bn)
411+func withdraw (bz) = {
412+ let s = toString(bn.caller)
413+ let bk = bh(s)
414+ let bH = bf(bz)
415+ let bI = bj(s)
416+ let bJ = toInt(fraction(aV(), toBigInt(1), e, CEILING))
417+ let by = [if (if ((M == 0))
414418 then true
415- else h("withdraw amount should be more than 0"), if ((bG >= bx))
419+ else (M > height))
416420 then true
417- else h((("cannot withdraw more than available (" + toString(bG)) + ")")), if ((bx >= bH))
421+ else h(makeString(["withdraw is locked at height:", toString(M)], " ")), if ((bz > 0))
418422 then true
419- else h((("withdraw amount is too small. Min: (" + toString(bH)) + ")"))]
420- if ((bw == bw))
421- then bu(bl, min([bi, (bF + 1)]))
423+ else h("withdraw amount should be more than 0"), if ((bI >= bz))
424+ then true
425+ else h((("cannot withdraw more than available (" + toString(bI)) + ")")), if ((bz >= bJ))
426+ then true
427+ else h((("withdraw amount is too small. Min: (" + toString(bJ)) + ")"))]
428+ if ((by == by))
429+ then bw(bn, min([bk, (bH + 1)]))
422430 else throw("Strict value is not equal to itself.")
423431 }
424432
425433
426434
427-@Callable(bl)
428-func setStakingNode (bC) = {
429- let r = toString(bl.caller)
430- bB(r, bC, 100)
435+@Callable(bn)
436+func setStakingNode (bE) = {
437+ let s = toString(bn.caller)
438+ bD(s, bE, 100)
431439 }
432440
433441
434442
435-@Callable(bl)
436-func stakeAndSetStakingNode (bC) = {
437- let r = toString(bl.caller)
438- (bk(bl, r) ++ bB(r, bC, 100))
443+@Callable(bn)
444+func stakeAndSetStakingNode (bE) = {
445+ let s = toString(bn.caller)
446+ (bm(bn, s) ++ bD(s, bE, 100))
439447 }
440448
441449
442450
443-@Callable(bl)
444-func stakeForSwapHELPER (r,bC) = {
445- let bw = [if ((toString(bl.originCaller) == r))
451+@Callable(bn)
452+func stakeForSwapHELPER (s,bE) = {
453+ let by = [if ((toString(bn.originCaller) == s))
446454 then true
447455 else h("i.originCaller should be equal to userAddress")]
448- if ((bw == bw))
456+ if ((by == by))
449457 then {
450- let bI = if ((bC == ""))
458+ let bK = if ((bE == ""))
451459 then nil
452- else bB(r, bC, 100)
453- (bk(bl, r) ++ bI)
460+ else bD(s, bE, 100)
461+ (bm(bn, s) ++ bK)
454462 }
455463 else throw("Strict value is not equal to itself.")
456464 }
457465
458466
459467
460-@Callable(bl)
461-func airdrop (bJ,bK) = {
462- func bL (bM,bN) = if ((0 > bN))
468+@Callable(bn)
469+func airdrop (bL,bM) = {
470+ func bN (bO,bP) = if ((0 > bP))
463471 then h("negative amount value in amountList")
464- else (bM + bN)
472+ else (bO + bP)
465473
466- let bO = {
467- let ak = bK
468- let al = size(ak)
469- let am = 0
470- func an (ao,ap) = if ((ap >= al))
471- then ao
472- else bL(ao, ak[ap])
474+ let bQ = {
475+ let am = bM
476+ let an = size(am)
477+ let ao = 0
478+ func ap (aq,ar) = if ((ar >= an))
479+ then aq
480+ else bN(aq, am[ar])
473481
474- func aq (ao,ap) = if ((ap >= al))
475- then ao
482+ func as (aq,ar) = if ((ar >= an))
483+ then aq
476484 else throw("List size exceeds 90")
477485
478- aq(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(am, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90)
486+ as(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ao, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90)
479487 }
480- let bw = [if ((size(bl.payments) == 1))
488+ let by = [if ((size(bn.payments) == 1))
481489 then true
482- else h("should include 1 payment"), if ((bl.payments[0].assetId == H))
490+ else h("should include 1 payment"), if ((bn.payments[0].assetId == I))
483491 then true
484- else h(("payment should be in " + G)), if ((bl.payments[0].amount > 0))
492+ else h(("payment should be in " + H)), if ((bn.payments[0].amount > 0))
485493 then true
486- else "payment amount should be greater than 0", if ((size(bJ) == size(bK)))
494+ else "payment amount should be greater than 0", if ((size(bL) == size(bM)))
487495 then true
488- else h("addressList should be same size as amountList"), if ((bl.payments[0].amount >= bO))
496+ else h("addressList should be same size as amountList"), if ((bn.payments[0].amount >= bQ))
489497 then true
490498 else h("payment amount is less than sum of amountList")]
491- if ((bw == bw))
499+ if ((by == by))
492500 then {
493- func bP (bM,be) = {
494- let bQ = bM
495- let af = bQ._1
496- let bR = bQ._2
497- let bS = bQ._3
498- let bT = bQ._4
499- let bU = bJ[bR]
500- let ab = {
501- let Y = addressFromString(bU)
502- if ($isInstanceOf(Y, "Address"))
501+ func bR (bO,bg) = {
502+ let bS = bO
503+ let ah = bS._1
504+ let bT = bS._2
505+ let bU = bS._3
506+ let bV = bS._4
507+ let bW = bL[bT]
508+ let ad = {
509+ let aa = addressFromString(bW)
510+ if ($isInstanceOf(aa, "Address"))
503511 then {
504- let bV = Y
505- bV
512+ let bX = aa
513+ bX
506514 }
507515 else h("invalid address in addressList")
508516 }
509- let bW = [if (!(containsElement(bT, ab)))
517+ let bY = [if (!(containsElement(bV, ad)))
510518 then true
511519 else h("duplicate address is addressList")]
512- if ((bW == bW))
520+ if ((bY == bY))
513521 then {
514- let bX = bd(be)
515- let bY = s(bU)
516- let bZ = valueOrElse(getInteger(this, bY), 0)
517- $Tuple4((af :+ IntegerEntry(bY, (bZ + bX))), (bR + 1), (bS + bX), (bT :+ ab))
522+ let bZ = bf(bg)
523+ let ca = t(bW)
524+ let cb = valueOrElse(getInteger(this, ca), 0)
525+ $Tuple4((ah :+ IntegerEntry(ca, (cb + bZ))), (bT + 1), (bU + bZ), (bV :+ ad))
518526 }
519527 else throw("Strict value is not equal to itself.")
520528 }
521529
522- let ca = {
523- let ak = bK
524- let al = size(ak)
525- let am = $Tuple4(nil, 0, 0, nil)
526- func cb (ao,ap) = if ((ap >= al))
527- then ao
528- else bP(ao, ak[ap])
530+ let cc = {
531+ let am = bM
532+ let an = size(am)
533+ let ao = $Tuple4(nil, 0, 0, nil)
534+ func cd (aq,ar) = if ((ar >= an))
535+ then aq
536+ else bR(aq, am[ar])
529537
530- func cc (ao,ap) = if ((ap >= al))
531- then ao
538+ func ce (aq,ar) = if ((ar >= an))
539+ then aq
532540 else throw("List size exceeds 90")
533541
534- cc(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(am, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90)
542+ ce(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(cd(ao, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90)
535543 }
536- let cd = ca._1
537- let ce = ca._2
538- let cf = ca._3
539- let cg = ca._4
540- let ch = bb((E + cf))
541- ([IntegerEntry(p, (F + cf)), IntegerEntry(n, (E + cf)), IntegerEntry(o, ch), IntegerEntry(m, height)] ++ cd)
544+ let cf = cc._1
545+ let cg = cc._2
546+ let ch = cc._3
547+ let ci = cc._4
548+ let cj = bd((F + ch))
549+ ([IntegerEntry(p, (G + ch)), IntegerEntry(n, (F + ch)), IntegerEntry(o, cj), IntegerEntry(m, height)] ++ cf)
542550 }
543551 else throw("Strict value is not equal to itself.")
544552 }
545553
546554
547555
548-@Callable(bl)
549-func getUserAssetsREADONLY (r) = {
550- let bi = bf(r)
551- let ci = bg(r)
552- let cj = bb(ci)
553- let bG = bh(r)
554- let bp = valueOrElse(getInteger(this, w(r)), 0)
555- let by = valueOrElse(getInteger(this, v(r)), 0)
556- let ck = aV(r)
557- let cl = ck._1
558- let cm = ck._2
559- $Tuple2(nil, $Tuple10(bi, bG, aT(), bp, by, ci, cj, cl, cm, aU()))
556+@Callable(bn)
557+func getUserAssetsREADONLY (s) = {
558+ let bk = bh(s)
559+ let ck = bi(s)
560+ let cl = bd(ck)
561+ let bI = bj(s)
562+ let br = valueOrElse(getInteger(this, x(s)), 0)
563+ let bA = valueOrElse(getInteger(this, w(s)), 0)
564+ let cm = aX(s)
565+ let cn = cm._1
566+ let co = cm._2
567+ $Tuple2(nil, $Tuple10(bk, bI, aV(), br, bA, ck, cl, cn, co, aW()))
560568 }
561569
562570
563571
564-@Callable(bl)
565-func getTotalAssetsREADONLY () = $Tuple2(nil, $Tuple6(E, aQ(), aT(), F, bb(F), aU()))
572+@Callable(bn)
573+func getTotalAssetsREADONLY () = $Tuple2(nil, $Tuple6(F, aS(), aV(), G, bd(G), aW()))
566574
567575
568576
569-@Callable(bl)
570-func voteForTxId (z) = {
571- let ay = toBase58String(bl.caller.bytes)
572- let ah = O(z)
573- let af = [StringEntry(T(), z)]
574- let cn = getString(this, T())
575- let aC = [if ((size(fromBase58String(z)) == N))
577+@Callable(bn)
578+func voteForTxId (A) = {
579+ let aA = toBase58String(bn.caller.bytes)
580+ let aj = Q(A)
581+ let ah = [StringEntry(V(), A)]
582+ let cp = getString(this, V())
583+ let aE = [if ((size(fromBase58String(A)) == P))
576584 then true
577- else h((z + " is not valid txId")), if (if ((cn == unit))
585+ else h((A + " is not valid txId")), if (if ((cp == unit))
578586 then true
579- else (value(cn) != z))
587+ else (value(cp) != A))
580588 then true
581- else h((z + " is already allowed"))]
582- if ((aC == aC))
583- then ax(ay, ah, M, af)
589+ else h((A + " is already allowed"))]
590+ if ((aE == aE))
591+ then az(aA, aj, O, ah)
584592 else throw("Strict value is not equal to itself.")
585593 }
586594
587595
588-@Verifier(co)
589-func cp () = {
590- let cq = (co.id == fromBase58String(valueOrElse(getString(this, T()), "")))
591- let cr = if ((size(X()) >= M))
596+@Verifier(cq)
597+func cr () = {
598+ let cs = (cq.id == fromBase58String(valueOrElse(getString(this, V()), "")))
599+ let ct = if ((size(Z()) >= O))
592600 then false
593- else sigVerify(co.bodyBytes, co.proofs[0], co.senderPublicKey)
594- if (cq)
601+ else sigVerify(cq.bodyBytes, cq.proofs[0], cq.senderPublicKey)
602+ if (cs)
595603 then true
596- else cr
604+ else ct
597605 }
598606

github/deemru/w8io/c3f4982 
368.34 ms