tx · GEaeM9fCm1rGRt7K8hVLSwgYbyDeW8CePU4TeMpfMnsh

3N1b5y6ncRc2X5Mq5ogeT2FpBYANX2ShrjD:  -0.05000000 Waves

2022.08.30 13:28 [2207062] smart account 3N1b5y6ncRc2X5Mq5ogeT2FpBYANX2ShrjD > SELF 0.00000000 Waves

{ "type": 13, "id": "GEaeM9fCm1rGRt7K8hVLSwgYbyDeW8CePU4TeMpfMnsh", "fee": 5000000, "feeAssetId": null, "timestamp": 1661855294110, "version": 2, "chainId": 84, "sender": "3N1b5y6ncRc2X5Mq5ogeT2FpBYANX2ShrjD", "senderPublicKey": "DYg41vAWoC1qYkgSYQAH1gjWznvc2vreaYUfoHmjcQVt", "proofs": [ "58ptarXdF2ZCGgua7cVD1VSzVXaj9GBYZ6M9ZDgaaYehXVJBcfdmSUmMRxaT6hwv7cSuyCZQ5NCiMydgZzKEfy2v", "4pMFzhkzRw1g6eQs6JRyZ1qdJCtqGRP5RCBVjWYR2bYu7fSK1JTQEEyALYDEMeBUp5ZAmc3DW9GfaEspsg5CpJ2T" ], "script": "base64:BgJXCAISBAoCEQESBQoDCAEEEgQKAgEEEgMKAQESBgoECAgBCBIECgIIARIECgIRARIFCgMBCAgSBQoDCAEBEgASABIECgIRBBIECgIBARIAEgASABIDCgEBXAAJUFJFQ0lTSU9OAMCEPQAFTUFYX0EAwIQ9AAxNQVhfQV9DSEFOR0UACgANTUlOX1JBTVBfVElNRQkAaQIAgKMFADwAB3ZlcnNpb24CBTIuMC4wAAhrVmVyc2lvbgIHdmVyc2lvbgAHa0Fzc2V0cwIJYXNzZXRfaWRzAA1rQXNzZXRCYWxhbmNlAghfYmFsYW5jZQAHa0FjdGl2ZQIGYWN0aXZlAAZrQ2F1c2UCDnNodXRkb3duX2NhdXNlAA1rU2hhcmVBc3NldElkAg5zaGFyZV9hc3NldF9pZAARa1NoYXJlQXNzZXRTdXBwbHkCEnNoYXJlX2Fzc2V0X3N1cHBseQAEa0ZlZQIKY29tbWlzc2lvbgASa0RBcHBUaHJlc2hvbGRDb2VmAhFkQXBwVGhyZXNob2xkQ29lZgAMa1VTRE5BZGRyZXNzAhhzdGFraW5nX3VzZG5uc2J0X2FkZHJlc3MACmtEaXNjb3VudHMCCWRpc2NvdW50cwAPa0Rpc2NvdW50VmFsdWVzAg9kaXNjb3VudF92YWx1ZXMADmtVc2VyU3dvcEluR292AgxfU1dPUF9hbW91bnQADWtGaXJzdEhhcnZlc3QCDWZpcnN0X2hhcnZlc3QAE2tGaXJzdEhhcnZlc3RIZWlnaHQCFGZpcnN0X2hhcnZlc3RfaGVpZ2h0AAtrU2hhcmVMaW1pdAIcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAALa0Jhc2VQZXJpb2QCC2Jhc2VfcGVyaW9kAA1rUGVyaW9kTGVuZ3RoAg1wZXJpb2RfbGVuZ3RoAAxrU3RhcnRIZWlnaHQCDHN0YXJ0X2hlaWdodAANa0FkbWluUHViS2V5MQILYWRtaW5fcHViXzEADWtBZG1pblB1YktleTICC2FkbWluX3B1Yl8yAA1rQWRtaW5QdWJLZXkzAgthZG1pbl9wdWJfMwASa0FkbWluSW52b2tlUHViS2V5AhBhZG1pbl9pbnZva2VfcHViABBrTW9uZXlCb3hBZGRyZXNzAhFtb25leV9ib3hfYWRkcmVzcwALa0dvdkFkZHJlc3MCEmdvdmVybmFuY2VfYWRkcmVzcwAOa1ZvdGluZ0FkZHJlc3MCDnZvdGluZ19hZGRyZXNzAA9rRmFybWluZ0FkZHJlc3MCD2Zhcm1pbmdfYWRkcmVzcwAGb3JhY2xlCQEHQWRkcmVzcwEBGgFU6UWqHpAvOq7xug7mLpqSXxqYhOHzYrMIARNnZXRCYXNlNThGcm9tT3JhY2xlAQNrZXkEByRtYXRjaDAJAJ0IAgUGb3JhY2xlBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAZzdHJpbmcFByRtYXRjaDAJANkEAQUGc3RyaW5nBAdub3RoaW5nBQckbWF0Y2gwCQACAQkArAICBQNrZXkCCGlzIGVtcHR5AAxhZG1pblB1YktleTEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MQAMYWRtaW5QdWJLZXkyCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTIADGFkbWluUHViS2V5MwkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkzABFhZG1pblB1YktleUludm9rZQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRJrQWRtaW5JbnZva2VQdWJLZXkAD21vbmV5Qm94QWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEGtNb25leUJveEFkZHJlc3MACmdvdkFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQtrR292QWRkcmVzcwASc3Rha2luZ1VTRE5BZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUMa1VTRE5BZGRyZXNzAA12b3RpbmdBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUOa1ZvdGluZ0FkZHJlc3MADmZhcm1pbmdBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUPa0Zhcm1pbmdBZGRyZXNzAARVU0ROASBvJKPKqzDcUimY6CxhWu5afyNNwi11u+mdqlTg0tAHwQANc3Rha2luZ0Fzc2V0cwkAzAgCCQDYBAEFBFVTRE4FA25pbAAKYmFzZVBlcmlvZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MFC2tCYXNlUGVyaW9kAhFFbXB0eSBrQmFzZVBlcmlvZAALc3RhcnRIZWlnaHQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ12b3RpbmdBZGRyZXNzBQxrU3RhcnRIZWlnaHQCEkVtcHR5IGtTdGFydEhlaWdodAAMcGVyaW9kTGVuZ3RoCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNdm90aW5nQWRkcmVzcwUNa1BlcmlvZExlbmd0aAITRW1wdHkga1BlcmlvZExlbmd0aAAVZmlyc3RIYXJ2ZXN0RW5kUGVyaW9kCQBkAgkAZAIFCmJhc2VQZXJpb2QJAGkCCQBlAgUGaGVpZ2h0BQtzdGFydEhlaWdodAUMcGVyaW9kTGVuZ3RoAAMABmFjdGl2ZQkBEUBleHRyTmF0aXZlKDEwNTEpAgUEdGhpcwUHa0FjdGl2ZQAMc2hhcmVBc3NldElkCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFDWtTaGFyZUFzc2V0SWQAC3NoYXJlU3VwcGx5CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBRFrU2hhcmVBc3NldFN1cHBseQAJZmVlU2NhbGU2AMCEPQADZmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQRrRmVlAA1mZWVHb3Zlcm5hbmNlCQBrAwAoBQlmZWVTY2FsZTYAZAAJaW5pdGlhbF9BCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAglpbml0aWFsX0EACGZ1dHVyZV9BCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAghmdXR1cmVfQQAOaW5pdGlhbF9BX3RpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwIOaW5pdGlhbF9BX3RpbWUAAAANZnV0dXJlX0FfdGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAg1mdXR1cmVfQV90aW1lAAAABml0ZXIxNAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgUDbmlsAAZpdGVyMTUJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4JAMwIAgAPBQNuaWwACGFzc2V0SWRzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFB2tBc3NldHMCASwABm5Db2lucwkAkAMBBQhhc3NldElkcwEHc3VzcGVuZAEFY2F1c2UJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUHCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmtDYXVzZQUFY2F1c2UFA25pbAENdGhyb3dJc0FjdGl2ZQAJAAIBAhZEQXBwIGlzIGFscmVhZHkgYWN0aXZlAQhpc0FjdGl2ZQADBQZhY3RpdmUFBHVuaXQJAAIBAh9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AQtpc0FkbWluQ2FsbAEBaQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQUEdW5pdAkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNTZWxmQ2FsbAEBaQMJAAACBQR0aGlzCAUBaQZjYWxsZXIFBHVuaXQJAAIBAitPbmx5IGNvbnRyYWN0IGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAARiaWcyCQC2AgEAAgAOYmxvY2tUaW1lc3RhbXAFBmhlaWdodAEGYXNzZXJ0AQFhAwUBYQcGARRjYWxjdWxhdGVGZWVEaXNjb3VudAEIdXNlckFkZHIECnN3b3BBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUKZ292QWRkcmVzcwkArAICCQClCAEFCHVzZXJBZGRyBQ5rVXNlclN3b3BJbkdvdgAABA5kaXNjb3VudFZhbHVlcwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQZvcmFjbGUFD2tEaXNjb3VudFZhbHVlcwIBLAQJZGlzY291bnRzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBm9yYWNsZQUKa0Rpc2NvdW50cwIBLAMDCQBnAgUKc3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAAJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAQUKc3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAAMDCQBnAgUKc3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAEJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAgUKc3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAQMDCQBnAgUKc3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAIJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAwUKc3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAgMDCQBnAgUKc3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMABAUKc3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMABAkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwAEBQlmZWVTY2FsZTYBAl9BAAQCdDEFDWZ1dHVyZV9BX3RpbWUE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cF9qCQBrAwUEX2ZlZQULZHhfZXhwZWN0ZWQFCWZlZVNjYWxlNgkAZAIFBWluZGV4AAEEDSR0MDEwMjY2MTAzMzAKAAIkbAUCeHAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ94cF9yZWR1Y2VkX3Byb2MCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAp4cF9yZWR1Y2VkCAUNJHQwMTAyNjYxMDMzMAJfMQQFaW5kZXgIBQ0kdDAxMDI2NjEwMzMwAl8yBAx4cF9yZWR1Y2VkX2kJAJEDAgUKeHBfcmVkdWNlZAUBaQQCZHkJAGUCCQBlAgUMeHBfcmVkdWNlZF9pCQEHZ2V0X3lfRAQFA2FtcAUBaQUKeHBfcmVkdWNlZAUCRDEAAQkAlAoCBQJkeQkAZQIFBGR5XzAFAmR5AQ1nZXRTdHJBc3NldElkAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDYBAEFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwAgVXQVZFUwkAAgECC01hdGNoIGVycm9yARhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMCBXN0YWtlB2Fzc2V0SWQDBQVzdGFrZQkAlAoCAgxsb2NrTmV1dHJpbm8FEnN0YWtpbmdVU0ROQWRkcmVzcwkAlAoCAg51bmxvY2tOZXV0cmlubwUSc3Rha2luZ1VTRE5BZGRyZXNzARFjYWxjU3Rha2luZ1BhcmFtcwMFc3Rha2UGYW1vdW50B2Fzc2V0SWQDBQVzdGFrZQQNJHQwMTA4OTQxMDk2MAkBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFBXN0YWtlBQdhc3NldElkBARjYWxsCAUNJHQwMTA4OTQxMDk2MAJfMQQLc3Rha2luZ0FkZHIIBQ0kdDAxMDg5NDEwOTYwAl8yCQCWCgQFBGNhbGwFC3N0YWtpbmdBZGRyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFB2Fzc2V0SWQFBmFtb3VudAUDbmlsBA0kdDAxMTA0NjExMTEyCQEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgUFc3Rha2UFB2Fzc2V0SWQEBGNhbGwIBQ0kdDAxMTA0NjExMTEyAl8xBAtzdGFraW5nQWRkcggFDSR0MDExMDQ2MTExMTICXzIJAJYKBAUEY2FsbAULc3Rha2luZ0FkZHIJAMwIAgUGYW1vdW50CQDMCAIJANgEAQUHYXNzZXRJZAUDbmlsBQNuaWwBBXN0YWtlAgZhbW91bnQNYXNzZXRJZFN0cmluZwMJAQ9jb250YWluc0VsZW1lbnQCBQ1zdGFraW5nQXNzZXRzBQ1hc3NldElkU3RyaW5nBA0kdDAxMTI5OTExNDAxCQERY2FsY1N0YWtpbmdQYXJhbXMDBgUGYW1vdW50CQDZBAEFDWFzc2V0SWRTdHJpbmcEBGNhbGwIBQ0kdDAxMTI5OTExNDAxAl8xBARhZGRyCAUNJHQwMTEyOTkxMTQwMQJfMgQGcGFyYW1zCAUNJHQwMTEyOTkxMTQwMQJfMwQIcGF5bWVudHMIBQ0kdDAxMTI5OTExNDAxAl80CQD8BwQFBGFkZHIFBGNhbGwFBnBhcmFtcwUIcGF5bWVudHMAAAEHdW5zdGFrZQIGYW1vdW50DWFzc2V0SWRTdHJpbmcDCQEPY29udGFpbnNFbGVtZW50AgUNc3Rha2luZ0Fzc2V0cwUNYXNzZXRJZFN0cmluZwQNJHQwMTE1ODYxMTY4OQkBEWNhbGNTdGFraW5nUGFyYW1zAwcFBmFtb3VudAkA2QQBBQ1hc3NldElkU3RyaW5nBARjYWxsCAUNJHQwMTE1ODYxMTY4OQJfMQQEYWRkcggFDSR0MDExNTg2MTE2ODkCXzIEBnBhcmFtcwgFDSR0MDExNTg2MTE2ODkCXzMECHBheW1lbnRzCAUNJHQwMTE1ODYxMTY4OQJfNAkA/AcEBQRhZGRyBQRjYWxsBQZwYXJhbXMFCHBheW1lbnRzAAABDHN0YWtlZEFtb3VudAEHYXNzZXRJZAQWc3Rha2VkQW1vdW50Q2FsY3VsYXRlZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBANhSWQFByRtYXRjaDADCQAAAgUDYUlkBQRVU0ROCQCaCAIFEnN0YWtpbmdVU0ROQWRkcmVzcwkArAICCQCsAgIJAKwCAgIMcnBkX2JhbGFuY2VfCQDYBAEFA2FJZAIBXwkApQgBBQR0aGlzAAADCQABAgUHJG1hdGNoMAIEVW5pdAAACQACAQILTWF0Y2ggZXJyb3IEByRtYXRjaDAFFnN0YWtlZEFtb3VudENhbGN1bGF0ZWQDCQABAgUHJG1hdGNoMAIDSW50BAFpBQckbWF0Y2gwBQFpAAABD2NoZWNrU3VzcGljaW91cwAEEGNvbnRyYWN0QmFsYW5jZXMJAQNfeHAACgEMY2hlY2tCYWxhbmNlAgNhY2MHYXNzZXRJZAQNJHQwMTIzMDAxMjMyNQUDYWNjBApzdXNwaWNpb3VzCAUNJHQwMTIzMDAxMjMyNQJfMQQBaQgFDSR0MDEyMzAwMTIzMjUCXzIDBQpzdXNwaWNpb3VzCQCUCgIFCnN1c3BpY2lvdXMFAWkECGFCYWxhbmNlCQBkAgkA8AcCBQR0aGlzCQDZBAEFB2Fzc2V0SWQJAQxzdGFrZWRBbW91bnQBCQDZBAEFB2Fzc2V0SWQDCQBmAgkAkQMCBRBjb250cmFjdEJhbGFuY2VzBQFpBQhhQmFsYW5jZQkAlAoCBgUBaQkAlAoCBwkAZAIFAWkAAQoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgcAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMY2hlY2tCYWxhbmNlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwERc3VzcGVuZFN1c3BpY2lvdXMBAWkJAQdzdXNwZW5kAQkArAICAh1TdXNwaWNpb3VzIHN0YXRlIHdpdGggYXNzZXQ6IAkAkQMCBQhhc3NldElkcwUBaQEOcmV0dXJuUGF5bWVudHMCBmNhbGxlcghwYXltZW50cwoBDXBhcnNlUGF5bWVudHMCA2FjYwdwYXltZW50CQDNCAIFA2FjYwkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyCAUHcGF5bWVudAZhbW91bnQIBQdwYXltZW50B2Fzc2V0SWQKAAIkbAUIcGF5bWVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDXBhcnNlUGF5bWVudHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPARJjaGVja0RBcHBUaHJlc2hvbGQBC25ld0JhbGFuY2VzBBFkQXBwVGhyZXNob2xkQ29lZgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMFEmtEQXBwVGhyZXNob2xkQ29lZgIYTm8gZEFwcFRocmVzaG9sZENvZWYga2V5BA50aHJlc2hvbGRTY2FsZQCQTgoBD2l0ZXJBbGxCYWxhbmNlcwIDYWNjDHRva2VuQmFsYW5jZQQNJHQwMTMzMDQxMzM0NQUDYWNjBA50aHJlc2hvbGRFcnJvcggFDSR0MDEzMzA0MTMzNDUCXzEEDWN1dGVkQmFsYW5jZXMIBQ0kdDAxMzMwNDEzMzQ1Al8yCgERaXRlckN1dGVkQmFsYW5jZXMCCmNoZWNrUmF0aW8OY2hlY2tlZEJhbGFuY2UEBXJhdGlvCQBrAwUMdG9rZW5CYWxhbmNlBQ50aHJlc2hvbGRTY2FsZQUOY2hlY2tlZEJhbGFuY2UDAwkAZgIFBXJhdGlvCQBoAgURZEFwcFRocmVzaG9sZENvZWYFDnRocmVzaG9sZFNjYWxlBgkAZgIJAGsDAAEFDnRocmVzaG9sZFNjYWxlBRFkQXBwVGhyZXNob2xkQ29lZgUFcmF0aW8JAAIBAjhOZXcgYmFsYW5jZSBpbiBhc3NldHMgb2YgdGhlIERBcHAgaXMgbGVzcyB0aGFuIHRocmVzaG9sZAcJAJQKAgoAAiRsBQ1jdXRlZEJhbGFuY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUOdGhyZXNob2xkRXJyb3IKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEWl0ZXJDdXRlZEJhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwkA0QgCBQ1jdXRlZEJhbGFuY2VzAAAEDSR0MDEzODY3MTM5NzAKAAIkbAULbmV3QmFsYW5jZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIHCQDRCAIFC25ld0JhbGFuY2VzAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD2l0ZXJBbGxCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EDnRocmVzaG9sZEVycm9yCAUNJHQwMTM4NjcxMzk3MAJfMQQBYggFDSR0MDEzODY3MTM5NzACXzIFDnRocmVzaG9sZEVycm9yEQNtc2cBAUQCAnhwA2FtcAQBRAkBDmdldF9EX2ludGVybmFsAgUCeHAFA2FtcAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgFEBQFEBQNuaWwFAUQDbXNnAQRpbml0AwVjb2lucwJfQQxmaXJzdEhhcnZlc3QDCQEBIQEJAJ4IAQUEdGhpcwkAAgECE0FscmVhZHkgaW5pdGlhbGl6ZWQECXNoYXJlTmFtZQILc19NdWx0aV9VU0QEEHNoYXJlRGVzY3JpcHRpb24JAKwCAgJCU2hhcmVUb2tlbiBvZiBTd29wRmkgcHJvdG9jb2wgZm9yIE11bHRpU3RhYmxlIFVTRCBwb29sIGF0IGFkZHJlc3MgCQClCAEFBHRoaXMECmlzc3VlVG9rZW4JAMIIBQUJc2hhcmVOYW1lBRBzaGFyZURlc2NyaXB0aW9uAAAABgYEB3Rva2VuSWQJALgIAQUKaXNzdWVUb2tlbgQJYmFzZUVudHJ5CQDMCAIJAQtTdHJpbmdFbnRyeQIFCGtWZXJzaW9uBQd2ZXJzaW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFB2tBc3NldHMFBWNvaW5zCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFAl9BCQDMCAIJAQxJbnRlZ2VyRW50cnkCAghmdXR1cmVfQQUCX0EJAMwIAgkBDEludGVnZXJFbnRyeQIFBGtGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBm9yYWNsZQINYmFzZV9mZWVfZmxhdAkAzAgCCQELU3RyaW5nRW50cnkCBQ1rU2hhcmVBc3NldElkCQDYBAEFB3Rva2VuSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5AAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUGCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrREFwcFRocmVzaG9sZENvZWYADwkAzAgCBQppc3N1ZVRva2VuBQNuaWwDBQxmaXJzdEhhcnZlc3QJAM4IAgUJYmFzZUVudHJ5CQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rRmlyc3RIYXJ2ZXN0BQxmaXJzdEhhcnZlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tGaXJzdEhhcnZlc3RIZWlnaHQJAGQCBQtzdGFydEhlaWdodAkAaAIFFWZpcnN0SGFydmVzdEVuZFBlcmlvZAUMcGVyaW9kTGVuZ3RoBQNuaWwFCWJhc2VFbnRyeQNtc2cBDGFkZExpcXVpZGl0eQINbWluTWludEFtb3VudAxzdGFrZUZhcm1pbmcJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEA2FtcAkBAl9BAAQCeHAJAQNfeHAABAJEMAMJAAACBQtzaGFyZVN1cHBseQAAAAAJAQdnZXRETWVtAgUCeHAFA2FtcAQIcGF5bWVudHMIBQNtc2cIcGF5bWVudHMEAW4JAJADAQUIcGF5bWVudHMKAQ12YWxpZFBheW1lbnRzAQFuAwkAZgIFAW4FBm5Db2lucwkAAgEJAKwCAgIQcGF5bWVudHMgc2l6ZSA+IAkApAMBBQZuQ29pbnMDCQBmAgABBQFuCQACAQIRcGF5bWVudHMgc2l6ZSA8IDEDAwkAAAIFC3NoYXJlU3VwcGx5AAAJAQIhPQIFBm5Db2lucwUBbgcJAAIBAiJpbml0aWFsIGRlcG9zaXQgcmVxdWlyZXMgYWxsIGNvaW5zCgEMcGF5bWFudFZhbGlkAgNhY2MHcGF5bWVudAMJAQ9jb250YWluc0VsZW1lbnQCBQhhc3NldElkcwkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkBgkAAgECGEludmFsaWQgYXNzZXQgaW4gcGF5bWVudAoAAiRsBQhwYXlt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DSR0MDE3MjQxMTcyODICXzIEAWkIBQ0kdDAxNzI0MTE3MjgyAl8zAwkAZgIFC3NoYXJlU3VwcGx5AAAEBF9mZWUJAGkCCQBoAgkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUGbkNvaW5zCQBoAgAECQBlAgUGbkNvaW5zAAEEBGZlZXMEDGlkZWFsQmFsYW5jZQkAawMFAkQxCQCRAwIFAnhwBQFpBQJEMAQKZGlmZmVyZW5jZQMJAGYCBQxpZGVhbEJhbGFuY2UFCm5ld0JhbGFuY2UJAGUCBQxpZGVhbEJhbGFuY2UFCm5ld0JhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQxpZGVhbEJhbGFuY2UJAGsDBQRfZmVlBQpkaWZmZXJlbmNlBQlmZWVTY2FsZTYEDmdvdmVybmFuY2VGZWVzCQBrAwUEZmVlcwUNZmVlR292ZXJuYW5jZQUJZmVlU2NhbGU2BAxmaW5hbEJhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQ5nb3Zlcm5hbmNlRmVlcwQQaW52YXJpYW50QmFsYW5jZQkAZQIFCm5ld0JhbGFuY2UFBGZlZXMEAnVzCQEHdW5zdGFrZQIFDmdvdmVybmFuY2VGZWVzCQCRAwIFCGFzc2V0SWRzBQFpAwkAAAIFAnVzBQJ1cwkAlQoDCQDNCAIFC2ludkJhbGFuY2VzBRBpbnZhcmlhbnRCYWxhbmNlCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQ5nb3Zlcm5hbmNlRmVlcwkA2QQBCQCRAwIFCGFzc2V0SWRzBQFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAJEDAgUIYXNzZXRJZHMFAWkFDWtBc3NldEJhbGFuY2UFDGZpbmFsQmFsYW5jZQUDbmlsCQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQCVCgMJAM0IAgULaW52QmFsYW5jZXMFCm5ld0JhbGFuY2UJAM0IAgUNc2NyaXB0QWN0aW9ucwkBDEludGVnZXJFbnRyeQIJAKwCAgkAkQMCBQhhc3NldElkcwUBaQUNa0Fzc2V0QmFsYW5jZQUKbmV3QmFsYW5jZQkAZAIFAWkAAQQNJHQwMTg1MDYxODU5NAoAAiRsBQtuZXdCYWxhbmNlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsBQNuaWwAAAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQERY2FsY1NjcmlwdEFjdGlvbnMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAtpbnZCYWxhbmNlcwgFDSR0MDE4NTA2MTg1OTQCXzEEDXNjcmlwdEFjdGlvbnMIBQ0kdDAxODUwNjE4NTk0Al8yBAJEMgkBB2dldERNZW0CBQtpbnZCYWxhbmNlcwUDYW1wBAttaW50X2Ftb3VudAMJAAACBQtzaGFyZVN1cHBseQAABQJEMQkAawMFC3NoYXJlU3VwcGx5CQBlAgUCRDIFAkQwBQJEMAMJAQZhc3NlcnQBCQBnAgULbWludF9hbW91bnQFDW1pbk1pbnRBbW91bnQJAAIBAhRTbGlwcGFnZSBzY3Jld2VkIHlvdQMFDHN0YWtlRmFybWluZwQCcmUJAPwHBAUEdGhpcwIMcmVpc3N1ZVNoYXJlCQDMCAIFC21pbnRfYW1vdW50BQNuaWwFA25pbAMJAAACBQJyZQUCcmUEAXMJAPwHBAUOZmFybWluZ0FkZHJlc3MCD2xvY2tTaGFyZVRva2VucwkAzAgCCQClCAEFBHRoaXMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMc2hhcmVBc3NldElkBQttaW50X2Ftb3VudAUDbmlsAwkAAAIFAXMFAXMJAM0IAgUNc2NyaXB0QWN0aW9ucwkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBkAgULc2hhcmVTdXBwbHkFC21pbnRfYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBB1JlaXNzdWUDBQxzaGFyZUFzc2V0SWQFC21pbnRfYW1vdW50BgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUDbXNnBmNhbGxlcgULbWludF9hbW91bnQFDHNoYXJlQXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGQCBQtzaGFyZVN1cHBseQULbWludF9hbW91bnQFA25pbANtc2cBDHJlaXNzdWVTaGFyZQEGYW1vdW50CQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFA21zZwkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAUGYW1vdW50BgUDbmlsA21zZwEFZ2V0RHkECWFzc2V0RnJvbQdhc3NldFRvAmR4C3VzZXJBZGRyZXNzBAJ4cAkBA194cAAECWZyb21JbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQlhc3NldEZyb20CEHVua25vd24gdG9rZW4gaW4EB3RvSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUHYXNzZXRUbwIRdW5rbm93biB0b2tlbiBvdXQEAXgJAGQCCQCRAwIFAnhwBQlmcm9tSW5kZXgFAmR4BAF5CQEEZ2V0WQQFCWZyb21JbmRleAUHdG9JbmRleAUBeAUCeHAEAmR5CQBlAgkAZQIJAJEDAgUCeHAFB3RvSW5kZXgFAXkAAQQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEJAQdBZGRyZXNzAQkA2QQBBQt1c2VyQWRkcmVzcwQEX2ZlZQkAawMJAG4EBQNmZWUFC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcFAmR5BQlmZWVTY2FsZTYJAJQKAgUDbmlsCQBlAgUCZHkFBF9mZWUDbXNnAQhleGNoYW5nZQIIdG9rZW5PdXQGbWluX2R5CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkBAiE9AgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAAIBAhNzaXplKHBheW1lbnRzKSAhPSAxBApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnBmNhbGxlcggFA21zZwhwYXltZW50cwQHcGF5bWVudAkAkQMCCAUDbXNnCHBheW1lbnRzAAAEB3Rva2VuSW4JAQ1nZXRTdHJBc3NldElkAQgFB3BheW1lbnQHYXNzZXRJZAQLdG9rZW5PdXRCNTgJANkEAQUIdG9rZW5PdXQEAmR4CAUHcGF5bWVudAZhbW91bnQECWZyb21JbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQd0b2tlbkluAhB1bmtub3duIHRva2VuIGluBAd0b0luZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFCHRva2VuT3V0AhF1bmtub3duIHRva2VuIG91dAQCeHAJAQNfeHAABAF4CQBkAgkAkQMCBQJ4cAUJZnJvbUluZGV4BQJkeAQBeQkBBGdldFkEBQlmcm9tSW5kZXgFB3RvSW5kZXgFAXgFAnhwBANfZHkJAGUCCQBlAgkAkQMCBQJ4cAUHdG9JbmRleAUBeQABBAtmZWVEaXNjb3VudAkBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQgFA21zZwZjYWxsZXIEBF9mZWUJAGsDBQNfZHkJAG4EBQNmZWUFC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcFCWZlZVNjYWxlNgQCZHkJAGUCBQNfZHkFBF9mZWUEDmdvdmVybmFuY2VGZWVzCQBrAwUEX2ZlZQUNZmVlR292ZXJuYW5jZQUJZmVlU2NhbGU2AwkBBmFzc2VydAEJAGcCBQJkeQUGbWluX2R5CQACAQIuRXhjaGFuZ2UgcmVzdWx0ZWQgaW4gZmV3ZXIgY29pbnMgdGhhbiBleHBlY3RlZAoBD21ha2VOZXdCYWxhbmNlcwIDYWNjDHRva2VuQmFsYW5jZQQNJHQwMjEyOTMyMTMxOQUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDIxMjkzMjEzMTkCXzEEAWkIBQ0kdDAyMTI5MzIxMzE5Al8yAwkAAAIFAWkFCWZyb21JbmRleAkAlAoCCQDNCAIFC25ld0JhbGFuY2VzCQBkAgUMdG9rZW5CYWxhbmNlBQJkeAkAZAIFAWkAAQMJAAACBQFpBQd0b0luZGV4CQCUCgIJAM0IAgULbmV3QmFsYW5jZXMJAGQCBQx0b2tlbkJhbGFuY2UFAmR5CQBkAgUBaQABCQCUCgIJAM0IAgULbmV3QmFsYW5jZXMFDHRva2VuQmFsYW5jZQkAZAIFAWkAAQQNJHQwMjE1NzAyMTYzMQoAAiRsBQJ4cAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD21ha2VOZXdCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EC25ld0JhbGFuY2VzCAUNJHQwMjE1NzAyMTYzMQJfMQQBaQgFDSR0MDIxNTcwMjE2MzECXzIDCQESY2hlY2tEQXBwVGhyZXNob2xkAQULbmV3QmFsYW5jZXMJAQV0aHJvdwAEAXMJAQVzdGFrZQIIBQdwYXltZW50BmFtb3VudAkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkAwkAAAIFAXMFAXMEAnVzCQEHdW5zdGFrZQIJAGQCBQJkeQUOZ292ZXJuYW5jZUZlZXMFCHRva2VuT3V0AwkAAAIFAnVzBQJ1cwkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB3Rva2VuSW4FDWtBc3NldEJhbGFuY2UFAXgJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIdG9rZW5PdXQFDWtBc3NldEJhbGFuY2UJAGUCCQBlAgkAkQMCBQJ4cAUHdG9JbmRleAUCZHkFDmdvdmVybmFuY2VGZWVzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cGY2FsbGVyBQJkeQULdG9rZW5PdXRCNTgJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQ5nb3Zlcm5hbmNlRmVlcwULdG9rZW5PdXRCNTgFA25pbAkAlAoCBQJkeQULdG9rZW5PdXRCNTgJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DbXNnAQh3aXRoZHJhdwIKbWluQW1vdW50cwx1bmxvY2tBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyCAUDbXNnCHBheW1lbnRzBAdwYXltZW50CQCRAwIIBQNtc2cIcGF5bWVudHMAAAQHdG9rZW5JbggFB3BheW1lbnQHYXNzZXRJZAMJAQIhPQIFB3Rva2VuSW4FDHNoYXJlQXNzZXRJZAkAAgECDXVua25vd24gdG9rZW4EB19hbW91bnQIBQdwYXltZW50BmFtb3VudAQMdG90YWxfc3VwcGx5BQtzaGFyZVN1cHBseQQGdW5sb2NrAwkAZgIFDHVubG9ja0Ftb3VudAAACQD8BwQFDmZhcm1pbmdBZGRyZXNzAhN3aXRoZHJhd1NoYXJlVG9rZW5zCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQx1bmxvY2tBbW91bnQFA25pbAUDbmlsAAADCQAAAgUGdW5sb2NrBQZ1bmxvY2sEDndpdGhkcmF3QW1vdW50CQBkAgUHX2Ftb3VudAUMdW5sb2NrQW1vdW50CgERY2FsY1NjcmlwdEFjdGlvbnMCA2FjYwdiYWxhbmNlBA0kdDAyMjk2NTIyOTkzBQNhY2MEDXNjcmlwdEFjdGlvbnMIBQ0kdDAyMjk2NTIyOTkzAl8xBAFpCAUNJHQwMjI5NjUyMjk5MwJfMgQHd0Ftb3VudAkAawMFB2JhbGFuY2UFDndpdGhkcmF3QW1vdW50BQx0b3RhbF9zdXBwbHkDCQEGYXNzZXJ0AQkAZwIFB3dBbW91bnQJAJEDAgUKbWluQW1vdW50cwUBaQkAAgECMFdpdGhkcmF3YWwgcmVzdWx0ZWQgaW4gZmV3ZXIgY29pbnMgdGhhbiBleHBlY3RlZAQCdXMJAQd1bnN0YWtlAgUHd0Ftb3VudAkAkQMCBQhhc3NldElkcwUBaQMJAAACBQJ1cwUCdXMJAJQKAgkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAJEDAgUIYXNzZXRJZHMFAWkFDWtBc3NldEJhbGFuY2UJAGUCBQdiYWxhbmNlBQd3QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cGY2FsbGVyBQd3QW1vdW50CQDZBAEJAJEDAgUIYXNzZXRJZHMFAWkFA25pbAkAZAIFAWkAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMjM0ODMyMzU1MQoAAiRsCQEDX3hwAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEWNhbGNTY3JpcHRBY3Rpb25zAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQNc2NyaXB0QWN0aW9ucwgFDSR0MDIzNDgzMjM1NTECXzEEAWkIBQ0kdDAyMzQ4MzIzNTUxAl8yCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBBEJ1cm4CBQxzaGFyZUFzc2V0SWQFDndpdGhkcmF3QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZQIFC3NoYXJlU3VwcGx5BQ53aXRoZHJhd0Ftb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuA21zZwETY2FsY1dpdGhkcmF3T25lQ29pbgMLdG9rZW5BbW91bnQIdG9rZW5PdXQEdXNlcgQBaQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQh0b2tlbk91dAIRdW5rbm93biB0b2tlbiBvdXQJAJQKAgUDbmlsCAkBFF9jYWxjV2l0aGRyYXdPbmVDb2luBAkBA194cAAFC3Rva2VuQW1vdW50BQFpCQEHQWRkcmVzcwEJANkEAQUEdXNlcgJfMQNtc2cBD3dpdGhkcmF3T25lQ29pbgMIdG9rZW5PdXQJbWluQW1vdW50DHVubG9ja0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIJAJADAQgFA21zZwhwYXltZW50cwABCQACAQITc2l6ZShwYXltZW50cykgIT0gMQQKc3VzcGljaW91cwkBD2NoZWNrU3VzcGljaW91cwADCAUKc3VzcGljaW91cwJfMQkAzggCCQERc3VzcGVuZFN1c3BpY2lvdXMBCAUKc3VzcGljaW91cwJfMgkBDnJldHVyblBheW1lbnRzAggFA21zZwZjYWxsZXIIBQNtc2cIcGF5bWVudHMEB3BheW1lbnQJAJEDAggFA21zZwhwYXltZW50cwAABAd0b2tlbkluCAUHcGF5bWVudAdhc3NldElkAwkBAiE9AgUHdG9rZW5JbgUMc2hhcmVBc3NldElkCQACAQINdW5rbm93biB0b2tlbgQIb3V0SW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUIdG9rZW5PdXQCEXVua25vd24gdG9rZW4gb3V0BAxfdG9rZW5BbW91bnQIBQdwYXltZW50BmFtb3VudAQGdW5sb2NrAwkAZgIFDHVubG9ja0Ftb3VudAAACQD8BwQFDmZhcm1pbmdBZGRyZXNzAhN3aXRoZHJhd1NoYXJlVG9rZW5zCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQx1bmxvY2tBbW91bnQFA25pbAUDbmlsAAADCQAAAgUGdW5sb2NrBQZ1bmxvY2sEDndpdGhkcmF3QW1vdW50CQBkAgUMX3Rva2VuQW1vdW50BQx1bmxvY2tBbW91bnQEAnhwCQEDX3hwAAQNJHQwMjQ3ODIyNDg2MwkBFF9jYWxjV2l0aGRyYXdPbmVDb2luBAUCeHAFDndpdGhkcmF3QW1vdW50BQhvdXRJbmRleAgFA21zZwZjYWxsZXIEAmR5CAUNJHQwMjQ3ODIyNDg2MwJfMQQGZHlfZmVlCAUNJHQwMjQ3ODIyNDg2MwJfMgMJAQZhc3NlcnQBCQBnAgUCZHkFCW1pbkFtb3VudAkAAgECGE5vdCBlbm91Z2ggY29pbnMgcmVtb3ZlZAQOZ292ZXJuYW5jZUZlZXMJAGsDBQZkeV9mZWUFDWZlZUdvdmVybmFuY2UFCWZlZVNjYWxlNgQKZHlfYW5kX2ZlZQkAZAIFAmR5BQ5nb3Zlcm5hbmNlRmVlcwoBD21ha2VOZXdCYWxhbmNlcwIDYWNjDHRva2VuQmFsYW5jZQQNJHQwMjUxMjkyNTE1NQUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDI1MTI5MjUxNTUCXzEEAWkIBQ0kdDAyNTEyOTI1MTU1Al8yAwkAAAIFAWkFCG91dEluZGV4CQCUCgIJAM0IAgULbmV3QmFsYW5jZXMJAGUCBQx0b2tlbkJhbGFuY2UFCmR5X2FuZF9mZWUJAGQCBQFpAAEJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwUMdG9rZW5CYWxhbmNlCQBkAgUBaQABBA0kdDAyNTMyMjI1MzgzCgACJGwFAnhwCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPbWFrZU5ld0JhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQLbmV3QmFsYW5jZXMIBQ0kdDAyNTMyMjI1MzgzAl8xBAFpCAUNJHQwMjUzMjIyNTM4MwJfMgMJARJjaGVja0RBcHBUaHJlc2hvbGQBBQtuZXdCYWxhbmNlcwkBBXRocm93AAQCdXMJAQd1bnN0YWtlAgUKZHlfYW5kX2ZlZQUIdG9rZW5PdXQDCQAAAgUCdXMFAnVzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cGY2FsbGVyBQJkeQkA2QQBBQh0b2tlbk91dAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCRAwIFCGFzc2V0SWRzBQFpBQ1rQXNzZXRCYWxhbmNlCQBlAgkAkQMCBQJ4cAUBaQUKZHlfYW5kX2ZlZQkAzAgCCQEEQnVybgIFDHNoYXJlQXNzZXRJZAUOd2l0aGRyYXdBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQ5nb3Zlcm5hbmNlRmVlcwkA2QQBBQh0b2tlbk91dAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGUCBQtzaGFyZVN1cHBseQUOd2l0aGRyYXdBbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgNtc2cBAUEACQCUCgIFA25pbAkBAl9BAANtc2cBD2dldFZpcnR1YWxQcmljZQAEAUQJAQVnZXRfRAIJAQNfeHAACQECX0EACQCUCgIFA25pbAkAawMFAUQFCVBSRUNJU0lPTgULc2hhcmVTdXBwbHkDbXNnAQ9jYWxjVG9rZW5BbW91bnQCB2Ftb3VudHMHZGVwb3NpdAQDYW1wCQECX0EABAhiYWxhbmNlcwkBA194cAAEAkQwCQEHZ2V0RE1lbQIFCGJhbGFuY2VzBQNhbXAKAQ9jYWxjTmV3QmFsYW5jZXMCA2FjYwdiYWxhbmNlBA0kdDAyNjI0NjI2MjcyBQNhY2MEC25ld0JhbGFuY2VzCAUNJHQwMjYyNDYyNjI3MgJfMQQBaQgFDSR0MDI2MjQ2MjYyNzICXzIECm5ld0JhbGFuY2UJAGQCBQdiYWxhbmNlAwUHZGVwb3NpdAkAkQMCBQdhbW91bnRzBQFpCQEBLQEJAJEDAgUHYW1vdW50cwUBaQkAlAoCCQDNCAIFC25ld0JhbGFuY2VzBQpuZXdCYWxhbmNlCQBkAgUBaQABBAtuZXdCYWxhbmNlcwgKAAIkbAUIYmFsYW5jZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ9jYWxjTmV3QmFsYW5jZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPAl8xBAJEMQkBB2dldERNZW0CBQtuZXdCYWxhbmNlcwUDYW1wBARkaWZmAwUHZGVwb3NpdAkAZQIFAkQxBQJEMAkAZQIFAkQwBQJEMQkAlAoCBQNuaWwJAGsDBQRkaWZmBQtzaGFyZVN1cHBseQUCRDADbXNnAQVyYW1wQQIIX2Z1dHVyZUELX2Z1dHVyZVRpbWUJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFA21zZwMJAQZhc3NlcnQBCQBnAgUOYmxvY2tUaW1lc3RhbXAJAGQCBQ5pbml0aWFsX0FfdGltZQUNTUlOX1JBTVBfVElNRQkAAgECCXRvbyBvZnRlbgMJAQZhc3NlcnQBCQBnAgULX2Z1dHVyZVRpbWUJAGQCBQ5ibG9ja1RpbWVzdGFtcAUNTUlOX1JBTVBfVElNRQkAAgECEWluc3VmZmljaWVudCB0aW1lBApfaW5pdGlhbF9BCQECX0EAAwkBBmFzc2VydAEDCQBmAgUIX2Z1dHVyZUEAAAkAZgIFBU1BWF9BBQhfZnV0dXJlQQcJAAIBAhFvdXQgb2YgYmFzZSByYW5nZQMJAQZhc3NlcnQBAwMJAGcCBQhfZnV0dXJlQQUKX2luaXRpYWxfQQkAZwIJAGgCBQpfaW5pdGlhbF9BBQxNQVhfQV9DSEFOR0UFCF9mdXR1cmVBBwYDCQBmAgUKX2luaXRpYWxfQQUIX2Z1dHVyZUEJAGcCCQBoAgUIX2Z1dHVyZUEFDE1BWF9BX0NIQU5HRQUKX2luaXRpYWxfQQcJAAIBAgxvdXQgb2YgcmFuZ2UJAMwIAgkBDEludGVnZXJFbnRyeQICCWluaXRpYWxfQQUKX2luaXRpYWxfQQkAzAgCCQEMSW50ZWdlckVudHJ5AgIIZnV0dXJlX0EFCF9mdXR1cmVBCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5pbml0aWFsX0FfdGltZQUOYmxvY2tUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQICDWZ1dHVyZV9BX3RpbWUFC19mdXR1cmVUaW1lBQNuaWwDbXNnAQlzdG9wUmFtcEEACQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cECGN1cnJlbnRBCQECX0EACQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFCGN1cnJlbnRBCQDMCAIJAQxJbnRlZ2VyRW50cnkCAghmdXR1cmVfQQUIY3VycmVudEEJAMwIAgkBDEludGVnZXJFbnRyeQICDmluaXRpYWxfQV90aW1lBQ5ibG9ja1RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgINZnV0dXJlX0FfdGltZQUOYmxvY2tUaW1lc3RhbXAFA25pbANtc2cBCHNodXRkb3duAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUDbXNnAwkBASEBBQZhY3RpdmUJAAIBCQCsAgICIkRBcHAgaXMgYWxyZWFkeSBzdXNwZW5kZWQuIENhdXNlOiAJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUGa0NhdXNlAhp0aGUgY2F1c2Ugd2Fzbid0IHNwZWNpZmllZAkBB3N1c3BlbmQBAg9QYXVzZWQgYnkgYWRtaW4DbXNnAQhhY3RpdmF0ZQAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFA21zZwMFBmFjdGl2ZQkBDXRocm93SXNBY3RpdmUACQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBgkAzAgCCQELRGVsZXRlRW50cnkBBQZrQ2F1c2UFA25pbANtc2cBGGtlZXBMaW1pdEZvckZpcnN0SGFydmVzdAEKc2hhcmVMaW1pdAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUDbXNnCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtrU2hhcmVMaW1pdAUKc2hhcmVMaW1pdAUDbmlsAQJ0eAEGdmVyaWZ5AAQTbXVsdGlTaWduZWRCeUFkbWlucwQSYWRtaW5QdWJLZXkxU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxAAEAAAQSYWRtaW5QdWJLZXkyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUMYWRtaW5QdWJLZXkyAAEAAAQSYWRtaW5QdWJLZXkzU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUMYWRtaW5QdWJLZXkzAAEAAAkAZwIJAGQCCQBkAgUSYWRtaW5QdWJLZXkxU2lnbmVkBRJhZG1pblB1YktleTJTaWduZWQFEmFkbWluUHViS2V5M1NpZ25lZAACBAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgQDaW52BQckbWF0Y2gwBBNjYWxsVGFrZUludG9BY2NvdW50AwkAAAIIBQNpbnYEZEFwcAUEdGhpcwkAAAIIBQNpbnYIZnVuY3Rpb24CGXRha2VJbnRvQWNjb3VudEV4dHJhRnVuZHMHBA1zaWduZWRCeUFkbWluAwMDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQxhZG1pblB1YktleTEGCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQxhZG1pblB1YktleTIGCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQxhZG1pblB1YktleTMGCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABRFhZG1pblB1YktleUludm9rZQMDBRNjYWxsVGFrZUludG9BY2NvdW50BQ1zaWduZWRCeUFkbWluBwYFE211bHRpU2lnbmVkQnlBZG1pbnMFE211bHRpU2lnbmVkQnlBZG1pbnMF5F9j", "height": 2207062, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3TKVtwjQqAUdiMcEdopszTpRJfT4huFU7sycchqExLZa Next: none Diff:
OldNewDifferences
99
1010 let d = (86400 / 60)
1111
12-let e = "asset_ids"
12+let e = "2.0.0"
1313
14-let f = "_balance"
14+let f = "version"
1515
16-let g = "active"
16+let g = "asset_ids"
1717
18-let h = "shutdown_cause"
18+let h = "_balance"
1919
20-let i = "share_asset_id"
20+let i = "active"
2121
22-let j = "share_asset_supply"
22+let j = "shutdown_cause"
2323
24-let k = "commission"
24+let k = "share_asset_id"
2525
26-let l = "staking_usdnnsbt_address"
26+let l = "share_asset_supply"
2727
28-let m = "discounts"
28+let m = "commission"
2929
30-let n = "discount_values"
30+let n = "dAppThresholdCoef"
3131
32-let o = "_SWOP_amount"
32+let o = "staking_usdnnsbt_address"
3333
34-let p = "first_harvest"
34+let p = "discounts"
3535
36-let q = "first_harvest_height"
36+let q = "discount_values"
3737
38-let r = "share_limit_on_first_harvest"
38+let r = "_SWOP_amount"
3939
40-let s = "base_period"
40+let s = "first_harvest"
4141
42-let t = "period_length"
42+let t = "first_harvest_height"
4343
44-let u = "start_height"
44+let u = "share_limit_on_first_harvest"
4545
46-let v = "admin_pub_1"
46+let v = "base_period"
4747
48-let w = "admin_pub_2"
48+let w = "period_length"
4949
50-let x = "admin_pub_3"
50+let x = "start_height"
5151
52-let y = "admin_invoke_pub"
52+let y = "admin_pub_1"
5353
54-let z = "money_box_address"
54+let z = "admin_pub_2"
5555
56-let B = "governance_address"
56+let B = "admin_pub_3"
5757
58-let C = "voting_address"
58+let C = "admin_invoke_pub"
5959
60-let E = "farming_address"
60+let E = "money_box_address"
6161
62-let F = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
62+let F = "governance_address"
6363
64-func G (H) = {
65- let I = getString(F, H)
66- if ($isInstanceOf(I, "String"))
64+let G = "voting_address"
65+
66+let H = "farming_address"
67+
68+let I = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
69+
70+func J (K) = {
71+ let L = getString(I, K)
72+ if ($isInstanceOf(L, "String"))
6773 then {
68- let J = I
69- fromBase58String(J)
74+ let M = L
75+ fromBase58String(M)
7076 }
7177 else {
72- let K = I
73- throw((H + "is empty"))
78+ let N = L
79+ throw((K + "is empty"))
7480 }
7581 }
7682
7783
78-let L = G(v)
84+let O = J(y)
7985
80-let M = G(w)
86+let P = J(z)
8187
82-let N = G(x)
88+let Q = J(B)
8389
84-let O = G(y)
90+let R = J(C)
8591
86-let P = Address(G(z))
92+let S = Address(J(E))
8793
88-let Q = Address(G(B))
94+let T = Address(J(F))
8995
90-let R = Address(G(l))
96+let U = Address(J(o))
9197
92-let S = Address(G(C))
98+let V = Address(J(G))
9399
94-let T = Address(G(E))
100+let W = Address(J(H))
95101
96-let U = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
102+let X = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
97103
98-let V = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
104+let Y = [toBase58String(X)]
99105
100-let W = [toBase58String(V)]
106+let Z = valueOrErrorMessage(getInteger(V, v), "Empty kBasePeriod")
101107
102-let X = valueOrErrorMessage(getInteger(S, s), "Empty kBasePeriod")
108+let aa = valueOrErrorMessage(getInteger(V, x), "Empty kStartHeight")
103109
104-let Y = valueOrErrorMessage(getInteger(S, u), "Empty kStartHeight")
110+let ab = valueOrErrorMessage(getInteger(V, w), "Empty kPeriodLength")
105111
106-let Z = valueOrErrorMessage(getInteger(S, t), "Empty kPeriodLength")
112+let ac = ((Z + ((height - aa) / ab)) + 3)
107113
108-let aa = ((X + ((height - Y) / Z)) + 3)
114+let ad = getBooleanValue(this, i)
109115
110-let ab = getBooleanValue(this, g)
116+let ae = fromBase58String(getStringValue(this, k))
111117
112-let ac = fromBase58String(getStringValue(this, i))
118+let af = getIntegerValue(this, l)
113119
114-let ad = getIntegerValue(this, j)
120+let ag = 1000000
115121
116-let ae = 1000000
122+let ah = getIntegerValue(this, m)
117123
118-let af = getIntegerValue(this, k)
124+let ai = fraction(40, ag, 100)
119125
120-let ag = fraction(40, ae, 100)
126+let aj = getIntegerValue(this, "initial_A")
121127
122-let ah = getIntegerValue(this, "initial_A")
128+let ak = getIntegerValue(this, "future_A")
123129
124-let ai = getIntegerValue(this, "future_A")
130+let al = valueOrElse(getInteger(this, "initial_A_time"), 0)
125131
126-let aj = valueOrElse(getInteger(this, "initial_A_time"), 0)
132+let am = valueOrElse(getInteger(this, "future_A_time"), 0)
127133
128-let ak = valueOrElse(getInteger(this, "future_A_time"), 0)
134+let an = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
129135
130-let al = split(getStringValue(this, e), ",")
136+let ao = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
131137
132-let am = size(al)
138+let ap = split(getStringValue(this, g), ",")
133139
134-func an (ao) = [BooleanEntry(g, false), StringEntry(h, ao)]
140+let aq = size(ap)
141+
142+func ar (as) = [BooleanEntry(i, false), StringEntry(j, as)]
135143
136144
137-func ap () = throw("DApp is already active")
145+func at () = throw("DApp is already active")
138146
139147
140-func aq () = if (ab)
148+func au () = if (ad)
141149 then unit
142150 else throw("DApp is inactive at this moment")
143151
144152
145-func ar (as) = if (containsElement([L, M, N], as.callerPublicKey))
153+func av (aw) = if (containsElement([O, P, Q], aw.callerPublicKey))
146154 then unit
147155 else throw("Only admin can call this function")
148156
149157
150-let at = toBigInt(2)
158+func ax (aw) = if ((this == aw.caller))
159+ then unit
160+ else throw("Only contract itself can call this function")
151161
152-let au = height
153162
154-func av (aw) = if (aw)
163+let ay = toBigInt(2)
164+
165+let az = height
166+
167+func aA (aB) = if (aB)
155168 then false
156169 else true
157170
158171
159-func ax (ay) = {
160- let az = valueOrElse(getInteger(Q, (toString(ay) + o)), 0)
161- let aA = split(getStringValue(F, n), ",")
162- let aB = split(getStringValue(F, m), ",")
163- if (if ((az >= parseIntValue(aA[0])))
164- then (parseIntValue(aA[1]) > az)
172+func aC (aD) = {
173+ let aE = valueOrElse(getInteger(T, (toString(aD) + r)), 0)
174+ let aF = split(getStringValue(I, q), ",")
175+ let aG = split(getStringValue(I, p), ",")
176+ if (if ((aE >= parseIntValue(aF[0])))
177+ then (parseIntValue(aF[1]) > aE)
165178 else false)
166- then (ae - parseIntValue(aB[0]))
167- else if (if ((az >= parseIntValue(aA[1])))
168- then (parseIntValue(aA[2]) > az)
179+ then (ag - parseIntValue(aG[0]))
180+ else if (if ((aE >= parseIntValue(aF[1])))
181+ then (parseIntValue(aF[2]) > aE)
169182 else false)
170- then (ae - parseIntValue(aB[1]))
171- else if (if ((az >= parseIntValue(aA[2])))
172- then (parseIntValue(aA[3]) > az)
183+ then (ag - parseIntValue(aG[1]))
184+ else if (if ((aE >= parseIntValue(aF[2])))
185+ then (parseIntValue(aF[3]) > aE)
173186 else false)
174- then (ae - parseIntValue(aB[2]))
175- else if (if ((az >= parseIntValue(aA[3])))
176- then (parseIntValue(aA[4]) > az)
187+ then (ag - parseIntValue(aG[2]))
188+ else if (if ((aE >= parseIntValue(aF[3])))
189+ then (parseIntValue(aF[4]) > aE)
177190 else false)
178- then (ae - parseIntValue(aB[3]))
179- else if ((az >= parseIntValue(aA[4])))
180- then (ae - parseIntValue(aB[4]))
181- else ae
182- }
183-
184-
185-func aC () = {
186- let aD = ak
187- let aE = ai
188- if ((aD > au))
189- then {
190- let aF = ah
191- let aG = aj
192- if ((aE > aF))
193- then (aF + (((aE - aF) * (au - aG)) / (aD - aG)))
194- else (aF - (((aF - aE) * (au - aG)) / (aD - aG)))
195- }
196- else aE
191+ then (ag - parseIntValue(aG[3]))
192+ else if ((aE >= parseIntValue(aF[4])))
193+ then (ag - parseIntValue(aG[4]))
194+ else ag
197195 }
198196
199197
200198 func aH () = {
201- func aI (aJ,aK) = (aJ :+ valueOrElse(getInteger(this, (aK + f)), 0))
202-
203- let aL = al
204- let aM = size(aL)
205- let aN = nil
206- func aO (aP,aQ) = if ((aQ >= aM))
207- then aP
208- else aI(aP, aL[aQ])
209-
210- func aR (aP,aQ) = if ((aQ >= aM))
211- then aP
212- else throw("List size exceeds 15")
213-
214- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
199+ let aI = am
200+ let aJ = ak
201+ if ((aI > az))
202+ then {
203+ let aK = aj
204+ let aL = al
205+ if ((aJ > aK))
206+ then (aK + (((aJ - aK) * (az - aL)) / (aI - aL)))
207+ else (aK - (((aK - aJ) * (az - aL)) / (aI - aL)))
208+ }
209+ else aJ
215210 }
216211
217212
218-func aS (aT) = aT
213+func aM () = {
214+ func aN (aO,aP) = (aO :+ valueOrElse(getInteger(this, (aP + h)), 0))
219215
216+ let aQ = ap
217+ let aR = size(aQ)
218+ let aS = nil
219+ func aT (aU,aV) = if ((aV >= aR))
220+ then aU
221+ else aN(aU, aQ[aV])
220222
221-func aU (aJ,aV) = (aJ + aV)
223+ func aW (aU,aV) = if ((aV >= aR))
224+ then aU
225+ else throw("List size exceeds 15")
222226
223-
224-func aW (aT,aX) = {
225- let aY = invoke(this, "D", [aT, aX], nil)
226- if ($isInstanceOf(aY, "Int"))
227- then aY
228- else throw(($getType(invoke(this, "D", [aT, aX], nil)) + " couldn't be cast to Int"))
227+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
229228 }
230229
231230
232-func aZ (aT,aX) = {
233- let ba = {
234- let aL = aT
235- let aM = size(aL)
236- let aN = 0
237- func aO (aP,aQ) = if ((aQ >= aM))
238- then aP
239- else aU(aP, aL[aQ])
231+func aX (aY) = aY
240232
241- func aR (aP,aQ) = if ((aQ >= aM))
242- then aP
233+
234+func aZ (aO,ba) = (aO + ba)
235+
236+
237+func bb (aY,bc) = {
238+ let bd = invoke(this, "D", [aY, bc], nil)
239+ if ($isInstanceOf(bd, "Int"))
240+ then bd
241+ else throw(($getType(invoke(this, "D", [aY, bc], nil)) + " couldn't be cast to Int"))
242+ }
243+
244+
245+func be (aY,bc) = {
246+ let bf = {
247+ let aQ = aY
248+ let aR = size(aQ)
249+ let aS = 0
250+ func aT (aU,aV) = if ((aV >= aR))
251+ then aU
252+ else aZ(aU, aQ[aV])
253+
254+ func aW (aU,aV) = if ((aV >= aR))
255+ then aU
243256 else throw("List size exceeds 15")
244257
245- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
258+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
246259 }
247- if ((ba == 0))
260+ if ((bf == 0))
248261 then 0
249262 else {
250- let bb = (aX * am)
251- let bc = (toBigInt(bb) * toBigInt(ba))
252- let bd = toBigInt((bb - 1))
253- func be (aJ,as) = if ((aJ._2 == true))
254- then aJ
263+ let bg = (bc * aq)
264+ let bh = (toBigInt(bg) * toBigInt(bf))
265+ let bi = toBigInt((bg - 1))
266+ func bj (aO,aw) = if ((aO._2 == true))
267+ then aO
255268 else {
256- let bf = aJ._1
257- func bg (bh,as) = if ((am > as))
258- then ((bh * bf) / (toBigInt(aT[as]) * toBigInt(am)))
259- else bh
269+ let bk = aO._1
270+ func bl (bm,aw) = if ((aq > aw))
271+ then ((bm * bk) / (toBigInt(aY[aw]) * toBigInt(aq)))
272+ else bm
260273
261- let bh = {
262- let aL = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
263- let aM = size(aL)
264- let aN = bf
265- func bi (aP,aQ) = if ((aQ >= aM))
266- then aP
267- else bg(aP, aL[aQ])
274+ let bm = {
275+ let aQ = an
276+ let aR = size(aQ)
277+ let aS = bk
278+ func bn (aU,aV) = if ((aV >= aR))
279+ then aU
280+ else bl(aU, aQ[aV])
268281
269- func bj (aP,aQ) = if ((aQ >= aM))
270- then aP
282+ func bo (aU,aV) = if ((aV >= aR))
283+ then aU
271284 else throw("List size exceeds 15")
272285
273- bj(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
286+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
274287 }
275- let bk = fraction((bc + (toBigInt(am) * bh)), bf, ((bd * bf) + (toBigInt((am + 1)) * bh)))
276- if ((bk > bf))
277- then if ((1 >= toInt((bk - bf))))
278- then $Tuple2(bk, true)
279- else $Tuple2(bk, false)
280- else if ((1 >= toInt((bf - bk))))
281- then $Tuple2(bk, true)
282- else $Tuple2(bk, false)
288+ let bp = fraction((bh + (toBigInt(aq) * bm)), bk, ((bi * bk) + (toBigInt((aq + 1)) * bm)))
289+ if ((bp > bk))
290+ then if ((1 >= toInt((bp - bk))))
291+ then $Tuple2(bp, true)
292+ else $Tuple2(bp, false)
293+ else if ((1 >= toInt((bk - bp))))
294+ then $Tuple2(bp, true)
295+ else $Tuple2(bp, false)
283296 }
284297
285- let bl = {
286- let aL = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
287- let aM = size(aL)
288- let aN = $Tuple2(toBigInt(ba), false)
289- func bi (aP,aQ) = if ((aQ >= aM))
290- then aP
291- else be(aP, aL[aQ])
298+ let bq = {
299+ let aQ = an
300+ let aR = size(aQ)
301+ let aS = $Tuple2(toBigInt(bf), false)
302+ func bn (aU,aV) = if ((aV >= aR))
303+ then aU
304+ else bj(aU, aQ[aV])
292305
293- func bj (aP,aQ) = if ((aQ >= aM))
294- then aP
306+ func bo (aU,aV) = if ((aV >= aR))
307+ then aU
295308 else throw("List size exceeds 15")
296309
297- bj(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
310+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
298311 }
299- let bk = bl._1
300- let bm = bl._2
301- if ((bm == false))
302- then throw(("get_D() not finished with " + toString(bk)))
303- else toInt(bk)
312+ let bp = bq._1
313+ let br = bq._2
314+ if ((br == false))
315+ then throw(("get_D() not finished with " + toString(bp)))
316+ else toInt(bp)
304317 }
305318 }
306319
307320
308-func bn (aT,aX) = aW(aS(aT), aX)
321+func bs (aY,bc) = bb(aX(aY), bc)
309322
310323
311-func bo (bp,bq,br,bs) = if (av((bp != bq)))
324+func bt (bu,bv,bw,bx) = if (aA((bu != bv)))
312325 then throw("same coin")
313- else if (av(if ((bq >= 0))
314- then (bp >= 0)
326+ else if (aA(if ((bv >= 0))
327+ then (bu >= 0)
315328 else false))
316329 then throw("below zero")
317- else if (av(if ((am > bq))
318- then (am > bp)
330+ else if (aA(if ((aq > bv))
331+ then (aq > bu)
319332 else false))
320333 then throw("above N_COINS")
321334 else {
322- let aX = aC()
323- let bk = aW(bs, aX)
324- let bb = (aX * am)
325- func bt (aJ,as) = {
326- let bu = aJ
327- let bv = bu._1
328- let bw = bu._2
329- let bx = if ((bp == as))
330- then br
331- else bs[as]
332- if (if ((as != bq))
333- then (am > as)
335+ let bc = aH()
336+ let bp = bb(bx, bc)
337+ let bg = (bc * aq)
338+ func by (aO,aw) = {
339+ let bz = aO
340+ let bA = bz._1
341+ let bB = bz._2
342+ let bC = if ((bu == aw))
343+ then bw
344+ else bx[aw]
345+ if (if ((aw != bv))
346+ then (aq > aw)
334347 else false)
335- then $Tuple2((bv + bx), fraction(bw, toBigInt(bk), toBigInt((bx * am))))
336- else $Tuple2(bv, bw)
348+ then $Tuple2((bA + bC), fraction(bB, toBigInt(bp), toBigInt((bC * aq))))
349+ else $Tuple2(bA, bB)
337350 }
338351
339- let by = {
340- let aL = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
341- let aM = size(aL)
342- let aN = $Tuple2(0, toBigInt(bk))
343- func aO (aP,aQ) = if ((aQ >= aM))
344- then aP
345- else bt(aP, aL[aQ])
352+ let bD = {
353+ let aQ = an
354+ let aR = size(aQ)
355+ let aS = $Tuple2(0, toBigInt(bp))
356+ func aT (aU,aV) = if ((aV >= aR))
357+ then aU
358+ else by(aU, aQ[aV])
346359
347- func aR (aP,aQ) = if ((aQ >= aM))
348- then aP
360+ func aW (aU,aV) = if ((aV >= aR))
361+ then aU
349362 else throw("List size exceeds 15")
350363
351- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
364+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
352365 }
353- let bv = by._1
354- let bz = by._2
355- let bw = fraction(bz, toBigInt(bk), toBigInt((bb * am)))
356- let bA = toBigInt(((bv + (bk / bb)) - bk))
357- func bB (aJ,bC) = if ((aJ._2 == true))
358- then aJ
366+ let bA = bD._1
367+ let bE = bD._2
368+ let bB = fraction(bE, toBigInt(bp), toBigInt((bg * aq)))
369+ let bF = toBigInt(((bA + (bp / bg)) - bp))
370+ func bG (aO,bH) = if ((aO._2 == true))
371+ then aO
359372 else {
360- let bD = aJ._1
361- let bE = (((bD * bD) + bw) / ((at * bD) + bA))
362- if ((bE > bD))
363- then if ((1 >= toInt((bE - bD))))
364- then $Tuple2(bE, true)
365- else $Tuple2(bE, false)
366- else if ((1 >= toInt((bD - bE))))
367- then $Tuple2(bE, true)
368- else $Tuple2(bE, false)
373+ let bI = aO._1
374+ let bJ = (((bI * bI) + bB) / ((ay * bI) + bF))
375+ if ((bJ > bI))
376+ then if ((1 >= toInt((bJ - bI))))
377+ then $Tuple2(bJ, true)
378+ else $Tuple2(bJ, false)
379+ else if ((1 >= toInt((bI - bJ))))
380+ then $Tuple2(bJ, true)
381+ else $Tuple2(bJ, false)
369382 }
370383
371- let bF = {
372- let aL = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
373- let aM = size(aL)
374- let aN = $Tuple2(toBigInt(bk), false)
375- func bi (aP,aQ) = if ((aQ >= aM))
376- then aP
377- else bB(aP, aL[aQ])
384+ let bK = {
385+ let aQ = ao
386+ let aR = size(aQ)
387+ let aS = $Tuple2(toBigInt(bp), false)
388+ func bn (aU,aV) = if ((aV >= aR))
389+ then aU
390+ else bG(aU, aQ[aV])
378391
379- func bj (aP,aQ) = if ((aQ >= aM))
380- then aP
392+ func bo (aU,aV) = if ((aV >= aR))
393+ then aU
381394 else throw("List size exceeds 16")
382395
383- bj(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
396+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
384397 }
385- let bE = bF._1
386- let bm = bF._2
387- if ((bm == false))
388- then throw(("getY() not finished with " + toString(bE)))
389- else toInt(bE)
398+ let bJ = bK._1
399+ let br = bK._2
400+ if ((br == false))
401+ then throw(("getY() not finished with " + toString(bJ)))
402+ else toInt(bJ)
390403 }
391404
392405
393-func bG (bH,bp,aT,bk) = if (av((bp >= 0)))
406+func bL (bM,bu,aY,bp) = if (aA((bu >= 0)))
394407 then throw("i below zero")
395- else if (av((am > bp)))
408+ else if (aA((aq > bu)))
396409 then throw("i above N_COINS")
397410 else {
398- let bb = (bH * am)
399- func bt (aJ,as) = {
400- let bI = aJ
401- let bv = bI._1
402- let bw = bI._2
403- let bx = if (if ((bp != as))
404- then (am > as)
411+ let bg = (bM * aq)
412+ func by (aO,aw) = {
413+ let bN = aO
414+ let bA = bN._1
415+ let bB = bN._2
416+ let bC = if (if ((bu != aw))
417+ then (aq > aw)
405418 else false)
406- then aT[as]
419+ then aY[aw]
407420 else 0
408- if (if ((am > as))
409- then (bp != as)
421+ if (if ((aq > aw))
422+ then (bu != aw)
410423 else false)
411- then $Tuple2((bv + bx), fraction(bw, toBigInt(bk), toBigInt((bx * am))))
412- else $Tuple2(bv, bw)
424+ then $Tuple2((bA + bC), fraction(bB, toBigInt(bp), toBigInt((bC * aq))))
425+ else $Tuple2(bA, bB)
413426 }
414427
415- let bJ = {
416- let aL = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
417- let aM = size(aL)
418- let aN = $Tuple2(0, toBigInt(bk))
419- func aO (aP,aQ) = if ((aQ >= aM))
420- then aP
421- else bt(aP, aL[aQ])
428+ let bO = {
429+ let aQ = an
430+ let aR = size(aQ)
431+ let aS = $Tuple2(0, toBigInt(bp))
432+ func aT (aU,aV) = if ((aV >= aR))
433+ then aU
434+ else by(aU, aQ[aV])
422435
423- func aR (aP,aQ) = if ((aQ >= aM))
424- then aP
436+ func aW (aU,aV) = if ((aV >= aR))
437+ then aU
425438 else throw("List size exceeds 15")
426439
427- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
440+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
428441 }
429- let bv = bJ._1
430- let bz = bJ._2
431- let bw = fraction(bz, toBigInt(bk), toBigInt((bb * am)))
432- let bA = toBigInt(((bv + (bk / bb)) - bk))
433- func bK (aJ,as) = if ((aJ._2 == true))
434- then aJ
442+ let bA = bO._1
443+ let bE = bO._2
444+ let bB = fraction(bE, toBigInt(bp), toBigInt((bg * aq)))
445+ let bF = toBigInt(((bA + (bp / bg)) - bp))
446+ func bP (aO,aw) = if ((aO._2 == true))
447+ then aO
435448 else {
436- let bD = aJ._1
437- let bE = (((bD * bD) + bw) / ((at * bD) + bA))
438- if ((bE > bD))
439- then if ((1 >= toInt((bE - bD))))
440- then $Tuple2(bE, true)
441- else $Tuple2(bE, false)
442- else if ((1 >= toInt((bD - bE))))
443- then $Tuple2(bE, true)
444- else $Tuple2(bE, false)
449+ let bI = aO._1
450+ let bJ = (((bI * bI) + bB) / ((ay * bI) + bF))
451+ if ((bJ > bI))
452+ then if ((1 >= toInt((bJ - bI))))
453+ then $Tuple2(bJ, true)
454+ else $Tuple2(bJ, false)
455+ else if ((1 >= toInt((bI - bJ))))
456+ then $Tuple2(bJ, true)
457+ else $Tuple2(bJ, false)
445458 }
446459
447- let bL = {
448- let aL = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
449- let aM = size(aL)
450- let aN = $Tuple2(toBigInt(bk), false)
451- func bi (aP,aQ) = if ((aQ >= aM))
452- then aP
453- else bK(aP, aL[aQ])
460+ let bQ = {
461+ let aQ = ao
462+ let aR = size(aQ)
463+ let aS = $Tuple2(toBigInt(bp), false)
464+ func bn (aU,aV) = if ((aV >= aR))
465+ then aU
466+ else bP(aU, aQ[aV])
454467
455- func bj (aP,aQ) = if ((aQ >= aM))
456- then aP
468+ func bo (aU,aV) = if ((aV >= aR))
469+ then aU
457470 else throw("List size exceeds 16")
458471
459- bj(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
472+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
460473 }
461- let bE = bL._1
462- let bm = bL._2
463- if ((bm == false))
464- then throw(("get_y_D() not finished with " + toString(bE)))
465- else toInt(bE)
474+ let bJ = bQ._1
475+ let br = bQ._2
476+ if ((br == false))
477+ then throw(("get_y_D() not finished with " + toString(bJ)))
478+ else toInt(bJ)
466479 }
467480
468481
469-func bM (aT,bN,as,bO) = {
470- let bP = ax(bO)
471- let aX = aC()
472- let bQ = ((fraction(af, bP, ae, CEILING) * am) / (4 * (am - 1)))
473- let bR = ad
474- let bS = aW(aT, aX)
475- let bT = (bS - fraction(bN, bS, bR))
476- let bU = bG(aX, as, aT, bT)
477- let bV = (aT[as] - bU)
478- func bW (aJ,bX) = {
479- let bY = aJ
480- let bZ = bY._1
481- let ca = bY._2
482- let cb = if ((ca == as))
483- then (fraction(bX, bT, bS) - bU)
484- else (bX - fraction(bX, bT, bS))
485- $Tuple2((bZ :+ (bX - fraction(bQ, cb, ae))), (ca + 1))
482+func bR (aY,bS,aw,bT) = {
483+ let bU = aC(bT)
484+ let bc = aH()
485+ let bV = ((fraction(ah, bU, ag, CEILING) * aq) / (4 * (aq - 1)))
486+ let bW = af
487+ let bX = bb(aY, bc)
488+ let bY = (bX - fraction(bS, bX, bW))
489+ let bZ = bL(bc, aw, aY, bY)
490+ let ca = (aY[aw] - bZ)
491+ func cb (aO,cc) = {
492+ let cd = aO
493+ let ce = cd._1
494+ let cf = cd._2
495+ let cg = if ((cf == aw))
496+ then (fraction(cc, bY, bX) - bZ)
497+ else (cc - fraction(cc, bY, bX))
498+ $Tuple2((ce :+ (cc - fraction(bV, cg, ag))), (cf + 1))
486499 }
487500
488- let cc = {
489- let aL = aT
490- let aM = size(aL)
491- let aN = $Tuple2(nil, 0)
492- func aO (aP,aQ) = if ((aQ >= aM))
493- then aP
494- else bW(aP, aL[aQ])
501+ let ch = {
502+ let aQ = aY
503+ let aR = size(aQ)
504+ let aS = $Tuple2(nil, 0)
505+ func aT (aU,aV) = if ((aV >= aR))
506+ then aU
507+ else cb(aU, aQ[aV])
495508
496- func aR (aP,aQ) = if ((aQ >= aM))
497- then aP
509+ func aW (aU,aV) = if ((aV >= aR))
510+ then aU
498511 else throw("List size exceeds 15")
499512
500- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
513+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
501514 }
502- let bZ = cc._1
503- let ca = cc._2
504- let cd = bZ[as]
505- let ce = ((cd - bG(aX, as, bZ, bT)) - 1)
506- $Tuple2(ce, (bV - ce))
515+ let ce = ch._1
516+ let cf = ch._2
517+ let ci = ce[aw]
518+ let cj = ((ci - bL(bc, aw, ce, bY)) - 1)
519+ $Tuple2(cj, (ca - cj))
507520 }
508521
509522
510-func cf (aK) = {
511- let I = aK
512- if ($isInstanceOf(I, "ByteVector"))
523+func ck (aP) = {
524+ let L = aP
525+ if ($isInstanceOf(L, "ByteVector"))
513526 then {
514- let cg = I
515- toBase58String(cg)
527+ let cl = L
528+ toBase58String(cl)
516529 }
517- else if ($isInstanceOf(I, "Unit"))
530+ else if ($isInstanceOf(L, "Unit"))
518531 then {
519- let ch = I
532+ let cm = L
520533 "WAVES"
521534 }
522535 else throw("Match error")
523536 }
524537
525538
526-func ci (cj,aK) = if (cj)
527- then $Tuple2("lockNeutrino", R)
528- else $Tuple2("unlockNeutrino", R)
539+func cn (co,aP) = if (co)
540+ then $Tuple2("lockNeutrino", U)
541+ else $Tuple2("unlockNeutrino", U)
529542
530543
531-func ck (cj,cl,aK) = if (cj)
544+func cp (co,cq,aP) = if (co)
532545 then {
533- let cm = ci(cj, aK)
534- let cn = cm._1
535- let co = cm._2
536- $Tuple4(cn, co, nil, [AttachedPayment(aK, cl)])
546+ let cr = cn(co, aP)
547+ let cs = cr._1
548+ let ct = cr._2
549+ $Tuple4(cs, ct, nil, [AttachedPayment(aP, cq)])
537550 }
538551 else {
539- let cp = ci(cj, aK)
540- let cn = cp._1
541- let co = cp._2
542- $Tuple4(cn, co, [cl, toBase58String(aK)], nil)
552+ let cu = cn(co, aP)
553+ let cs = cu._1
554+ let ct = cu._2
555+ $Tuple4(cs, ct, [cq, toBase58String(aP)], nil)
543556 }
544557
545558
546-func cj (cl,cq) = if (containsElement(W, cq))
559+func co (cq,cv) = if (containsElement(Y, cv))
547560 then {
548- let cr = ck(true, cl, fromBase58String(cq))
549- let cn = cr._1
550- let cs = cr._2
551- let ct = cr._3
552- let cu = cr._4
553- invoke(cs, cn, ct, cu)
561+ let cw = cp(true, cq, fromBase58String(cv))
562+ let cs = cw._1
563+ let cx = cw._2
564+ let cy = cw._3
565+ let cz = cw._4
566+ invoke(cx, cs, cy, cz)
554567 }
555568 else 0
556569
557570
558-func cv (cl,cq) = if (containsElement(W, cq))
571+func cA (cq,cv) = if (containsElement(Y, cv))
559572 then {
560- let cw = ck(false, cl, fromBase58String(cq))
561- let cn = cw._1
562- let cs = cw._2
563- let ct = cw._3
564- let cu = cw._4
565- invoke(cs, cn, ct, cu)
573+ let cB = cp(false, cq, fromBase58String(cv))
574+ let cs = cB._1
575+ let cx = cB._2
576+ let cy = cB._3
577+ let cz = cB._4
578+ invoke(cx, cs, cy, cz)
566579 }
567580 else 0
568581
569582
570-func cx (aK) = {
571- let cy = {
572- let I = aK
573- if ($isInstanceOf(I, "ByteVector"))
583+func cC (aP) = {
584+ let cD = {
585+ let L = aP
586+ if ($isInstanceOf(L, "ByteVector"))
574587 then {
575- let cz = I
576- if ((cz == V))
577- then getInteger(R, ((("rpd_balance_" + toBase58String(cz)) + "_") + toString(this)))
588+ let cE = L
589+ if ((cE == X))
590+ then getInteger(U, ((("rpd_balance_" + toBase58String(cE)) + "_") + toString(this)))
578591 else 0
579592 }
580- else if ($isInstanceOf(I, "Unit"))
593+ else if ($isInstanceOf(L, "Unit"))
581594 then 0
582595 else throw("Match error")
583596 }
584- let I = cy
585- if ($isInstanceOf(I, "Int"))
597+ let L = cD
598+ if ($isInstanceOf(L, "Int"))
586599 then {
587- let as = I
588- as
600+ let aw = L
601+ aw
589602 }
590603 else 0
591604 }
592605
593606
594-func cA () = {
595- let cB = aH()
596- func cC (aJ,aK) = {
597- let cD = aJ
598- let cE = cD._1
599- let as = cD._2
600- if (cE)
601- then $Tuple2(cE, as)
607+func cF () = {
608+ let cG = aM()
609+ func cH (aO,aP) = {
610+ let cI = aO
611+ let cJ = cI._1
612+ let aw = cI._2
613+ if (cJ)
614+ then $Tuple2(cJ, aw)
602615 else {
603- let cF = (assetBalance(this, fromBase58String(aK)) + cx(fromBase58String(aK)))
604- if ((cB[as] > cF))
605- then $Tuple2(true, as)
606- else $Tuple2(false, (as + 1))
616+ let cK = (assetBalance(this, fromBase58String(aP)) + cC(fromBase58String(aP)))
617+ if ((cG[aw] > cK))
618+ then $Tuple2(true, aw)
619+ else $Tuple2(false, (aw + 1))
607620 }
608621 }
609622
610- let aL = al
611- let aM = size(aL)
612- let aN = $Tuple2(false, 0)
613- func aO (aP,aQ) = if ((aQ >= aM))
614- then aP
615- else cC(aP, aL[aQ])
623+ let aQ = ap
624+ let aR = size(aQ)
625+ let aS = $Tuple2(false, 0)
626+ func aT (aU,aV) = if ((aV >= aR))
627+ then aU
628+ else cH(aU, aQ[aV])
616629
617- func aR (aP,aQ) = if ((aQ >= aM))
618- then aP
630+ func aW (aU,aV) = if ((aV >= aR))
631+ then aU
619632 else throw("List size exceeds 15")
620633
621- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
634+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
622635 }
623636
624637
625-func cG (as) = an(("Suspicious state with asset: " + al[as]))
638+func cL (aw) = ar(("Suspicious state with asset: " + ap[aw]))
626639
627640
628-func cH (bO,cu) = {
629- func cI (aJ,cJ) = (aJ :+ ScriptTransfer(bO, cJ.amount, cJ.assetId))
641+func cM (bT,cz) = {
642+ func cN (aO,cO) = (aO :+ ScriptTransfer(bT, cO.amount, cO.assetId))
630643
631- let aL = cu
632- let aM = size(aL)
633- let aN = nil
634- func aO (aP,aQ) = if ((aQ >= aM))
635- then aP
636- else cI(aP, aL[aQ])
644+ let aQ = cz
645+ let aR = size(aQ)
646+ let aS = nil
647+ func aT (aU,aV) = if ((aV >= aR))
648+ then aU
649+ else cN(aU, aQ[aV])
637650
638- func aR (aP,aQ) = if ((aQ >= aM))
639- then aP
651+ func aW (aU,aV) = if ((aV >= aR))
652+ then aU
640653 else throw("List size exceeds 15")
641654
642- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
655+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
643656 }
644657
645658
646-@Callable(cK)
647-func D (aT,aX) = {
648- let bk = aZ(aT, aX)
649- $Tuple2([IntegerEntry("D", bk)], bk)
659+func cP (cQ) = {
660+ let cR = valueOrErrorMessage(getInteger(this, n), "No dAppThresholdCoef key")
661+ let cS = 10000
662+ func cT (aO,cU) = {
663+ let cV = aO
664+ let cW = cV._1
665+ let cX = cV._2
666+ func cY (cZ,da) = {
667+ let db = fraction(cU, cS, da)
668+ if (if ((db > (cR * cS)))
669+ then true
670+ else (fraction(1, cS, cR) > db))
671+ then throw("New balance in assets of the DApp is less than threshold")
672+ else false
673+ }
674+
675+ $Tuple2({
676+ let aQ = cX
677+ let aR = size(aQ)
678+ let aS = cW
679+ func aT (aU,aV) = if ((aV >= aR))
680+ then aU
681+ else cY(aU, aQ[aV])
682+
683+ func aW (aU,aV) = if ((aV >= aR))
684+ then aU
685+ else throw("List size exceeds 15")
686+
687+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
688+ }, removeByIndex(cX, 0))
689+ }
690+
691+ let dc = {
692+ let aQ = cQ
693+ let aR = size(aQ)
694+ let aS = $Tuple2(false, removeByIndex(cQ, 0))
695+ func aT (aU,aV) = if ((aV >= aR))
696+ then aU
697+ else cT(aU, aQ[aV])
698+
699+ func aW (aU,aV) = if ((aV >= aR))
700+ then aU
701+ else throw("List size exceeds 15")
702+
703+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
704+ }
705+ let cW = dc._1
706+ let dd = dc._2
707+ cW
708+ }
709+
710+
711+@Callable(de)
712+func D (aY,bc) = {
713+ let bp = be(aY, bc)
714+ $Tuple2([IntegerEntry("D", bp)], bp)
650715 }
651716
652717
653718
654-@Callable(cK)
655-func init (cL,aC,cM) = if (!(isDataStorageUntouched(this)))
719+@Callable(de)
720+func init (df,aH,dg) = if (!(isDataStorageUntouched(this)))
656721 then throw("Already initialized")
657722 else {
658- let cN = "s_Multi_USD"
659- let cO = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
660- let cP = Issue(cN, cO, 0, 6, true)
661- let cQ = calculateAssetId(cP)
662- let cR = [StringEntry(e, cL), IntegerEntry("initial_A", aC), IntegerEntry("future_A", aC), IntegerEntry(k, getIntegerValue(F, "base_fee_flat")), StringEntry(i, toBase58String(cQ)), IntegerEntry(j, 0), BooleanEntry(g, true), cP]
663- if (cM)
664- then (cR ++ [BooleanEntry(p, cM), IntegerEntry(q, (Y + (aa * Z)))])
665- else cR
723+ let dh = "s_Multi_USD"
724+ let di = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
725+ let dj = Issue(dh, di, 0, 6, true)
726+ let dk = calculateAssetId(dj)
727+ let dl = [StringEntry(f, e), StringEntry(g, df), IntegerEntry("initial_A", aH), IntegerEntry("future_A", aH), IntegerEntry(m, getIntegerValue(I, "base_fee_flat")), StringEntry(k, toBase58String(dk)), IntegerEntry(l, 0), BooleanEntry(i, true), IntegerEntry(n, 15), dj]
728+ if (dg)
729+ then (dl ++ [BooleanEntry(s, dg), IntegerEntry(t, (aa + (ac * ab)))])
730+ else dl
666731 }
667732
668733
669734
670-@Callable(cK)
671-func addLiquidity (cS,cT) = valueOrElse(aq(), {
672- let aX = aC()
673- let aT = aH()
674- let bS = if ((ad == 0))
735+@Callable(de)
736+func addLiquidity (dm,dn) = valueOrElse(au(), {
737+ let bc = aH()
738+ let aY = aM()
739+ let bX = if ((af == 0))
675740 then 0
676- else bn(aT, aX)
677- let cu = cK.payments
678- let cU = size(cu)
679- func cV (cU) = if ((cU > am))
680- then throw(("payments size > " + toString(am)))
681- else if ((1 > cU))
741+ else bs(aY, bc)
742+ let cz = de.payments
743+ let do = size(cz)
744+ func dp (do) = if ((do > aq))
745+ then throw(("payments size > " + toString(aq)))
746+ else if ((1 > do))
682747 then throw("payments size < 1")
683- else if (if ((ad == 0))
684- then (am != cU)
748+ else if (if ((af == 0))
749+ then (aq != do)
685750 else false)
686751 then throw("initial deposit requires all coins")
687752 else {
688- func cW (aJ,cJ) = if (containsElement(al, cf(cJ.assetId)))
753+ func dq (aO,cO) = if (containsElement(ap, ck(cO.assetId)))
689754 then true
690755 else throw("Invalid asset in payment")
691756
692- let aL = cu
693- let aM = size(aL)
694- let aN = false
695- func aO (aP,aQ) = if ((aQ >= aM))
696- then aP
697- else cW(aP, aL[aQ])
757+ let aQ = cz
758+ let aR = size(aQ)
759+ let aS = false
760+ func aT (aU,aV) = if ((aV >= aR))
761+ then aU
762+ else dq(aU, aQ[aV])
698763
699- func aR (aP,aQ) = if ((aQ >= aM))
700- then aP
764+ func aW (aU,aV) = if ((aV >= aR))
765+ then aU
701766 else throw("List size exceeds 15")
702767
703- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
768+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
704769 }
705770
706- if (!(cV(cU)))
771+ if (!(dp(do)))
707772 then throw()
708773 else {
709- let cE = cA()
710- if (cE._1)
711- then (cG(cE._2) ++ cH(cK.caller, cu))
774+ let cJ = cF()
775+ if (cJ._1)
776+ then (cL(cJ._2) ++ cM(de.caller, cz))
712777 else {
713- let cX = size(cu)
714- func cI (aJ,aK) = {
715- let cY = aJ
716- let cZ = cY._1
717- let as = cY._2
718- let da = cY._3
719- if (if ((cX > da))
720- then (cf(cu[da].assetId) == aK)
778+ let dr = size(cz)
779+ func cN (aO,aP) = {
780+ let ds = aO
781+ let cQ = ds._1
782+ let aw = ds._2
783+ let dt = ds._3
784+ if (if ((dr > dt))
785+ then (ck(cz[dt].assetId) == aP)
721786 else false)
722787 then {
723- let db = cj(cu[da].amount, cf(cu[da].assetId))
724- if ((db == db))
725- then $Tuple3((cZ :+ (aT[as] + cu[da].amount)), (as + 1), (da + 1))
788+ let du = co(cz[dt].amount, ck(cz[dt].assetId))
789+ if ((du == du))
790+ then $Tuple3((cQ :+ (aY[aw] + cz[dt].amount)), (aw + 1), (dt + 1))
726791 else throw("Strict value is not equal to itself.")
727792 }
728- else $Tuple3((cZ :+ aT[as]), (as + 1), da)
793+ else $Tuple3((cQ :+ aY[aw]), (aw + 1), dt)
729794 }
730795
731- let dc = {
732- let aL = al
733- let aM = size(aL)
734- let aN = $Tuple3(nil, 0, 0)
735- func aO (aP,aQ) = if ((aQ >= aM))
736- then aP
737- else cI(aP, aL[aQ])
796+ let dv = {
797+ let aQ = ap
798+ let aR = size(aQ)
799+ let aS = $Tuple3(nil, 0, 0)
800+ func aT (aU,aV) = if ((aV >= aR))
801+ then aU
802+ else cN(aU, aQ[aV])
738803
739- func aR (aP,aQ) = if ((aQ >= aM))
740- then aP
804+ func aW (aU,aV) = if ((aV >= aR))
805+ then aU
741806 else throw("List size exceeds 15")
742807
743- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
808+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
744809 }
745- let cZ = dc._1
746- let dd = dc._2
747- let de = dc._3
748- if (((cX - 1) > de))
810+ let cQ = dv._1
811+ let dw = dv._2
812+ let dx = dv._3
813+ if (((dr - 1) > dx))
749814 then throw("Incorect payments order")
750- else {
751- let bT = bn(cZ, aX)
752- if (av((bT > bS)))
753- then throw("D1 > D0")
754- else {
755- let bP = ax(cK.caller)
756- func df (aJ,dg) = {
757- let dh = aJ
758- let di = dh._1
759- let dj = dh._2
760- let as = dh._3
761- if ((ad > 0))
762- then {
763- let bQ = ((fraction(af, bP, ae, CEILING) * am) / (4 * (am - 1)))
764- let dk = {
765- let dl = fraction(bT, aT[as], bS)
766- let dm = if ((dl > dg))
767- then (dl - dg)
768- else (dg - dl)
769- fraction(bQ, dm, ae)
815+ else if (cP(cQ))
816+ then throw()
817+ else {
818+ let bY = bs(cQ, bc)
819+ if (aA((bY > bX)))
820+ then throw("D1 > D0")
821+ else {
822+ let bU = aC(de.caller)
823+ func dy (aO,dz) = {
824+ let dA = aO
825+ let dB = dA._1
826+ let dC = dA._2
827+ let aw = dA._3
828+ if ((af > 0))
829+ then {
830+ let bV = ((fraction(ah, bU, ag, CEILING) * aq) / (4 * (aq - 1)))
831+ let dD = {
832+ let dE = fraction(bY, aY[aw], bX)
833+ let dF = if ((dE > dz))
834+ then (dE - dz)
835+ else (dz - dE)
836+ fraction(bV, dF, ag)
837+ }
838+ let dG = fraction(dD, ai, ag)
839+ let dH = (dz - dG)
840+ let dI = (dz - dD)
841+ let dJ = cA(dG, ap[aw])
842+ if ((dJ == dJ))
843+ then $Tuple3((dB :+ dI), (dC ++ [ScriptTransfer(S, dG, fromBase58String(ap[aw])), IntegerEntry((ap[aw] + h), dH)]), (aw + 1))
844+ else throw("Strict value is not equal to itself.")
770845 }
771- let dn = fraction(dk, ag, ae)
772- let do = (dg - dn)
773- let dp = (dg - dk)
774- let dq = cv(dk, al[as])
775- if ((dq == dq))
776- then $Tuple3((di :+ dp), (dj ++ [ScriptTransfer(U, (dk - dn), fromBase58String(al[as])), ScriptTransfer(P, dn, fromBase58String(al[as])), IntegerEntry((al[as] + f), do)]), (as + 1))
777- else throw("Strict value is not equal to itself.")
778- }
779- else $Tuple3((di :+ dg), (dj :+ IntegerEntry((al[as] + f), dg)), (as + 1))
846+ else $Tuple3((dB :+ dz), (dC :+ IntegerEntry((ap[aw] + h), dz)), (aw + 1))
847+ }
848+
849+ let dK = {
850+ let aQ = cQ
851+ let aR = size(aQ)
852+ let aS = $Tuple3(nil, nil, 0)
853+ func bn (aU,aV) = if ((aV >= aR))
854+ then aU
855+ else dy(aU, aQ[aV])
856+
857+ func bo (aU,aV) = if ((aV >= aR))
858+ then aU
859+ else throw("List size exceeds 15")
860+
861+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
862+ }
863+ let dB = dK._1
864+ let dC = dK._2
865+ let dL = bs(dB, bc)
866+ let dM = if ((af == 0))
867+ then bY
868+ else fraction(af, (dL - bX), bX)
869+ if (aA((dM >= dm)))
870+ then throw("Slippage screwed you")
871+ else if (dn)
872+ then {
873+ let dN = invoke(this, "reissueShare", [dM], nil)
874+ if ((dN == dN))
875+ then {
876+ let du = invoke(W, "lockShareTokens", [toString(this)], [AttachedPayment(ae, dM)])
877+ if ((du == du))
878+ then (dC :+ IntegerEntry(l, (af + dM)))
879+ else throw("Strict value is not equal to itself.")
880+ }
881+ else throw("Strict value is not equal to itself.")
882+ }
883+ else (dC ++ [Reissue(ae, dM, true), ScriptTransfer(de.caller, dM, ae), IntegerEntry(l, (af + dM))])
780884 }
781-
782- let dr = {
783- let aL = cZ
784- let aM = size(aL)
785- let aN = $Tuple3(nil, nil, 0)
786- func bi (aP,aQ) = if ((aQ >= aM))
787- then aP
788- else df(aP, aL[aQ])
789-
790- func bj (aP,aQ) = if ((aQ >= aM))
791- then aP
792- else throw("List size exceeds 15")
793-
794- bj(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
795- }
796- let di = dr._1
797- let dj = dr._2
798- let ds = bn(di, aX)
799- let dt = if ((ad == 0))
800- then bT
801- else fraction(ad, (ds - bS), bS)
802- if (av((dt >= cS)))
803- then throw("Slippage screwed you")
804- else if (cT)
805- then {
806- let du = Reissue(ac, dt, true)
807- if ((du == du))
808- then {
809- let db = invoke(T, "lockShareTokens", [toString(cK.caller)], [AttachedPayment(ac, dt)])
810- if ((db == db))
811- then dj
812- else throw("Strict value is not equal to itself.")
813- }
814- else throw("Strict value is not equal to itself.")
815- }
816- else (dj ++ [Reissue(ac, dt, true), ScriptTransfer(cK.caller, dt, ac), IntegerEntry(j, (ad + dt))])
817- }
818- }
885+ }
819886 }
820887 }
821888 })
822889
823890
824891
825-@Callable(cK)
826-func getDy (dv,dw,dx,dy) = {
827- let aT = aH()
828- let dz = valueOrErrorMessage(indexOf(al, dv), "unknown token in")
829- let dA = valueOrErrorMessage(indexOf(al, dw), "unknown token out")
830- let br = (aT[dz] + dx)
831- let bE = bo(dz, dA, br, aT)
832- let ce = ((aT[dA] - bE) - 1)
833- let bP = ax(Address(fromBase58String(dy)))
834- let bQ = fraction(fraction(af, bP, ae, CEILING), ce, ae)
835- $Tuple2(nil, (ce - bQ))
892+@Callable(de)
893+func reissueShare (cq) = valueOrElse(ax(de), [Reissue(ae, cq, true)])
894+
895+
896+
897+@Callable(de)
898+func getDy (dO,dP,dQ,dR) = {
899+ let aY = aM()
900+ let dS = valueOrErrorMessage(indexOf(ap, dO), "unknown token in")
901+ let dT = valueOrErrorMessage(indexOf(ap, dP), "unknown token out")
902+ let bw = (aY[dS] + dQ)
903+ let bJ = bt(dS, dT, bw, aY)
904+ let cj = ((aY[dT] - bJ) - 1)
905+ let bU = aC(Address(fromBase58String(dR)))
906+ let bV = fraction(fraction(ah, bU, ag, CEILING), cj, ag)
907+ $Tuple2(nil, (cj - bV))
836908 }
837909
838910
839911
840-@Callable(cK)
841-func exchange (dB,dC) = valueOrElse(aq(), if ((size(cK.payments) != 1))
912+@Callable(de)
913+func exchange (dU,dV) = valueOrElse(au(), if ((size(de.payments) != 1))
842914 then throw("size(payments) != 1")
843915 else {
844- let cE = cA()
845- if (cE._1)
846- then (cG(cE._2) ++ cH(cK.caller, cK.payments))
916+ let cJ = cF()
917+ if (cJ._1)
918+ then (cL(cJ._2) ++ cM(de.caller, de.payments))
847919 else {
848- let cJ = cK.payments[0]
849- let dD = cf(cJ.assetId)
850- let dE = fromBase58String(dB)
851- let dx = cJ.amount
852- let dz = valueOrErrorMessage(indexOf(al, dD), "unknown token in")
853- let dA = valueOrErrorMessage(indexOf(al, dB), "unknown token out")
854- let aT = aH()
855- let br = (aT[dz] + dx)
856- let bE = bo(dz, dA, br, aT)
857- let dF = ((aT[dA] - bE) - 1)
858- let bP = ax(cK.caller)
859- let bQ = fraction(dF, fraction(af, bP, ae, CEILING), ae)
860- let ce = (dF - bQ)
861- if (av((ce >= dC)))
920+ let cO = de.payments[0]
921+ let dW = ck(cO.assetId)
922+ let dX = fromBase58String(dU)
923+ let dQ = cO.amount
924+ let dS = valueOrErrorMessage(indexOf(ap, dW), "unknown token in")
925+ let dT = valueOrErrorMessage(indexOf(ap, dU), "unknown token out")
926+ let aY = aM()
927+ let bw = (aY[dS] + dQ)
928+ let bJ = bt(dS, dT, bw, aY)
929+ let dY = ((aY[dT] - bJ) - 1)
930+ let bU = aC(de.caller)
931+ let bV = fraction(dY, fraction(ah, bU, ag, CEILING), ag)
932+ let cj = (dY - bV)
933+ let dG = fraction(bV, ai, ag)
934+ if (aA((cj >= dV)))
862935 then throw("Exchange resulted in fewer coins than expected")
863936 else {
864- let dn = fraction(bQ, ag, ae)
865- let db = cj(cJ.amount, cf(cJ.assetId))
866- if ((db == db))
937+ func dZ (aO,cU) = {
938+ let ea = aO
939+ let cQ = ea._1
940+ let aw = ea._2
941+ if ((aw == dS))
942+ then $Tuple2((cQ :+ (cU + dQ)), (aw + 1))
943+ else if ((aw == dT))
944+ then $Tuple2((cQ :+ (cU + cj)), (aw + 1))
945+ else $Tuple2((cQ :+ cU), (aw + 1))
946+ }
947+
948+ let eb = {
949+ let aQ = aY
950+ let aR = size(aQ)
951+ let aS = $Tuple2(nil, 0)
952+ func aT (aU,aV) = if ((aV >= aR))
953+ then aU
954+ else dZ(aU, aQ[aV])
955+
956+ func aW (aU,aV) = if ((aV >= aR))
957+ then aU
958+ else throw("List size exceeds 15")
959+
960+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
961+ }
962+ let cQ = eb._1
963+ let aw = eb._2
964+ if (cP(cQ))
965+ then throw()
966+ else {
967+ let du = co(cO.amount, ck(cO.assetId))
968+ if ((du == du))
969+ then {
970+ let dJ = cA((cj + dG), dU)
971+ if ((dJ == dJ))
972+ then $Tuple2([IntegerEntry((dW + h), bw), IntegerEntry((dU + h), ((aY[dT] - cj) - dG)), ScriptTransfer(de.caller, cj, dX), ScriptTransfer(S, dG, dX)], $Tuple2(cj, dX))
973+ else throw("Strict value is not equal to itself.")
974+ }
975+ else throw("Strict value is not equal to itself.")
976+ }
977+ }
978+ }
979+ })
980+
981+
982+
983+@Callable(de)
984+func withdraw (ec,ed) = valueOrElse(au(), if ((size(de.payments) != 1))
985+ then throw("size(payments) != 1")
986+ else {
987+ let cJ = cF()
988+ if (cJ._1)
989+ then (cL(cJ._2) ++ cM(de.caller, de.payments))
990+ else {
991+ let cO = de.payments[0]
992+ let dW = cO.assetId
993+ if ((dW != ae))
994+ then throw("unknown token")
995+ else {
996+ let ee = cO.amount
997+ let bW = af
998+ let ef = if ((ed > 0))
999+ then invoke(W, "withdrawShareTokens", [toString(this), ed], nil)
1000+ else 0
1001+ if ((ef == ef))
8671002 then {
868- let dq = cv((ce + bQ), dB)
869- if ((dq == dq))
870- then $Tuple2([IntegerEntry((dD + f), br), IntegerEntry((dB + f), ((aT[dA] - ce) - dn)), ScriptTransfer(cK.caller, ce, dE), ScriptTransfer(P, dn, dE), ScriptTransfer(P, (bQ - dn), dE)], $Tuple2(ce, dE))
871- else throw("Strict value is not equal to itself.")
1003+ let eg = (ee + ed)
1004+ func dy (aO,eh) = {
1005+ let ei = aO
1006+ let dC = ei._1
1007+ let aw = ei._2
1008+ let ej = fraction(eh, eg, bW)
1009+ if (aA((ej >= ec[aw])))
1010+ then throw("Withdrawal resulted in fewer coins than expected")
1011+ else {
1012+ let dJ = cA(ej, ap[aw])
1013+ if ((dJ == dJ))
1014+ then $Tuple2((dC ++ [IntegerEntry((ap[aw] + h), (eh - ej)), ScriptTransfer(de.caller, ej, fromBase58String(ap[aw]))]), (aw + 1))
1015+ else throw("Strict value is not equal to itself.")
1016+ }
1017+ }
1018+
1019+ let ek = {
1020+ let aQ = aM()
1021+ let aR = size(aQ)
1022+ let aS = $Tuple2(nil, 0)
1023+ func aT (aU,aV) = if ((aV >= aR))
1024+ then aU
1025+ else dy(aU, aQ[aV])
1026+
1027+ func aW (aU,aV) = if ((aV >= aR))
1028+ then aU
1029+ else throw("List size exceeds 15")
1030+
1031+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1032+ }
1033+ let dC = ek._1
1034+ let aw = ek._2
1035+ (dC ++ [Burn(ae, eg), IntegerEntry(l, (af - eg))])
8721036 }
8731037 else throw("Strict value is not equal to itself.")
8741038 }
8771041
8781042
8791043
880-@Callable(cK)
881-func withdraw (dG,dH) = valueOrElse(aq(), if ((size(cK.payments) != 1))
882- then throw("size(payments) != 1")
883- else {
884- let cE = cA()
885- if (cE._1)
886- then (cG(cE._2) ++ cH(cK.caller, cK.payments))
887- else {
888- let cJ = cK.payments[0]
889- let dD = cJ.assetId
890- if ((dD != ac))
891- then throw("unknown token")
892- else {
893- let dI = cJ.amount
894- let bR = ad
895- let dJ = if ((dH > 0))
896- then invoke(T, "withdrawShareTokens", [toString(cK.caller), dH], nil)
897- else 0
898- if ((dJ == dJ))
899- then {
900- let dK = (dI + dH)
901- func df (aJ,dL) = {
902- let dM = aJ
903- let dj = dM._1
904- let as = dM._2
905- let dN = fraction(dL, dK, bR)
906- if (av((dN >= dG[as])))
907- then throw("Withdrawal resulted in fewer coins than expected")
908- else {
909- let dq = cv(dN, al[as])
910- if ((dq == dq))
911- then $Tuple2((dj ++ [IntegerEntry((al[as] + f), (dL - dN)), ScriptTransfer(cK.caller, dN, fromBase58String(al[as]))]), (as + 1))
912- else throw("Strict value is not equal to itself.")
913- }
914- }
915-
916- let dO = {
917- let aL = aH()
918- let aM = size(aL)
919- let aN = $Tuple2(nil, 0)
920- func aO (aP,aQ) = if ((aQ >= aM))
921- then aP
922- else df(aP, aL[aQ])
923-
924- func aR (aP,aQ) = if ((aQ >= aM))
925- then aP
926- else throw("List size exceeds 15")
927-
928- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
929- }
930- let dj = dO._1
931- let as = dO._2
932- (dj ++ [Burn(ac, dK), IntegerEntry(j, (ad - dK))])
933- }
934- else throw("Strict value is not equal to itself.")
935- }
936- }
937- })
1044+@Callable(de)
1045+func calcWithdrawOneCoin (el,dU,em) = {
1046+ let aw = valueOrErrorMessage(indexOf(ap, dU), "unknown token out")
1047+ $Tuple2(nil, bR(aM(), el, aw, Address(fromBase58String(em)))._1)
1048+ }
9381049
9391050
9401051
941-@Callable(cK)
942-func calcWithdrawOneCoin (dP,as) = $Tuple2(nil, bM(aH(), dP, as, cK.caller)._1)
943-
944-
945-
946-@Callable(cK)
947-func withdrawOneCoin (dB,dQ,dH) = valueOrElse(aq(), if ((size(cK.payments) != 1))
1052+@Callable(de)
1053+func withdrawOneCoin (dU,en,ed) = valueOrElse(au(), if ((size(de.payments) != 1))
9481054 then throw("size(payments) != 1")
9491055 else {
950- let cE = cA()
951- if (cE._1)
952- then (cG(cE._2) ++ cH(cK.caller, cK.payments))
1056+ let cJ = cF()
1057+ if (cJ._1)
1058+ then (cL(cJ._2) ++ cM(de.caller, de.payments))
9531059 else {
954- let cJ = cK.payments[0]
955- let dD = cJ.assetId
956- if ((dD != ac))
1060+ let cO = de.payments[0]
1061+ let dW = cO.assetId
1062+ if ((dW != ae))
9571063 then throw("unknown token")
9581064 else {
959- let as = valueOrErrorMessage(indexOf(al, dB), "unknown token out")
960- let dP = cJ.amount
961- let dJ = if ((dH > 0))
962- then invoke(T, "withdrawShareTokens", [toString(cK.caller), dH], nil)
1065+ let eo = valueOrErrorMessage(indexOf(ap, dU), "unknown token out")
1066+ let ep = cO.amount
1067+ let ef = if ((ed > 0))
1068+ then invoke(W, "withdrawShareTokens", [toString(this), ed], nil)
9631069 else 0
964- if ((dJ == dJ))
1070+ if ((ef == ef))
9651071 then {
966- let dK = (dP + dH)
967- let aT = aH()
968- let dR = bM(aT, dK, as, cK.caller)
969- let ce = dR._1
970- let dS = dR._2
971- if (av((ce >= dQ)))
1072+ let eg = (ep + ed)
1073+ let aY = aM()
1074+ let eq = bR(aY, eg, eo, de.caller)
1075+ let cj = eq._1
1076+ let er = eq._2
1077+ if (aA((cj >= en)))
9721078 then throw("Not enough coins removed")
9731079 else {
974- let dn = fraction(dS, ag, ae)
975- let dT = (ce + dS)
976- let dq = cv(dT, dB)
977- if ((dq == dq))
978- then [ScriptTransfer(cK.caller, ce, fromBase58String(dB)), IntegerEntry((al[as] + f), (aT[as] - dT)), Burn(ac, dK), ScriptTransfer(P, dn, fromBase58String(dB)), ScriptTransfer(U, (dS - dn), fromBase58String(dB)), IntegerEntry(j, (ad - dK))]
979- else throw("Strict value is not equal to itself.")
1080+ let dG = fraction(er, ai, ag)
1081+ let es = (cj + dG)
1082+ func dZ (aO,cU) = {
1083+ let et = aO
1084+ let cQ = et._1
1085+ let aw = et._2
1086+ if ((aw == eo))
1087+ then $Tuple2((cQ :+ (cU - es)), (aw + 1))
1088+ else $Tuple2((cQ :+ cU), (aw + 1))
1089+ }
1090+
1091+ let eu = {
1092+ let aQ = aY
1093+ let aR = size(aQ)
1094+ let aS = $Tuple2(nil, 0)
1095+ func aT (aU,aV) = if ((aV >= aR))
1096+ then aU
1097+ else dZ(aU, aQ[aV])
1098+
1099+ func aW (aU,aV) = if ((aV >= aR))
1100+ then aU
1101+ else throw("List size exceeds 15")
1102+
1103+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1104+ }
1105+ let cQ = eu._1
1106+ let aw = eu._2
1107+ if (cP(cQ))
1108+ then throw()
1109+ else {
1110+ let dJ = cA(es, dU)
1111+ if ((dJ == dJ))
1112+ then [ScriptTransfer(de.caller, cj, fromBase58String(dU)), IntegerEntry((ap[aw] + h), (aY[aw] - es)), Burn(ae, eg), ScriptTransfer(S, dG, fromBase58String(dU)), IntegerEntry(l, (af - eg))]
1113+ else throw("Strict value is not equal to itself.")
1114+ }
9801115 }
9811116 }
9821117 else throw("Strict value is not equal to itself.")
9861121
9871122
9881123
989-@Callable(cK)
990-func A () = $Tuple2(nil, aC())
1124+@Callable(de)
1125+func A () = $Tuple2(nil, aH())
9911126
9921127
9931128
994-@Callable(cK)
1129+@Callable(de)
9951130 func getVirtualPrice () = {
996- let bk = aW(aH(), aC())
997- $Tuple2(nil, fraction(bk, a, ad))
1131+ let bp = bb(aM(), aH())
1132+ $Tuple2(nil, fraction(bp, a, af))
9981133 }
9991134
10001135
10011136
1002-@Callable(cK)
1003-func calcTokenAmount (dU,dV) = {
1004- let aX = aC()
1005- let dW = aH()
1006- let bS = bn(dW, aX)
1007- func dX (aJ,dL) = {
1008- let dY = aJ
1009- let cZ = dY._1
1010- let as = dY._2
1011- let dg = (dL + (if (dV)
1012- then dU[as]
1013- else -(dU[as])))
1014- $Tuple2((cZ :+ dg), (as + 1))
1137+@Callable(de)
1138+func calcTokenAmount (ev,ew) = {
1139+ let bc = aH()
1140+ let ex = aM()
1141+ let bX = bs(ex, bc)
1142+ func ey (aO,eh) = {
1143+ let ez = aO
1144+ let cQ = ez._1
1145+ let aw = ez._2
1146+ let dz = (eh + (if (ew)
1147+ then ev[aw]
1148+ else -(ev[aw])))
1149+ $Tuple2((cQ :+ dz), (aw + 1))
10151150 }
10161151
1017- let cZ = ( let aL = dW
1018- let aM = size(aL)
1019- let aN = $Tuple2(nil, 0)
1020- func aO (aP,aQ) = if ((aQ >= aM))
1021- then aP
1022- else dX(aP, aL[aQ])
1152+ let cQ = ( let aQ = ex
1153+ let aR = size(aQ)
1154+ let aS = $Tuple2(nil, 0)
1155+ func aT (aU,aV) = if ((aV >= aR))
1156+ then aU
1157+ else ey(aU, aQ[aV])
10231158
1024- func aR (aP,aQ) = if ((aQ >= aM))
1025- then aP
1159+ func aW (aU,aV) = if ((aV >= aR))
1160+ then aU
10261161 else throw("List size exceeds 15")
10271162
1028- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
1029- let bT = bn(cZ, aX)
1030- let dZ = if (dV)
1031- then (bT - bS)
1032- else (bS - bT)
1033- $Tuple2(nil, fraction(dZ, ad, bS))
1163+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
1164+ let bY = bs(cQ, bc)
1165+ let eA = if (ew)
1166+ then (bY - bX)
1167+ else (bX - bY)
1168+ $Tuple2(nil, fraction(eA, af, bX))
10341169 }
10351170
10361171
10371172
1038-@Callable(cK)
1039-func rampA (ea,eb) = valueOrElse(aq(), valueOrElse(ar(cK), if (av((au >= (aj + d))))
1173+@Callable(de)
1174+func rampA (eB,eC) = valueOrElse(au(), valueOrElse(av(de), if (aA((az >= (al + d))))
10401175 then throw("too often")
1041- else if (av((eb >= (au + d))))
1176+ else if (aA((eC >= (az + d))))
10421177 then throw("insufficient time")
10431178 else {
1044- let ec = aC()
1045- if (av(if ((ea > 0))
1046- then (b > ea)
1179+ let eD = aH()
1180+ if (aA(if ((eB > 0))
1181+ then (b > eB)
10471182 else false))
10481183 then throw("out of base range")
1049- else if (av(if (if ((ea >= ec))
1050- then ((ec * c) >= ea)
1184+ else if (aA(if (if ((eB >= eD))
1185+ then ((eD * c) >= eB)
10511186 else false)
10521187 then true
1053- else if ((ec > ea))
1054- then ((ea * c) >= ec)
1188+ else if ((eD > eB))
1189+ then ((eB * c) >= eD)
10551190 else false))
10561191 then throw("out of range")
1057- else [IntegerEntry("initial_A", ec), IntegerEntry("future_A", ea), IntegerEntry("initial_A_time", au), IntegerEntry("future_A_time", eb)]
1192+ else [IntegerEntry("initial_A", eD), IntegerEntry("future_A", eB), IntegerEntry("initial_A_time", az), IntegerEntry("future_A_time", eC)]
10581193 }))
10591194
10601195
10611196
1062-@Callable(cK)
1063-func stopRampA () = valueOrElse(aq(), valueOrElse(ar(cK), {
1064- let ed = aC()
1065-[IntegerEntry("initial_A", ed), IntegerEntry("future_A", ed), IntegerEntry("initial_A_time", au), IntegerEntry("future_A_time", au)]
1197+@Callable(de)
1198+func stopRampA () = valueOrElse(au(), valueOrElse(av(de), {
1199+ let eE = aH()
1200+[IntegerEntry("initial_A", eE), IntegerEntry("future_A", eE), IntegerEntry("initial_A_time", az), IntegerEntry("future_A_time", az)]
10661201 }))
10671202
10681203
10691204
1070-@Callable(cK)
1071-func shutdown () = valueOrElse(ar(cK), if (!(ab))
1072- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, h), "the cause wasn't specified")))
1073- else an("Paused by admin"))
1205+@Callable(de)
1206+func shutdown () = valueOrElse(av(de), if (!(ad))
1207+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, j), "the cause wasn't specified")))
1208+ else ar("Paused by admin"))
10741209
10751210
10761211
1077-@Callable(cK)
1078-func activate () = valueOrElse(ar(cK), if (ab)
1079- then ap()
1080- else [BooleanEntry(g, true), DeleteEntry(h)])
1212+@Callable(de)
1213+func activate () = valueOrElse(av(de), if (ad)
1214+ then at()
1215+ else [BooleanEntry(i, true), DeleteEntry(j)])
10811216
10821217
10831218
1084-@Callable(cK)
1085-func keepLimitForFirstHarvest (ee) = valueOrElse(aq(), valueOrElse(ar(cK), [IntegerEntry(r, ee)]))
1219+@Callable(de)
1220+func keepLimitForFirstHarvest (eF) = valueOrElse(au(), valueOrElse(av(de), [IntegerEntry(u, eF)]))
10861221
10871222
1088-@Verifier(ef)
1089-func eg () = {
1090- let eh = {
1091- let ei = if (sigVerify(ef.bodyBytes, ef.proofs[0], L))
1223+@Verifier(eG)
1224+func eH () = {
1225+ let eI = {
1226+ let eJ = if (sigVerify(eG.bodyBytes, eG.proofs[0], O))
10921227 then 1
10931228 else 0
1094- let ej = if (sigVerify(ef.bodyBytes, ef.proofs[1], M))
1229+ let eK = if (sigVerify(eG.bodyBytes, eG.proofs[1], P))
10951230 then 1
10961231 else 0
1097- let ek = if (sigVerify(ef.bodyBytes, ef.proofs[2], N))
1232+ let eL = if (sigVerify(eG.bodyBytes, eG.proofs[2], Q))
10981233 then 1
10991234 else 0
1100- (((ei + ej) + ek) >= 2)
1235+ (((eJ + eK) + eL) >= 2)
11011236 }
1102- let I = ef
1103- if ($isInstanceOf(I, "InvokeScriptTransaction"))
1237+ let L = eG
1238+ if ($isInstanceOf(L, "InvokeScriptTransaction"))
11041239 then {
1105- let el = I
1106- let em = if ((el.dApp == this))
1107- then (el.function == "takeIntoAccountExtraFunds")
1240+ let eM = L
1241+ let eN = if ((eM.dApp == this))
1242+ then (eM.function == "takeIntoAccountExtraFunds")
11081243 else false
1109- let en = if (if (if (sigVerify(ef.bodyBytes, ef.proofs[0], L))
1244+ let eO = if (if (if (sigVerify(eG.bodyBytes, eG.proofs[0], O))
11101245 then true
1111- else sigVerify(ef.bodyBytes, ef.proofs[0], M))
1246+ else sigVerify(eG.bodyBytes, eG.proofs[0], P))
11121247 then true
1113- else sigVerify(ef.bodyBytes, ef.proofs[0], N))
1248+ else sigVerify(eG.bodyBytes, eG.proofs[0], Q))
11141249 then true
1115- else sigVerify(ef.bodyBytes, ef.proofs[0], O)
1116- if (if (em)
1117- then en
1250+ else sigVerify(eG.bodyBytes, eG.proofs[0], R)
1251+ if (if (eN)
1252+ then eO
11181253 else false)
11191254 then true
1120- else eh
1255+ else eI
11211256 }
1122- else eh
1257+ else eI
11231258 }
11241259
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 1000000
55
66 let b = 1000000
77
88 let c = 10
99
1010 let d = (86400 / 60)
1111
12-let e = "asset_ids"
12+let e = "2.0.0"
1313
14-let f = "_balance"
14+let f = "version"
1515
16-let g = "active"
16+let g = "asset_ids"
1717
18-let h = "shutdown_cause"
18+let h = "_balance"
1919
20-let i = "share_asset_id"
20+let i = "active"
2121
22-let j = "share_asset_supply"
22+let j = "shutdown_cause"
2323
24-let k = "commission"
24+let k = "share_asset_id"
2525
26-let l = "staking_usdnnsbt_address"
26+let l = "share_asset_supply"
2727
28-let m = "discounts"
28+let m = "commission"
2929
30-let n = "discount_values"
30+let n = "dAppThresholdCoef"
3131
32-let o = "_SWOP_amount"
32+let o = "staking_usdnnsbt_address"
3333
34-let p = "first_harvest"
34+let p = "discounts"
3535
36-let q = "first_harvest_height"
36+let q = "discount_values"
3737
38-let r = "share_limit_on_first_harvest"
38+let r = "_SWOP_amount"
3939
40-let s = "base_period"
40+let s = "first_harvest"
4141
42-let t = "period_length"
42+let t = "first_harvest_height"
4343
44-let u = "start_height"
44+let u = "share_limit_on_first_harvest"
4545
46-let v = "admin_pub_1"
46+let v = "base_period"
4747
48-let w = "admin_pub_2"
48+let w = "period_length"
4949
50-let x = "admin_pub_3"
50+let x = "start_height"
5151
52-let y = "admin_invoke_pub"
52+let y = "admin_pub_1"
5353
54-let z = "money_box_address"
54+let z = "admin_pub_2"
5555
56-let B = "governance_address"
56+let B = "admin_pub_3"
5757
58-let C = "voting_address"
58+let C = "admin_invoke_pub"
5959
60-let E = "farming_address"
60+let E = "money_box_address"
6161
62-let F = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
62+let F = "governance_address"
6363
64-func G (H) = {
65- let I = getString(F, H)
66- if ($isInstanceOf(I, "String"))
64+let G = "voting_address"
65+
66+let H = "farming_address"
67+
68+let I = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
69+
70+func J (K) = {
71+ let L = getString(I, K)
72+ if ($isInstanceOf(L, "String"))
6773 then {
68- let J = I
69- fromBase58String(J)
74+ let M = L
75+ fromBase58String(M)
7076 }
7177 else {
72- let K = I
73- throw((H + "is empty"))
78+ let N = L
79+ throw((K + "is empty"))
7480 }
7581 }
7682
7783
78-let L = G(v)
84+let O = J(y)
7985
80-let M = G(w)
86+let P = J(z)
8187
82-let N = G(x)
88+let Q = J(B)
8389
84-let O = G(y)
90+let R = J(C)
8591
86-let P = Address(G(z))
92+let S = Address(J(E))
8793
88-let Q = Address(G(B))
94+let T = Address(J(F))
8995
90-let R = Address(G(l))
96+let U = Address(J(o))
9197
92-let S = Address(G(C))
98+let V = Address(J(G))
9399
94-let T = Address(G(E))
100+let W = Address(J(H))
95101
96-let U = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
102+let X = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
97103
98-let V = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
104+let Y = [toBase58String(X)]
99105
100-let W = [toBase58String(V)]
106+let Z = valueOrErrorMessage(getInteger(V, v), "Empty kBasePeriod")
101107
102-let X = valueOrErrorMessage(getInteger(S, s), "Empty kBasePeriod")
108+let aa = valueOrErrorMessage(getInteger(V, x), "Empty kStartHeight")
103109
104-let Y = valueOrErrorMessage(getInteger(S, u), "Empty kStartHeight")
110+let ab = valueOrErrorMessage(getInteger(V, w), "Empty kPeriodLength")
105111
106-let Z = valueOrErrorMessage(getInteger(S, t), "Empty kPeriodLength")
112+let ac = ((Z + ((height - aa) / ab)) + 3)
107113
108-let aa = ((X + ((height - Y) / Z)) + 3)
114+let ad = getBooleanValue(this, i)
109115
110-let ab = getBooleanValue(this, g)
116+let ae = fromBase58String(getStringValue(this, k))
111117
112-let ac = fromBase58String(getStringValue(this, i))
118+let af = getIntegerValue(this, l)
113119
114-let ad = getIntegerValue(this, j)
120+let ag = 1000000
115121
116-let ae = 1000000
122+let ah = getIntegerValue(this, m)
117123
118-let af = getIntegerValue(this, k)
124+let ai = fraction(40, ag, 100)
119125
120-let ag = fraction(40, ae, 100)
126+let aj = getIntegerValue(this, "initial_A")
121127
122-let ah = getIntegerValue(this, "initial_A")
128+let ak = getIntegerValue(this, "future_A")
123129
124-let ai = getIntegerValue(this, "future_A")
130+let al = valueOrElse(getInteger(this, "initial_A_time"), 0)
125131
126-let aj = valueOrElse(getInteger(this, "initial_A_time"), 0)
132+let am = valueOrElse(getInteger(this, "future_A_time"), 0)
127133
128-let ak = valueOrElse(getInteger(this, "future_A_time"), 0)
134+let an = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
129135
130-let al = split(getStringValue(this, e), ",")
136+let ao = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
131137
132-let am = size(al)
138+let ap = split(getStringValue(this, g), ",")
133139
134-func an (ao) = [BooleanEntry(g, false), StringEntry(h, ao)]
140+let aq = size(ap)
141+
142+func ar (as) = [BooleanEntry(i, false), StringEntry(j, as)]
135143
136144
137-func ap () = throw("DApp is already active")
145+func at () = throw("DApp is already active")
138146
139147
140-func aq () = if (ab)
148+func au () = if (ad)
141149 then unit
142150 else throw("DApp is inactive at this moment")
143151
144152
145-func ar (as) = if (containsElement([L, M, N], as.callerPublicKey))
153+func av (aw) = if (containsElement([O, P, Q], aw.callerPublicKey))
146154 then unit
147155 else throw("Only admin can call this function")
148156
149157
150-let at = toBigInt(2)
158+func ax (aw) = if ((this == aw.caller))
159+ then unit
160+ else throw("Only contract itself can call this function")
151161
152-let au = height
153162
154-func av (aw) = if (aw)
163+let ay = toBigInt(2)
164+
165+let az = height
166+
167+func aA (aB) = if (aB)
155168 then false
156169 else true
157170
158171
159-func ax (ay) = {
160- let az = valueOrElse(getInteger(Q, (toString(ay) + o)), 0)
161- let aA = split(getStringValue(F, n), ",")
162- let aB = split(getStringValue(F, m), ",")
163- if (if ((az >= parseIntValue(aA[0])))
164- then (parseIntValue(aA[1]) > az)
172+func aC (aD) = {
173+ let aE = valueOrElse(getInteger(T, (toString(aD) + r)), 0)
174+ let aF = split(getStringValue(I, q), ",")
175+ let aG = split(getStringValue(I, p), ",")
176+ if (if ((aE >= parseIntValue(aF[0])))
177+ then (parseIntValue(aF[1]) > aE)
165178 else false)
166- then (ae - parseIntValue(aB[0]))
167- else if (if ((az >= parseIntValue(aA[1])))
168- then (parseIntValue(aA[2]) > az)
179+ then (ag - parseIntValue(aG[0]))
180+ else if (if ((aE >= parseIntValue(aF[1])))
181+ then (parseIntValue(aF[2]) > aE)
169182 else false)
170- then (ae - parseIntValue(aB[1]))
171- else if (if ((az >= parseIntValue(aA[2])))
172- then (parseIntValue(aA[3]) > az)
183+ then (ag - parseIntValue(aG[1]))
184+ else if (if ((aE >= parseIntValue(aF[2])))
185+ then (parseIntValue(aF[3]) > aE)
173186 else false)
174- then (ae - parseIntValue(aB[2]))
175- else if (if ((az >= parseIntValue(aA[3])))
176- then (parseIntValue(aA[4]) > az)
187+ then (ag - parseIntValue(aG[2]))
188+ else if (if ((aE >= parseIntValue(aF[3])))
189+ then (parseIntValue(aF[4]) > aE)
177190 else false)
178- then (ae - parseIntValue(aB[3]))
179- else if ((az >= parseIntValue(aA[4])))
180- then (ae - parseIntValue(aB[4]))
181- else ae
182- }
183-
184-
185-func aC () = {
186- let aD = ak
187- let aE = ai
188- if ((aD > au))
189- then {
190- let aF = ah
191- let aG = aj
192- if ((aE > aF))
193- then (aF + (((aE - aF) * (au - aG)) / (aD - aG)))
194- else (aF - (((aF - aE) * (au - aG)) / (aD - aG)))
195- }
196- else aE
191+ then (ag - parseIntValue(aG[3]))
192+ else if ((aE >= parseIntValue(aF[4])))
193+ then (ag - parseIntValue(aG[4]))
194+ else ag
197195 }
198196
199197
200198 func aH () = {
201- func aI (aJ,aK) = (aJ :+ valueOrElse(getInteger(this, (aK + f)), 0))
202-
203- let aL = al
204- let aM = size(aL)
205- let aN = nil
206- func aO (aP,aQ) = if ((aQ >= aM))
207- then aP
208- else aI(aP, aL[aQ])
209-
210- func aR (aP,aQ) = if ((aQ >= aM))
211- then aP
212- else throw("List size exceeds 15")
213-
214- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
199+ let aI = am
200+ let aJ = ak
201+ if ((aI > az))
202+ then {
203+ let aK = aj
204+ let aL = al
205+ if ((aJ > aK))
206+ then (aK + (((aJ - aK) * (az - aL)) / (aI - aL)))
207+ else (aK - (((aK - aJ) * (az - aL)) / (aI - aL)))
208+ }
209+ else aJ
215210 }
216211
217212
218-func aS (aT) = aT
213+func aM () = {
214+ func aN (aO,aP) = (aO :+ valueOrElse(getInteger(this, (aP + h)), 0))
219215
216+ let aQ = ap
217+ let aR = size(aQ)
218+ let aS = nil
219+ func aT (aU,aV) = if ((aV >= aR))
220+ then aU
221+ else aN(aU, aQ[aV])
220222
221-func aU (aJ,aV) = (aJ + aV)
223+ func aW (aU,aV) = if ((aV >= aR))
224+ then aU
225+ else throw("List size exceeds 15")
222226
223-
224-func aW (aT,aX) = {
225- let aY = invoke(this, "D", [aT, aX], nil)
226- if ($isInstanceOf(aY, "Int"))
227- then aY
228- else throw(($getType(invoke(this, "D", [aT, aX], nil)) + " couldn't be cast to Int"))
227+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
229228 }
230229
231230
232-func aZ (aT,aX) = {
233- let ba = {
234- let aL = aT
235- let aM = size(aL)
236- let aN = 0
237- func aO (aP,aQ) = if ((aQ >= aM))
238- then aP
239- else aU(aP, aL[aQ])
231+func aX (aY) = aY
240232
241- func aR (aP,aQ) = if ((aQ >= aM))
242- then aP
233+
234+func aZ (aO,ba) = (aO + ba)
235+
236+
237+func bb (aY,bc) = {
238+ let bd = invoke(this, "D", [aY, bc], nil)
239+ if ($isInstanceOf(bd, "Int"))
240+ then bd
241+ else throw(($getType(invoke(this, "D", [aY, bc], nil)) + " couldn't be cast to Int"))
242+ }
243+
244+
245+func be (aY,bc) = {
246+ let bf = {
247+ let aQ = aY
248+ let aR = size(aQ)
249+ let aS = 0
250+ func aT (aU,aV) = if ((aV >= aR))
251+ then aU
252+ else aZ(aU, aQ[aV])
253+
254+ func aW (aU,aV) = if ((aV >= aR))
255+ then aU
243256 else throw("List size exceeds 15")
244257
245- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
258+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
246259 }
247- if ((ba == 0))
260+ if ((bf == 0))
248261 then 0
249262 else {
250- let bb = (aX * am)
251- let bc = (toBigInt(bb) * toBigInt(ba))
252- let bd = toBigInt((bb - 1))
253- func be (aJ,as) = if ((aJ._2 == true))
254- then aJ
263+ let bg = (bc * aq)
264+ let bh = (toBigInt(bg) * toBigInt(bf))
265+ let bi = toBigInt((bg - 1))
266+ func bj (aO,aw) = if ((aO._2 == true))
267+ then aO
255268 else {
256- let bf = aJ._1
257- func bg (bh,as) = if ((am > as))
258- then ((bh * bf) / (toBigInt(aT[as]) * toBigInt(am)))
259- else bh
269+ let bk = aO._1
270+ func bl (bm,aw) = if ((aq > aw))
271+ then ((bm * bk) / (toBigInt(aY[aw]) * toBigInt(aq)))
272+ else bm
260273
261- let bh = {
262- let aL = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
263- let aM = size(aL)
264- let aN = bf
265- func bi (aP,aQ) = if ((aQ >= aM))
266- then aP
267- else bg(aP, aL[aQ])
274+ let bm = {
275+ let aQ = an
276+ let aR = size(aQ)
277+ let aS = bk
278+ func bn (aU,aV) = if ((aV >= aR))
279+ then aU
280+ else bl(aU, aQ[aV])
268281
269- func bj (aP,aQ) = if ((aQ >= aM))
270- then aP
282+ func bo (aU,aV) = if ((aV >= aR))
283+ then aU
271284 else throw("List size exceeds 15")
272285
273- bj(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
286+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
274287 }
275- let bk = fraction((bc + (toBigInt(am) * bh)), bf, ((bd * bf) + (toBigInt((am + 1)) * bh)))
276- if ((bk > bf))
277- then if ((1 >= toInt((bk - bf))))
278- then $Tuple2(bk, true)
279- else $Tuple2(bk, false)
280- else if ((1 >= toInt((bf - bk))))
281- then $Tuple2(bk, true)
282- else $Tuple2(bk, false)
288+ let bp = fraction((bh + (toBigInt(aq) * bm)), bk, ((bi * bk) + (toBigInt((aq + 1)) * bm)))
289+ if ((bp > bk))
290+ then if ((1 >= toInt((bp - bk))))
291+ then $Tuple2(bp, true)
292+ else $Tuple2(bp, false)
293+ else if ((1 >= toInt((bk - bp))))
294+ then $Tuple2(bp, true)
295+ else $Tuple2(bp, false)
283296 }
284297
285- let bl = {
286- let aL = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
287- let aM = size(aL)
288- let aN = $Tuple2(toBigInt(ba), false)
289- func bi (aP,aQ) = if ((aQ >= aM))
290- then aP
291- else be(aP, aL[aQ])
298+ let bq = {
299+ let aQ = an
300+ let aR = size(aQ)
301+ let aS = $Tuple2(toBigInt(bf), false)
302+ func bn (aU,aV) = if ((aV >= aR))
303+ then aU
304+ else bj(aU, aQ[aV])
292305
293- func bj (aP,aQ) = if ((aQ >= aM))
294- then aP
306+ func bo (aU,aV) = if ((aV >= aR))
307+ then aU
295308 else throw("List size exceeds 15")
296309
297- bj(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
310+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
298311 }
299- let bk = bl._1
300- let bm = bl._2
301- if ((bm == false))
302- then throw(("get_D() not finished with " + toString(bk)))
303- else toInt(bk)
312+ let bp = bq._1
313+ let br = bq._2
314+ if ((br == false))
315+ then throw(("get_D() not finished with " + toString(bp)))
316+ else toInt(bp)
304317 }
305318 }
306319
307320
308-func bn (aT,aX) = aW(aS(aT), aX)
321+func bs (aY,bc) = bb(aX(aY), bc)
309322
310323
311-func bo (bp,bq,br,bs) = if (av((bp != bq)))
324+func bt (bu,bv,bw,bx) = if (aA((bu != bv)))
312325 then throw("same coin")
313- else if (av(if ((bq >= 0))
314- then (bp >= 0)
326+ else if (aA(if ((bv >= 0))
327+ then (bu >= 0)
315328 else false))
316329 then throw("below zero")
317- else if (av(if ((am > bq))
318- then (am > bp)
330+ else if (aA(if ((aq > bv))
331+ then (aq > bu)
319332 else false))
320333 then throw("above N_COINS")
321334 else {
322- let aX = aC()
323- let bk = aW(bs, aX)
324- let bb = (aX * am)
325- func bt (aJ,as) = {
326- let bu = aJ
327- let bv = bu._1
328- let bw = bu._2
329- let bx = if ((bp == as))
330- then br
331- else bs[as]
332- if (if ((as != bq))
333- then (am > as)
335+ let bc = aH()
336+ let bp = bb(bx, bc)
337+ let bg = (bc * aq)
338+ func by (aO,aw) = {
339+ let bz = aO
340+ let bA = bz._1
341+ let bB = bz._2
342+ let bC = if ((bu == aw))
343+ then bw
344+ else bx[aw]
345+ if (if ((aw != bv))
346+ then (aq > aw)
334347 else false)
335- then $Tuple2((bv + bx), fraction(bw, toBigInt(bk), toBigInt((bx * am))))
336- else $Tuple2(bv, bw)
348+ then $Tuple2((bA + bC), fraction(bB, toBigInt(bp), toBigInt((bC * aq))))
349+ else $Tuple2(bA, bB)
337350 }
338351
339- let by = {
340- let aL = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
341- let aM = size(aL)
342- let aN = $Tuple2(0, toBigInt(bk))
343- func aO (aP,aQ) = if ((aQ >= aM))
344- then aP
345- else bt(aP, aL[aQ])
352+ let bD = {
353+ let aQ = an
354+ let aR = size(aQ)
355+ let aS = $Tuple2(0, toBigInt(bp))
356+ func aT (aU,aV) = if ((aV >= aR))
357+ then aU
358+ else by(aU, aQ[aV])
346359
347- func aR (aP,aQ) = if ((aQ >= aM))
348- then aP
360+ func aW (aU,aV) = if ((aV >= aR))
361+ then aU
349362 else throw("List size exceeds 15")
350363
351- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
364+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
352365 }
353- let bv = by._1
354- let bz = by._2
355- let bw = fraction(bz, toBigInt(bk), toBigInt((bb * am)))
356- let bA = toBigInt(((bv + (bk / bb)) - bk))
357- func bB (aJ,bC) = if ((aJ._2 == true))
358- then aJ
366+ let bA = bD._1
367+ let bE = bD._2
368+ let bB = fraction(bE, toBigInt(bp), toBigInt((bg * aq)))
369+ let bF = toBigInt(((bA + (bp / bg)) - bp))
370+ func bG (aO,bH) = if ((aO._2 == true))
371+ then aO
359372 else {
360- let bD = aJ._1
361- let bE = (((bD * bD) + bw) / ((at * bD) + bA))
362- if ((bE > bD))
363- then if ((1 >= toInt((bE - bD))))
364- then $Tuple2(bE, true)
365- else $Tuple2(bE, false)
366- else if ((1 >= toInt((bD - bE))))
367- then $Tuple2(bE, true)
368- else $Tuple2(bE, false)
373+ let bI = aO._1
374+ let bJ = (((bI * bI) + bB) / ((ay * bI) + bF))
375+ if ((bJ > bI))
376+ then if ((1 >= toInt((bJ - bI))))
377+ then $Tuple2(bJ, true)
378+ else $Tuple2(bJ, false)
379+ else if ((1 >= toInt((bI - bJ))))
380+ then $Tuple2(bJ, true)
381+ else $Tuple2(bJ, false)
369382 }
370383
371- let bF = {
372- let aL = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
373- let aM = size(aL)
374- let aN = $Tuple2(toBigInt(bk), false)
375- func bi (aP,aQ) = if ((aQ >= aM))
376- then aP
377- else bB(aP, aL[aQ])
384+ let bK = {
385+ let aQ = ao
386+ let aR = size(aQ)
387+ let aS = $Tuple2(toBigInt(bp), false)
388+ func bn (aU,aV) = if ((aV >= aR))
389+ then aU
390+ else bG(aU, aQ[aV])
378391
379- func bj (aP,aQ) = if ((aQ >= aM))
380- then aP
392+ func bo (aU,aV) = if ((aV >= aR))
393+ then aU
381394 else throw("List size exceeds 16")
382395
383- bj(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
396+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
384397 }
385- let bE = bF._1
386- let bm = bF._2
387- if ((bm == false))
388- then throw(("getY() not finished with " + toString(bE)))
389- else toInt(bE)
398+ let bJ = bK._1
399+ let br = bK._2
400+ if ((br == false))
401+ then throw(("getY() not finished with " + toString(bJ)))
402+ else toInt(bJ)
390403 }
391404
392405
393-func bG (bH,bp,aT,bk) = if (av((bp >= 0)))
406+func bL (bM,bu,aY,bp) = if (aA((bu >= 0)))
394407 then throw("i below zero")
395- else if (av((am > bp)))
408+ else if (aA((aq > bu)))
396409 then throw("i above N_COINS")
397410 else {
398- let bb = (bH * am)
399- func bt (aJ,as) = {
400- let bI = aJ
401- let bv = bI._1
402- let bw = bI._2
403- let bx = if (if ((bp != as))
404- then (am > as)
411+ let bg = (bM * aq)
412+ func by (aO,aw) = {
413+ let bN = aO
414+ let bA = bN._1
415+ let bB = bN._2
416+ let bC = if (if ((bu != aw))
417+ then (aq > aw)
405418 else false)
406- then aT[as]
419+ then aY[aw]
407420 else 0
408- if (if ((am > as))
409- then (bp != as)
421+ if (if ((aq > aw))
422+ then (bu != aw)
410423 else false)
411- then $Tuple2((bv + bx), fraction(bw, toBigInt(bk), toBigInt((bx * am))))
412- else $Tuple2(bv, bw)
424+ then $Tuple2((bA + bC), fraction(bB, toBigInt(bp), toBigInt((bC * aq))))
425+ else $Tuple2(bA, bB)
413426 }
414427
415- let bJ = {
416- let aL = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
417- let aM = size(aL)
418- let aN = $Tuple2(0, toBigInt(bk))
419- func aO (aP,aQ) = if ((aQ >= aM))
420- then aP
421- else bt(aP, aL[aQ])
428+ let bO = {
429+ let aQ = an
430+ let aR = size(aQ)
431+ let aS = $Tuple2(0, toBigInt(bp))
432+ func aT (aU,aV) = if ((aV >= aR))
433+ then aU
434+ else by(aU, aQ[aV])
422435
423- func aR (aP,aQ) = if ((aQ >= aM))
424- then aP
436+ func aW (aU,aV) = if ((aV >= aR))
437+ then aU
425438 else throw("List size exceeds 15")
426439
427- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
440+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
428441 }
429- let bv = bJ._1
430- let bz = bJ._2
431- let bw = fraction(bz, toBigInt(bk), toBigInt((bb * am)))
432- let bA = toBigInt(((bv + (bk / bb)) - bk))
433- func bK (aJ,as) = if ((aJ._2 == true))
434- then aJ
442+ let bA = bO._1
443+ let bE = bO._2
444+ let bB = fraction(bE, toBigInt(bp), toBigInt((bg * aq)))
445+ let bF = toBigInt(((bA + (bp / bg)) - bp))
446+ func bP (aO,aw) = if ((aO._2 == true))
447+ then aO
435448 else {
436- let bD = aJ._1
437- let bE = (((bD * bD) + bw) / ((at * bD) + bA))
438- if ((bE > bD))
439- then if ((1 >= toInt((bE - bD))))
440- then $Tuple2(bE, true)
441- else $Tuple2(bE, false)
442- else if ((1 >= toInt((bD - bE))))
443- then $Tuple2(bE, true)
444- else $Tuple2(bE, false)
449+ let bI = aO._1
450+ let bJ = (((bI * bI) + bB) / ((ay * bI) + bF))
451+ if ((bJ > bI))
452+ then if ((1 >= toInt((bJ - bI))))
453+ then $Tuple2(bJ, true)
454+ else $Tuple2(bJ, false)
455+ else if ((1 >= toInt((bI - bJ))))
456+ then $Tuple2(bJ, true)
457+ else $Tuple2(bJ, false)
445458 }
446459
447- let bL = {
448- let aL = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
449- let aM = size(aL)
450- let aN = $Tuple2(toBigInt(bk), false)
451- func bi (aP,aQ) = if ((aQ >= aM))
452- then aP
453- else bK(aP, aL[aQ])
460+ let bQ = {
461+ let aQ = ao
462+ let aR = size(aQ)
463+ let aS = $Tuple2(toBigInt(bp), false)
464+ func bn (aU,aV) = if ((aV >= aR))
465+ then aU
466+ else bP(aU, aQ[aV])
454467
455- func bj (aP,aQ) = if ((aQ >= aM))
456- then aP
468+ func bo (aU,aV) = if ((aV >= aR))
469+ then aU
457470 else throw("List size exceeds 16")
458471
459- bj(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
472+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
460473 }
461- let bE = bL._1
462- let bm = bL._2
463- if ((bm == false))
464- then throw(("get_y_D() not finished with " + toString(bE)))
465- else toInt(bE)
474+ let bJ = bQ._1
475+ let br = bQ._2
476+ if ((br == false))
477+ then throw(("get_y_D() not finished with " + toString(bJ)))
478+ else toInt(bJ)
466479 }
467480
468481
469-func bM (aT,bN,as,bO) = {
470- let bP = ax(bO)
471- let aX = aC()
472- let bQ = ((fraction(af, bP, ae, CEILING) * am) / (4 * (am - 1)))
473- let bR = ad
474- let bS = aW(aT, aX)
475- let bT = (bS - fraction(bN, bS, bR))
476- let bU = bG(aX, as, aT, bT)
477- let bV = (aT[as] - bU)
478- func bW (aJ,bX) = {
479- let bY = aJ
480- let bZ = bY._1
481- let ca = bY._2
482- let cb = if ((ca == as))
483- then (fraction(bX, bT, bS) - bU)
484- else (bX - fraction(bX, bT, bS))
485- $Tuple2((bZ :+ (bX - fraction(bQ, cb, ae))), (ca + 1))
482+func bR (aY,bS,aw,bT) = {
483+ let bU = aC(bT)
484+ let bc = aH()
485+ let bV = ((fraction(ah, bU, ag, CEILING) * aq) / (4 * (aq - 1)))
486+ let bW = af
487+ let bX = bb(aY, bc)
488+ let bY = (bX - fraction(bS, bX, bW))
489+ let bZ = bL(bc, aw, aY, bY)
490+ let ca = (aY[aw] - bZ)
491+ func cb (aO,cc) = {
492+ let cd = aO
493+ let ce = cd._1
494+ let cf = cd._2
495+ let cg = if ((cf == aw))
496+ then (fraction(cc, bY, bX) - bZ)
497+ else (cc - fraction(cc, bY, bX))
498+ $Tuple2((ce :+ (cc - fraction(bV, cg, ag))), (cf + 1))
486499 }
487500
488- let cc = {
489- let aL = aT
490- let aM = size(aL)
491- let aN = $Tuple2(nil, 0)
492- func aO (aP,aQ) = if ((aQ >= aM))
493- then aP
494- else bW(aP, aL[aQ])
501+ let ch = {
502+ let aQ = aY
503+ let aR = size(aQ)
504+ let aS = $Tuple2(nil, 0)
505+ func aT (aU,aV) = if ((aV >= aR))
506+ then aU
507+ else cb(aU, aQ[aV])
495508
496- func aR (aP,aQ) = if ((aQ >= aM))
497- then aP
509+ func aW (aU,aV) = if ((aV >= aR))
510+ then aU
498511 else throw("List size exceeds 15")
499512
500- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
513+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
501514 }
502- let bZ = cc._1
503- let ca = cc._2
504- let cd = bZ[as]
505- let ce = ((cd - bG(aX, as, bZ, bT)) - 1)
506- $Tuple2(ce, (bV - ce))
515+ let ce = ch._1
516+ let cf = ch._2
517+ let ci = ce[aw]
518+ let cj = ((ci - bL(bc, aw, ce, bY)) - 1)
519+ $Tuple2(cj, (ca - cj))
507520 }
508521
509522
510-func cf (aK) = {
511- let I = aK
512- if ($isInstanceOf(I, "ByteVector"))
523+func ck (aP) = {
524+ let L = aP
525+ if ($isInstanceOf(L, "ByteVector"))
513526 then {
514- let cg = I
515- toBase58String(cg)
527+ let cl = L
528+ toBase58String(cl)
516529 }
517- else if ($isInstanceOf(I, "Unit"))
530+ else if ($isInstanceOf(L, "Unit"))
518531 then {
519- let ch = I
532+ let cm = L
520533 "WAVES"
521534 }
522535 else throw("Match error")
523536 }
524537
525538
526-func ci (cj,aK) = if (cj)
527- then $Tuple2("lockNeutrino", R)
528- else $Tuple2("unlockNeutrino", R)
539+func cn (co,aP) = if (co)
540+ then $Tuple2("lockNeutrino", U)
541+ else $Tuple2("unlockNeutrino", U)
529542
530543
531-func ck (cj,cl,aK) = if (cj)
544+func cp (co,cq,aP) = if (co)
532545 then {
533- let cm = ci(cj, aK)
534- let cn = cm._1
535- let co = cm._2
536- $Tuple4(cn, co, nil, [AttachedPayment(aK, cl)])
546+ let cr = cn(co, aP)
547+ let cs = cr._1
548+ let ct = cr._2
549+ $Tuple4(cs, ct, nil, [AttachedPayment(aP, cq)])
537550 }
538551 else {
539- let cp = ci(cj, aK)
540- let cn = cp._1
541- let co = cp._2
542- $Tuple4(cn, co, [cl, toBase58String(aK)], nil)
552+ let cu = cn(co, aP)
553+ let cs = cu._1
554+ let ct = cu._2
555+ $Tuple4(cs, ct, [cq, toBase58String(aP)], nil)
543556 }
544557
545558
546-func cj (cl,cq) = if (containsElement(W, cq))
559+func co (cq,cv) = if (containsElement(Y, cv))
547560 then {
548- let cr = ck(true, cl, fromBase58String(cq))
549- let cn = cr._1
550- let cs = cr._2
551- let ct = cr._3
552- let cu = cr._4
553- invoke(cs, cn, ct, cu)
561+ let cw = cp(true, cq, fromBase58String(cv))
562+ let cs = cw._1
563+ let cx = cw._2
564+ let cy = cw._3
565+ let cz = cw._4
566+ invoke(cx, cs, cy, cz)
554567 }
555568 else 0
556569
557570
558-func cv (cl,cq) = if (containsElement(W, cq))
571+func cA (cq,cv) = if (containsElement(Y, cv))
559572 then {
560- let cw = ck(false, cl, fromBase58String(cq))
561- let cn = cw._1
562- let cs = cw._2
563- let ct = cw._3
564- let cu = cw._4
565- invoke(cs, cn, ct, cu)
573+ let cB = cp(false, cq, fromBase58String(cv))
574+ let cs = cB._1
575+ let cx = cB._2
576+ let cy = cB._3
577+ let cz = cB._4
578+ invoke(cx, cs, cy, cz)
566579 }
567580 else 0
568581
569582
570-func cx (aK) = {
571- let cy = {
572- let I = aK
573- if ($isInstanceOf(I, "ByteVector"))
583+func cC (aP) = {
584+ let cD = {
585+ let L = aP
586+ if ($isInstanceOf(L, "ByteVector"))
574587 then {
575- let cz = I
576- if ((cz == V))
577- then getInteger(R, ((("rpd_balance_" + toBase58String(cz)) + "_") + toString(this)))
588+ let cE = L
589+ if ((cE == X))
590+ then getInteger(U, ((("rpd_balance_" + toBase58String(cE)) + "_") + toString(this)))
578591 else 0
579592 }
580- else if ($isInstanceOf(I, "Unit"))
593+ else if ($isInstanceOf(L, "Unit"))
581594 then 0
582595 else throw("Match error")
583596 }
584- let I = cy
585- if ($isInstanceOf(I, "Int"))
597+ let L = cD
598+ if ($isInstanceOf(L, "Int"))
586599 then {
587- let as = I
588- as
600+ let aw = L
601+ aw
589602 }
590603 else 0
591604 }
592605
593606
594-func cA () = {
595- let cB = aH()
596- func cC (aJ,aK) = {
597- let cD = aJ
598- let cE = cD._1
599- let as = cD._2
600- if (cE)
601- then $Tuple2(cE, as)
607+func cF () = {
608+ let cG = aM()
609+ func cH (aO,aP) = {
610+ let cI = aO
611+ let cJ = cI._1
612+ let aw = cI._2
613+ if (cJ)
614+ then $Tuple2(cJ, aw)
602615 else {
603- let cF = (assetBalance(this, fromBase58String(aK)) + cx(fromBase58String(aK)))
604- if ((cB[as] > cF))
605- then $Tuple2(true, as)
606- else $Tuple2(false, (as + 1))
616+ let cK = (assetBalance(this, fromBase58String(aP)) + cC(fromBase58String(aP)))
617+ if ((cG[aw] > cK))
618+ then $Tuple2(true, aw)
619+ else $Tuple2(false, (aw + 1))
607620 }
608621 }
609622
610- let aL = al
611- let aM = size(aL)
612- let aN = $Tuple2(false, 0)
613- func aO (aP,aQ) = if ((aQ >= aM))
614- then aP
615- else cC(aP, aL[aQ])
623+ let aQ = ap
624+ let aR = size(aQ)
625+ let aS = $Tuple2(false, 0)
626+ func aT (aU,aV) = if ((aV >= aR))
627+ then aU
628+ else cH(aU, aQ[aV])
616629
617- func aR (aP,aQ) = if ((aQ >= aM))
618- then aP
630+ func aW (aU,aV) = if ((aV >= aR))
631+ then aU
619632 else throw("List size exceeds 15")
620633
621- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
634+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
622635 }
623636
624637
625-func cG (as) = an(("Suspicious state with asset: " + al[as]))
638+func cL (aw) = ar(("Suspicious state with asset: " + ap[aw]))
626639
627640
628-func cH (bO,cu) = {
629- func cI (aJ,cJ) = (aJ :+ ScriptTransfer(bO, cJ.amount, cJ.assetId))
641+func cM (bT,cz) = {
642+ func cN (aO,cO) = (aO :+ ScriptTransfer(bT, cO.amount, cO.assetId))
630643
631- let aL = cu
632- let aM = size(aL)
633- let aN = nil
634- func aO (aP,aQ) = if ((aQ >= aM))
635- then aP
636- else cI(aP, aL[aQ])
644+ let aQ = cz
645+ let aR = size(aQ)
646+ let aS = nil
647+ func aT (aU,aV) = if ((aV >= aR))
648+ then aU
649+ else cN(aU, aQ[aV])
637650
638- func aR (aP,aQ) = if ((aQ >= aM))
639- then aP
651+ func aW (aU,aV) = if ((aV >= aR))
652+ then aU
640653 else throw("List size exceeds 15")
641654
642- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
655+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
643656 }
644657
645658
646-@Callable(cK)
647-func D (aT,aX) = {
648- let bk = aZ(aT, aX)
649- $Tuple2([IntegerEntry("D", bk)], bk)
659+func cP (cQ) = {
660+ let cR = valueOrErrorMessage(getInteger(this, n), "No dAppThresholdCoef key")
661+ let cS = 10000
662+ func cT (aO,cU) = {
663+ let cV = aO
664+ let cW = cV._1
665+ let cX = cV._2
666+ func cY (cZ,da) = {
667+ let db = fraction(cU, cS, da)
668+ if (if ((db > (cR * cS)))
669+ then true
670+ else (fraction(1, cS, cR) > db))
671+ then throw("New balance in assets of the DApp is less than threshold")
672+ else false
673+ }
674+
675+ $Tuple2({
676+ let aQ = cX
677+ let aR = size(aQ)
678+ let aS = cW
679+ func aT (aU,aV) = if ((aV >= aR))
680+ then aU
681+ else cY(aU, aQ[aV])
682+
683+ func aW (aU,aV) = if ((aV >= aR))
684+ then aU
685+ else throw("List size exceeds 15")
686+
687+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
688+ }, removeByIndex(cX, 0))
689+ }
690+
691+ let dc = {
692+ let aQ = cQ
693+ let aR = size(aQ)
694+ let aS = $Tuple2(false, removeByIndex(cQ, 0))
695+ func aT (aU,aV) = if ((aV >= aR))
696+ then aU
697+ else cT(aU, aQ[aV])
698+
699+ func aW (aU,aV) = if ((aV >= aR))
700+ then aU
701+ else throw("List size exceeds 15")
702+
703+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
704+ }
705+ let cW = dc._1
706+ let dd = dc._2
707+ cW
708+ }
709+
710+
711+@Callable(de)
712+func D (aY,bc) = {
713+ let bp = be(aY, bc)
714+ $Tuple2([IntegerEntry("D", bp)], bp)
650715 }
651716
652717
653718
654-@Callable(cK)
655-func init (cL,aC,cM) = if (!(isDataStorageUntouched(this)))
719+@Callable(de)
720+func init (df,aH,dg) = if (!(isDataStorageUntouched(this)))
656721 then throw("Already initialized")
657722 else {
658- let cN = "s_Multi_USD"
659- let cO = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
660- let cP = Issue(cN, cO, 0, 6, true)
661- let cQ = calculateAssetId(cP)
662- let cR = [StringEntry(e, cL), IntegerEntry("initial_A", aC), IntegerEntry("future_A", aC), IntegerEntry(k, getIntegerValue(F, "base_fee_flat")), StringEntry(i, toBase58String(cQ)), IntegerEntry(j, 0), BooleanEntry(g, true), cP]
663- if (cM)
664- then (cR ++ [BooleanEntry(p, cM), IntegerEntry(q, (Y + (aa * Z)))])
665- else cR
723+ let dh = "s_Multi_USD"
724+ let di = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
725+ let dj = Issue(dh, di, 0, 6, true)
726+ let dk = calculateAssetId(dj)
727+ let dl = [StringEntry(f, e), StringEntry(g, df), IntegerEntry("initial_A", aH), IntegerEntry("future_A", aH), IntegerEntry(m, getIntegerValue(I, "base_fee_flat")), StringEntry(k, toBase58String(dk)), IntegerEntry(l, 0), BooleanEntry(i, true), IntegerEntry(n, 15), dj]
728+ if (dg)
729+ then (dl ++ [BooleanEntry(s, dg), IntegerEntry(t, (aa + (ac * ab)))])
730+ else dl
666731 }
667732
668733
669734
670-@Callable(cK)
671-func addLiquidity (cS,cT) = valueOrElse(aq(), {
672- let aX = aC()
673- let aT = aH()
674- let bS = if ((ad == 0))
735+@Callable(de)
736+func addLiquidity (dm,dn) = valueOrElse(au(), {
737+ let bc = aH()
738+ let aY = aM()
739+ let bX = if ((af == 0))
675740 then 0
676- else bn(aT, aX)
677- let cu = cK.payments
678- let cU = size(cu)
679- func cV (cU) = if ((cU > am))
680- then throw(("payments size > " + toString(am)))
681- else if ((1 > cU))
741+ else bs(aY, bc)
742+ let cz = de.payments
743+ let do = size(cz)
744+ func dp (do) = if ((do > aq))
745+ then throw(("payments size > " + toString(aq)))
746+ else if ((1 > do))
682747 then throw("payments size < 1")
683- else if (if ((ad == 0))
684- then (am != cU)
748+ else if (if ((af == 0))
749+ then (aq != do)
685750 else false)
686751 then throw("initial deposit requires all coins")
687752 else {
688- func cW (aJ,cJ) = if (containsElement(al, cf(cJ.assetId)))
753+ func dq (aO,cO) = if (containsElement(ap, ck(cO.assetId)))
689754 then true
690755 else throw("Invalid asset in payment")
691756
692- let aL = cu
693- let aM = size(aL)
694- let aN = false
695- func aO (aP,aQ) = if ((aQ >= aM))
696- then aP
697- else cW(aP, aL[aQ])
757+ let aQ = cz
758+ let aR = size(aQ)
759+ let aS = false
760+ func aT (aU,aV) = if ((aV >= aR))
761+ then aU
762+ else dq(aU, aQ[aV])
698763
699- func aR (aP,aQ) = if ((aQ >= aM))
700- then aP
764+ func aW (aU,aV) = if ((aV >= aR))
765+ then aU
701766 else throw("List size exceeds 15")
702767
703- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
768+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
704769 }
705770
706- if (!(cV(cU)))
771+ if (!(dp(do)))
707772 then throw()
708773 else {
709- let cE = cA()
710- if (cE._1)
711- then (cG(cE._2) ++ cH(cK.caller, cu))
774+ let cJ = cF()
775+ if (cJ._1)
776+ then (cL(cJ._2) ++ cM(de.caller, cz))
712777 else {
713- let cX = size(cu)
714- func cI (aJ,aK) = {
715- let cY = aJ
716- let cZ = cY._1
717- let as = cY._2
718- let da = cY._3
719- if (if ((cX > da))
720- then (cf(cu[da].assetId) == aK)
778+ let dr = size(cz)
779+ func cN (aO,aP) = {
780+ let ds = aO
781+ let cQ = ds._1
782+ let aw = ds._2
783+ let dt = ds._3
784+ if (if ((dr > dt))
785+ then (ck(cz[dt].assetId) == aP)
721786 else false)
722787 then {
723- let db = cj(cu[da].amount, cf(cu[da].assetId))
724- if ((db == db))
725- then $Tuple3((cZ :+ (aT[as] + cu[da].amount)), (as + 1), (da + 1))
788+ let du = co(cz[dt].amount, ck(cz[dt].assetId))
789+ if ((du == du))
790+ then $Tuple3((cQ :+ (aY[aw] + cz[dt].amount)), (aw + 1), (dt + 1))
726791 else throw("Strict value is not equal to itself.")
727792 }
728- else $Tuple3((cZ :+ aT[as]), (as + 1), da)
793+ else $Tuple3((cQ :+ aY[aw]), (aw + 1), dt)
729794 }
730795
731- let dc = {
732- let aL = al
733- let aM = size(aL)
734- let aN = $Tuple3(nil, 0, 0)
735- func aO (aP,aQ) = if ((aQ >= aM))
736- then aP
737- else cI(aP, aL[aQ])
796+ let dv = {
797+ let aQ = ap
798+ let aR = size(aQ)
799+ let aS = $Tuple3(nil, 0, 0)
800+ func aT (aU,aV) = if ((aV >= aR))
801+ then aU
802+ else cN(aU, aQ[aV])
738803
739- func aR (aP,aQ) = if ((aQ >= aM))
740- then aP
804+ func aW (aU,aV) = if ((aV >= aR))
805+ then aU
741806 else throw("List size exceeds 15")
742807
743- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
808+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
744809 }
745- let cZ = dc._1
746- let dd = dc._2
747- let de = dc._3
748- if (((cX - 1) > de))
810+ let cQ = dv._1
811+ let dw = dv._2
812+ let dx = dv._3
813+ if (((dr - 1) > dx))
749814 then throw("Incorect payments order")
750- else {
751- let bT = bn(cZ, aX)
752- if (av((bT > bS)))
753- then throw("D1 > D0")
754- else {
755- let bP = ax(cK.caller)
756- func df (aJ,dg) = {
757- let dh = aJ
758- let di = dh._1
759- let dj = dh._2
760- let as = dh._3
761- if ((ad > 0))
762- then {
763- let bQ = ((fraction(af, bP, ae, CEILING) * am) / (4 * (am - 1)))
764- let dk = {
765- let dl = fraction(bT, aT[as], bS)
766- let dm = if ((dl > dg))
767- then (dl - dg)
768- else (dg - dl)
769- fraction(bQ, dm, ae)
815+ else if (cP(cQ))
816+ then throw()
817+ else {
818+ let bY = bs(cQ, bc)
819+ if (aA((bY > bX)))
820+ then throw("D1 > D0")
821+ else {
822+ let bU = aC(de.caller)
823+ func dy (aO,dz) = {
824+ let dA = aO
825+ let dB = dA._1
826+ let dC = dA._2
827+ let aw = dA._3
828+ if ((af > 0))
829+ then {
830+ let bV = ((fraction(ah, bU, ag, CEILING) * aq) / (4 * (aq - 1)))
831+ let dD = {
832+ let dE = fraction(bY, aY[aw], bX)
833+ let dF = if ((dE > dz))
834+ then (dE - dz)
835+ else (dz - dE)
836+ fraction(bV, dF, ag)
837+ }
838+ let dG = fraction(dD, ai, ag)
839+ let dH = (dz - dG)
840+ let dI = (dz - dD)
841+ let dJ = cA(dG, ap[aw])
842+ if ((dJ == dJ))
843+ then $Tuple3((dB :+ dI), (dC ++ [ScriptTransfer(S, dG, fromBase58String(ap[aw])), IntegerEntry((ap[aw] + h), dH)]), (aw + 1))
844+ else throw("Strict value is not equal to itself.")
770845 }
771- let dn = fraction(dk, ag, ae)
772- let do = (dg - dn)
773- let dp = (dg - dk)
774- let dq = cv(dk, al[as])
775- if ((dq == dq))
776- then $Tuple3((di :+ dp), (dj ++ [ScriptTransfer(U, (dk - dn), fromBase58String(al[as])), ScriptTransfer(P, dn, fromBase58String(al[as])), IntegerEntry((al[as] + f), do)]), (as + 1))
777- else throw("Strict value is not equal to itself.")
778- }
779- else $Tuple3((di :+ dg), (dj :+ IntegerEntry((al[as] + f), dg)), (as + 1))
846+ else $Tuple3((dB :+ dz), (dC :+ IntegerEntry((ap[aw] + h), dz)), (aw + 1))
847+ }
848+
849+ let dK = {
850+ let aQ = cQ
851+ let aR = size(aQ)
852+ let aS = $Tuple3(nil, nil, 0)
853+ func bn (aU,aV) = if ((aV >= aR))
854+ then aU
855+ else dy(aU, aQ[aV])
856+
857+ func bo (aU,aV) = if ((aV >= aR))
858+ then aU
859+ else throw("List size exceeds 15")
860+
861+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
862+ }
863+ let dB = dK._1
864+ let dC = dK._2
865+ let dL = bs(dB, bc)
866+ let dM = if ((af == 0))
867+ then bY
868+ else fraction(af, (dL - bX), bX)
869+ if (aA((dM >= dm)))
870+ then throw("Slippage screwed you")
871+ else if (dn)
872+ then {
873+ let dN = invoke(this, "reissueShare", [dM], nil)
874+ if ((dN == dN))
875+ then {
876+ let du = invoke(W, "lockShareTokens", [toString(this)], [AttachedPayment(ae, dM)])
877+ if ((du == du))
878+ then (dC :+ IntegerEntry(l, (af + dM)))
879+ else throw("Strict value is not equal to itself.")
880+ }
881+ else throw("Strict value is not equal to itself.")
882+ }
883+ else (dC ++ [Reissue(ae, dM, true), ScriptTransfer(de.caller, dM, ae), IntegerEntry(l, (af + dM))])
780884 }
781-
782- let dr = {
783- let aL = cZ
784- let aM = size(aL)
785- let aN = $Tuple3(nil, nil, 0)
786- func bi (aP,aQ) = if ((aQ >= aM))
787- then aP
788- else df(aP, aL[aQ])
789-
790- func bj (aP,aQ) = if ((aQ >= aM))
791- then aP
792- else throw("List size exceeds 15")
793-
794- bj(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
795- }
796- let di = dr._1
797- let dj = dr._2
798- let ds = bn(di, aX)
799- let dt = if ((ad == 0))
800- then bT
801- else fraction(ad, (ds - bS), bS)
802- if (av((dt >= cS)))
803- then throw("Slippage screwed you")
804- else if (cT)
805- then {
806- let du = Reissue(ac, dt, true)
807- if ((du == du))
808- then {
809- let db = invoke(T, "lockShareTokens", [toString(cK.caller)], [AttachedPayment(ac, dt)])
810- if ((db == db))
811- then dj
812- else throw("Strict value is not equal to itself.")
813- }
814- else throw("Strict value is not equal to itself.")
815- }
816- else (dj ++ [Reissue(ac, dt, true), ScriptTransfer(cK.caller, dt, ac), IntegerEntry(j, (ad + dt))])
817- }
818- }
885+ }
819886 }
820887 }
821888 })
822889
823890
824891
825-@Callable(cK)
826-func getDy (dv,dw,dx,dy) = {
827- let aT = aH()
828- let dz = valueOrErrorMessage(indexOf(al, dv), "unknown token in")
829- let dA = valueOrErrorMessage(indexOf(al, dw), "unknown token out")
830- let br = (aT[dz] + dx)
831- let bE = bo(dz, dA, br, aT)
832- let ce = ((aT[dA] - bE) - 1)
833- let bP = ax(Address(fromBase58String(dy)))
834- let bQ = fraction(fraction(af, bP, ae, CEILING), ce, ae)
835- $Tuple2(nil, (ce - bQ))
892+@Callable(de)
893+func reissueShare (cq) = valueOrElse(ax(de), [Reissue(ae, cq, true)])
894+
895+
896+
897+@Callable(de)
898+func getDy (dO,dP,dQ,dR) = {
899+ let aY = aM()
900+ let dS = valueOrErrorMessage(indexOf(ap, dO), "unknown token in")
901+ let dT = valueOrErrorMessage(indexOf(ap, dP), "unknown token out")
902+ let bw = (aY[dS] + dQ)
903+ let bJ = bt(dS, dT, bw, aY)
904+ let cj = ((aY[dT] - bJ) - 1)
905+ let bU = aC(Address(fromBase58String(dR)))
906+ let bV = fraction(fraction(ah, bU, ag, CEILING), cj, ag)
907+ $Tuple2(nil, (cj - bV))
836908 }
837909
838910
839911
840-@Callable(cK)
841-func exchange (dB,dC) = valueOrElse(aq(), if ((size(cK.payments) != 1))
912+@Callable(de)
913+func exchange (dU,dV) = valueOrElse(au(), if ((size(de.payments) != 1))
842914 then throw("size(payments) != 1")
843915 else {
844- let cE = cA()
845- if (cE._1)
846- then (cG(cE._2) ++ cH(cK.caller, cK.payments))
916+ let cJ = cF()
917+ if (cJ._1)
918+ then (cL(cJ._2) ++ cM(de.caller, de.payments))
847919 else {
848- let cJ = cK.payments[0]
849- let dD = cf(cJ.assetId)
850- let dE = fromBase58String(dB)
851- let dx = cJ.amount
852- let dz = valueOrErrorMessage(indexOf(al, dD), "unknown token in")
853- let dA = valueOrErrorMessage(indexOf(al, dB), "unknown token out")
854- let aT = aH()
855- let br = (aT[dz] + dx)
856- let bE = bo(dz, dA, br, aT)
857- let dF = ((aT[dA] - bE) - 1)
858- let bP = ax(cK.caller)
859- let bQ = fraction(dF, fraction(af, bP, ae, CEILING), ae)
860- let ce = (dF - bQ)
861- if (av((ce >= dC)))
920+ let cO = de.payments[0]
921+ let dW = ck(cO.assetId)
922+ let dX = fromBase58String(dU)
923+ let dQ = cO.amount
924+ let dS = valueOrErrorMessage(indexOf(ap, dW), "unknown token in")
925+ let dT = valueOrErrorMessage(indexOf(ap, dU), "unknown token out")
926+ let aY = aM()
927+ let bw = (aY[dS] + dQ)
928+ let bJ = bt(dS, dT, bw, aY)
929+ let dY = ((aY[dT] - bJ) - 1)
930+ let bU = aC(de.caller)
931+ let bV = fraction(dY, fraction(ah, bU, ag, CEILING), ag)
932+ let cj = (dY - bV)
933+ let dG = fraction(bV, ai, ag)
934+ if (aA((cj >= dV)))
862935 then throw("Exchange resulted in fewer coins than expected")
863936 else {
864- let dn = fraction(bQ, ag, ae)
865- let db = cj(cJ.amount, cf(cJ.assetId))
866- if ((db == db))
937+ func dZ (aO,cU) = {
938+ let ea = aO
939+ let cQ = ea._1
940+ let aw = ea._2
941+ if ((aw == dS))
942+ then $Tuple2((cQ :+ (cU + dQ)), (aw + 1))
943+ else if ((aw == dT))
944+ then $Tuple2((cQ :+ (cU + cj)), (aw + 1))
945+ else $Tuple2((cQ :+ cU), (aw + 1))
946+ }
947+
948+ let eb = {
949+ let aQ = aY
950+ let aR = size(aQ)
951+ let aS = $Tuple2(nil, 0)
952+ func aT (aU,aV) = if ((aV >= aR))
953+ then aU
954+ else dZ(aU, aQ[aV])
955+
956+ func aW (aU,aV) = if ((aV >= aR))
957+ then aU
958+ else throw("List size exceeds 15")
959+
960+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
961+ }
962+ let cQ = eb._1
963+ let aw = eb._2
964+ if (cP(cQ))
965+ then throw()
966+ else {
967+ let du = co(cO.amount, ck(cO.assetId))
968+ if ((du == du))
969+ then {
970+ let dJ = cA((cj + dG), dU)
971+ if ((dJ == dJ))
972+ then $Tuple2([IntegerEntry((dW + h), bw), IntegerEntry((dU + h), ((aY[dT] - cj) - dG)), ScriptTransfer(de.caller, cj, dX), ScriptTransfer(S, dG, dX)], $Tuple2(cj, dX))
973+ else throw("Strict value is not equal to itself.")
974+ }
975+ else throw("Strict value is not equal to itself.")
976+ }
977+ }
978+ }
979+ })
980+
981+
982+
983+@Callable(de)
984+func withdraw (ec,ed) = valueOrElse(au(), if ((size(de.payments) != 1))
985+ then throw("size(payments) != 1")
986+ else {
987+ let cJ = cF()
988+ if (cJ._1)
989+ then (cL(cJ._2) ++ cM(de.caller, de.payments))
990+ else {
991+ let cO = de.payments[0]
992+ let dW = cO.assetId
993+ if ((dW != ae))
994+ then throw("unknown token")
995+ else {
996+ let ee = cO.amount
997+ let bW = af
998+ let ef = if ((ed > 0))
999+ then invoke(W, "withdrawShareTokens", [toString(this), ed], nil)
1000+ else 0
1001+ if ((ef == ef))
8671002 then {
868- let dq = cv((ce + bQ), dB)
869- if ((dq == dq))
870- then $Tuple2([IntegerEntry((dD + f), br), IntegerEntry((dB + f), ((aT[dA] - ce) - dn)), ScriptTransfer(cK.caller, ce, dE), ScriptTransfer(P, dn, dE), ScriptTransfer(P, (bQ - dn), dE)], $Tuple2(ce, dE))
871- else throw("Strict value is not equal to itself.")
1003+ let eg = (ee + ed)
1004+ func dy (aO,eh) = {
1005+ let ei = aO
1006+ let dC = ei._1
1007+ let aw = ei._2
1008+ let ej = fraction(eh, eg, bW)
1009+ if (aA((ej >= ec[aw])))
1010+ then throw("Withdrawal resulted in fewer coins than expected")
1011+ else {
1012+ let dJ = cA(ej, ap[aw])
1013+ if ((dJ == dJ))
1014+ then $Tuple2((dC ++ [IntegerEntry((ap[aw] + h), (eh - ej)), ScriptTransfer(de.caller, ej, fromBase58String(ap[aw]))]), (aw + 1))
1015+ else throw("Strict value is not equal to itself.")
1016+ }
1017+ }
1018+
1019+ let ek = {
1020+ let aQ = aM()
1021+ let aR = size(aQ)
1022+ let aS = $Tuple2(nil, 0)
1023+ func aT (aU,aV) = if ((aV >= aR))
1024+ then aU
1025+ else dy(aU, aQ[aV])
1026+
1027+ func aW (aU,aV) = if ((aV >= aR))
1028+ then aU
1029+ else throw("List size exceeds 15")
1030+
1031+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1032+ }
1033+ let dC = ek._1
1034+ let aw = ek._2
1035+ (dC ++ [Burn(ae, eg), IntegerEntry(l, (af - eg))])
8721036 }
8731037 else throw("Strict value is not equal to itself.")
8741038 }
8751039 }
8761040 })
8771041
8781042
8791043
880-@Callable(cK)
881-func withdraw (dG,dH) = valueOrElse(aq(), if ((size(cK.payments) != 1))
882- then throw("size(payments) != 1")
883- else {
884- let cE = cA()
885- if (cE._1)
886- then (cG(cE._2) ++ cH(cK.caller, cK.payments))
887- else {
888- let cJ = cK.payments[0]
889- let dD = cJ.assetId
890- if ((dD != ac))
891- then throw("unknown token")
892- else {
893- let dI = cJ.amount
894- let bR = ad
895- let dJ = if ((dH > 0))
896- then invoke(T, "withdrawShareTokens", [toString(cK.caller), dH], nil)
897- else 0
898- if ((dJ == dJ))
899- then {
900- let dK = (dI + dH)
901- func df (aJ,dL) = {
902- let dM = aJ
903- let dj = dM._1
904- let as = dM._2
905- let dN = fraction(dL, dK, bR)
906- if (av((dN >= dG[as])))
907- then throw("Withdrawal resulted in fewer coins than expected")
908- else {
909- let dq = cv(dN, al[as])
910- if ((dq == dq))
911- then $Tuple2((dj ++ [IntegerEntry((al[as] + f), (dL - dN)), ScriptTransfer(cK.caller, dN, fromBase58String(al[as]))]), (as + 1))
912- else throw("Strict value is not equal to itself.")
913- }
914- }
915-
916- let dO = {
917- let aL = aH()
918- let aM = size(aL)
919- let aN = $Tuple2(nil, 0)
920- func aO (aP,aQ) = if ((aQ >= aM))
921- then aP
922- else df(aP, aL[aQ])
923-
924- func aR (aP,aQ) = if ((aQ >= aM))
925- then aP
926- else throw("List size exceeds 15")
927-
928- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
929- }
930- let dj = dO._1
931- let as = dO._2
932- (dj ++ [Burn(ac, dK), IntegerEntry(j, (ad - dK))])
933- }
934- else throw("Strict value is not equal to itself.")
935- }
936- }
937- })
1044+@Callable(de)
1045+func calcWithdrawOneCoin (el,dU,em) = {
1046+ let aw = valueOrErrorMessage(indexOf(ap, dU), "unknown token out")
1047+ $Tuple2(nil, bR(aM(), el, aw, Address(fromBase58String(em)))._1)
1048+ }
9381049
9391050
9401051
941-@Callable(cK)
942-func calcWithdrawOneCoin (dP,as) = $Tuple2(nil, bM(aH(), dP, as, cK.caller)._1)
943-
944-
945-
946-@Callable(cK)
947-func withdrawOneCoin (dB,dQ,dH) = valueOrElse(aq(), if ((size(cK.payments) != 1))
1052+@Callable(de)
1053+func withdrawOneCoin (dU,en,ed) = valueOrElse(au(), if ((size(de.payments) != 1))
9481054 then throw("size(payments) != 1")
9491055 else {
950- let cE = cA()
951- if (cE._1)
952- then (cG(cE._2) ++ cH(cK.caller, cK.payments))
1056+ let cJ = cF()
1057+ if (cJ._1)
1058+ then (cL(cJ._2) ++ cM(de.caller, de.payments))
9531059 else {
954- let cJ = cK.payments[0]
955- let dD = cJ.assetId
956- if ((dD != ac))
1060+ let cO = de.payments[0]
1061+ let dW = cO.assetId
1062+ if ((dW != ae))
9571063 then throw("unknown token")
9581064 else {
959- let as = valueOrErrorMessage(indexOf(al, dB), "unknown token out")
960- let dP = cJ.amount
961- let dJ = if ((dH > 0))
962- then invoke(T, "withdrawShareTokens", [toString(cK.caller), dH], nil)
1065+ let eo = valueOrErrorMessage(indexOf(ap, dU), "unknown token out")
1066+ let ep = cO.amount
1067+ let ef = if ((ed > 0))
1068+ then invoke(W, "withdrawShareTokens", [toString(this), ed], nil)
9631069 else 0
964- if ((dJ == dJ))
1070+ if ((ef == ef))
9651071 then {
966- let dK = (dP + dH)
967- let aT = aH()
968- let dR = bM(aT, dK, as, cK.caller)
969- let ce = dR._1
970- let dS = dR._2
971- if (av((ce >= dQ)))
1072+ let eg = (ep + ed)
1073+ let aY = aM()
1074+ let eq = bR(aY, eg, eo, de.caller)
1075+ let cj = eq._1
1076+ let er = eq._2
1077+ if (aA((cj >= en)))
9721078 then throw("Not enough coins removed")
9731079 else {
974- let dn = fraction(dS, ag, ae)
975- let dT = (ce + dS)
976- let dq = cv(dT, dB)
977- if ((dq == dq))
978- then [ScriptTransfer(cK.caller, ce, fromBase58String(dB)), IntegerEntry((al[as] + f), (aT[as] - dT)), Burn(ac, dK), ScriptTransfer(P, dn, fromBase58String(dB)), ScriptTransfer(U, (dS - dn), fromBase58String(dB)), IntegerEntry(j, (ad - dK))]
979- else throw("Strict value is not equal to itself.")
1080+ let dG = fraction(er, ai, ag)
1081+ let es = (cj + dG)
1082+ func dZ (aO,cU) = {
1083+ let et = aO
1084+ let cQ = et._1
1085+ let aw = et._2
1086+ if ((aw == eo))
1087+ then $Tuple2((cQ :+ (cU - es)), (aw + 1))
1088+ else $Tuple2((cQ :+ cU), (aw + 1))
1089+ }
1090+
1091+ let eu = {
1092+ let aQ = aY
1093+ let aR = size(aQ)
1094+ let aS = $Tuple2(nil, 0)
1095+ func aT (aU,aV) = if ((aV >= aR))
1096+ then aU
1097+ else dZ(aU, aQ[aV])
1098+
1099+ func aW (aU,aV) = if ((aV >= aR))
1100+ then aU
1101+ else throw("List size exceeds 15")
1102+
1103+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1104+ }
1105+ let cQ = eu._1
1106+ let aw = eu._2
1107+ if (cP(cQ))
1108+ then throw()
1109+ else {
1110+ let dJ = cA(es, dU)
1111+ if ((dJ == dJ))
1112+ then [ScriptTransfer(de.caller, cj, fromBase58String(dU)), IntegerEntry((ap[aw] + h), (aY[aw] - es)), Burn(ae, eg), ScriptTransfer(S, dG, fromBase58String(dU)), IntegerEntry(l, (af - eg))]
1113+ else throw("Strict value is not equal to itself.")
1114+ }
9801115 }
9811116 }
9821117 else throw("Strict value is not equal to itself.")
9831118 }
9841119 }
9851120 })
9861121
9871122
9881123
989-@Callable(cK)
990-func A () = $Tuple2(nil, aC())
1124+@Callable(de)
1125+func A () = $Tuple2(nil, aH())
9911126
9921127
9931128
994-@Callable(cK)
1129+@Callable(de)
9951130 func getVirtualPrice () = {
996- let bk = aW(aH(), aC())
997- $Tuple2(nil, fraction(bk, a, ad))
1131+ let bp = bb(aM(), aH())
1132+ $Tuple2(nil, fraction(bp, a, af))
9981133 }
9991134
10001135
10011136
1002-@Callable(cK)
1003-func calcTokenAmount (dU,dV) = {
1004- let aX = aC()
1005- let dW = aH()
1006- let bS = bn(dW, aX)
1007- func dX (aJ,dL) = {
1008- let dY = aJ
1009- let cZ = dY._1
1010- let as = dY._2
1011- let dg = (dL + (if (dV)
1012- then dU[as]
1013- else -(dU[as])))
1014- $Tuple2((cZ :+ dg), (as + 1))
1137+@Callable(de)
1138+func calcTokenAmount (ev,ew) = {
1139+ let bc = aH()
1140+ let ex = aM()
1141+ let bX = bs(ex, bc)
1142+ func ey (aO,eh) = {
1143+ let ez = aO
1144+ let cQ = ez._1
1145+ let aw = ez._2
1146+ let dz = (eh + (if (ew)
1147+ then ev[aw]
1148+ else -(ev[aw])))
1149+ $Tuple2((cQ :+ dz), (aw + 1))
10151150 }
10161151
1017- let cZ = ( let aL = dW
1018- let aM = size(aL)
1019- let aN = $Tuple2(nil, 0)
1020- func aO (aP,aQ) = if ((aQ >= aM))
1021- then aP
1022- else dX(aP, aL[aQ])
1152+ let cQ = ( let aQ = ex
1153+ let aR = size(aQ)
1154+ let aS = $Tuple2(nil, 0)
1155+ func aT (aU,aV) = if ((aV >= aR))
1156+ then aU
1157+ else ey(aU, aQ[aV])
10231158
1024- func aR (aP,aQ) = if ((aQ >= aM))
1025- then aP
1159+ func aW (aU,aV) = if ((aV >= aR))
1160+ then aU
10261161 else throw("List size exceeds 15")
10271162
1028- aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
1029- let bT = bn(cZ, aX)
1030- let dZ = if (dV)
1031- then (bT - bS)
1032- else (bS - bT)
1033- $Tuple2(nil, fraction(dZ, ad, bS))
1163+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
1164+ let bY = bs(cQ, bc)
1165+ let eA = if (ew)
1166+ then (bY - bX)
1167+ else (bX - bY)
1168+ $Tuple2(nil, fraction(eA, af, bX))
10341169 }
10351170
10361171
10371172
1038-@Callable(cK)
1039-func rampA (ea,eb) = valueOrElse(aq(), valueOrElse(ar(cK), if (av((au >= (aj + d))))
1173+@Callable(de)
1174+func rampA (eB,eC) = valueOrElse(au(), valueOrElse(av(de), if (aA((az >= (al + d))))
10401175 then throw("too often")
1041- else if (av((eb >= (au + d))))
1176+ else if (aA((eC >= (az + d))))
10421177 then throw("insufficient time")
10431178 else {
1044- let ec = aC()
1045- if (av(if ((ea > 0))
1046- then (b > ea)
1179+ let eD = aH()
1180+ if (aA(if ((eB > 0))
1181+ then (b > eB)
10471182 else false))
10481183 then throw("out of base range")
1049- else if (av(if (if ((ea >= ec))
1050- then ((ec * c) >= ea)
1184+ else if (aA(if (if ((eB >= eD))
1185+ then ((eD * c) >= eB)
10511186 else false)
10521187 then true
1053- else if ((ec > ea))
1054- then ((ea * c) >= ec)
1188+ else if ((eD > eB))
1189+ then ((eB * c) >= eD)
10551190 else false))
10561191 then throw("out of range")
1057- else [IntegerEntry("initial_A", ec), IntegerEntry("future_A", ea), IntegerEntry("initial_A_time", au), IntegerEntry("future_A_time", eb)]
1192+ else [IntegerEntry("initial_A", eD), IntegerEntry("future_A", eB), IntegerEntry("initial_A_time", az), IntegerEntry("future_A_time", eC)]
10581193 }))
10591194
10601195
10611196
1062-@Callable(cK)
1063-func stopRampA () = valueOrElse(aq(), valueOrElse(ar(cK), {
1064- let ed = aC()
1065-[IntegerEntry("initial_A", ed), IntegerEntry("future_A", ed), IntegerEntry("initial_A_time", au), IntegerEntry("future_A_time", au)]
1197+@Callable(de)
1198+func stopRampA () = valueOrElse(au(), valueOrElse(av(de), {
1199+ let eE = aH()
1200+[IntegerEntry("initial_A", eE), IntegerEntry("future_A", eE), IntegerEntry("initial_A_time", az), IntegerEntry("future_A_time", az)]
10661201 }))
10671202
10681203
10691204
1070-@Callable(cK)
1071-func shutdown () = valueOrElse(ar(cK), if (!(ab))
1072- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, h), "the cause wasn't specified")))
1073- else an("Paused by admin"))
1205+@Callable(de)
1206+func shutdown () = valueOrElse(av(de), if (!(ad))
1207+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, j), "the cause wasn't specified")))
1208+ else ar("Paused by admin"))
10741209
10751210
10761211
1077-@Callable(cK)
1078-func activate () = valueOrElse(ar(cK), if (ab)
1079- then ap()
1080- else [BooleanEntry(g, true), DeleteEntry(h)])
1212+@Callable(de)
1213+func activate () = valueOrElse(av(de), if (ad)
1214+ then at()
1215+ else [BooleanEntry(i, true), DeleteEntry(j)])
10811216
10821217
10831218
1084-@Callable(cK)
1085-func keepLimitForFirstHarvest (ee) = valueOrElse(aq(), valueOrElse(ar(cK), [IntegerEntry(r, ee)]))
1219+@Callable(de)
1220+func keepLimitForFirstHarvest (eF) = valueOrElse(au(), valueOrElse(av(de), [IntegerEntry(u, eF)]))
10861221
10871222
1088-@Verifier(ef)
1089-func eg () = {
1090- let eh = {
1091- let ei = if (sigVerify(ef.bodyBytes, ef.proofs[0], L))
1223+@Verifier(eG)
1224+func eH () = {
1225+ let eI = {
1226+ let eJ = if (sigVerify(eG.bodyBytes, eG.proofs[0], O))
10921227 then 1
10931228 else 0
1094- let ej = if (sigVerify(ef.bodyBytes, ef.proofs[1], M))
1229+ let eK = if (sigVerify(eG.bodyBytes, eG.proofs[1], P))
10951230 then 1
10961231 else 0
1097- let ek = if (sigVerify(ef.bodyBytes, ef.proofs[2], N))
1232+ let eL = if (sigVerify(eG.bodyBytes, eG.proofs[2], Q))
10981233 then 1
10991234 else 0
1100- (((ei + ej) + ek) >= 2)
1235+ (((eJ + eK) + eL) >= 2)
11011236 }
1102- let I = ef
1103- if ($isInstanceOf(I, "InvokeScriptTransaction"))
1237+ let L = eG
1238+ if ($isInstanceOf(L, "InvokeScriptTransaction"))
11041239 then {
1105- let el = I
1106- let em = if ((el.dApp == this))
1107- then (el.function == "takeIntoAccountExtraFunds")
1240+ let eM = L
1241+ let eN = if ((eM.dApp == this))
1242+ then (eM.function == "takeIntoAccountExtraFunds")
11081243 else false
1109- let en = if (if (if (sigVerify(ef.bodyBytes, ef.proofs[0], L))
1244+ let eO = if (if (if (sigVerify(eG.bodyBytes, eG.proofs[0], O))
11101245 then true
1111- else sigVerify(ef.bodyBytes, ef.proofs[0], M))
1246+ else sigVerify(eG.bodyBytes, eG.proofs[0], P))
11121247 then true
1113- else sigVerify(ef.bodyBytes, ef.proofs[0], N))
1248+ else sigVerify(eG.bodyBytes, eG.proofs[0], Q))
11141249 then true
1115- else sigVerify(ef.bodyBytes, ef.proofs[0], O)
1116- if (if (em)
1117- then en
1250+ else sigVerify(eG.bodyBytes, eG.proofs[0], R)
1251+ if (if (eN)
1252+ then eO
11181253 else false)
11191254 then true
1120- else eh
1255+ else eI
11211256 }
1122- else eh
1257+ else eI
11231258 }
11241259

github/deemru/w8io/169f3d6 
414.72 ms