tx · EJ3eZimZTcoh46BuCER4W8oFq92pkCzDVXAi8U8uF7Pi

3MqQg3GcBjjk5727HxPKgQfqGQwWm6QA2yL:  -0.03800000 Waves

2022.09.14 15:48 [2228790] smart account 3MqQg3GcBjjk5727HxPKgQfqGQwWm6QA2yL > SELF 0.00000000 Waves

{ "type": 13, "id": "EJ3eZimZTcoh46BuCER4W8oFq92pkCzDVXAi8U8uF7Pi", "fee": 3800000, "feeAssetId": null, "timestamp": 1663159628619, "version": 2, "chainId": 84, "sender": "3MqQg3GcBjjk5727HxPKgQfqGQwWm6QA2yL", "senderPublicKey": "4AhS4PdxdW6j71mgHB4Xq7Eewk1rPdm57kDHAwQTTweK", "proofs": [ "3aR2espC4wneMzrYQVHw4a282PbC9CsSAMDnEbNTgLZi8U3gJ2RjEcwVDgRkkyG2bXBxSQorwEFKmexXtMngCQj8", "4GGguNy9NvJkUmcbuxycHVBAPdxVftC6qjUNqwzWyJ8ZZ7erpzTgLajExrqZViWTJfAf3tGubukwtzEAkokwBywP" ], "script": "base64:BgJpCAISBAoCEQESBgoECAEBBBIECgIBBBIECgIRCBIDCgEBEgYKBAgIAQgSBAoCCAESAwoBERIECgIRARIFCgMBCAgSBAoCCAESBQoDCAEBEgASABIECgIRBBIECgIBARIAEgASABIDCgEBXgAJUFJFQ0lTSU9OAMCEPQAFTUFYX0EAwIQ9AAxNQVhfQV9DSEFOR0UACgAIREVDSU1BTFMABgANTUlOX1JBTVBfVElNRQkAaQIAgKMFADwAB3ZlcnNpb24CBTMuMC4wAAhrVmVyc2lvbgIHdmVyc2lvbgAHa0Fzc2V0cwIJYXNzZXRfaWRzAA1rQXNzZXRCYWxhbmNlAghfYmFsYW5jZQAHa0FjdGl2ZQIGYWN0aXZlAAZrQ2F1c2UCDnNodXRkb3duX2NhdXNlAA1rU2hhcmVBc3NldElkAg5zaGFyZV9hc3NldF9pZAARa1NoYXJlQXNzZXRTdXBwbHkCEnNoYXJlX2Fzc2V0X3N1cHBseQAEa0ZlZQIKY29tbWlzc2lvbgASa0RBcHBUaHJlc2hvbGRDb2VmAhFkQXBwVGhyZXNob2xkQ29lZgAMa1VTRE5BZGRyZXNzAhhzdGFraW5nX3VzZG5uc2J0X2FkZHJlc3MACmtEaXNjb3VudHMCCWRpc2NvdW50cwAPa0Rpc2NvdW50VmFsdWVzAg9kaXNjb3VudF92YWx1ZXMADmtVc2VyU3dvcEluR292AgxfU1dPUF9hbW91bnQADWtGaXJzdEhhcnZlc3QCDWZpcnN0X2hhcnZlc3QAE2tGaXJzdEhhcnZlc3RIZWlnaHQCFGZpcnN0X2hhcnZlc3RfaGVpZ2h0AAtrU2hhcmVMaW1pdAIcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAALa0Jhc2VQZXJpb2QCC2Jhc2VfcGVyaW9kAA1rUGVyaW9kTGVuZ3RoAg1wZXJpb2RfbGVuZ3RoAAxrU3RhcnRIZWlnaHQCDHN0YXJ0X2hlaWdodAANa0FkbWluUHViS2V5MQILYWRtaW5fcHViXzEADWtBZG1pblB1YktleTICC2FkbWluX3B1Yl8yAA1rQWRtaW5QdWJLZXkzAgthZG1pbl9wdWJfMwASa0FkbWluSW52b2tlUHViS2V5AhBhZG1pbl9pbnZva2VfcHViABBrTW9uZXlCb3hBZGRyZXNzAhFtb25leV9ib3hfYWRkcmVzcwALa0dvdkFkZHJlc3MCEmdvdmVybmFuY2VfYWRkcmVzcwAOa1ZvdGluZ0FkZHJlc3MCDnZvdGluZ19hZGRyZXNzAA9rRmFybWluZ0FkZHJlc3MCD2Zhcm1pbmdfYWRkcmVzcwARa0xQRmFybWluZ0FkZHJlc3MCCmxwX2Zhcm1pbmcABm9yYWNsZQkBB0FkZHJlc3MBARoBVOlFqh6QLzqu8boO5i6akl8amITh82KzCAETZ2V0QmFzZTU4RnJvbU9yYWNsZQEDa2V5BAckbWF0Y2gwCQCdCAIFBm9yYWNsZQUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwCQDZBAEFBnN0cmluZwQHbm90aGluZwUHJG1hdGNoMAkAAgEJAKwCAgUDa2V5AghpcyBlbXB0eQAMYWRtaW5QdWJLZXkxCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTEADGFkbWluUHViS2V5MgkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkyAAxhZG1pblB1YktleTMJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MwARYWRtaW5QdWJLZXlJbnZva2UJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUSa0FkbWluSW52b2tlUHViS2V5AA9tb25leUJveEFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRBrTW9uZXlCb3hBZGRyZXNzAApnb3ZBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQULa0dvdkFkZHJlc3MAEnN0YWtpbmdVU0ROQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDGtVU0ROQWRkcmVzcwANdm90aW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDmtWb3RpbmdBZGRyZXNzAA5mYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFD2tGYXJtaW5nQWRkcmVzcwAQbHBGYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEWtMUEZhcm1pbmdBZGRyZXNzAARVU0ROASBvJKPKqzDcUimY6CxhWu5afyNNwi11u+mdqlTg0tAHwQANc3Rha2luZ0Fzc2V0cwkAzAgCCQDYBAEFBFVTRE4FA25pbAAKYmFzZVBlcmlvZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MFC2tCYXNlUGVyaW9kAhFFbXB0eSBrQmFzZVBlcmlvZAALc3RhcnRIZWlnaHQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ12b3RpbmdBZGRyZXNzBQxrU3RhcnRIZWlnaHQCEkVtcHR5IGtTdGFydEhlaWdodAAMcGVyaW9kTGVuZ3RoCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNdm90aW5nQWRkcmVzcwUNa1BlcmlvZExlbmd0aAITRW1wdHkga1BlcmlvZExlbmd0aAAVZmlyc3RIYXJ2ZXN0RW5kUGVyaW9kCQBkAgkAZAIFCmJhc2VQZXJpb2QJAGkCCQBlAgUGaGVpZ2h0BQtzdGFydEhlaWdodAUMcGVyaW9kTGVuZ3RoAAMABmFjdGl2ZQkBEUBleHRyTmF0aXZlKDEwNTEpAgUEdGhpcwUHa0FjdGl2ZQAMc2hhcmVBc3NldElkCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFDWtTaGFyZUFzc2V0SWQAC3NoYXJlU3VwcGx5CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBRFrU2hhcmVBc3NldFN1cHBseQAJZmVlU2NhbGU2AMCEPQADZmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQRrRmVlAA1mZWVHb3Zlcm5hbmNlCQBrAwAoBQlmZWVTY2FsZTYAZAAJaW5pdGlhbF9BCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAglpbml0aWFsX0EACGZ1dHVyZV9BCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAghmdXR1cmVfQQAOaW5pdGlhbF9BX3RpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwIOaW5pdGlhbF9BX3RpbWUAAAANZnV0dXJlX0FfdGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAg1mdXR1cmVfQV90aW1lAAAACGFzc2V0SWRzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFB2tBc3NldHMCASwABm5Db2lucwkAkAMBBQhhc3NldElkcwEHc3VzcGVuZAEFY2F1c2UJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUHCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmtDYXVzZQUFY2F1c2UFA25pbAENdGhyb3dJc0FjdGl2ZQAJAAIBAhZEQXBwIGlzIGFscmVhZHkgYWN0aXZlAQhpc0FjdGl2ZQADBQZhY3RpdmUFBHVuaXQJAAIBAh9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AQtpc0FkbWluQ2FsbAEBaQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQUEdW5pdAkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNTZWxmQ2FsbAEBaQMJAAACBQR0aGlzCAUBaQZjYWxsZXIFBHVuaXQJAAIBAitPbmx5IGNvbnRyYWN0IGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAARiaWcyCQC2AgEAAgAOYmxvY2tUaW1lc3RhbXAFBmhlaWdodAEGYXNzZXJ0AQFhAwUBYQcGARRjYWxjdWxhdGVGZWVEaXNjb3VudAEIdXNlckFkZHIEBHVzZXIEByRtYXRjaDAFCHVzZXJBZGRyAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAXUFByRtYXRjaDAJAKUIAQUBdQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXUFByRtYXRjaDAFAXUJAAIBAhhVbmtub3cgdHlwZSBvZiB1c2VyIEFkZHIECnN3b3BBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUKZ292QWRkcmVzcwkArAICBQR1c2VyBQ5rVXNlclN3b3BJbkdvdgAABA5kaXNjb3VudFZhbHVlcwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQZvcmFjbGUFD2tEaXNjb3VudFZhbHVlcwIBLAQJZGlzY291bnRzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBm9yYWNsZQUKa0Rpc2NvdW50cwIBLAMDCQBnAgUKc3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAAJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAQUKc3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAAMDCQBnAgUKc3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAEJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAgUKc3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAQMDCQBnAgUKc3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAIJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAwUKc3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAgMDCQBnAgUKc3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMABAUKc3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMABAkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwAEBQlmZWVTY2FsZTYBAl9BAAQCdDEFDWZ1dHVyZV9BX3RpbWUEAkExBQhmdXR1cmVfQQMJAGYCBQJ0MQUOYmxvY2tUaW1lc3RhbXAEAkEwBQlpbml0aWFsX0EEAnQwBQ5pbml0aWFsX0FfdGltZQMJAGYCBQJBMQUCQTAJAGQCBQJBMAkAaQIJAGgCCQBlAgUCQTEFAkEwCQBlAgUOYmxvY2tUaW1lc3RhbXAFAnQwCQBlAgUCdDEFAnQwCQBlAgUCQTAJAGkCCQBoAgkAZQIFAkEwBQJBMQkAZQIFDmJsb2NrVGltZXN0YW1wBQJ0MAkAZQIFAnQxBQJ0MAUCQTEBA194cAAKAQ1hc3NldEJhbGFuY2VzAgNhY2MHYXNzZXRJZAkAzQgCBQNhY2MJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQdhc3NldElkBQ1rQXNzZXRCYWxhbmNlAAAKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDWFzc2V0QmFsYW5jZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPAQdfeHBfbWVtAQJ4cAUCeHABB3N1bUxpc3QCA2FjYwdlbGVtZW50CQBkAgUDYWNjBQdlbGVtZW50AQVnZXRfRAICeHADYW1wCgABQAkA/AcEBQR0aGlzAgFECQDMCAIFAnhwCQDMCAIFA2FtcAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQkA/AcEBQR0aGlzAgFECQDMCAIFAnhwCQDMCAIFA2FtcAUDbmlsBQNuaWwCGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAEOZ2V0X0RfaW50ZXJuYWwCAnhwA2FtcAQBUwoAAiRsBQJ4cAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHc3VtTGlzdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8DCQAAAgUBUwAAAAAEA0FubgkAaAIFA2FtcAUGbkNvaW5zBARBbm5TCQC5AgIJALYCAQUDQW5uCQC2AgEFAVMEBEFubjEJALYCAQkAZQIFA0FubgABCgEFRHByb2MCA2FjYwFpAwkAAAIIBQNhY2MCXzIGBQNhY2MEBURwcmV2CAUDYWNjAl8xCgEHRF9QUHJvYwIDRF9QAWkDCQBmAgUGbkNvaW5zBQFpCQC6AgIJALkCAgUDRF9QBQVEcHJldgkAuQICCQC2AgEJAJEDAgUCeHAFAWkJALYCAQUGbkNvaW5zBQNEX1AEA0RfUAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQVEcHJldgoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHRF9QUHJvYwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EAUQJALwCAwkAtwICBQRBbm5TCQC5AgIJALYCAQUGbkNvaW5zBQNEX1AFBURwcmV2CQC3AgIJALkCAgUEQW5uMQUFRHByZXYJALkCAgkAtgIBCQBkAgUGbkNvaW5zAAEFA0RfUAMJAL8CAgUBRAUFRHByZXYDCQBnAgABCQCgAwEJALgCAgUBRAUFRHByZXYJAJQKAgUBRAYJAJQKAgUBRAcDCQBnAgABCQCgAwEJALgCAgUFRHByZXYFAUQJAJQKAgUBRAYJAJQKAgUBRAcECyR0MDY4NDA2OTUyCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4FA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgkAtgIBBQFTBwoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFRHByb2MCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAFECAULJHQwNjg0MDY5NTICXzEECGZpbmlzaGVkCAULJHQwNjg0MDY5NTICXzIDCQAAAgUIZmluaXNoZWQHCQACAQkArAICAhpnZXRfRCgpIG5vdCBmaW5pc2hlZCB3aXRoIAkApgMBBQFECQCgAwEFAUQBB2dldERNZW0CAnhwA2FtcAkBBWdldF9EAgkBB194cF9tZW0BBQJ4cAUDYW1wAQRnZXRZBAJpbgNvdXQBeAN4cF8DCQEGYXNzZXJ0AQkBAiE9AgUCaW4FA291dAkAAgECCXNhbWUgY29pbgMJAQZhc3NlcnQBAwkAZwIFA291dAAACQBnAgUCaW4AAAcJAAIBAgpiZWxvdyB6ZXJvAwkBBmFzc2VydAEDCQBmAgUGbkNvaW5zBQNvdXQJAGYCBQZuQ29pbnMFAmluBwkAAgECDWFib3ZlIE5fQ09JTlMEA2FtcAkBAl9BAAQBRAkBBWdldF9EAgUDeHBfBQNhbXAEA0FubgkAaAIFA2FtcAUGbkNvaW5zCgEDU19jAgNhY2MBaQQLJHQwNzUyMzc1NDAFA2FjYwQCU18IBQskdDA3NTIzNzU0MAJfMQQBYwgFCyR0MDc1MjM3NTQwAl8yBAJ4XwMJAAACBQJpbgUBaQUBeAkAkQMCBQN4cF8FAWkDAwkBAiE9AgUBaQUDb3V0CQBmAgUGbkNvaW5zBQFpBwkAlAoCCQBkAgUCU18FAnhfCQC8AgMFAWMJALYCAQUBRAkAtgIBCQBoAgUCeF8FBm5Db2lucwkAlAoCBQJTXwUBYwQLJHQwNzc0ODc4NDkKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAJALYCAQUBRAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDU19jAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQCU18IBQskdDA3NzQ4Nzg0OQJfMQQCY18IBQskdDA3NzQ4Nzg0OQJfMgQBYwkAvAIDBQJjXwkAtgIBBQFECQC2AgEJAGgCBQNBbm4FBm5Db2lucwQCYkQJALYCAQkAZQIJAGQCBQJTXwkAaQIFAUQFA0FubgUBRAoBBnlfcHJvYwIDYWNjAl9pAwkAAAIIBQNhY2MCXzIGBQNhY2MEBnlfcHJldggFA2FjYwJfMQQBeQkAugICCQC3AgIJALkCAgUGeV9wcmV2BQZ5X3ByZXYFAWMJALcCAgkAuQICBQRiaWcyBQZ5X3ByZXYFAmJEAwkAvwICBQF5BQZ5X3ByZXYDCQBnAgABCQCgAwEJALgCAgUBeQUGeV9wcmV2CQCUCgIFAXkGCQCUCgIFAXkHAwkAZwIAAQkAoAMBCQC4AgIFBnlfcHJldgUBeQkAlAoCBQF5BgkAlAoCBQF5BwQLJHQwODMzMTg0NDgKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgkAzAgCAA8FA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgkAtgIBBQFEBwoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEGeV9wcm9jAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQBAF5CAULJHQwODMzMTg0NDgCXzEECGZpbmlzaGVkCAULJHQwODMzMTg0NDgCXzIDCQAAAgUIZmluaXNoZWQHCQACAQkArAICAhlnZXRZKCkgbm90IGZpbmlzaGVkIHdpdGggCQCmAwEFAXkJAKADAQUBeQEHZ2V0X3lfRAQCQV8CaW4CeHABRAMJAQZhc3NlcnQBCQBnAgUCaW4AAAkAAgECDGkgYmVsb3cgemVybwMJAQZhc3NlcnQBCQBmAgUGbkNvaW5zBQJpbgkAAgECD2kgYWJvdmUgTl9DT0lOUwQDQW5uCQBoAgUCQV8FBm5Db2lucwoBA1NfYwIDYWNjAWkECyR0MDg4Mjc4ODQ0BQNhY2MEAlNfCAULJHQwODgyNzg4NDQCXzEEAWMIBQskdDA4ODI3ODg0NAJfMgQCeF8DAwkBAiE9AgUCaW4FAWkJAGYCBQZuQ29pbnMFAWkHCQCRAwIFAnhwBQFpAAADAwkAZgIFBm5Db2lucwUBaQkBAiE9AgUCaW4FAWkHCQCUCgIJAGQCBQJTXwUCeF8JALwCAwUBYwkAtgIBBQFECQC2AgEJAGgCBQJ4XwUGbkNvaW5zCQCUCgIFAlNfBQFjBAskdDA5MDY0OTE2NQoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAkAtgIBBQFECgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNTX2MCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAJTXwgFCyR0MDkwNjQ5MTY1Al8xBAJjXwgFCyR0MDkwNjQ5MTY1Al8yBAFjCQC8AgMFAmNfCQC2AgEFAUQJALYCAQkAaAIFA0FubgUGbkNvaW5zBAJiRAkAtgIBCQBlAgkAZAIFAlNfCQBpAgUBRAUDQW5uBQFECgEIeV9EX3Byb2MCA2FjYwFpAwkAAAIIBQNhY2MCXzIGBQNhY2MEBnlfcHJldggFA2FjYwJfMQQBeQkAugICCQC3AgIJALkCAgUGeV9wcmV2BQZ5X3ByZXYFAWMJALcCAgkAuQICBQRiaWcyBQZ5X3ByZXYFAmJEAwkAvwICBQF5BQZ5X3ByZXYDCQBnAgABCQCgAwEJALgCAgUBeQUGeV9wcmV2CQCUCgIFAXkGCQCUCgIFAXkHAwkAZwIAAQkAoAMBCQC4AgIFBnlfcHJldgUBeQkAlAoCBQF5BgkAlAoCBQF5BwQLJHQwOTY0ODk3NjcKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgkAzAgCAA8FA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgkAtgIBBQFEBwoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIeV9EX3Byb2MCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE2CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAEAXkIBQskdDA5NjQ4OTc2NwJfMQQIZmluaXNoZWQIBQskdDA5NjQ4OTc2NwJfMgMJAAACBQhmaW5pc2hlZAcJAAIBCQCsAgICHGdldF95X0QoKSBub3QgZmluaXNoZWQgd2l0aCAJAKYDAQUBeQkAoAMBBQF5ARRfY2FsY1dpdGhkcmF3T25lQ29pbgQCeHANX3Rva2VuX2Ftb3VudAFpBmNhbGxlcgQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEFBmNhbGxlcgQDYW1wCQECX0EABARfZmVlCQBpAgkAaAIJAG4EBQNmZWUFC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcFBm5Db2lucwkAaAIABAkAZQIFBm5Db2lucwABBAx0b3RhbF9zdXBwbHkFC3NoYXJlU3VwcGx5BAJEMAkBBWdldF9EAgUCeHAFA2FtcAQCRDEJAGUCBQJEMAkAawMFDV90b2tlbl9hbW91bnQFAkQwBQx0b3RhbF9zdXBwbHkEBW5ld195CQEHZ2V0X3lfRAQFA2FtcAUBaQUCeHAFAkQxBARkeV8wCQBlAgkAkQMCBQJ4cAUBaQUFbmV3X3kKAQ94cF9yZWR1Y2VkX3Byb2MCA2FjYwR4cF9qBA0kdDAxMDQwODEwNDM3BQNhY2MECnhwX3JlZHVjZWQIBQ0kdDAxMDQwODEwNDM3Al8xBAVpbmRleAgFDSR0MDEwNDA4MTA0MzcCXzIEC2R4X2V4cGVjdGVkAwkAAAIFBWluZGV4BQFpCQBlAgkAawMFBHhwX2oFAkQxBQJEMAUFbmV3X3kJAGUCBQR4cF9qCQBrAwUEeHBfagUCRDEFAkQwCQCUCgIJAM0IAgUKeHBfcmVkdWNlZAkAZQIFBHhwX2oJAGsDBQRfZmVlBQtkeF9leHBlY3RlZAUJZmVlU2NhbGU2CQBkAgUFaW5kZXgAAQQNJHQwMTA2OTkxMDc2MwoAAiRsBQJ4cAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD3hwX3JlZHVjZWRfcHJvYwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8ECnhwX3JlZHVjZWQIBQ0kdDAxMDY5OTEwNzYzAl8xBAVpbmRleAgFDSR0MDEwNjk5MTA3NjMCXzIEDHhwX3JlZHVjZWRfaQkAkQMCBQp4cF9yZWR1Y2VkBQFpBAJkeQkAZQIJAGUCBQx4cF9yZWR1Y2VkX2kJAQdnZXRfeV9EBAUDYW1wBQFpBQp4cF9yZWR1Y2VkBQJEMQABCQCUCgIFAmR5CQBlAgUEZHlfMAUCZHkBDWdldFN0ckFzc2V0SWQBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAJANgEAQUCaWQDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDACBVdBVkVTCQACAQILTWF0Y2ggZXJyb3IBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFc3Rha2UHYXNzZXRJZAMFBXN0YWtlCQCUCgICDGxvY2tOZXV0cmlubwUSc3Rha2luZ1VTRE5BZGRyZXNzCQCUCgICDnVubG9ja05ldXRyaW5vBRJzdGFraW5nVVNETkFkZHJlc3MBEWNhbGNTdGFraW5nUGFyYW1zAwVzdGFrZQZhbW91bnQHYXNzZXRJZAMFBXN0YWtlBA0kdDAxMTMyNzExMzkzCQEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgUFc3Rha2UFB2Fzc2V0SWQEBGNhbGwIBQ0kdDAxMTMyNzExMzkzAl8xBAtzdGFraW5nQWRkcggFDSR0MDExMzI3MTEzOTMCXzIJAJYKBAUEY2FsbAULc3Rha2luZ0FkZHIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJZAUGYW1vdW50BQNuaWwEDSR0MDExNDc5MTE1NDUJARhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMCBQVzdGFrZQUHYXNzZXRJZAQEY2FsbAgFDSR0MDExNDc5MTE1NDUCXzEEC3N0YWtpbmdBZGRyCAUNJHQwMTE0NzkxMTU0NQJfMgkAlgoEBQRjYWxsBQtzdGFraW5nQWRkcgkAzAgCBQZhbW91bnQJAMwIAgkA2AQBBQdhc3NldElkBQNuaWwFA25pbAEFc3Rha2UCBmFtb3VudA1hc3NldElkU3RyaW5nAwkBD2NvbnRhaW5zRWxlbWVudAIFDXN0YWtpbmdBc3NldHMFDWFzc2V0SWRTdHJpbmcEDSR0MDExNzMyMTE4MzQJARFjYWxjU3Rha2luZ1BhcmFtcwMGBQZhbW91bnQJANkEAQUNYXNzZXRJZFN0cmluZwQEY2FsbAgFDSR0MDExNzMyMTE4MzQCXzEEBGFkZHIIBQ0kdDAxMTczMjExODM0Al8yBAZwYXJhbXMIBQ0kdDAxMTczMjExODM0Al8zBAhwYXltZW50cwgFDSR0MDExNzMyMTE4MzQCXzQJAPwHBAUEYWRkcgUEY2FsbAUGcGFyYW1zBQhwYXltZW50cwAAAQd1bnN0YWtlAgZhbW91bnQNYXNzZXRJZFN0cmluZwMJAQ9jb250YWluc0VsZW1lbnQCBQ1zdGFraW5nQXNzZXRzBQ1hc3NldElkU3RyaW5nBA0kdDAxMjAxOTEyMTIyCQERY2FsY1N0YWtpbmdQYXJhbXMDBwUGYW1vdW50CQDZBAEFDWFzc2V0SWRTdHJpbmcEBGNhbGwIBQ0kdDAxMjAxOTEyMTIyAl8xBARhZGRyCAUNJHQwMTIwMTkxMjEyMgJfMgQGcGFyYW1zCAUNJHQwMTIwMTkxMjEyMgJfMwQIcGF5bWVudHMIBQ0kdDAxMjAxOTEyMTIyAl80CQD8BwQFBGFkZHIFBGNhbGwFBnBhcmFtcwUIcGF5bWVudHMAAAEMc3Rha2VkQW1vdW50AQdhc3NldElkBBZzdGFrZWRBbW91bnRDYWxjdWxhdGVkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEA2FJZAUHJG1hdGNoMAMJAAACBQNhSWQFBFVTRE4JAJoIAgUSc3Rha2luZ1VTRE5BZGRyZXNzCQCsAgIJAKwCAgkArAICAgxycGRfYmFsYW5jZV8JANgEAQUDYUlkAgFfCQClCAEFBHRoaXMAAAMJAAECBQckbWF0Y2gwAgRVbml0AAAJAAIBAgtNYXRjaCBlcnJvcgQHJG1hdGNoMAUWc3Rha2VkQW1vdW50Q2FsY3VsYXRlZAMJAAECBQckbWF0Y2gwAgNJbnQEAWkFByRtYXRjaDAFAWkAAAEPY2hlY2tTdXNwaWNpb3VzAAQQY29udHJhY3RCYWxhbmNlcwkBA194cAAKAQxjaGVja0JhbGFuY2UCA2FjYwdhc3NldElkBA0kdDAxMjczMzEyNzU4BQNhY2MECnN1c3BpY2lvdXMIBQ0kdDAxMjczMzEyNzU4Al8xBAFpCAUNJHQwMTI3MzMxMjc1OAJfMgMFCnN1c3BpY2lvdXMJAJQKAgUKc3VzcGljaW91cwUBaQQIYUJhbGFuY2UJAGQCCQDwBwIFBHRoaXMJANkEAQUHYXNzZXRJZAkBDHN0YWtlZEFtb3VudAEJANkEAQUHYXNzZXRJZAMJAGYCCQCRAwIFEGNvbnRyYWN0QmFsYW5jZXMFAWkFCGFCYWxhbmNlCQCUCgIGBQFpCQCUCgIHCQBkAgUBaQABCgACJGwFCGFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBwAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxjaGVja0JhbGFuY2UCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPARFzdXNwZW5kU3VzcGljaW91cwEBaQkBB3N1c3BlbmQBCQCsAgICHVN1c3BpY2lvdXMgc3RhdGUgd2l0aCBhc3NldDogCQCRAwIFCGFzc2V0SWRzBQFpAQ5yZXR1cm5QYXltZW50cwIGY2FsbGVyCHBheW1lbnRzCgENcGFyc2VQYXltZW50cwIDYWNjB3BheW1lbnQJAM0IAgUDYWNjCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIIBQdwYXltZW50BmFtb3VudAgFB3BheW1lbnQHYXNzZXRJZAoAAiRsBQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQENcGFyc2VQYXltZW50cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8BEmNoZWNrREFwcFRocmVzaG9sZAELbmV3QmFsYW5jZXMEEWRBcHBUaHJlc2hvbGRDb2VmCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUSa0RBcHBUaHJlc2hvbGRDb2VmAhhObyBkQXBwVGhyZXNob2xkQ29lZiBrZXkEDnRocmVzaG9sZFNjYWxlAJBOBAptYXhCYWxhbmNlCQCWAwEFC25ld0JhbGFuY2VzBAptaW5CYWxhbmNlCQCXAwEFC25ld0JhbGFuY2VzBAVyYXRpbwkAawMFCm1heEJhbGFuY2UFDnRocmVzaG9sZFNjYWxlBQptaW5CYWxhbmNlAwkAZgIFBXJhdGlvCQBoAgURZEFwcFRocmVzaG9sZENvZWYFDnRocmVzaG9sZFNjYWxlCQACAQI4TmV3IGJhbGFuY2UgaW4gYXNzZXRzIG9mIHRoZSBEQXBwIGlzIGxlc3MgdGhhbiB0aHJlc2hvbGQHAQpjaGVja0NvaW5zAQhhc3NldElkcwQFY29pbnMJALUJAgUIYXNzZXRJZHMCASwKAQljaGVja0NvaW4CBWVycm9yB2Fzc2V0SWQEBWFzc2V0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJANkEAQUHYXNzZXRJZAkArAICAhJmcm9tQmFzZTU4U3RyaW5nOiAFB2Fzc2V0SWQECGRlY2ltYWxzCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFBWFzc2V0CQCsAgICC2Fzc2V0SW5mbzogBQdhc3NldElkCGRlY2ltYWxzAwkBAiE9AgUIZGVjaW1hbHMFCERFQ0lNQUxTCQACAQIOd3JvbmcgZGVjaW1hbHMHCgACJGwFBWNvaW5zCgACJHMJAJADAQUCJGwKAAUkYWNjMAcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWNoZWNrQ29pbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8UA21zZwEBRAICeHADYW1wBAFECQEOZ2V0X0RfaW50ZXJuYWwCBQJ4cAUDYW1wCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQICAUQFAUQFA25pbAUBRANtc2cBBGluaXQECGFzc2V0SWRzAl9BEl9kQXBwVGhyZXNob2xkQ29lZgxmaXJzdEhhcnZlc3QDCQEBIQEJAJ4IAQUEdGhpcwkAAgECE0FscmVhZHkgaW5pdGlhbGl6ZWQDCQBnAgAABQJfQQkAAgECFEFtcCBtdXN0IGJlIG11c3QgPiAwAwkAZwIAAAUSX2RBcHBUaHJlc2hvbGRDb2VmCQACAQIfZEFwcCBUaHJlc2hvbGQgQ29lZiBtdXN0IGJlID4gMAQJc2hhcmVOYW1lAgtzX011bHRpX1VTRAQQc2hhcmVEZXNjcmlwdGlvbgkArAICAkJTaGFyZVRva2VuIG9mIFN3b3BGaSBwcm90b2NvbCBmb3IgTXVsdGlTdGFibGUgVVNEIHBvb2wgYXQgYWRkcmVzcyAJAKUIAQUEdGhpcwQKaXNzdWVUb2tlbgkAwggFBQlzaGFyZU5hbWUFEHNoYXJlRGVzY3JpcHRpb24AAAAGBgQHdG9rZW5JZAkAuAgBBQppc3N1ZVRva2VuAwkBCmNoZWNrQ29pbnMBBQhhc3NldElkcwkBBXRocm93AAQJYmFzZUVudHJ5CQDMCAIJAQtTdHJpbmdFbnRyeQIFCGtWZXJzaW9uBQd2ZXJzaW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFB2tBc3NldHMFCGFzc2V0SWRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFAl9BCQDMCAIJAQxJbnRlZ2VyRW50cnkCAghmdXR1cmVfQQUCX0EJAMwIAgkBDEludGVnZXJFbnRyeQIFBGtGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBm9yYWNsZQINYmFzZV9mZWVfZmxhdAkAzAgCCQELU3RyaW5nRW50cnkCBQ1rU2hhcmVBc3NldElkCQDYBAEFB3Rva2VuSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5AAAJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtEQXBwVGhyZXNob2xkQ29lZgUSX2RBcHBUaHJlc2hvbGRDb2VmCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBgkAzAgCBQppc3N1ZVRva2VuBQNuaWwDBQxmaXJzdEhhcnZlc3QJAM4IAgUJYmFzZUVudHJ5CQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rRmlyc3RIYXJ2ZXN0BQxmaXJzdEhhcnZlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tGaXJzdEhhcnZlc3RIZWlnaHQJAGQCBQtzdGFydEhlaWdodAkAaAIFFWZpcnN0SGFydmVzdEVuZFBlcmlvZAUMcGVyaW9kTGVuZ3RoBQNuaWwFCWJhc2VFbnRyeQNtc2cBDGFkZExpcXVpZGl0eQINbWluTWludEFtb3VudAxzdGFrZUZhcm1pbmcJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEA2FtcAkBAl9BAAQCeHAJAQNfeHAABAJEMAMJAAACBQtzaGFyZVN1cHBseQAAAAAJAQdnZXRETWVtAgUCeHAFA2FtcAQIcGF5bWVudHMIBQNtc2cIcGF5bWVudHMEDHBheW1lbnRzU2l6ZQkAkAMBBQhwYXltZW50cwoBDXZhbGlkUGF5bWVudHMBAW4DCQBmAgUMcGF5bWVudHNTaXplBQZuQ29pbnMJAAIBCQCsAgICEHBheW1lbnRzIHNpemUgPiAJAKQDAQUGbkNvaW5zAwkAZgIAAQUMcGF5bWVudHNTaXplCQACAQIRcGF5bWVudHMgc2l6ZSA8IDEDAwkAAAIFC3NoYXJlU3VwcGx5AAAJAQIhPQIFBm5Db2lucwUMcGF5bWVudHNTaXplBwkAAgECImluaXRpYWwgZGVwb3NpdCByZXF1aXJlcyBhbGwgY29pbnMKAQxwYXltYW50VmFsaWQCA2FjYwdwYXltZW50AwkBD2NvbnRhaW5zRWxlbWVudAIFCGFzc2V0SWRzCQENZ2V0U3RyQXNzZXRJZAEIBQdwYXltZW50B2Fzc2V0SWQGCQACAQIYSW52YWxpZCBhc3NldCBpbiBwYXltZW50CgACJGwFCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDHBheW1hbnRWYWxpZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8DCQEBIQEJAQ12YWxpZFBheW1lbnRzAQUMcGF5bWVudHNTaXplCQEFdGhyb3cABApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnBmNhbGxlcgUIcGF5bWVudHMKAQ1wYXJzZVBheW1lbnRzAgNhY2MHYXNzZXRJZAQNJHQwMTcwNjYxNzA5NQUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDE3MDY2MTcwOTUCXzEEAWkIBQ0kdDAxNzA2NjE3MDk1Al8yBAFqCAUNJHQwMTcwNjYxNzA5NQJfMwMDCQBmAgUMcGF5bWVudHNTaXplBQFqCQAAAgkBDWdldFN0ckFzc2V0SWQBCAkAkQMCBQhwYXltZW50cwUBagdhc3NldElkBQdhc3NldElkBwkAlQoDCQDNCAIFC25ld0JhbGFuY2VzCQBkAgkAkQMCBQJ4cAUBaQgJAJEDAgUIcGF5bWVudHMFAWoGYW1vdW50CQBkAgUBaQABCQBkAgUBagABCQCVCgMJAM0IAgULbmV3QmFsYW5jZXMJAJEDAgUCeHAFAWkJAGQCBQFpAAEFAWoEDSR0MDE3MzE1MTc0MDEKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDXBhcnNlUGF5bWVudHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAtuZXdCYWxhbmNlcwgFDSR0MDE3MzE1MTc0MDECXzEEAWsIBQ0kdDAxNzMxNTE3NDAxAl8yBA5wYXJzZWRQYXltZW50cwgFDSR0MDE3MzE1MTc0MDECXzMDCQBmAgUMcGF5bWVudHNTaXplBQ5wYXJzZWRQYXltZW50cwkAAgECF0luY29yZWN0IHBheW1lbnRzIG9yZGVyAwkBEmNoZWNrREFwcFRocmVzaG9sZAEFC25ld0JhbGFuY2VzCQEFdGhyb3cABAJEMQkBB2dldERNZW0CBQtuZXdCYWxhbmNlcwUDYW1wAwkBBmFzc2VydAEJAGYCBQJEMQUCRDAJAAIBAgdEMSA+IEQwBAtmZWVEaXNjb3VudAkBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQgFA21zZwZjYWxsZXIKARFjYWxjU2NyaXB0QWN0aW9ucwIDYWNjCm5ld0JhbGFuY2UEDSR0MDE3ODAyMTc4NDMFA2FjYwQLaW52QmFsYW5jZXMIBQ0kdDAxNzgwMjE3ODQzAl8xBA1zY3JpcHRBY3Rpb25zCAUNJHQwMTc4MDIxNzg0MwJfMgQBaQgFDSR0MDE3ODAyMTc4NDMCXzMDCQBmAgULc2hhcmVTdXBwbHkAAAQEX2ZlZQkAaQIJAGgCCQBuBAUDZmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQZuQ29pbnMJAGgCAAQJAGUCBQZuQ29pbnMAAQQEZmVlcwQMaWRlYWxCYWxhbmNlCQBrAwUCRDEJAJEDAgUCeHAFAWkFAkQwBApkaWZmZXJlbmNlAwkAZgIFDGlkZWFsQmFsYW5jZQUKbmV3QmFsYW5jZQkAZQIFDGlkZWFsQmFsYW5jZQUKbmV3QmFsYW5jZQkAZQIFCm5ld0JhbGFuY2UFDGlkZWFsQmFsYW5jZQkAawMFBF9mZWUFCmRpZmZlcmVuY2UFCWZlZVNjYWxlNgQOZ292ZXJuYW5jZUZlZXMJAGsDBQRmZWVzBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYEDGZpbmFsQmFsYW5jZQkAZQIFCm5ld0JhbGFuY2UFBGZlZXMEEGludmFyaWFudEJhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQRmZWVzBANwbXQJAGUCBQpuZXdCYWxhbmNlCQCRAwIFAnhwBQFpBAZscEZlZXMJAGUCBQRmZWVzBQ5nb3Zlcm5hbmNlRmVlcwQDaW52AwkAZgIFA3BtdAAACQEFc3Rha2UCCQBlAgUDcG10BQRmZWVzCQCRAwIFCGFzc2V0SWRzBQFpCQEHdW5zdGFrZQIFBGZlZXMJAJEDAgUIYXNzZXRJZHMFAWkDCQAAAgUDaW52BQNpbnYEB2FpcmRyb3ADCQBmAgUGbHBGZWVzAAAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwIHYWlyRHJvcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEJAJEDAgUIYXNzZXRJZHMFAWkFBmxwRmVlcwUDbmlsAAADCQAAAgUHYWlyZHJvcAUHYWlyZHJvcAkAlQoDCQDNCAIFC2ludkJhbGFuY2VzBRBpbnZhcmlhbnRCYWxhbmNlCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQ5nb3Zlcm5hbmNlRmVlcwkA2QQBCQCRAwIFCGFzc2V0SWRzBQFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAJEDAgUIYXNzZXRJZHMFAWkFDWtBc3NldEJhbGFuY2UFDGZpbmFsQmFsYW5jZQUDbmlsCQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBANpbnYJAQVzdGFrZQIFCm5ld0JhbGFuY2UJAJEDAgUIYXNzZXRJZHMFAWkDCQAAAgUDaW52BQNpbnYJAJUKAwkAzQgCBQtpbnZCYWxhbmNlcwUKbmV3QmFsYW5jZQkAzQgCBQ1zY3JpcHRBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgkArAICCQCRAwIFCGFzc2V0SWRzBQFpBQ1rQXNzZXRCYWxhbmNlBQpuZXdCYWxhbmNlCQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDAxOTU0ODE5NjM2CgACJGwFC25ld0JhbGFuY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARFjYWxjU2NyaXB0QWN0aW9ucwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EC2ludkJhbGFuY2VzCAUNJHQwMTk1NDgxOTYzNgJfMQQNc2NyaXB0QWN0aW9ucwgFDSR0MDE5NTQ4MTk2MzYCXzIEAkQyCQEHZ2V0RE1lbQIFC2ludkJhbGFuY2VzBQNhbXAEC21pbnRfYW1vdW50AwkAAAIFC3NoYXJlU3VwcGx5AAAFAkQxCQBrAwULc2hhcmVTdXBwbHkJAGUCBQJEMgUCRDAFAkQwAwkBBmFzc2VydAEJAGcCBQttaW50X2Ftb3VudAUNbWluTWludEFtb3VudAkAAgECFFNsaXBwYWdlIHNjcmV3ZWQgeW91AwUMc3Rha2VGYXJtaW5nBAJyZQkA/AcEBQR0aGlzAgxyZWlzc3VlU2hhcmUJAMwIAgULbWludF9hbW91bnQFA25pbAUDbmlsAwkAAAIFAnJlBQJyZQQBcwkA/AcEBQ5mYXJtaW5nQWRkcmVzcwIPbG9ja1NoYXJlVG9rZW5zCQDMCAIJAKUIAQUEdGhpcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxzaGFyZUFzc2V0SWQFC21pbnRfYW1vdW50BQNuaWwDCQAAAgUBcwUBcwkAzQgCBQ1zY3JpcHRBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGQCBQtzaGFyZVN1cHBseQULbWludF9hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAM4IAgUNc2NyaXB0QWN0aW9ucwkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAULbWludF9hbW91bnQGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cGY2FsbGVyBQttaW50X2Ftb3VudAUMc2hhcmVBc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZAIFC3NoYXJlU3VwcGx5BQttaW50X2Ftb3VudAUDbmlsA21zZwEOY2FsY01pbnRBbW91bnQCC25ld0JhbGFuY2VzBHVzZXIEA2FtcAkBAl9BAAQCeHAJAQNfeHAABAJEMQkBB2dldERNZW0CBQtuZXdCYWxhbmNlcwUDYW1wAwkAAAIFC3NoYXJlU3VwcGx5AAAJAJQKAgUDbmlsBQJEMQQCRDAJAQdnZXRETWVtAgUCeHAFA2FtcAQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEFBHVzZXIKAQ9jYWxjSW52QmFsYW5jZXMCA2FjYwpuZXdCYWxhbmNlBA0kdDAyMDgyNTIwODUxBQNhY2MEC2ludkJhbGFuY2VzCAUNJHQwMjA4MjUyMDg1MQJfMQQBaQgFDSR0MDIwODI1MjA4NTECXzIEBF9mZWUJAGkCCQBoAgkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUGbkNvaW5zCQBoAgAECQBlAgUGbkNvaW5zAAEEBGZlZXMEDGlkZWFsQmFsYW5jZQkAawMFAkQxCQCRAwIFAnhwBQFpBQJEMAQKZGlmZmVyZW5jZQMJAGYCBQxpZGVhbEJhbGFuY2UFCm5ld0JhbGFuY2UJAGUCBQxpZGVhbEJhbGFuY2UFCm5ld0JhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQxpZGVhbEJhbGFuY2UJAGsDBQRfZmVlBQpkaWZmZXJlbmNlBQlmZWVTY2FsZTYEEGludmFyaWFudEJhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQRmZWVzCQCUCgIJAM0IAgULaW52QmFsYW5jZXMFEGludmFyaWFudEJhbGFuY2UJAGQCBQFpAAEEDSR0MDIxNDUzMjE1MjMKAAIkbAULbmV3QmFsYW5jZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ9jYWxjSW52QmFsYW5jZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAtpbnZCYWxhbmNlcwgFDSR0MDIxNDUzMjE1MjMCXzEEAWsIBQ0kdDAyMTQ1MzIxNTIzAl8yBAJEMgkBB2dldERNZW0CBQtpbnZCYWxhbmNlcwUDYW1wBAptaW50QW1vdW50CQBrAwULc2hhcmVTdXBwbHkJAGUCBQJEMgUCRDAFAkQwCQCUCgIFA25pbAUKbWludEFtb3VudANtc2cBDHJlaXNzdWVTaGFyZQEGYW1vdW50CQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFA21zZwkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAUGYW1vdW50BgUDbmlsA21zZwEFZ2V0RHkECWFzc2V0RnJvbQdhc3NldFRvAmR4C3VzZXJBZGRyZXNzBAJ4cAkBA194cAAECWZyb21JbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQlhc3NldEZyb20CEHVua25vd24gdG9rZW4gaW4EB3RvSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUHYXNzZXRUbwIRdW5rbm93biB0b2tlbiBvdXQEAXgJAGQCCQCRAwIFAnhwBQlmcm9tSW5kZXgFAmR4BAF5CQEEZ2V0WQQFCWZyb21JbmRleAUHdG9JbmRleAUBeAUCeHAEAmR5CQBlAgkAZQIJAJEDAgUCeHAFB3RvSW5kZXgFAXkAAQQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEJAQdBZGRyZXNzAQkA2QQBBQt1c2VyQWRkcmVzcwQEX2ZlZQkAawMJAG4EBQNmZWUFC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcFAmR5BQlmZWVTY2FsZTYJAJQKAgUDbmlsCQCUCgIJAGUCBQJkeQUEX2ZlZQUEX2ZlZQNtc2cBCGV4Y2hhbmdlAgh0b2tlbk91dAZtaW5fZHkJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyCAUDbXNnCHBheW1lbnRzBAdwYXltZW50CQCRAwIIBQNtc2cIcGF5bWVudHMAAAQHdG9rZW5JbgkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkBAt0b2tlbk91dEI1OAkA2QQBBQh0b2tlbk91dAQCZHgIBQdwYXltZW50BmFtb3VudAQJZnJvbUluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFB3Rva2VuSW4CEHVua25vd24gdG9rZW4gaW4EB3RvSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUIdG9rZW5PdXQCEXVua25vd24gdG9rZW4gb3V0BAJ4cAkBA194cAAEAXgJAGQCCQCRAwIFAnhwBQlmcm9tSW5kZXgFAmR4BAF5CQEEZ2V0WQQFCWZyb21JbmRleAUHdG9JbmRleAUBeAUCeHAEA19keQkAZQIJAGUCCQCRAwIFAnhwBQd0b0luZGV4BQF5AAEEC2ZlZURpc2NvdW50CQEUY2FsY3VsYXRlRmVlRGlzY291bnQBCAUDbXNnBmNhbGxlcgQEX2ZlZQkAawMFA19keQkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BAJkeQkAZQIFA19keQUEX2ZlZQQOZ292ZXJuYW5jZUZlZXMJAGsDBQRfZmVlBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYDCQEGYXNzZXJ0AQkAZwIFAmR5BQZtaW5fZHkJAAIBAi5FeGNoYW5nZSByZXN1bHRlZCBpbiBmZXdlciBjb2lucyB0aGFuIGV4cGVjdGVkCgEPbWFrZU5ld0JhbGFuY2VzAgNhY2MMdG9rZW5CYWxhbmNlBA0kdDAyMzU1ODIzNTg0BQNhY2MEC25ld0JhbGFuY2VzCAUNJHQwMjM1NTgyMzU4NAJfMQQBaQgFDSR0MDIzNTU4MjM1ODQCXzIDCQAAAgUBaQUJZnJvbUluZGV4CQCUCgIJAM0IAgULbmV3QmFsYW5jZXMJAGQCBQx0b2tlbkJhbGFuY2UFAmR4CQBkAgUBaQABAwkAAAIFAWkFB3RvSW5kZXgJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwkAZQIFDHRva2VuQmFsYW5jZQUDX2R5CQBkAgUBaQABCQCUCgIJAM0IAgULbmV3QmFsYW5jZXMFDHRva2VuQmFsYW5jZQkAZAIFAWkAAQQNJHQwMjM4MzUyMzg5NgoAAiRsBQJ4cAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD21ha2VOZXdCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EC25ld0JhbGFuY2VzCAUNJHQwMjM4MzUyMzg5NgJfMQQBaQgFDSR0MDIzODM1MjM4OTYCXzIDCQESY2hlY2tEQXBwVGhyZXNob2xkAQULbmV3QmFsYW5jZXMJAQV0aHJvdwAEAXMJAQVzdGFrZQIIBQdwYXltZW50BmFtb3VudAkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkAwkAAAIFAXMFAXMEAnVzCQEHdW5zdGFrZQIFA19keQUIdG9rZW5PdXQDCQAAAgUCdXMFAnVzBAZscEZlZXMJAGUCBQRfZmVlBQ5nb3Zlcm5hbmNlRmVlcwQHYWlyZHJvcAMJAGYCBQZscEZlZXMAAAkA/AcEBRBscEZhcm1pbmdBZGRyZXNzAgdhaXJEcm9wBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFC3Rva2VuT3V0QjU4BQZscEZlZXMFA25pbAAAAwkAAAIFB2FpcmRyb3AFB2FpcmRyb3AJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbkluBQ1rQXNzZXRCYWxhbmNlBQF4CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHRva2VuT3V0BQ1rQXNzZXRCYWxhbmNlCQBlAgkAkQMCBQJ4cAUHdG9JbmRleAUDX2R5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cGY2FsbGVyBQJkeQULdG9rZW5PdXRCNTgJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQ5nb3Zlcm5hbmNlRmVlcwULdG9rZW5PdXRCNTgFA25pbAkAzAgCBQJkeQkAzAgCBQt0b2tlbk91dEI1OAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuA21zZwEId2l0aGRyYXcBCm1pbkFtb3VudHMJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECXBtdEFtb3VudAgJAJEDAggFA21zZwhwYXltZW50cwAABmFtb3VudAQKcG10QXNzZXRJZAgJAJEDAggFA21zZwhwYXltZW50cwAAB2Fzc2V0SWQDCQECIT0CBQxzaGFyZUFzc2V0SWQFCnBtdEFzc2V0SWQJAAIBAhV1bmtub3duIHBheW1lbnQgdG9rZW4ECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cMb3JpZ2luQ2FsbGVyCAUDbXNnCHBheW1lbnRzCgERY2FsY1NjcmlwdEFjdGlvbnMCA2FjYwdiYWxhbmNlBA0kdDAyNTE4NzI1MjE1BQNhY2MEDXNjcmlwdEFjdGlvbnMIBQ0kdDAyNTE4NzI1MjE1Al8xBAFpCAUNJHQwMjUxODcyNTIxNQJfMgQHd0Ftb3VudAkAawMFB2JhbGFuY2UFCXBtdEFtb3VudAULc2hhcmVTdXBwbHkDCQEGYXNzZXJ0AQkAZwIFB3dBbW91bnQJAJEDAgUKbWluQW1vdW50cwUBaQkAAgECMFdpdGhkcmF3YWwgcmVzdWx0ZWQgaW4gZmV3ZXIgY29pbnMgdGhhbiBleHBlY3RlZAQCdXMJAQd1bnN0YWtlAgUHd0Ftb3VudAkAkQMCBQhhc3NldElkcwUBaQMJAAACBQJ1cwUCdXMJAJQKAgkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAJEDAgUIYXNzZXRJZHMFAWkFDWtBc3NldEJhbGFuY2UJAGUCBQdiYWxhbmNlBQd3QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cMb3JpZ2luQ2FsbGVyBQd3QW1vdW50CQDZBAEJAJEDAgUIYXNzZXRJZHMFAWkFA25pbAkAZAIFAWkAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMjU3MDUyNTc3MwoAAiRsCQEDX3hwAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEWNhbGNTY3JpcHRBY3Rpb25zAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQNc2NyaXB0QWN0aW9ucwgFDSR0MDI1NzA1MjU3NzMCXzEEAWkIBQ0kdDAyNTcwNTI1NzczAl8yCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBBEJ1cm4CBQxzaGFyZUFzc2V0SWQFCXBtdEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGUCBQtzaGFyZVN1cHBseQUJcG10QW1vdW50BQNuaWwDbXNnARJ3aXRoZHJhd1dpdGhVbmxvY2sCCm1pbkFtb3VudHMMdW5sb2NrQW1vdW50CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkAZwIAAAUMdW5sb2NrQW1vdW50CQACAQIeVW5sb2NrIGFtb3VudCBtdXN0IGJlIHBvc2l0aXZlBApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnBmNhbGxlcggFA21zZwhwYXltZW50cwQJcG10QW1vdW50AwkAZgIJAJADAQgFA21zZwhwYXltZW50cwAAAwkBAiE9AgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAAIBAhNzaXplKHBheW1lbnRzKSAhPSAxBApwbXRBc3NldElkCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAHYXNzZXRJZAMJAQIhPQIFDHNoYXJlQXNzZXRJZAUKcG10QXNzZXRJZAkAAgECFXVua25vd24gcGF5bWVudCB0b2tlbggJAJEDAggFA21zZwhwYXltZW50cwAABmFtb3VudAAABAZ1bmxvY2sJAPwHBAUOZmFybWluZ0FkZHJlc3MCE3dpdGhkcmF3U2hhcmVUb2tlbnMJAMwIAgkApQgBBQR0aGlzCQDMCAIFDHVubG9ja0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUGdW5sb2NrBQZ1bmxvY2sEDndpdGhkcmF3QW1vdW50CQBkAgUJcG10QW1vdW50BQx1bmxvY2tBbW91bnQEA2ludgkA/AcEBQR0aGlzAgh3aXRoZHJhdwkAzAgCBQptaW5BbW91bnRzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDHNoYXJlQXNzZXRJZAUOd2l0aGRyYXdBbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuA21zZwETY2FsY1dpdGhkcmF3T25lQ29pbgMLdG9rZW5BbW91bnQIdG9rZW5PdXQEdXNlcgQBaQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQh0b2tlbk91dAIRdW5rbm93biB0b2tlbiBvdXQJAJQKAgUDbmlsCAkBFF9jYWxjV2l0aGRyYXdPbmVDb2luBAkBA194cAAFC3Rva2VuQW1vdW50BQFpCQEHQWRkcmVzcwEJANkEAQUEdXNlcgJfMQNtc2cBD3dpdGhkcmF3T25lQ29pbgIIdG9rZW5PdXQJbWluQW1vdW50CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkBAiE9AgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAAIBAhNzaXplKHBheW1lbnRzKSAhPSAxBApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnDG9yaWdpbkNhbGxlcggFA21zZwhwYXltZW50cwQJcG10QW1vdW50CAkAkQMCCAUDbXNnCHBheW1lbnRzAAAGYW1vdW50BApwbXRBc3NldElkCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAHYXNzZXRJZAMJAQIhPQIFCnBtdEFzc2V0SWQFDHNoYXJlQXNzZXRJZAkAAgECDXVua25vd24gdG9rZW4ECG91dEluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFCHRva2VuT3V0AhF1bmtub3duIHRva2VuIG91dAQLdG9rZW5PdXRCNTgJANkEAQUIdG9rZW5PdXQEAnhwCQEDX3hwAAQNJHQwMjc3MzcyNzgxOQkBFF9jYWxjV2l0aGRyYXdPbmVDb2luBAUCeHAFCXBtdEFtb3VudAUIb3V0SW5kZXgIBQNtc2cMb3JpZ2luQ2FsbGVyBAJkeQgFDSR0MDI3NzM3Mjc4MTkCXzEEBmR5X2ZlZQgFDSR0MDI3NzM3Mjc4MTkCXzIDCQEGYXNzZXJ0AQkAZwIFAmR5BQltaW5BbW91bnQJAAIBAhhOb3QgZW5vdWdoIGNvaW5zIHJlbW92ZWQEDmdvdmVybmFuY2VGZWVzCQBrAwUGZHlfZmVlBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYECmR5X2FuZF9mZWUJAGQCBQJkeQUGZHlfZmVlCgEPbWFrZU5ld0JhbGFuY2VzAgNhY2MMdG9rZW5CYWxhbmNlBA0kdDAyODA3NzI4MTAzBQNhY2MEC25ld0JhbGFuY2VzCAUNJHQwMjgwNzcyODEwMwJfMQQBaQgFDSR0MDI4MDc3MjgxMDMCXzIDCQAAAgUBaQUIb3V0SW5kZXgJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwkAZQIFDHRva2VuQmFsYW5jZQUKZHlfYW5kX2ZlZQkAZAIFAWkAAQkAlAoCCQDNCAIFC25ld0JhbGFuY2VzBQx0b2tlbkJhbGFuY2UJAGQCBQFpAAEEDSR0MDI4MjcwMjgzMzEKAAIkbAUCeHAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ9tYWtlTmV3QmFsYW5jZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAtuZXdCYWxhbmNlcwgFDSR0MDI4MjcwMjgzMzECXzEEAXYIBQ0kdDAyODI3MDI4MzMxAl8yAwkBEmNoZWNrREFwcFRocmVzaG9sZAEFC25ld0JhbGFuY2VzCQEFdGhyb3cABAJ1cwkBB3Vuc3Rha2UCBQpkeV9hbmRfZmVlBQh0b2tlbk91dAMJAAACBQJ1cwUCdXMEBmxwRmVlcwkAZQIFBmR5X2ZlZQUOZ292ZXJuYW5jZUZlZXMEB2FpcmRyb3ADCQBmAgUGbHBGZWVzAAAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwIHYWlyRHJvcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt0b2tlbk91dEI1OAUGbHBGZWVzBQNuaWwAAAMJAAACBQdhaXJkcm9wBQdhaXJkcm9wCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cMb3JpZ2luQ2FsbGVyBQJkeQULdG9rZW5PdXRCNTgJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkAkQMCBQhhc3NldElkcwUIb3V0SW5kZXgFDWtBc3NldEJhbGFuY2UJAGUCCQCRAwIFAnhwBQhvdXRJbmRleAUKZHlfYW5kX2ZlZQkAzAgCCQEEQnVybgIFDHNoYXJlQXNzZXRJZAUJcG10QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwUOZ292ZXJuYW5jZUZlZXMFC3Rva2VuT3V0QjU4CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZQIFC3NoYXJlU3VwcGx5BQlwbXRBbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgNtc2cBGXdpdGhkcmF3T25lQ29pbldpdGhVbmxvY2sDCHRva2VuT3V0CW1pbkFtb3VudAx1bmxvY2tBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQBnAgAABQx1bmxvY2tBbW91bnQJAAIBAh5VbmxvY2sgYW1vdW50IG11c3QgYmUgcG9zaXRpdmUECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyCAUDbXNnCHBheW1lbnRzBAlwbXRBbW91bnQDCQBmAgkAkAMBCAUDbXNnCHBheW1lbnRzAAADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnBtdEFzc2V0SWQICQCRAwIIBQNtc2cIcGF5bWVudHMAAAdhc3NldElkAwkBAiE9AgUMc2hhcmVBc3NldElkBQpwbXRBc3NldElkCQACAQIVdW5rbm93biBwYXltZW50IHRva2VuCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAGYW1vdW50AAAEBnVubG9jawkA/AcEBQ5mYXJtaW5nQWRkcmVzcwITd2l0aGRyYXdTaGFyZVRva2VucwkAzAgCCQClCAEFBHRoaXMJAMwIAgUMdW5sb2NrQW1vdW50BQNuaWwFA25pbAMJAAACBQZ1bmxvY2sFBnVubG9jawQOd2l0aGRyYXdBbW91bnQJAGQCBQlwbXRBbW91bnQFDHVubG9ja0Ftb3VudAQDaW52CQD8BwQFBHRoaXMCD3dpdGhkcmF3T25lQ29pbgkAzAgCBQh0b2tlbk91dAkAzAgCBQltaW5BbW91bnQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMc2hhcmVBc3NldElkBQ53aXRoZHJhd0Ftb3VudAUDbmlsAwkAAAIFA2ludgUDaW52BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DbXNnAQFBAAkAlAoCBQNuaWwJAQJfQQADbXNnAQ9nZXRWaXJ0dWFsUHJpY2UABAFECQEFZ2V0X0QCCQEDX3hwAAkBAl9BAAkAlAoCBQNuaWwJAGsDBQFEBQlQUkVDSVNJT04FC3NoYXJlU3VwcGx5A21zZwEPY2FsY1Rva2VuQW1vdW50AgdhbW91bnRzB2RlcG9zaXQEA2FtcAkBAl9BAAQIYmFsYW5jZXMJAQNfeHAABAJEMAkBB2dldERNZW0CBQhiYWxhbmNlcwUDYW1wCgEPY2FsY05ld0JhbGFuY2VzAgNhY2MHYmFsYW5jZQQNJHQwMzAzNDgzMDM3NAUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDMwMzQ4MzAzNzQCXzEEAWkIBQ0kdDAzMDM0ODMwMzc0Al8yBApuZXdCYWxhbmNlCQBkAgUHYmFsYW5jZQMFB2RlcG9zaXQJAJEDAgUHYW1vdW50cwUBaQkBAS0BCQCRAwIFB2Ftb3VudHMFAWkJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwUKbmV3QmFsYW5jZQkAZAIFAWkAAQQLbmV3QmFsYW5jZXMICgACJGwFCGJhbGFuY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPY2FsY05ld0JhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwJfMQQCRDEJAQdnZXRETWVtAgULbmV3QmFsYW5jZXMFA2FtcAQEZGlmZgMFB2RlcG9zaXQJAGUCBQJEMQUCRDAJAGUCBQJEMAUCRDEJAJQKAgUDbmlsCQBrAwUEZGlmZgULc2hhcmVTdXBwbHkFAkQwA21zZwEFcmFtcEECCF9mdXR1cmVBC19mdXR1cmVUaW1lCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDCQEGYXNzZXJ0AQkAZwIFDmJsb2NrVGltZXN0YW1wCQBkAgUOaW5pdGlhbF9BX3RpbWUFDU1JTl9SQU1QX1RJTUUJAAIBAgl0b28gb2Z0ZW4DCQEGYXNzZXJ0AQkAZwIFC19mdXR1cmVUaW1lCQBkAgUOYmxvY2tUaW1lc3RhbXAFDU1JTl9SQU1QX1RJTUUJAAIBAhFpbnN1ZmZpY2llbnQgdGltZQQKX2luaXRpYWxfQQkBAl9BAAMJAQZhc3NlcnQBAwkAZgIFCF9mdXR1cmVBAAAJAGYCBQVNQVhfQQUIX2Z1dHVyZUEHCQACAQIRb3V0IG9mIGJhc2UgcmFuZ2UDCQEGYXNzZXJ0AQMDCQBnAgUIX2Z1dHVyZUEFCl9pbml0aWFsX0EJAGcCCQBoAgUKX2luaXRpYWxfQQUMTUFYX0FfQ0hBTkdFBQhfZnV0dXJlQQcGAwkAZgIFCl9pbml0aWFsX0EFCF9mdXR1cmVBCQBnAgkAaAIFCF9mdXR1cmVBBQxNQVhfQV9DSEFOR0UFCl9pbml0aWFsX0EHCQACAQIMb3V0IG9mIHJhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFCl9pbml0aWFsX0EJAMwIAgkBDEludGVnZXJFbnRyeQICCGZ1dHVyZV9BBQhfZnV0dXJlQQkAzAgCCQEMSW50ZWdlckVudHJ5AgIOaW5pdGlhbF9BX3RpbWUFDmJsb2NrVGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1mdXR1cmVfQV90aW1lBQtfZnV0dXJlVGltZQUDbmlsA21zZwEJc3RvcFJhbXBBAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUDbXNnBAhjdXJyZW50QQkBAl9BAAkAzAgCCQEMSW50ZWdlckVudHJ5AgIJaW5pdGlhbF9BBQhjdXJyZW50QQkAzAgCCQEMSW50ZWdlckVudHJ5AgIIZnV0dXJlX0EFCGN1cnJlbnRBCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5pbml0aWFsX0FfdGltZQUOYmxvY2tUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQICDWZ1dHVyZV9BX3RpbWUFDmJsb2NrVGltZXN0YW1wBQNuaWwDbXNnAQhzaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFA21zZwMJAQEhAQUGYWN0aXZlCQACAQkArAICAiJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFBmtDYXVzZQIadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQJAQdzdXNwZW5kAQIPUGF1c2VkIGJ5IGFkbWluA21zZwEIYWN0aXZhdGUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDBQZhY3RpdmUJAQ10aHJvd0lzQWN0aXZlAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUGa0NhdXNlBQNuaWwDbXNnARhrZWVwTGltaXRGb3JGaXJzdEhhcnZlc3QBCnNoYXJlTGltaXQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFA21zZwkAzAgCCQEMSW50ZWdlckVudHJ5AgULa1NoYXJlTGltaXQFCnNoYXJlTGltaXQFA25pbAECdHgBBnZlcmlmeQAEE211bHRpU2lnbmVkQnlBZG1pbnMEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQABAAAEEmFkbWluUHViS2V5MlNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFDGFkbWluUHViS2V5MgABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFDGFkbWluUHViS2V5MwABAAAJAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAgQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EA2ludgUHJG1hdGNoMAQTY2FsbFRha2VJbnRvQWNjb3VudAMJAAACCAUDaW52BGRBcHAFBHRoaXMJAAACCAUDaW52CGZ1bmN0aW9uAhl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzBwQNc2lnbmVkQnlBZG1pbgMDAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkyBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkzBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAURYWRtaW5QdWJLZXlJbnZva2UDAwUTY2FsbFRha2VJbnRvQWNjb3VudAUNc2lnbmVkQnlBZG1pbgcGBRNtdWx0aVNpZ25lZEJ5QWRtaW5zBRNtdWx0aVNpZ25lZEJ5QWRtaW5z7UbC3A==", "height": 2228790, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DxiDNY1rfY5kn5G6HYToZZmKdEjaS2UDcFJBLY72JnH6 Next: 6jWLsSCEiqv863AGbEtUcMNChrGXDasyZyWVvYS9mYbp Diff:
OldNewDifferences
6767
6868 let I = "farming_address"
6969
70-let J = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
70+let J = "lp_farming"
7171
72-func K (L) = {
73- let M = getString(J, L)
74- if ($isInstanceOf(M, "String"))
72+let K = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
73+
74+func L (M) = {
75+ let N = getString(K, M)
76+ if ($isInstanceOf(N, "String"))
7577 then {
76- let N = M
77- fromBase58String(N)
78+ let O = N
79+ fromBase58String(O)
7880 }
7981 else {
80- let O = M
81- throw((L + "is empty"))
82+ let P = N
83+ throw((M + "is empty"))
8284 }
8385 }
8486
8587
86-let P = K(z)
88+let Q = L(z)
8789
88-let Q = K(B)
90+let R = L(B)
8991
90-let R = K(C)
92+let S = L(C)
9193
92-let S = K(E)
94+let T = L(E)
9395
94-let T = Address(K(F))
96+let U = Address(L(F))
9597
96-let U = Address(K(G))
98+let V = Address(L(G))
9799
98-let V = Address(K(p))
100+let W = Address(L(p))
99101
100-let W = Address(K(H))
102+let X = Address(L(H))
101103
102-let X = Address(K(I))
104+let Y = Address(L(I))
103105
104-let Y = Address(base58'3MxXHaGvmKQHH3kNrPBunhve1sDXf7M5RZt')
106+let Z = Address(L(J))
105107
106-let Z = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
108+let aa = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
107109
108-let aa = [toBase58String(Z)]
110+let ab = [toBase58String(aa)]
109111
110-let ab = valueOrErrorMessage(getInteger(W, w), "Empty kBasePeriod")
112+let ac = valueOrErrorMessage(getInteger(X, w), "Empty kBasePeriod")
111113
112-let ac = valueOrErrorMessage(getInteger(W, y), "Empty kStartHeight")
114+let ad = valueOrErrorMessage(getInteger(X, y), "Empty kStartHeight")
113115
114-let ad = valueOrErrorMessage(getInteger(W, x), "Empty kPeriodLength")
116+let ae = valueOrErrorMessage(getInteger(X, x), "Empty kPeriodLength")
115117
116-let ae = ((ab + ((height - ac) / ad)) + 3)
118+let af = ((ac + ((height - ad) / ae)) + 3)
117119
118-let af = getBooleanValue(this, j)
120+let ag = getBooleanValue(this, j)
119121
120-let ag = fromBase58String(getStringValue(this, l))
122+let ah = fromBase58String(getStringValue(this, l))
121123
122-let ah = getIntegerValue(this, m)
124+let ai = getIntegerValue(this, m)
123125
124-let ai = 1000000
126+let aj = 1000000
125127
126-let aj = getIntegerValue(this, n)
128+let ak = getIntegerValue(this, n)
127129
128-let ak = fraction(40, ai, 100)
130+let al = fraction(40, aj, 100)
129131
130-let al = getIntegerValue(this, "initial_A")
132+let am = getIntegerValue(this, "initial_A")
131133
132-let am = getIntegerValue(this, "future_A")
134+let an = getIntegerValue(this, "future_A")
133135
134-let an = valueOrElse(getInteger(this, "initial_A_time"), 0)
136+let ao = valueOrElse(getInteger(this, "initial_A_time"), 0)
135137
136-let ao = valueOrElse(getInteger(this, "future_A_time"), 0)
138+let ap = valueOrElse(getInteger(this, "future_A_time"), 0)
137139
138-let ap = split(getStringValue(this, h), ",")
140+let aq = split(getStringValue(this, h), ",")
139141
140-let aq = size(ap)
142+let ar = size(aq)
141143
142-func ar (as) = [BooleanEntry(j, false), StringEntry(k, as)]
144+func as (at) = [BooleanEntry(j, false), StringEntry(k, at)]
143145
144146
145-func at () = throw("DApp is already active")
147+func au () = throw("DApp is already active")
146148
147149
148-func au () = if (af)
150+func av () = if (ag)
149151 then unit
150152 else throw("DApp is inactive at this moment")
151153
152154
153-func av (aw) = if (containsElement([P, Q, R], aw.callerPublicKey))
155+func aw (ax) = if (containsElement([Q, R, S], ax.callerPublicKey))
154156 then unit
155157 else throw("Only admin can call this function")
156158
157159
158-func ax (aw) = if ((this == aw.caller))
160+func ay (ax) = if ((this == ax.caller))
159161 then unit
160162 else throw("Only contract itself can call this function")
161163
162164
163-let ay = toBigInt(2)
165+let az = toBigInt(2)
164166
165-let az = height
167+let aA = height
166168
167-func aA (aB) = if (aB)
169+func aB (aC) = if (aC)
168170 then false
169171 else true
170172
171173
172-func aC (aD) = {
173- let aE = valueOrElse(getInteger(U, (toString(aD) + s)), 0)
174- let aF = split(getStringValue(J, r), ",")
175- let aG = split(getStringValue(J, q), ",")
176- if (if ((aE >= parseIntValue(aF[0])))
177- then (parseIntValue(aF[1]) > aE)
174+func aD (aE) = {
175+ let aF = {
176+ let N = aE
177+ if ($isInstanceOf(N, "Address"))
178+ then {
179+ let aG = N
180+ toString(aG)
181+ }
182+ else if ($isInstanceOf(N, "String"))
183+ then {
184+ let aG = N
185+ aG
186+ }
187+ else throw("Unknow type of user Addr")
188+ }
189+ let aH = valueOrElse(getInteger(V, (aF + s)), 0)
190+ let aI = split(getStringValue(K, r), ",")
191+ let aJ = split(getStringValue(K, q), ",")
192+ if (if ((aH >= parseIntValue(aI[0])))
193+ then (parseIntValue(aI[1]) > aH)
178194 else false)
179- then (ai - parseIntValue(aG[0]))
180- else if (if ((aE >= parseIntValue(aF[1])))
181- then (parseIntValue(aF[2]) > aE)
195+ then (aj - parseIntValue(aJ[0]))
196+ else if (if ((aH >= parseIntValue(aI[1])))
197+ then (parseIntValue(aI[2]) > aH)
182198 else false)
183- then (ai - parseIntValue(aG[1]))
184- else if (if ((aE >= parseIntValue(aF[2])))
185- then (parseIntValue(aF[3]) > aE)
199+ then (aj - parseIntValue(aJ[1]))
200+ else if (if ((aH >= parseIntValue(aI[2])))
201+ then (parseIntValue(aI[3]) > aH)
186202 else false)
187- then (ai - parseIntValue(aG[2]))
188- else if (if ((aE >= parseIntValue(aF[3])))
189- then (parseIntValue(aF[4]) > aE)
203+ then (aj - parseIntValue(aJ[2]))
204+ else if (if ((aH >= parseIntValue(aI[3])))
205+ then (parseIntValue(aI[4]) > aH)
190206 else false)
191- then (ai - parseIntValue(aG[3]))
192- else if ((aE >= parseIntValue(aF[4])))
193- then (ai - parseIntValue(aG[4]))
194- else ai
207+ then (aj - parseIntValue(aJ[3]))
208+ else if ((aH >= parseIntValue(aI[4])))
209+ then (aj - parseIntValue(aJ[4]))
210+ else aj
195211 }
196212
197213
198-func aH () = {
199- let aI = ao
200- let aJ = am
201- if ((aI > az))
214+func aK () = {
215+ let aL = ap
216+ let aM = an
217+ if ((aL > aA))
202218 then {
203- let aK = al
204- let aL = an
205- if ((aJ > aK))
206- then (aK + (((aJ - aK) * (az - aL)) / (aI - aL)))
207- else (aK - (((aK - aJ) * (az - aL)) / (aI - aL)))
219+ let aN = am
220+ let aO = ao
221+ if ((aM > aN))
222+ then (aN + (((aM - aN) * (aA - aO)) / (aL - aO)))
223+ else (aN - (((aN - aM) * (aA - aO)) / (aL - aO)))
208224 }
209- else aJ
225+ else aM
210226 }
211227
212228
213-func aM () = {
214- func aN (aO,aP) = (aO :+ valueOrElse(getInteger(this, (aP + i)), 0))
229+func aP () = {
230+ func aQ (aR,aS) = (aR :+ valueOrElse(getInteger(this, (aS + i)), 0))
215231
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])
232+ let aT = aq
233+ let aU = size(aT)
234+ let aV = nil
235+ func aW (aX,aY) = if ((aY >= aU))
236+ then aX
237+ else aQ(aX, aT[aY])
222238
223- func aW (aU,aV) = if ((aV >= aR))
224- then aU
239+ func aZ (aX,aY) = if ((aY >= aU))
240+ then aX
225241 else throw("List size exceeds 15")
226242
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)
243+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
228244 }
229245
230246
231-func aX (aY) = aY
247+func ba (bb) = bb
232248
233249
234-func aZ (aO,ba) = (aO + ba)
250+func bc (aR,bd) = (aR + bd)
235251
236252
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"))
253+func be (bb,bf) = {
254+ let bg = invoke(this, "D", [bb, bf], nil)
255+ if ($isInstanceOf(bg, "Int"))
256+ then bg
257+ else throw(($getType(invoke(this, "D", [bb, bf], nil)) + " couldn't be cast to Int"))
242258 }
243259
244260
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])
261+func bh (bb,bf) = {
262+ let bi = {
263+ let aT = bb
264+ let aU = size(aT)
265+ let aV = 0
266+ func aW (aX,aY) = if ((aY >= aU))
267+ then aX
268+ else bc(aX, aT[aY])
253269
254- func aW (aU,aV) = if ((aV >= aR))
255- then aU
270+ func aZ (aX,aY) = if ((aY >= aU))
271+ then aX
256272 else throw("List size exceeds 15")
257273
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)
274+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
259275 }
260- if ((bf == 0))
276+ if ((bi == 0))
261277 then 0
262278 else {
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
279+ let bj = (bf * ar)
280+ let bk = (toBigInt(bj) * toBigInt(bi))
281+ let bl = toBigInt((bj - 1))
282+ func bm (aR,ax) = if ((aR._2 == true))
283+ then aR
268284 else {
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
285+ let bn = aR._1
286+ func bo (bp,ax) = if ((ar > ax))
287+ then ((bp * bn) / (toBigInt(bb[ax]) * toBigInt(ar)))
288+ else bp
273289
274- let bm = {
275- let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
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])
290+ let bp = {
291+ let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
292+ let aU = size(aT)
293+ let aV = bn
294+ func bq (aX,aY) = if ((aY >= aU))
295+ then aX
296+ else bo(aX, aT[aY])
281297
282- func bo (aU,aV) = if ((aV >= aR))
283- then aU
298+ func br (aX,aY) = if ((aY >= aU))
299+ then aX
284300 else throw("List size exceeds 15")
285301
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)
302+ br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
287303 }
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)
304+ let bs = fraction((bk + (toBigInt(ar) * bp)), bn, ((bl * bn) + (toBigInt((ar + 1)) * bp)))
305+ if ((bs > bn))
306+ then if ((1 >= toInt((bs - bn))))
307+ then $Tuple2(bs, true)
308+ else $Tuple2(bs, false)
309+ else if ((1 >= toInt((bn - bs))))
310+ then $Tuple2(bs, true)
311+ else $Tuple2(bs, false)
296312 }
297313
298- let bq = {
299- let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
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])
314+ let bt = {
315+ let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
316+ let aU = size(aT)
317+ let aV = $Tuple2(toBigInt(bi), false)
318+ func bq (aX,aY) = if ((aY >= aU))
319+ then aX
320+ else bm(aX, aT[aY])
305321
306- func bo (aU,aV) = if ((aV >= aR))
307- then aU
322+ func br (aX,aY) = if ((aY >= aU))
323+ then aX
308324 else throw("List size exceeds 15")
309325
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)
326+ br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
311327 }
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)
328+ let bs = bt._1
329+ let bu = bt._2
330+ if ((bu == false))
331+ then throw(("get_D() not finished with " + toString(bs)))
332+ else toInt(bs)
317333 }
318334 }
319335
320336
321-func bs (aY,bc) = bb(aX(aY), bc)
337+func bv (bb,bf) = be(ba(bb), bf)
322338
323339
324-func bt (bu,bv,bw,bx) = if (aA((bu != bv)))
340+func bw (bx,by,bz,bA) = if (aB((bx != by)))
325341 then throw("same coin")
326- else if (aA(if ((bv >= 0))
327- then (bu >= 0)
342+ else if (aB(if ((by >= 0))
343+ then (bx >= 0)
328344 else false))
329345 then throw("below zero")
330- else if (aA(if ((aq > bv))
331- then (aq > bu)
346+ else if (aB(if ((ar > by))
347+ then (ar > bx)
332348 else false))
333349 then throw("above N_COINS")
334350 else {
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)
351+ let bf = aK()
352+ let bs = be(bA, bf)
353+ let bj = (bf * ar)
354+ func bB (aR,ax) = {
355+ let bC = aR
356+ let bD = bC._1
357+ let bE = bC._2
358+ let bF = if ((bx == ax))
359+ then bz
360+ else bA[ax]
361+ if (if ((ax != by))
362+ then (ar > ax)
347363 else false)
348- then $Tuple2((bA + bC), fraction(bB, toBigInt(bp), toBigInt((bC * aq))))
349- else $Tuple2(bA, bB)
364+ then $Tuple2((bD + bF), fraction(bE, toBigInt(bs), toBigInt((bF * ar))))
365+ else $Tuple2(bD, bE)
350366 }
351367
352- let bD = {
353- let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
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])
368+ let bG = {
369+ let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
370+ let aU = size(aT)
371+ let aV = $Tuple2(0, toBigInt(bs))
372+ func aW (aX,aY) = if ((aY >= aU))
373+ then aX
374+ else bB(aX, aT[aY])
359375
360- func aW (aU,aV) = if ((aV >= aR))
361- then aU
376+ func aZ (aX,aY) = if ((aY >= aU))
377+ then aX
362378 else throw("List size exceeds 15")
363379
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)
380+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
365381 }
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
382+ let bD = bG._1
383+ let bH = bG._2
384+ let bE = fraction(bH, toBigInt(bs), toBigInt((bj * ar)))
385+ let bI = toBigInt(((bD + (bs / bj)) - bs))
386+ func bJ (aR,bK) = if ((aR._2 == true))
387+ then aR
372388 else {
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)
389+ let bL = aR._1
390+ let bM = (((bL * bL) + bE) / ((az * bL) + bI))
391+ if ((bM > bL))
392+ then if ((1 >= toInt((bM - bL))))
393+ then $Tuple2(bM, true)
394+ else $Tuple2(bM, false)
395+ else if ((1 >= toInt((bL - bM))))
396+ then $Tuple2(bM, true)
397+ else $Tuple2(bM, false)
382398 }
383399
384- let bK = {
385- let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
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])
400+ let bN = {
401+ let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
402+ let aU = size(aT)
403+ let aV = $Tuple2(toBigInt(bs), false)
404+ func bq (aX,aY) = if ((aY >= aU))
405+ then aX
406+ else bJ(aX, aT[aY])
391407
392- func bo (aU,aV) = if ((aV >= aR))
393- then aU
408+ func br (aX,aY) = if ((aY >= aU))
409+ then aX
394410 else throw("List size exceeds 16")
395411
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)
412+ br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
397413 }
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)
414+ let bM = bN._1
415+ let bu = bN._2
416+ if ((bu == false))
417+ then throw(("getY() not finished with " + toString(bM)))
418+ else toInt(bM)
403419 }
404420
405421
406-func bL (bM,bu,aY,bp) = if (aA((bu >= 0)))
422+func bO (bP,bx,bb,bs) = if (aB((bx >= 0)))
407423 then throw("i below zero")
408- else if (aA((aq > bu)))
424+ else if (aB((ar > bx)))
409425 then throw("i above N_COINS")
410426 else {
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)
427+ let bj = (bP * ar)
428+ func bB (aR,ax) = {
429+ let bQ = aR
430+ let bD = bQ._1
431+ let bE = bQ._2
432+ let bF = if (if ((bx != ax))
433+ then (ar > ax)
418434 else false)
419- then aY[aw]
435+ then bb[ax]
420436 else 0
421- if (if ((aq > aw))
422- then (bu != aw)
437+ if (if ((ar > ax))
438+ then (bx != ax)
423439 else false)
424- then $Tuple2((bA + bC), fraction(bB, toBigInt(bp), toBigInt((bC * aq))))
425- else $Tuple2(bA, bB)
440+ then $Tuple2((bD + bF), fraction(bE, toBigInt(bs), toBigInt((bF * ar))))
441+ else $Tuple2(bD, bE)
426442 }
427443
428- let bO = {
429- let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
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])
444+ let bR = {
445+ let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
446+ let aU = size(aT)
447+ let aV = $Tuple2(0, toBigInt(bs))
448+ func aW (aX,aY) = if ((aY >= aU))
449+ then aX
450+ else bB(aX, aT[aY])
435451
436- func aW (aU,aV) = if ((aV >= aR))
437- then aU
452+ func aZ (aX,aY) = if ((aY >= aU))
453+ then aX
438454 else throw("List size exceeds 15")
439455
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)
456+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
441457 }
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
458+ let bD = bR._1
459+ let bH = bR._2
460+ let bE = fraction(bH, toBigInt(bs), toBigInt((bj * ar)))
461+ let bI = toBigInt(((bD + (bs / bj)) - bs))
462+ func bS (aR,ax) = if ((aR._2 == true))
463+ then aR
448464 else {
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)
465+ let bL = aR._1
466+ let bM = (((bL * bL) + bE) / ((az * bL) + bI))
467+ if ((bM > bL))
468+ then if ((1 >= toInt((bM - bL))))
469+ then $Tuple2(bM, true)
470+ else $Tuple2(bM, false)
471+ else if ((1 >= toInt((bL - bM))))
472+ then $Tuple2(bM, true)
473+ else $Tuple2(bM, false)
458474 }
459475
460- let bQ = {
461- let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
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])
476+ let bT = {
477+ let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
478+ let aU = size(aT)
479+ let aV = $Tuple2(toBigInt(bs), false)
480+ func bq (aX,aY) = if ((aY >= aU))
481+ then aX
482+ else bS(aX, aT[aY])
467483
468- func bo (aU,aV) = if ((aV >= aR))
469- then aU
484+ func br (aX,aY) = if ((aY >= aU))
485+ then aX
470486 else throw("List size exceeds 16")
471487
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)
488+ br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
473489 }
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)
490+ let bM = bT._1
491+ let bu = bT._2
492+ if ((bu == false))
493+ then throw(("get_y_D() not finished with " + toString(bM)))
494+ else toInt(bM)
479495 }
480496
481497
482-func bR (aY,bS,aw,bT) = {
483- let bU = aC(bT)
484- let bc = aH()
485- let bV = ((fraction(aj, bU, ai, CEILING) * aq) / (4 * (aq - 1)))
486- let bW = ah
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, ai))), (cf + 1))
498+func bU (bb,bV,ax,bW) = {
499+ let bX = aD(bW)
500+ let bf = aK()
501+ let bY = ((fraction(ak, bX, aj, CEILING) * ar) / (4 * (ar - 1)))
502+ let bZ = ai
503+ let ca = be(bb, bf)
504+ let cb = (ca - fraction(bV, ca, bZ))
505+ let cc = bO(bf, ax, bb, cb)
506+ let cd = (bb[ax] - cc)
507+ func ce (aR,cf) = {
508+ let cg = aR
509+ let ch = cg._1
510+ let ci = cg._2
511+ let cj = if ((ci == ax))
512+ then (fraction(cf, cb, ca) - cc)
513+ else (cf - fraction(cf, cb, ca))
514+ $Tuple2((ch :+ (cf - fraction(bY, cj, aj))), (ci + 1))
499515 }
500516
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])
517+ let ck = {
518+ let aT = bb
519+ let aU = size(aT)
520+ let aV = $Tuple2(nil, 0)
521+ func aW (aX,aY) = if ((aY >= aU))
522+ then aX
523+ else ce(aX, aT[aY])
508524
509- func aW (aU,aV) = if ((aV >= aR))
510- then aU
525+ func aZ (aX,aY) = if ((aY >= aU))
526+ then aX
511527 else throw("List size exceeds 15")
512528
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)
529+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
514530 }
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))
531+ let ch = ck._1
532+ let ci = ck._2
533+ let cl = ch[ax]
534+ let cm = ((cl - bO(bf, ax, ch, cb)) - 1)
535+ $Tuple2(cm, (cd - cm))
520536 }
521537
522538
523-func ck (aP) = {
524- let M = aP
525- if ($isInstanceOf(M, "ByteVector"))
539+func cn (aS) = {
540+ let N = aS
541+ if ($isInstanceOf(N, "ByteVector"))
526542 then {
527- let cl = M
528- toBase58String(cl)
543+ let co = N
544+ toBase58String(co)
529545 }
530- else if ($isInstanceOf(M, "Unit"))
546+ else if ($isInstanceOf(N, "Unit"))
531547 then {
532- let cm = M
548+ let cp = N
533549 "WAVES"
534550 }
535551 else throw("Match error")
536552 }
537553
538554
539-func cn (co,aP) = if (co)
540- then $Tuple2("lockNeutrino", V)
541- else $Tuple2("unlockNeutrino", V)
555+func cq (cr,aS) = if (cr)
556+ then $Tuple2("lockNeutrino", W)
557+ else $Tuple2("unlockNeutrino", W)
542558
543559
544-func cp (co,cq,aP) = if (co)
560+func cs (cr,ct,aS) = if (cr)
545561 then {
546- let cr = cn(co, aP)
547- let cs = cr._1
548- let ct = cr._2
549- $Tuple4(cs, ct, nil, [AttachedPayment(aP, cq)])
562+ let cu = cq(cr, aS)
563+ let cv = cu._1
564+ let cw = cu._2
565+ $Tuple4(cv, cw, nil, [AttachedPayment(aS, ct)])
550566 }
551567 else {
552- let cu = cn(co, aP)
553- let cs = cu._1
554- let ct = cu._2
555- $Tuple4(cs, ct, [cq, toBase58String(aP)], nil)
568+ let cx = cq(cr, aS)
569+ let cv = cx._1
570+ let cw = cx._2
571+ $Tuple4(cv, cw, [ct, toBase58String(aS)], nil)
556572 }
557573
558574
559-func co (cq,cv) = if (containsElement(aa, cv))
575+func cr (ct,cy) = if (containsElement(ab, cy))
560576 then {
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)
577+ let cz = cs(true, ct, fromBase58String(cy))
578+ let cv = cz._1
579+ let cA = cz._2
580+ let cB = cz._3
581+ let cC = cz._4
582+ invoke(cA, cv, cB, cC)
567583 }
568584 else 0
569585
570586
571-func cA (cq,cv) = if (containsElement(aa, cv))
587+func cD (ct,cy) = if (containsElement(ab, cy))
572588 then {
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)
589+ let cE = cs(false, ct, fromBase58String(cy))
590+ let cv = cE._1
591+ let cA = cE._2
592+ let cB = cE._3
593+ let cC = cE._4
594+ invoke(cA, cv, cB, cC)
579595 }
580596 else 0
581597
582598
583-func cC (aP) = {
584- let cD = {
585- let M = aP
586- if ($isInstanceOf(M, "ByteVector"))
599+func cF (aS) = {
600+ let cG = {
601+ let N = aS
602+ if ($isInstanceOf(N, "ByteVector"))
587603 then {
588- let cE = M
589- if ((cE == Z))
590- then getInteger(V, ((("rpd_balance_" + toBase58String(cE)) + "_") + toString(this)))
604+ let cH = N
605+ if ((cH == aa))
606+ then getInteger(W, ((("rpd_balance_" + toBase58String(cH)) + "_") + toString(this)))
591607 else 0
592608 }
593- else if ($isInstanceOf(M, "Unit"))
609+ else if ($isInstanceOf(N, "Unit"))
594610 then 0
595611 else throw("Match error")
596612 }
597- let M = cD
598- if ($isInstanceOf(M, "Int"))
613+ let N = cG
614+ if ($isInstanceOf(N, "Int"))
599615 then {
600- let aw = M
601- aw
616+ let ax = N
617+ ax
602618 }
603619 else 0
604620 }
605621
606622
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)
623+func cI () = {
624+ let cJ = aP()
625+ func cK (aR,aS) = {
626+ let cL = aR
627+ let cM = cL._1
628+ let ax = cL._2
629+ if (cM)
630+ then $Tuple2(cM, ax)
615631 else {
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))
632+ let cN = (assetBalance(this, fromBase58String(aS)) + cF(fromBase58String(aS)))
633+ if ((cJ[ax] > cN))
634+ then $Tuple2(true, ax)
635+ else $Tuple2(false, (ax + 1))
620636 }
621637 }
622638
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])
639+ let aT = aq
640+ let aU = size(aT)
641+ let aV = $Tuple2(false, 0)
642+ func aW (aX,aY) = if ((aY >= aU))
643+ then aX
644+ else cK(aX, aT[aY])
629645
630- func aW (aU,aV) = if ((aV >= aR))
631- then aU
646+ func aZ (aX,aY) = if ((aY >= aU))
647+ then aX
632648 else throw("List size exceeds 15")
633649
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)
650+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
635651 }
636652
637653
638-func cL (aw) = ar(("Suspicious state with asset: " + ap[aw]))
654+func cO (ax) = as(("Suspicious state with asset: " + aq[ax]))
639655
640656
641-func cM (bT,cz) = {
642- func cN (aO,cO) = (aO :+ ScriptTransfer(bT, cO.amount, cO.assetId))
657+func cP (bW,cC) = {
658+ func cQ (aR,cR) = (aR :+ ScriptTransfer(bW, cR.amount, cR.assetId))
643659
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])
660+ let aT = cC
661+ let aU = size(aT)
662+ let aV = nil
663+ func aW (aX,aY) = if ((aY >= aU))
664+ then aX
665+ else cQ(aX, aT[aY])
650666
651- func aW (aU,aV) = if ((aV >= aR))
652- then aU
667+ func aZ (aX,aY) = if ((aY >= aU))
668+ then aX
653669 else throw("List size exceeds 15")
654670
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)
671+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
656672 }
657673
658674
659-func cP (cQ) = {
660- let cR = valueOrErrorMessage(getInteger(this, o), "No dAppThresholdCoef key")
661- let cS = 10000
662- let cT = max(cQ)
663- let cU = min(cQ)
664- let cV = fraction(cT, cS, cU)
665- if ((cV > (cR * cS)))
675+func cS (cT) = {
676+ let cU = valueOrErrorMessage(getInteger(this, o), "No dAppThresholdCoef key")
677+ let cV = 10000
678+ let cW = max(cT)
679+ let cX = min(cT)
680+ let cY = fraction(cW, cV, cX)
681+ if ((cY > (cU * cV)))
666682 then throw("New balance in assets of the DApp is less than threshold")
667683 else false
668684 }
669685
670686
671-func cW (ap) = {
672- let cX = split(ap, ",")
673- func cY (cZ,aP) = {
674- let da = valueOrErrorMessage(fromBase58String(aP), ("fromBase58String: " + aP))
675- let db = valueOrErrorMessage(assetInfo(da), ("assetInfo: " + aP)).decimals
676- if ((db != d))
687+func cZ (aq) = {
688+ let da = split(aq, ",")
689+ func db (dc,aS) = {
690+ let dd = valueOrErrorMessage(fromBase58String(aS), ("fromBase58String: " + aS))
691+ let de = valueOrErrorMessage(assetInfo(dd), ("assetInfo: " + aS)).decimals
692+ if ((de != d))
677693 then throw("wrong decimals")
678694 else false
679695 }
680696
681- let aQ = cX
682- let aR = size(aQ)
683- let aS = false
684- func aT (aU,aV) = if ((aV >= aR))
685- then aU
686- else cY(aU, aQ[aV])
697+ let aT = da
698+ let aU = size(aT)
699+ let aV = false
700+ func aW (aX,aY) = if ((aY >= aU))
701+ then aX
702+ else db(aX, aT[aY])
687703
688- func aW (aU,aV) = if ((aV >= aR))
689- then aU
704+ func aZ (aX,aY) = if ((aY >= aU))
705+ then aX
690706 else throw("List size exceeds 15")
691707
692- 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)
708+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
693709 }
694710
695711
696-@Callable(dc)
697-func D (aY,bc) = {
698- let bp = be(aY, bc)
699- $Tuple2([IntegerEntry("D", bp)], bp)
712+@Callable(df)
713+func D (bb,bf) = {
714+ let bs = bh(bb, bf)
715+ $Tuple2([IntegerEntry("D", bs)], bs)
700716 }
701717
702718
703719
704-@Callable(dc)
705-func init (ap,aH,dd,de) = if (!(isDataStorageUntouched(this)))
720+@Callable(df)
721+func init (aq,aK,dg,dh) = if (!(isDataStorageUntouched(this)))
706722 then throw("Already initialized")
707- else if ((0 >= aH))
723+ else if ((0 >= aK))
708724 then throw("Amp must be must > 0")
709- else if ((0 >= dd))
725+ else if ((0 >= dg))
710726 then throw("dApp Threshold Coef must be > 0")
711727 else {
712- let df = "s_Multi_USD"
713- let dg = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
714- let dh = Issue(df, dg, 0, 6, true)
715- let di = calculateAssetId(dh)
716- if (cW(ap))
728+ let di = "s_Multi_USD"
729+ let dj = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
730+ let dk = Issue(di, dj, 0, 6, true)
731+ let dl = calculateAssetId(dk)
732+ if (cZ(aq))
717733 then throw()
718734 else {
719- let dj = [StringEntry(g, f), StringEntry(h, ap), IntegerEntry("initial_A", aH), IntegerEntry("future_A", aH), IntegerEntry(n, getIntegerValue(J, "base_fee_flat")), StringEntry(l, toBase58String(di)), IntegerEntry(m, 0), IntegerEntry(o, dd), BooleanEntry(j, true), dh]
720- if (de)
721- then (dj ++ [BooleanEntry(t, de), IntegerEntry(u, (ac + (ae * ad)))])
722- else dj
735+ let dm = [StringEntry(g, f), StringEntry(h, aq), IntegerEntry("initial_A", aK), IntegerEntry("future_A", aK), IntegerEntry(n, getIntegerValue(K, "base_fee_flat")), StringEntry(l, toBase58String(dl)), IntegerEntry(m, 0), IntegerEntry(o, dg), BooleanEntry(j, true), dk]
736+ if (dh)
737+ then (dm ++ [BooleanEntry(t, dh), IntegerEntry(u, (ad + (af * ae)))])
738+ else dm
723739 }
724740 }
725741
726742
727743
728-@Callable(dc)
729-func addLiquidity (dk,dl) = valueOrElse(au(), {
730- let bc = aH()
731- let aY = aM()
732- let bX = if ((ah == 0))
744+@Callable(df)
745+func addLiquidity (dn,do) = valueOrElse(av(), {
746+ let bf = aK()
747+ let bb = aP()
748+ let ca = if ((ai == 0))
733749 then 0
734- else bs(aY, bc)
735- let cz = dc.payments
736- let dm = size(cz)
737- func dn (do) = if ((dm > aq))
738- then throw(("payments size > " + toString(aq)))
739- else if ((1 > dm))
750+ else bv(bb, bf)
751+ let cC = df.payments
752+ let dp = size(cC)
753+ func dq (dr) = if ((dp > ar))
754+ then throw(("payments size > " + toString(ar)))
755+ else if ((1 > dp))
740756 then throw("payments size < 1")
741- else if (if ((ah == 0))
742- then (aq != dm)
757+ else if (if ((ai == 0))
758+ then (ar != dp)
743759 else false)
744760 then throw("initial deposit requires all coins")
745761 else {
746- func dp (aO,cO) = if (containsElement(ap, ck(cO.assetId)))
762+ func ds (aR,cR) = if (containsElement(aq, cn(cR.assetId)))
747763 then true
748764 else throw("Invalid asset in payment")
749765
750- let aQ = cz
751- let aR = size(aQ)
752- let aS = false
753- func aT (aU,aV) = if ((aV >= aR))
754- then aU
755- else dp(aU, aQ[aV])
766+ let aT = cC
767+ let aU = size(aT)
768+ let aV = false
769+ func aW (aX,aY) = if ((aY >= aU))
770+ then aX
771+ else ds(aX, aT[aY])
756772
757- func aW (aU,aV) = if ((aV >= aR))
758- then aU
773+ func aZ (aX,aY) = if ((aY >= aU))
774+ then aX
759775 else throw("List size exceeds 15")
760776
761- 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)
777+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
762778 }
763779
764- if (!(dn(dm)))
780+ if (!(dq(dp)))
765781 then throw()
766782 else {
767- let cJ = cF()
768- if (cJ._1)
769- then (cL(cJ._2) ++ cM(dc.caller, cz))
783+ let cM = cI()
784+ if (cM._1)
785+ then (cO(cM._2) ++ cP(df.caller, cC))
770786 else {
771- func cN (aO,aP) = {
772- let dq = aO
773- let cQ = dq._1
774- let aw = dq._2
775- let dr = dq._3
776- if (if ((dm > dr))
777- then (ck(cz[dr].assetId) == aP)
787+ func cQ (aR,aS) = {
788+ let dt = aR
789+ let cT = dt._1
790+ let ax = dt._2
791+ let du = dt._3
792+ if (if ((dp > du))
793+ then (cn(cC[du].assetId) == aS)
778794 else false)
779- then $Tuple3((cQ :+ (aY[aw] + cz[dr].amount)), (aw + 1), (dr + 1))
780- else $Tuple3((cQ :+ aY[aw]), (aw + 1), dr)
795+ then $Tuple3((cT :+ (bb[ax] + cC[du].amount)), (ax + 1), (du + 1))
796+ else $Tuple3((cT :+ bb[ax]), (ax + 1), du)
781797 }
782798
783- let ds = {
784- let aQ = ap
785- let aR = size(aQ)
786- let aS = $Tuple3(nil, 0, 0)
787- func aT (aU,aV) = if ((aV >= aR))
788- then aU
789- else cN(aU, aQ[aV])
799+ let dv = {
800+ let aT = aq
801+ let aU = size(aT)
802+ let aV = $Tuple3(nil, 0, 0)
803+ func aW (aX,aY) = if ((aY >= aU))
804+ then aX
805+ else cQ(aX, aT[aY])
790806
791- func aW (aU,aV) = if ((aV >= aR))
792- then aU
807+ func aZ (aX,aY) = if ((aY >= aU))
808+ then aX
793809 else throw("List size exceeds 15")
794810
795- 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)
811+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
796812 }
797- let cQ = ds._1
798- let dt = ds._2
799- let du = ds._3
800- if ((dm > du))
813+ let cT = dv._1
814+ let dw = dv._2
815+ let dx = dv._3
816+ if ((dp > dx))
801817 then throw("Incorect payments order")
802- else if (cP(cQ))
818+ else if (cS(cT))
803819 then throw()
804820 else {
805- let bY = bs(cQ, bc)
806- if (aA((bY > bX)))
821+ let cb = bv(cT, bf)
822+ if (aB((cb > ca)))
807823 then throw("D1 > D0")
808824 else {
809- let bU = aC(dc.caller)
810- func dv (aO,dw) = {
811- let dx = aO
812- let dy = dx._1
813- let dz = dx._2
814- let aw = dx._3
815- if ((ah > 0))
825+ let bX = aD(df.caller)
826+ func dy (aR,dz) = {
827+ let dA = aR
828+ let dB = dA._1
829+ let dC = dA._2
830+ let ax = dA._3
831+ if ((ai > 0))
816832 then {
817- let bV = ((fraction(aj, bU, ai, CEILING) * aq) / (4 * (aq - 1)))
818- let dA = {
819- let dB = fraction(bY, aY[aw], bX)
820- let dC = if ((dB > dw))
821- then (dB - dw)
822- else (dw - dB)
823- fraction(bV, dC, ai)
833+ let bY = ((fraction(ak, bX, aj, CEILING) * ar) / (4 * (ar - 1)))
834+ let dD = {
835+ let dE = fraction(cb, bb[ax], ca)
836+ let dF = if ((dE > dz))
837+ then (dE - dz)
838+ else (dz - dE)
839+ fraction(bY, dF, aj)
824840 }
825- let dD = fraction(dA, ak, ai)
826- let dE = (dw - dA)
827- let dF = (dw - dA)
828- let dG = (dw - aY[aw])
829- let dH = if ((dG > 0))
830- then co((dG - dA), ap[aw])
831- else cA(dA, ap[aw])
832- if ((dH == dH))
833- then $Tuple3((dy :+ dF), (dz ++ [ScriptTransfer(Y, (dA - dD), fromBase58String(ap[aw])), ScriptTransfer(T, dD, fromBase58String(ap[aw])), IntegerEntry((ap[aw] + i), dE)]), (aw + 1))
841+ let dG = fraction(dD, al, aj)
842+ let dH = (dz - dD)
843+ let dI = (dz - dD)
844+ let dJ = (dz - bb[ax])
845+ let dK = (dD - dG)
846+ let dL = if ((dJ > 0))
847+ then cr((dJ - dD), aq[ax])
848+ else cD(dD, aq[ax])
849+ if ((dL == dL))
850+ then {
851+ let dM = if ((dK > 0))
852+ then invoke(Z, "airDrop", nil, [AttachedPayment(fromBase58String(aq[ax]), dK)])
853+ else 0
854+ if ((dM == dM))
855+ then $Tuple3((dB :+ dI), (dC ++ [ScriptTransfer(U, dG, fromBase58String(aq[ax])), IntegerEntry((aq[ax] + i), dH)]), (ax + 1))
856+ else throw("Strict value is not equal to itself.")
857+ }
834858 else throw("Strict value is not equal to itself.")
835859 }
836860 else {
837- let dH = co(dw, ap[aw])
838- if ((dH == dH))
839- then $Tuple3((dy :+ dw), (dz :+ IntegerEntry((ap[aw] + i), dw)), (aw + 1))
861+ let dL = cr(dz, aq[ax])
862+ if ((dL == dL))
863+ then $Tuple3((dB :+ dz), (dC :+ IntegerEntry((aq[ax] + i), dz)), (ax + 1))
840864 else throw("Strict value is not equal to itself.")
841865 }
842866 }
843867
844- let dI = {
845- let aQ = cQ
846- let aR = size(aQ)
847- let aS = $Tuple3(nil, nil, 0)
848- func bn (aU,aV) = if ((aV >= aR))
849- then aU
850- else dv(aU, aQ[aV])
868+ let dN = {
869+ let aT = cT
870+ let aU = size(aT)
871+ let aV = $Tuple3(nil, nil, 0)
872+ func bq (aX,aY) = if ((aY >= aU))
873+ then aX
874+ else dy(aX, aT[aY])
851875
852- func bo (aU,aV) = if ((aV >= aR))
853- then aU
876+ func br (aX,aY) = if ((aY >= aU))
877+ then aX
854878 else throw("List size exceeds 15")
855879
856- 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)
880+ br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
857881 }
858- let dy = dI._1
859- let dz = dI._2
860- let dJ = bs(dy, bc)
861- let dK = if ((ah == 0))
862- then bY
863- else fraction(ah, (dJ - bX), bX)
864- if (aA((dK >= dk)))
882+ let dB = dN._1
883+ let dC = dN._2
884+ let dO = bv(dB, bf)
885+ let dP = if ((ai == 0))
886+ then cb
887+ else fraction(ai, (dO - ca), ca)
888+ if (aB((dP >= dn)))
865889 then throw("Slippage screwed you")
866- else if (dl)
890+ else if (do)
867891 then {
868- let dL = invoke(this, "reissueShare", [dK], nil)
869- if ((dL == dL))
892+ let dQ = invoke(this, "reissueShare", [dP], nil)
893+ if ((dQ == dQ))
870894 then {
871- let dM = invoke(X, "lockShareTokens", [toString(this)], [AttachedPayment(ag, dK)])
872- if ((dM == dM))
873- then (dz :+ IntegerEntry(m, (ah + dK)))
895+ let dR = invoke(Y, "lockShareTokens", [toString(this)], [AttachedPayment(ah, dP)])
896+ if ((dR == dR))
897+ then (dC :+ IntegerEntry(m, (ai + dP)))
874898 else throw("Strict value is not equal to itself.")
875899 }
876900 else throw("Strict value is not equal to itself.")
877901 }
878- else (dz ++ [Reissue(ag, dK, true), ScriptTransfer(dc.caller, dK, ag), IntegerEntry(m, (ah + dK))])
902+ else (dC ++ [Reissue(ah, dP, true), ScriptTransfer(df.caller, dP, ah), IntegerEntry(m, (ai + dP))])
879903 }
880904 }
881905 }
884908
885909
886910
887-@Callable(dc)
888-func reissueShare (cq) = valueOrElse(ax(dc), [Reissue(ag, cq, true)])
911+@Callable(df)
912+func calcMintAmount (cT,aF) = {
913+ let bf = aK()
914+ let bb = aP()
915+ let cb = bv(cT, bf)
916+ if ((ai == 0))
917+ then $Tuple2(nil, cb)
918+ else {
919+ let ca = bv(bb, bf)
920+ let bX = aD(aF)
921+ func dS (aR,dz) = {
922+ let dT = aR
923+ let dB = dT._1
924+ let ax = dT._2
925+ let bY = ((fraction(ak, bX, aj, CEILING) * ar) / (4 * (ar - 1)))
926+ let dD = {
927+ let dE = fraction(cb, bb[ax], ca)
928+ let dF = if ((dE > dz))
929+ then (dE - dz)
930+ else (dz - dE)
931+ fraction(bY, dF, aj)
932+ }
933+ let dI = (dz - dD)
934+ $Tuple2((dB :+ dI), (ax + 1))
935+ }
889936
937+ let dU = {
938+ let aT = cT
939+ let aU = size(aT)
940+ let aV = $Tuple2(nil, 0)
941+ func aW (aX,aY) = if ((aY >= aU))
942+ then aX
943+ else dS(aX, aT[aY])
890944
945+ func aZ (aX,aY) = if ((aY >= aU))
946+ then aX
947+ else throw("List size exceeds 15")
891948
892-@Callable(dc)
893-func getDy (dN,dO,dP,dQ) = {
894- let aY = aM()
895- let dR = valueOrErrorMessage(indexOf(ap, dN), "unknown token in")
896- let dS = valueOrErrorMessage(indexOf(ap, dO), "unknown token out")
897- let bw = (aY[dR] + dP)
898- let bJ = bt(dR, dS, bw, aY)
899- let cj = ((aY[dS] - bJ) - 1)
900- let bU = aC(Address(fromBase58String(dQ)))
901- let bV = fraction(fraction(aj, bU, ai, CEILING), cj, ai)
902- $Tuple2(nil, $Tuple2((cj - bV), bV))
949+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
950+ }
951+ let dB = dU._1
952+ let dw = dU._2
953+ let dO = bv(dB, bf)
954+ let dV = fraction(ai, (dO - ca), ca)
955+ $Tuple2(nil, dV)
956+ }
903957 }
904958
905959
906960
907-@Callable(dc)
908-func exchange (dT,dU) = valueOrElse(au(), if ((size(dc.payments) != 1))
961+@Callable(df)
962+func reissueShare (ct) = valueOrElse(ay(df), [Reissue(ah, ct, true)])
963+
964+
965+
966+@Callable(df)
967+func getDy (dW,dX,dY,dZ) = {
968+ let bb = aP()
969+ let ea = valueOrErrorMessage(indexOf(aq, dW), "unknown token in")
970+ let eb = valueOrErrorMessage(indexOf(aq, dX), "unknown token out")
971+ let bz = (bb[ea] + dY)
972+ let bM = bw(ea, eb, bz, bb)
973+ let cm = ((bb[eb] - bM) - 1)
974+ let bX = aD(Address(fromBase58String(dZ)))
975+ let bY = fraction(fraction(ak, bX, aj, CEILING), cm, aj)
976+ $Tuple2(nil, $Tuple2((cm - bY), bY))
977+ }
978+
979+
980+
981+@Callable(df)
982+func exchange (ec,ed) = valueOrElse(av(), if ((size(df.payments) != 1))
909983 then throw("size(payments) != 1")
910984 else {
911- let cJ = cF()
912- if (cJ._1)
913- then (cL(cJ._2) ++ cM(dc.caller, dc.payments))
985+ let cM = cI()
986+ if (cM._1)
987+ then (cO(cM._2) ++ cP(df.caller, df.payments))
914988 else {
915- let cO = dc.payments[0]
916- let dV = ck(cO.assetId)
917- let dW = fromBase58String(dT)
918- let dP = cO.amount
919- let dR = valueOrErrorMessage(indexOf(ap, dV), "unknown token in")
920- let dS = valueOrErrorMessage(indexOf(ap, dT), "unknown token out")
921- let aY = aM()
922- let bw = (aY[dR] + dP)
923- let bJ = bt(dR, dS, bw, aY)
924- let dX = ((aY[dS] - bJ) - 1)
925- let bU = aC(dc.caller)
926- let bV = fraction(dX, fraction(aj, bU, ai, CEILING), ai)
927- let cj = (dX - bV)
928- let dD = fraction(bV, ak, ai)
929- if (aA((cj >= dU)))
989+ let cR = df.payments[0]
990+ let ee = cn(cR.assetId)
991+ let ef = fromBase58String(ec)
992+ let dY = cR.amount
993+ let ea = valueOrErrorMessage(indexOf(aq, ee), "unknown token in")
994+ let eb = valueOrErrorMessage(indexOf(aq, ec), "unknown token out")
995+ let bb = aP()
996+ let bz = (bb[ea] + dY)
997+ let bM = bw(ea, eb, bz, bb)
998+ let eg = ((bb[eb] - bM) - 1)
999+ let bX = aD(df.caller)
1000+ let bY = fraction(eg, fraction(ak, bX, aj, CEILING), aj)
1001+ let cm = (eg - bY)
1002+ let dG = fraction(bY, al, aj)
1003+ if (aB((cm >= ed)))
9301004 then throw("Exchange resulted in fewer coins than expected")
9311005 else {
932- func dY (aO,dZ) = {
933- let ea = aO
934- let cQ = ea._1
935- let aw = ea._2
936- if ((aw == dR))
937- then $Tuple2((cQ :+ (dZ + dP)), (aw + 1))
938- else if ((aw == dS))
939- then $Tuple2((cQ :+ (dZ - dX)), (aw + 1))
940- else $Tuple2((cQ :+ dZ), (aw + 1))
1006+ func eh (aR,ei) = {
1007+ let ej = aR
1008+ let cT = ej._1
1009+ let ax = ej._2
1010+ if ((ax == ea))
1011+ then $Tuple2((cT :+ (ei + dY)), (ax + 1))
1012+ else if ((ax == eb))
1013+ then $Tuple2((cT :+ (ei - eg)), (ax + 1))
1014+ else $Tuple2((cT :+ ei), (ax + 1))
9411015 }
9421016
943- let eb = {
944- let aQ = aY
945- let aR = size(aQ)
946- let aS = $Tuple2(nil, 0)
947- func aT (aU,aV) = if ((aV >= aR))
948- then aU
949- else dY(aU, aQ[aV])
1017+ let ek = {
1018+ let aT = bb
1019+ let aU = size(aT)
1020+ let aV = $Tuple2(nil, 0)
1021+ func aW (aX,aY) = if ((aY >= aU))
1022+ then aX
1023+ else eh(aX, aT[aY])
9501024
951- func aW (aU,aV) = if ((aV >= aR))
952- then aU
1025+ func aZ (aX,aY) = if ((aY >= aU))
1026+ then aX
9531027 else throw("List size exceeds 15")
9541028
955- 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)
1029+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
9561030 }
957- let cQ = eb._1
958- let aw = eb._2
959- if (cP(cQ))
1031+ let cT = ek._1
1032+ let ax = ek._2
1033+ if (cS(cT))
9601034 then throw()
9611035 else {
962- let dM = co(cO.amount, ck(cO.assetId))
963- if ((dM == dM))
1036+ let dR = cr(cR.amount, cn(cR.assetId))
1037+ if ((dR == dR))
9641038 then {
965- let ec = cA(dX, dT)
966- if ((ec == ec))
967- then $Tuple2([IntegerEntry((dV + i), bw), IntegerEntry((dT + i), (aY[dS] - dX)), ScriptTransfer(dc.caller, cj, dW), ScriptTransfer(T, dD, dW), ScriptTransfer(Y, (bV - dD), dW)], [cj, dW])
1039+ let el = cD(eg, ec)
1040+ if ((el == el))
1041+ then {
1042+ let dK = (bY - dG)
1043+ let dM = if ((dK > 0))
1044+ then invoke(Z, "airDrop", nil, [AttachedPayment(ef, dK)])
1045+ else 0
1046+ if ((dM == dM))
1047+ then $Tuple2([IntegerEntry((ee + i), bz), IntegerEntry((ec + i), (bb[eb] - eg)), ScriptTransfer(df.caller, cm, ef), ScriptTransfer(U, dG, ef)], [cm, ef])
1048+ else throw("Strict value is not equal to itself.")
1049+ }
9681050 else throw("Strict value is not equal to itself.")
9691051 }
9701052 else throw("Strict value is not equal to itself.")
9751057
9761058
9771059
978-@Callable(dc)
979-func withdraw (ed) = valueOrElse(au(), if ((size(dc.payments) != 1))
1060+@Callable(df)
1061+func withdraw (em) = valueOrElse(av(), if ((size(df.payments) != 1))
9801062 then throw("size(payments) != 1")
9811063 else {
982- let ee = dc.payments[0].amount
983- let ef = dc.payments[0].assetId
984- if ((ag != ef))
1064+ let en = df.payments[0].amount
1065+ let eo = df.payments[0].assetId
1066+ if ((ah != eo))
9851067 then throw("unknown payment token")
9861068 else {
987- let cJ = cF()
988- if (cJ._1)
989- then (cL(cJ._2) ++ cM(dc.originCaller, dc.payments))
1069+ let cM = cI()
1070+ if (cM._1)
1071+ then (cO(cM._2) ++ cP(df.originCaller, df.payments))
9901072 else {
991- func dv (aO,eg) = {
992- let eh = aO
993- let dz = eh._1
994- let aw = eh._2
995- let ei = fraction(eg, ee, ah)
996- if (aA((ei >= ed[aw])))
1073+ func dy (aR,ep) = {
1074+ let eq = aR
1075+ let dC = eq._1
1076+ let ax = eq._2
1077+ let er = fraction(ep, en, ai)
1078+ if (aB((er >= em[ax])))
9971079 then throw("Withdrawal resulted in fewer coins than expected")
9981080 else {
999- let ec = cA(ei, ap[aw])
1000- if ((ec == ec))
1001- then $Tuple2((dz ++ [IntegerEntry((ap[aw] + i), (eg - ei)), ScriptTransfer(dc.originCaller, ei, fromBase58String(ap[aw]))]), (aw + 1))
1081+ let el = cD(er, aq[ax])
1082+ if ((el == el))
1083+ then $Tuple2((dC ++ [IntegerEntry((aq[ax] + i), (ep - er)), ScriptTransfer(df.originCaller, er, fromBase58String(aq[ax]))]), (ax + 1))
10021084 else throw("Strict value is not equal to itself.")
10031085 }
10041086 }
10051087
1006- let ej = {
1007- let aQ = aM()
1008- let aR = size(aQ)
1009- let aS = $Tuple2(nil, 0)
1010- func aT (aU,aV) = if ((aV >= aR))
1011- then aU
1012- else dv(aU, aQ[aV])
1088+ let es = {
1089+ let aT = aP()
1090+ let aU = size(aT)
1091+ let aV = $Tuple2(nil, 0)
1092+ func aW (aX,aY) = if ((aY >= aU))
1093+ then aX
1094+ else dy(aX, aT[aY])
10131095
1014- func aW (aU,aV) = if ((aV >= aR))
1015- then aU
1096+ func aZ (aX,aY) = if ((aY >= aU))
1097+ then aX
10161098 else throw("List size exceeds 15")
10171099
1018- 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)
1100+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
10191101 }
1020- let dz = ej._1
1021- let aw = ej._2
1022- (dz ++ [Burn(ag, ee), IntegerEntry(m, (ah - ee))])
1102+ let dC = es._1
1103+ let ax = es._2
1104+ (dC ++ [Burn(ah, en), IntegerEntry(m, (ai - en))])
10231105 }
10241106 }
10251107 })
10261108
10271109
10281110
1029-@Callable(dc)
1030-func withdrawWithUnlock (ed,ek) = valueOrElse(au(), if ((0 >= ek))
1111+@Callable(df)
1112+func withdrawWithUnlock (em,et) = valueOrElse(av(), if ((0 >= et))
10311113 then throw("Unlock amount must be positive")
10321114 else {
1033- let cJ = cF()
1034- if (cJ._1)
1035- then (cL(cJ._2) ++ cM(dc.caller, dc.payments))
1115+ let cM = cI()
1116+ if (cM._1)
1117+ then (cO(cM._2) ++ cP(df.caller, df.payments))
10361118 else {
1037- let ee = if ((size(dc.payments) > 0))
1038- then if ((size(dc.payments) != 1))
1119+ let en = if ((size(df.payments) > 0))
1120+ then if ((size(df.payments) != 1))
10391121 then throw("size(payments) != 1")
10401122 else {
1041- let ef = dc.payments[0].assetId
1042- if ((ag != ef))
1123+ let eo = df.payments[0].assetId
1124+ if ((ah != eo))
10431125 then throw("unknown payment token")
1044- else dc.payments[0].amount
1126+ else df.payments[0].amount
10451127 }
10461128 else 0
1047- let el = invoke(X, "withdrawShareTokens", [toString(this), ek], nil)
1048- if ((el == el))
1129+ let eu = invoke(Y, "withdrawShareTokens", [toString(this), et], nil)
1130+ if ((eu == eu))
10491131 then {
1050- let em = (ee + ek)
1051- let dH = invoke(this, "withdraw", [ed], [AttachedPayment(ag, em)])
1052- if ((dH == dH))
1132+ let ev = (en + et)
1133+ let dL = invoke(this, "withdraw", [em], [AttachedPayment(ah, ev)])
1134+ if ((dL == dL))
10531135 then nil
10541136 else throw("Strict value is not equal to itself.")
10551137 }
10591141
10601142
10611143
1062-@Callable(dc)
1063-func calcWithdrawOneCoin (en,dT,eo) = {
1064- let aw = valueOrErrorMessage(indexOf(ap, dT), "unknown token out")
1065- $Tuple2(nil, bR(aM(), en, aw, Address(fromBase58String(eo)))._1)
1144+@Callable(df)
1145+func calcWithdrawOneCoin (ew,ec,aF) = {
1146+ let ax = valueOrErrorMessage(indexOf(aq, ec), "unknown token out")
1147+ $Tuple2(nil, bU(aP(), ew, ax, Address(fromBase58String(aF)))._1)
10661148 }
10671149
10681150
10691151
1070-@Callable(dc)
1071-func withdrawOneCoin (dT,ep) = valueOrElse(au(), if ((size(dc.payments) != 1))
1152+@Callable(df)
1153+func withdrawOneCoin (ec,ex) = valueOrElse(av(), if ((size(df.payments) != 1))
10721154 then throw("size(payments) != 1")
10731155 else {
1074- let cJ = cF()
1075- if (cJ._1)
1076- then (cL(cJ._2) ++ cM(dc.originCaller, dc.payments))
1156+ let cM = cI()
1157+ if (cM._1)
1158+ then (cO(cM._2) ++ cP(df.originCaller, df.payments))
10771159 else {
1078- let ee = dc.payments[0].amount
1079- let ef = dc.payments[0].assetId
1080- if ((ef != ag))
1160+ let en = df.payments[0].amount
1161+ let eo = df.payments[0].assetId
1162+ if ((eo != ah))
10811163 then throw("unknown token")
10821164 else {
1083- let eq = valueOrErrorMessage(indexOf(ap, dT), "unknown token out")
1084- let aY = aM()
1085- let er = bR(aY, ee, eq, dc.originCaller)
1086- let cj = er._1
1087- let es = er._2
1088- if (aA((cj >= ep)))
1165+ let ey = valueOrErrorMessage(indexOf(aq, ec), "unknown token out")
1166+ let ef = fromBase58String(ec)
1167+ let bb = aP()
1168+ let ez = bU(bb, en, ey, df.originCaller)
1169+ let cm = ez._1
1170+ let eA = ez._2
1171+ if (aB((cm >= ex)))
10891172 then throw("Not enough coins removed")
10901173 else {
1091- let dD = fraction(es, ak, ai)
1092- let et = (cj + es)
1093- func dY (aO,dZ) = {
1094- let eu = aO
1095- let cQ = eu._1
1096- let aw = eu._2
1097- if ((aw == eq))
1098- then $Tuple2((cQ :+ (dZ - et)), (aw + 1))
1099- else $Tuple2((cQ :+ dZ), (aw + 1))
1174+ let dG = fraction(eA, al, aj)
1175+ let eB = (cm + eA)
1176+ func eh (aR,ei) = {
1177+ let eC = aR
1178+ let cT = eC._1
1179+ let ax = eC._2
1180+ if ((ax == ey))
1181+ then $Tuple2((cT :+ (ei - eB)), (ax + 1))
1182+ else $Tuple2((cT :+ ei), (ax + 1))
11001183 }
11011184
1102- let ev = {
1103- let aQ = aY
1104- let aR = size(aQ)
1105- let aS = $Tuple2(nil, 0)
1106- func aT (aU,aV) = if ((aV >= aR))
1107- then aU
1108- else dY(aU, aQ[aV])
1185+ let eD = {
1186+ let aT = bb
1187+ let aU = size(aT)
1188+ let aV = $Tuple2(nil, 0)
1189+ func aW (aX,aY) = if ((aY >= aU))
1190+ then aX
1191+ else eh(aX, aT[aY])
11091192
1110- func aW (aU,aV) = if ((aV >= aR))
1111- then aU
1193+ func aZ (aX,aY) = if ((aY >= aU))
1194+ then aX
11121195 else throw("List size exceeds 15")
11131196
1114- 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)
1197+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
11151198 }
1116- let cQ = ev._1
1117- let ew = ev._2
1118- if (cP(cQ))
1199+ let cT = eD._1
1200+ let eE = eD._2
1201+ if (cS(cT))
11191202 then throw()
11201203 else {
1121- let ec = cA(et, dT)
1122- if ((ec == ec))
1123- then [ScriptTransfer(dc.originCaller, cj, fromBase58String(dT)), IntegerEntry((ap[eq] + i), (aY[eq] - et)), Burn(ag, ee), ScriptTransfer(T, dD, fromBase58String(dT)), ScriptTransfer(Y, (es - dD), fromBase58String(dT)), IntegerEntry(m, (ah - ee))]
1204+ let el = cD(eB, ec)
1205+ if ((el == el))
1206+ then {
1207+ let dK = (eA - dG)
1208+ let dM = if ((dK > 0))
1209+ then invoke(Z, "airDrop", nil, [AttachedPayment(ef, dK)])
1210+ else 0
1211+ if ((dM == dM))
1212+ then [ScriptTransfer(df.originCaller, cm, ef), IntegerEntry((aq[ey] + i), (bb[ey] - eB)), Burn(ah, en), ScriptTransfer(U, dG, ef), IntegerEntry(m, (ai - en))]
1213+ else throw("Strict value is not equal to itself.")
1214+ }
11241215 else throw("Strict value is not equal to itself.")
11251216 }
11261217 }
11301221
11311222
11321223
1133-@Callable(dc)
1134-func withdrawOneCoinWithUnlock (dT,ep,ek) = valueOrElse(au(), if ((0 >= ek))
1224+@Callable(df)
1225+func withdrawOneCoinWithUnlock (ec,ex,et) = valueOrElse(av(), if ((0 >= et))
11351226 then throw("Unlock amount must be positive")
11361227 else {
1137- let cJ = cF()
1138- if (cJ._1)
1139- then (cL(cJ._2) ++ cM(dc.caller, dc.payments))
1228+ let cM = cI()
1229+ if (cM._1)
1230+ then (cO(cM._2) ++ cP(df.caller, df.payments))
11401231 else {
1141- let ee = if ((size(dc.payments) > 0))
1142- then if ((size(dc.payments) != 1))
1232+ let en = if ((size(df.payments) > 0))
1233+ then if ((size(df.payments) != 1))
11431234 then throw("size(payments) != 1")
11441235 else {
1145- let ef = dc.payments[0].assetId
1146- if ((ag != ef))
1236+ let eo = df.payments[0].assetId
1237+ if ((ah != eo))
11471238 then throw("unknown payment token")
1148- else dc.payments[0].amount
1239+ else df.payments[0].amount
11491240 }
11501241 else 0
1151- let el = invoke(X, "withdrawShareTokens", [toString(this), ek], nil)
1152- if ((el == el))
1242+ let eu = invoke(Y, "withdrawShareTokens", [toString(this), et], nil)
1243+ if ((eu == eu))
11531244 then {
1154- let em = (ee + ek)
1155- let dH = invoke(this, "withdrawOneCoin", [dT, ep], [AttachedPayment(ag, em)])
1156- if ((dH == dH))
1245+ let ev = (en + et)
1246+ let dL = invoke(this, "withdrawOneCoin", [ec, ex], [AttachedPayment(ah, ev)])
1247+ if ((dL == dL))
11571248 then nil
11581249 else throw("Strict value is not equal to itself.")
11591250 }
11631254
11641255
11651256
1166-@Callable(dc)
1167-func A () = $Tuple2(nil, aH())
1257+@Callable(df)
1258+func A () = $Tuple2(nil, aK())
11681259
11691260
11701261
1171-@Callable(dc)
1262+@Callable(df)
11721263 func getVirtualPrice () = {
1173- let bp = bb(aM(), aH())
1174- $Tuple2(nil, fraction(bp, a, ah))
1264+ let bs = be(aP(), aK())
1265+ $Tuple2(nil, fraction(bs, a, ai))
11751266 }
11761267
11771268
11781269
1179-@Callable(dc)
1180-func calcTokenAmount (ex,ey) = {
1181- let bc = aH()
1182- let ez = aM()
1183- let bX = bs(ez, bc)
1184- func eA (aO,eg) = {
1185- let eB = aO
1186- let cQ = eB._1
1187- let aw = eB._2
1188- let dw = (eg + (if (ey)
1189- then ex[aw]
1190- else -(ex[aw])))
1191- $Tuple2((cQ :+ dw), (aw + 1))
1270+@Callable(df)
1271+func calcTokenAmount (eF,eG) = {
1272+ let bf = aK()
1273+ let eH = aP()
1274+ let ca = bv(eH, bf)
1275+ func eI (aR,ep) = {
1276+ let eJ = aR
1277+ let cT = eJ._1
1278+ let ax = eJ._2
1279+ let dz = (ep + (if (eG)
1280+ then eF[ax]
1281+ else -(eF[ax])))
1282+ $Tuple2((cT :+ dz), (ax + 1))
11921283 }
11931284
1194- let cQ = ( let aQ = ez
1195- let aR = size(aQ)
1196- let aS = $Tuple2(nil, 0)
1197- func aT (aU,aV) = if ((aV >= aR))
1198- then aU
1199- else eA(aU, aQ[aV])
1285+ let cT = ( let aT = eH
1286+ let aU = size(aT)
1287+ let aV = $Tuple2(nil, 0)
1288+ func aW (aX,aY) = if ((aY >= aU))
1289+ then aX
1290+ else eI(aX, aT[aY])
12001291
1201- func aW (aU,aV) = if ((aV >= aR))
1202- then aU
1292+ func aZ (aX,aY) = if ((aY >= aU))
1293+ then aX
12031294 else throw("List size exceeds 15")
12041295
1205- 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
1206- let bY = bs(cQ, bc)
1207- let eC = if (ey)
1208- then (bY - bX)
1209- else (bX - bY)
1210- $Tuple2(nil, fraction(eC, ah, bX))
1296+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
1297+ let cb = bv(cT, bf)
1298+ let eK = if (eG)
1299+ then (cb - ca)
1300+ else (ca - cb)
1301+ $Tuple2(nil, fraction(eK, ai, ca))
12111302 }
12121303
12131304
12141305
1215-@Callable(dc)
1216-func rampA (eD,eE) = valueOrElse(au(), valueOrElse(av(dc), if (aA((az >= (an + e))))
1306+@Callable(df)
1307+func rampA (eL,eM) = valueOrElse(av(), valueOrElse(aw(df), if (aB((aA >= (ao + e))))
12171308 then throw("too often")
1218- else if (aA((eE >= (az + e))))
1309+ else if (aB((eM >= (aA + e))))
12191310 then throw("insufficient time")
12201311 else {
1221- let eF = aH()
1222- if (aA(if ((eD > 0))
1223- then (b > eD)
1312+ let eN = aK()
1313+ if (aB(if ((eL > 0))
1314+ then (b > eL)
12241315 else false))
12251316 then throw("out of base range")
1226- else if (aA(if (if ((eD >= eF))
1227- then ((eF * c) >= eD)
1317+ else if (aB(if (if ((eL >= eN))
1318+ then ((eN * c) >= eL)
12281319 else false)
12291320 then true
1230- else if ((eF > eD))
1231- then ((eD * c) >= eF)
1321+ else if ((eN > eL))
1322+ then ((eL * c) >= eN)
12321323 else false))
12331324 then throw("out of range")
1234- else [IntegerEntry("initial_A", eF), IntegerEntry("future_A", eD), IntegerEntry("initial_A_time", az), IntegerEntry("future_A_time", eE)]
1325+ else [IntegerEntry("initial_A", eN), IntegerEntry("future_A", eL), IntegerEntry("initial_A_time", aA), IntegerEntry("future_A_time", eM)]
12351326 }))
12361327
12371328
12381329
1239-@Callable(dc)
1240-func stopRampA () = valueOrElse(au(), valueOrElse(av(dc), {
1241- let eG = aH()
1242-[IntegerEntry("initial_A", eG), IntegerEntry("future_A", eG), IntegerEntry("initial_A_time", az), IntegerEntry("future_A_time", az)]
1330+@Callable(df)
1331+func stopRampA () = valueOrElse(av(), valueOrElse(aw(df), {
1332+ let eO = aK()
1333+[IntegerEntry("initial_A", eO), IntegerEntry("future_A", eO), IntegerEntry("initial_A_time", aA), IntegerEntry("future_A_time", aA)]
12431334 }))
12441335
12451336
12461337
1247-@Callable(dc)
1248-func shutdown () = valueOrElse(av(dc), if (!(af))
1338+@Callable(df)
1339+func shutdown () = valueOrElse(aw(df), if (!(ag))
12491340 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, k), "the cause wasn't specified")))
1250- else ar("Paused by admin"))
1341+ else as("Paused by admin"))
12511342
12521343
12531344
1254-@Callable(dc)
1255-func activate () = valueOrElse(av(dc), if (af)
1256- then at()
1345+@Callable(df)
1346+func activate () = valueOrElse(aw(df), if (ag)
1347+ then au()
12571348 else [BooleanEntry(j, true), DeleteEntry(k)])
12581349
12591350
12601351
1261-@Callable(dc)
1262-func keepLimitForFirstHarvest (eH) = valueOrElse(au(), valueOrElse(av(dc), [IntegerEntry(v, eH)]))
1352+@Callable(df)
1353+func keepLimitForFirstHarvest (eP) = valueOrElse(av(), valueOrElse(aw(df), [IntegerEntry(v, eP)]))
12631354
12641355
1265-@Verifier(eI)
1266-func eJ () = {
1267- let eK = {
1268- let eL = if (sigVerify(eI.bodyBytes, eI.proofs[0], P))
1356+@Verifier(eQ)
1357+func eR () = {
1358+ let eS = {
1359+ let eT = if (sigVerify(eQ.bodyBytes, eQ.proofs[0], Q))
12691360 then 1
12701361 else 0
1271- let eM = if (sigVerify(eI.bodyBytes, eI.proofs[1], Q))
1362+ let eU = if (sigVerify(eQ.bodyBytes, eQ.proofs[1], R))
12721363 then 1
12731364 else 0
1274- let eN = if (sigVerify(eI.bodyBytes, eI.proofs[2], R))
1365+ let eV = if (sigVerify(eQ.bodyBytes, eQ.proofs[2], S))
12751366 then 1
12761367 else 0
1277- (((eL + eM) + eN) >= 2)
1368+ (((eT + eU) + eV) >= 2)
12781369 }
1279- let M = eI
1280- if ($isInstanceOf(M, "InvokeScriptTransaction"))
1370+ let N = eQ
1371+ if ($isInstanceOf(N, "InvokeScriptTransaction"))
12811372 then {
1282- let dH = M
1283- let eO = if ((dH.dApp == this))
1284- then (dH.function == "takeIntoAccountExtraFunds")
1373+ let dL = N
1374+ let eW = if ((dL.dApp == this))
1375+ then (dL.function == "takeIntoAccountExtraFunds")
12851376 else false
1286- let eP = if (if (if (sigVerify(eI.bodyBytes, eI.proofs[0], P))
1377+ let eX = if (if (if (sigVerify(eQ.bodyBytes, eQ.proofs[0], Q))
12871378 then true
1288- else sigVerify(eI.bodyBytes, eI.proofs[0], Q))
1379+ else sigVerify(eQ.bodyBytes, eQ.proofs[0], R))
12891380 then true
1290- else sigVerify(eI.bodyBytes, eI.proofs[0], R))
1381+ else sigVerify(eQ.bodyBytes, eQ.proofs[0], S))
12911382 then true
1292- else sigVerify(eI.bodyBytes, eI.proofs[0], S)
1293- if (if (eO)
1294- then eP
1383+ else sigVerify(eQ.bodyBytes, eQ.proofs[0], T)
1384+ if (if (eW)
1385+ then eX
12951386 else false)
12961387 then true
1297- else eK
1388+ else eS
12981389 }
1299- else eK
1390+ else eS
13001391 }
13011392
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 = 6
1111
1212 let e = (86400 / 60)
1313
1414 let f = "3.0.0"
1515
1616 let g = "version"
1717
1818 let h = "asset_ids"
1919
2020 let i = "_balance"
2121
2222 let j = "active"
2323
2424 let k = "shutdown_cause"
2525
2626 let l = "share_asset_id"
2727
2828 let m = "share_asset_supply"
2929
3030 let n = "commission"
3131
3232 let o = "dAppThresholdCoef"
3333
3434 let p = "staking_usdnnsbt_address"
3535
3636 let q = "discounts"
3737
3838 let r = "discount_values"
3939
4040 let s = "_SWOP_amount"
4141
4242 let t = "first_harvest"
4343
4444 let u = "first_harvest_height"
4545
4646 let v = "share_limit_on_first_harvest"
4747
4848 let w = "base_period"
4949
5050 let x = "period_length"
5151
5252 let y = "start_height"
5353
5454 let z = "admin_pub_1"
5555
5656 let B = "admin_pub_2"
5757
5858 let C = "admin_pub_3"
5959
6060 let E = "admin_invoke_pub"
6161
6262 let F = "money_box_address"
6363
6464 let G = "governance_address"
6565
6666 let H = "voting_address"
6767
6868 let I = "farming_address"
6969
70-let J = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
70+let J = "lp_farming"
7171
72-func K (L) = {
73- let M = getString(J, L)
74- if ($isInstanceOf(M, "String"))
72+let K = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
73+
74+func L (M) = {
75+ let N = getString(K, M)
76+ if ($isInstanceOf(N, "String"))
7577 then {
76- let N = M
77- fromBase58String(N)
78+ let O = N
79+ fromBase58String(O)
7880 }
7981 else {
80- let O = M
81- throw((L + "is empty"))
82+ let P = N
83+ throw((M + "is empty"))
8284 }
8385 }
8486
8587
86-let P = K(z)
88+let Q = L(z)
8789
88-let Q = K(B)
90+let R = L(B)
8991
90-let R = K(C)
92+let S = L(C)
9193
92-let S = K(E)
94+let T = L(E)
9395
94-let T = Address(K(F))
96+let U = Address(L(F))
9597
96-let U = Address(K(G))
98+let V = Address(L(G))
9799
98-let V = Address(K(p))
100+let W = Address(L(p))
99101
100-let W = Address(K(H))
102+let X = Address(L(H))
101103
102-let X = Address(K(I))
104+let Y = Address(L(I))
103105
104-let Y = Address(base58'3MxXHaGvmKQHH3kNrPBunhve1sDXf7M5RZt')
106+let Z = Address(L(J))
105107
106-let Z = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
108+let aa = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
107109
108-let aa = [toBase58String(Z)]
110+let ab = [toBase58String(aa)]
109111
110-let ab = valueOrErrorMessage(getInteger(W, w), "Empty kBasePeriod")
112+let ac = valueOrErrorMessage(getInteger(X, w), "Empty kBasePeriod")
111113
112-let ac = valueOrErrorMessage(getInteger(W, y), "Empty kStartHeight")
114+let ad = valueOrErrorMessage(getInteger(X, y), "Empty kStartHeight")
113115
114-let ad = valueOrErrorMessage(getInteger(W, x), "Empty kPeriodLength")
116+let ae = valueOrErrorMessage(getInteger(X, x), "Empty kPeriodLength")
115117
116-let ae = ((ab + ((height - ac) / ad)) + 3)
118+let af = ((ac + ((height - ad) / ae)) + 3)
117119
118-let af = getBooleanValue(this, j)
120+let ag = getBooleanValue(this, j)
119121
120-let ag = fromBase58String(getStringValue(this, l))
122+let ah = fromBase58String(getStringValue(this, l))
121123
122-let ah = getIntegerValue(this, m)
124+let ai = getIntegerValue(this, m)
123125
124-let ai = 1000000
126+let aj = 1000000
125127
126-let aj = getIntegerValue(this, n)
128+let ak = getIntegerValue(this, n)
127129
128-let ak = fraction(40, ai, 100)
130+let al = fraction(40, aj, 100)
129131
130-let al = getIntegerValue(this, "initial_A")
132+let am = getIntegerValue(this, "initial_A")
131133
132-let am = getIntegerValue(this, "future_A")
134+let an = getIntegerValue(this, "future_A")
133135
134-let an = valueOrElse(getInteger(this, "initial_A_time"), 0)
136+let ao = valueOrElse(getInteger(this, "initial_A_time"), 0)
135137
136-let ao = valueOrElse(getInteger(this, "future_A_time"), 0)
138+let ap = valueOrElse(getInteger(this, "future_A_time"), 0)
137139
138-let ap = split(getStringValue(this, h), ",")
140+let aq = split(getStringValue(this, h), ",")
139141
140-let aq = size(ap)
142+let ar = size(aq)
141143
142-func ar (as) = [BooleanEntry(j, false), StringEntry(k, as)]
144+func as (at) = [BooleanEntry(j, false), StringEntry(k, at)]
143145
144146
145-func at () = throw("DApp is already active")
147+func au () = throw("DApp is already active")
146148
147149
148-func au () = if (af)
150+func av () = if (ag)
149151 then unit
150152 else throw("DApp is inactive at this moment")
151153
152154
153-func av (aw) = if (containsElement([P, Q, R], aw.callerPublicKey))
155+func aw (ax) = if (containsElement([Q, R, S], ax.callerPublicKey))
154156 then unit
155157 else throw("Only admin can call this function")
156158
157159
158-func ax (aw) = if ((this == aw.caller))
160+func ay (ax) = if ((this == ax.caller))
159161 then unit
160162 else throw("Only contract itself can call this function")
161163
162164
163-let ay = toBigInt(2)
165+let az = toBigInt(2)
164166
165-let az = height
167+let aA = height
166168
167-func aA (aB) = if (aB)
169+func aB (aC) = if (aC)
168170 then false
169171 else true
170172
171173
172-func aC (aD) = {
173- let aE = valueOrElse(getInteger(U, (toString(aD) + s)), 0)
174- let aF = split(getStringValue(J, r), ",")
175- let aG = split(getStringValue(J, q), ",")
176- if (if ((aE >= parseIntValue(aF[0])))
177- then (parseIntValue(aF[1]) > aE)
174+func aD (aE) = {
175+ let aF = {
176+ let N = aE
177+ if ($isInstanceOf(N, "Address"))
178+ then {
179+ let aG = N
180+ toString(aG)
181+ }
182+ else if ($isInstanceOf(N, "String"))
183+ then {
184+ let aG = N
185+ aG
186+ }
187+ else throw("Unknow type of user Addr")
188+ }
189+ let aH = valueOrElse(getInteger(V, (aF + s)), 0)
190+ let aI = split(getStringValue(K, r), ",")
191+ let aJ = split(getStringValue(K, q), ",")
192+ if (if ((aH >= parseIntValue(aI[0])))
193+ then (parseIntValue(aI[1]) > aH)
178194 else false)
179- then (ai - parseIntValue(aG[0]))
180- else if (if ((aE >= parseIntValue(aF[1])))
181- then (parseIntValue(aF[2]) > aE)
195+ then (aj - parseIntValue(aJ[0]))
196+ else if (if ((aH >= parseIntValue(aI[1])))
197+ then (parseIntValue(aI[2]) > aH)
182198 else false)
183- then (ai - parseIntValue(aG[1]))
184- else if (if ((aE >= parseIntValue(aF[2])))
185- then (parseIntValue(aF[3]) > aE)
199+ then (aj - parseIntValue(aJ[1]))
200+ else if (if ((aH >= parseIntValue(aI[2])))
201+ then (parseIntValue(aI[3]) > aH)
186202 else false)
187- then (ai - parseIntValue(aG[2]))
188- else if (if ((aE >= parseIntValue(aF[3])))
189- then (parseIntValue(aF[4]) > aE)
203+ then (aj - parseIntValue(aJ[2]))
204+ else if (if ((aH >= parseIntValue(aI[3])))
205+ then (parseIntValue(aI[4]) > aH)
190206 else false)
191- then (ai - parseIntValue(aG[3]))
192- else if ((aE >= parseIntValue(aF[4])))
193- then (ai - parseIntValue(aG[4]))
194- else ai
207+ then (aj - parseIntValue(aJ[3]))
208+ else if ((aH >= parseIntValue(aI[4])))
209+ then (aj - parseIntValue(aJ[4]))
210+ else aj
195211 }
196212
197213
198-func aH () = {
199- let aI = ao
200- let aJ = am
201- if ((aI > az))
214+func aK () = {
215+ let aL = ap
216+ let aM = an
217+ if ((aL > aA))
202218 then {
203- let aK = al
204- let aL = an
205- if ((aJ > aK))
206- then (aK + (((aJ - aK) * (az - aL)) / (aI - aL)))
207- else (aK - (((aK - aJ) * (az - aL)) / (aI - aL)))
219+ let aN = am
220+ let aO = ao
221+ if ((aM > aN))
222+ then (aN + (((aM - aN) * (aA - aO)) / (aL - aO)))
223+ else (aN - (((aN - aM) * (aA - aO)) / (aL - aO)))
208224 }
209- else aJ
225+ else aM
210226 }
211227
212228
213-func aM () = {
214- func aN (aO,aP) = (aO :+ valueOrElse(getInteger(this, (aP + i)), 0))
229+func aP () = {
230+ func aQ (aR,aS) = (aR :+ valueOrElse(getInteger(this, (aS + i)), 0))
215231
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])
232+ let aT = aq
233+ let aU = size(aT)
234+ let aV = nil
235+ func aW (aX,aY) = if ((aY >= aU))
236+ then aX
237+ else aQ(aX, aT[aY])
222238
223- func aW (aU,aV) = if ((aV >= aR))
224- then aU
239+ func aZ (aX,aY) = if ((aY >= aU))
240+ then aX
225241 else throw("List size exceeds 15")
226242
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)
243+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
228244 }
229245
230246
231-func aX (aY) = aY
247+func ba (bb) = bb
232248
233249
234-func aZ (aO,ba) = (aO + ba)
250+func bc (aR,bd) = (aR + bd)
235251
236252
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"))
253+func be (bb,bf) = {
254+ let bg = invoke(this, "D", [bb, bf], nil)
255+ if ($isInstanceOf(bg, "Int"))
256+ then bg
257+ else throw(($getType(invoke(this, "D", [bb, bf], nil)) + " couldn't be cast to Int"))
242258 }
243259
244260
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])
261+func bh (bb,bf) = {
262+ let bi = {
263+ let aT = bb
264+ let aU = size(aT)
265+ let aV = 0
266+ func aW (aX,aY) = if ((aY >= aU))
267+ then aX
268+ else bc(aX, aT[aY])
253269
254- func aW (aU,aV) = if ((aV >= aR))
255- then aU
270+ func aZ (aX,aY) = if ((aY >= aU))
271+ then aX
256272 else throw("List size exceeds 15")
257273
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)
274+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
259275 }
260- if ((bf == 0))
276+ if ((bi == 0))
261277 then 0
262278 else {
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
279+ let bj = (bf * ar)
280+ let bk = (toBigInt(bj) * toBigInt(bi))
281+ let bl = toBigInt((bj - 1))
282+ func bm (aR,ax) = if ((aR._2 == true))
283+ then aR
268284 else {
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
285+ let bn = aR._1
286+ func bo (bp,ax) = if ((ar > ax))
287+ then ((bp * bn) / (toBigInt(bb[ax]) * toBigInt(ar)))
288+ else bp
273289
274- let bm = {
275- let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
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])
290+ let bp = {
291+ let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
292+ let aU = size(aT)
293+ let aV = bn
294+ func bq (aX,aY) = if ((aY >= aU))
295+ then aX
296+ else bo(aX, aT[aY])
281297
282- func bo (aU,aV) = if ((aV >= aR))
283- then aU
298+ func br (aX,aY) = if ((aY >= aU))
299+ then aX
284300 else throw("List size exceeds 15")
285301
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)
302+ br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
287303 }
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)
304+ let bs = fraction((bk + (toBigInt(ar) * bp)), bn, ((bl * bn) + (toBigInt((ar + 1)) * bp)))
305+ if ((bs > bn))
306+ then if ((1 >= toInt((bs - bn))))
307+ then $Tuple2(bs, true)
308+ else $Tuple2(bs, false)
309+ else if ((1 >= toInt((bn - bs))))
310+ then $Tuple2(bs, true)
311+ else $Tuple2(bs, false)
296312 }
297313
298- let bq = {
299- let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
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])
314+ let bt = {
315+ let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
316+ let aU = size(aT)
317+ let aV = $Tuple2(toBigInt(bi), false)
318+ func bq (aX,aY) = if ((aY >= aU))
319+ then aX
320+ else bm(aX, aT[aY])
305321
306- func bo (aU,aV) = if ((aV >= aR))
307- then aU
322+ func br (aX,aY) = if ((aY >= aU))
323+ then aX
308324 else throw("List size exceeds 15")
309325
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)
326+ br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
311327 }
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)
328+ let bs = bt._1
329+ let bu = bt._2
330+ if ((bu == false))
331+ then throw(("get_D() not finished with " + toString(bs)))
332+ else toInt(bs)
317333 }
318334 }
319335
320336
321-func bs (aY,bc) = bb(aX(aY), bc)
337+func bv (bb,bf) = be(ba(bb), bf)
322338
323339
324-func bt (bu,bv,bw,bx) = if (aA((bu != bv)))
340+func bw (bx,by,bz,bA) = if (aB((bx != by)))
325341 then throw("same coin")
326- else if (aA(if ((bv >= 0))
327- then (bu >= 0)
342+ else if (aB(if ((by >= 0))
343+ then (bx >= 0)
328344 else false))
329345 then throw("below zero")
330- else if (aA(if ((aq > bv))
331- then (aq > bu)
346+ else if (aB(if ((ar > by))
347+ then (ar > bx)
332348 else false))
333349 then throw("above N_COINS")
334350 else {
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)
351+ let bf = aK()
352+ let bs = be(bA, bf)
353+ let bj = (bf * ar)
354+ func bB (aR,ax) = {
355+ let bC = aR
356+ let bD = bC._1
357+ let bE = bC._2
358+ let bF = if ((bx == ax))
359+ then bz
360+ else bA[ax]
361+ if (if ((ax != by))
362+ then (ar > ax)
347363 else false)
348- then $Tuple2((bA + bC), fraction(bB, toBigInt(bp), toBigInt((bC * aq))))
349- else $Tuple2(bA, bB)
364+ then $Tuple2((bD + bF), fraction(bE, toBigInt(bs), toBigInt((bF * ar))))
365+ else $Tuple2(bD, bE)
350366 }
351367
352- let bD = {
353- let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
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])
368+ let bG = {
369+ let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
370+ let aU = size(aT)
371+ let aV = $Tuple2(0, toBigInt(bs))
372+ func aW (aX,aY) = if ((aY >= aU))
373+ then aX
374+ else bB(aX, aT[aY])
359375
360- func aW (aU,aV) = if ((aV >= aR))
361- then aU
376+ func aZ (aX,aY) = if ((aY >= aU))
377+ then aX
362378 else throw("List size exceeds 15")
363379
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)
380+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
365381 }
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
382+ let bD = bG._1
383+ let bH = bG._2
384+ let bE = fraction(bH, toBigInt(bs), toBigInt((bj * ar)))
385+ let bI = toBigInt(((bD + (bs / bj)) - bs))
386+ func bJ (aR,bK) = if ((aR._2 == true))
387+ then aR
372388 else {
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)
389+ let bL = aR._1
390+ let bM = (((bL * bL) + bE) / ((az * bL) + bI))
391+ if ((bM > bL))
392+ then if ((1 >= toInt((bM - bL))))
393+ then $Tuple2(bM, true)
394+ else $Tuple2(bM, false)
395+ else if ((1 >= toInt((bL - bM))))
396+ then $Tuple2(bM, true)
397+ else $Tuple2(bM, false)
382398 }
383399
384- let bK = {
385- let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
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])
400+ let bN = {
401+ let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
402+ let aU = size(aT)
403+ let aV = $Tuple2(toBigInt(bs), false)
404+ func bq (aX,aY) = if ((aY >= aU))
405+ then aX
406+ else bJ(aX, aT[aY])
391407
392- func bo (aU,aV) = if ((aV >= aR))
393- then aU
408+ func br (aX,aY) = if ((aY >= aU))
409+ then aX
394410 else throw("List size exceeds 16")
395411
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)
412+ br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
397413 }
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)
414+ let bM = bN._1
415+ let bu = bN._2
416+ if ((bu == false))
417+ then throw(("getY() not finished with " + toString(bM)))
418+ else toInt(bM)
403419 }
404420
405421
406-func bL (bM,bu,aY,bp) = if (aA((bu >= 0)))
422+func bO (bP,bx,bb,bs) = if (aB((bx >= 0)))
407423 then throw("i below zero")
408- else if (aA((aq > bu)))
424+ else if (aB((ar > bx)))
409425 then throw("i above N_COINS")
410426 else {
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)
427+ let bj = (bP * ar)
428+ func bB (aR,ax) = {
429+ let bQ = aR
430+ let bD = bQ._1
431+ let bE = bQ._2
432+ let bF = if (if ((bx != ax))
433+ then (ar > ax)
418434 else false)
419- then aY[aw]
435+ then bb[ax]
420436 else 0
421- if (if ((aq > aw))
422- then (bu != aw)
437+ if (if ((ar > ax))
438+ then (bx != ax)
423439 else false)
424- then $Tuple2((bA + bC), fraction(bB, toBigInt(bp), toBigInt((bC * aq))))
425- else $Tuple2(bA, bB)
440+ then $Tuple2((bD + bF), fraction(bE, toBigInt(bs), toBigInt((bF * ar))))
441+ else $Tuple2(bD, bE)
426442 }
427443
428- let bO = {
429- let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
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])
444+ let bR = {
445+ let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
446+ let aU = size(aT)
447+ let aV = $Tuple2(0, toBigInt(bs))
448+ func aW (aX,aY) = if ((aY >= aU))
449+ then aX
450+ else bB(aX, aT[aY])
435451
436- func aW (aU,aV) = if ((aV >= aR))
437- then aU
452+ func aZ (aX,aY) = if ((aY >= aU))
453+ then aX
438454 else throw("List size exceeds 15")
439455
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)
456+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
441457 }
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
458+ let bD = bR._1
459+ let bH = bR._2
460+ let bE = fraction(bH, toBigInt(bs), toBigInt((bj * ar)))
461+ let bI = toBigInt(((bD + (bs / bj)) - bs))
462+ func bS (aR,ax) = if ((aR._2 == true))
463+ then aR
448464 else {
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)
465+ let bL = aR._1
466+ let bM = (((bL * bL) + bE) / ((az * bL) + bI))
467+ if ((bM > bL))
468+ then if ((1 >= toInt((bM - bL))))
469+ then $Tuple2(bM, true)
470+ else $Tuple2(bM, false)
471+ else if ((1 >= toInt((bL - bM))))
472+ then $Tuple2(bM, true)
473+ else $Tuple2(bM, false)
458474 }
459475
460- let bQ = {
461- let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
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])
476+ let bT = {
477+ let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
478+ let aU = size(aT)
479+ let aV = $Tuple2(toBigInt(bs), false)
480+ func bq (aX,aY) = if ((aY >= aU))
481+ then aX
482+ else bS(aX, aT[aY])
467483
468- func bo (aU,aV) = if ((aV >= aR))
469- then aU
484+ func br (aX,aY) = if ((aY >= aU))
485+ then aX
470486 else throw("List size exceeds 16")
471487
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)
488+ br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
473489 }
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)
490+ let bM = bT._1
491+ let bu = bT._2
492+ if ((bu == false))
493+ then throw(("get_y_D() not finished with " + toString(bM)))
494+ else toInt(bM)
479495 }
480496
481497
482-func bR (aY,bS,aw,bT) = {
483- let bU = aC(bT)
484- let bc = aH()
485- let bV = ((fraction(aj, bU, ai, CEILING) * aq) / (4 * (aq - 1)))
486- let bW = ah
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, ai))), (cf + 1))
498+func bU (bb,bV,ax,bW) = {
499+ let bX = aD(bW)
500+ let bf = aK()
501+ let bY = ((fraction(ak, bX, aj, CEILING) * ar) / (4 * (ar - 1)))
502+ let bZ = ai
503+ let ca = be(bb, bf)
504+ let cb = (ca - fraction(bV, ca, bZ))
505+ let cc = bO(bf, ax, bb, cb)
506+ let cd = (bb[ax] - cc)
507+ func ce (aR,cf) = {
508+ let cg = aR
509+ let ch = cg._1
510+ let ci = cg._2
511+ let cj = if ((ci == ax))
512+ then (fraction(cf, cb, ca) - cc)
513+ else (cf - fraction(cf, cb, ca))
514+ $Tuple2((ch :+ (cf - fraction(bY, cj, aj))), (ci + 1))
499515 }
500516
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])
517+ let ck = {
518+ let aT = bb
519+ let aU = size(aT)
520+ let aV = $Tuple2(nil, 0)
521+ func aW (aX,aY) = if ((aY >= aU))
522+ then aX
523+ else ce(aX, aT[aY])
508524
509- func aW (aU,aV) = if ((aV >= aR))
510- then aU
525+ func aZ (aX,aY) = if ((aY >= aU))
526+ then aX
511527 else throw("List size exceeds 15")
512528
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)
529+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
514530 }
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))
531+ let ch = ck._1
532+ let ci = ck._2
533+ let cl = ch[ax]
534+ let cm = ((cl - bO(bf, ax, ch, cb)) - 1)
535+ $Tuple2(cm, (cd - cm))
520536 }
521537
522538
523-func ck (aP) = {
524- let M = aP
525- if ($isInstanceOf(M, "ByteVector"))
539+func cn (aS) = {
540+ let N = aS
541+ if ($isInstanceOf(N, "ByteVector"))
526542 then {
527- let cl = M
528- toBase58String(cl)
543+ let co = N
544+ toBase58String(co)
529545 }
530- else if ($isInstanceOf(M, "Unit"))
546+ else if ($isInstanceOf(N, "Unit"))
531547 then {
532- let cm = M
548+ let cp = N
533549 "WAVES"
534550 }
535551 else throw("Match error")
536552 }
537553
538554
539-func cn (co,aP) = if (co)
540- then $Tuple2("lockNeutrino", V)
541- else $Tuple2("unlockNeutrino", V)
555+func cq (cr,aS) = if (cr)
556+ then $Tuple2("lockNeutrino", W)
557+ else $Tuple2("unlockNeutrino", W)
542558
543559
544-func cp (co,cq,aP) = if (co)
560+func cs (cr,ct,aS) = if (cr)
545561 then {
546- let cr = cn(co, aP)
547- let cs = cr._1
548- let ct = cr._2
549- $Tuple4(cs, ct, nil, [AttachedPayment(aP, cq)])
562+ let cu = cq(cr, aS)
563+ let cv = cu._1
564+ let cw = cu._2
565+ $Tuple4(cv, cw, nil, [AttachedPayment(aS, ct)])
550566 }
551567 else {
552- let cu = cn(co, aP)
553- let cs = cu._1
554- let ct = cu._2
555- $Tuple4(cs, ct, [cq, toBase58String(aP)], nil)
568+ let cx = cq(cr, aS)
569+ let cv = cx._1
570+ let cw = cx._2
571+ $Tuple4(cv, cw, [ct, toBase58String(aS)], nil)
556572 }
557573
558574
559-func co (cq,cv) = if (containsElement(aa, cv))
575+func cr (ct,cy) = if (containsElement(ab, cy))
560576 then {
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)
577+ let cz = cs(true, ct, fromBase58String(cy))
578+ let cv = cz._1
579+ let cA = cz._2
580+ let cB = cz._3
581+ let cC = cz._4
582+ invoke(cA, cv, cB, cC)
567583 }
568584 else 0
569585
570586
571-func cA (cq,cv) = if (containsElement(aa, cv))
587+func cD (ct,cy) = if (containsElement(ab, cy))
572588 then {
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)
589+ let cE = cs(false, ct, fromBase58String(cy))
590+ let cv = cE._1
591+ let cA = cE._2
592+ let cB = cE._3
593+ let cC = cE._4
594+ invoke(cA, cv, cB, cC)
579595 }
580596 else 0
581597
582598
583-func cC (aP) = {
584- let cD = {
585- let M = aP
586- if ($isInstanceOf(M, "ByteVector"))
599+func cF (aS) = {
600+ let cG = {
601+ let N = aS
602+ if ($isInstanceOf(N, "ByteVector"))
587603 then {
588- let cE = M
589- if ((cE == Z))
590- then getInteger(V, ((("rpd_balance_" + toBase58String(cE)) + "_") + toString(this)))
604+ let cH = N
605+ if ((cH == aa))
606+ then getInteger(W, ((("rpd_balance_" + toBase58String(cH)) + "_") + toString(this)))
591607 else 0
592608 }
593- else if ($isInstanceOf(M, "Unit"))
609+ else if ($isInstanceOf(N, "Unit"))
594610 then 0
595611 else throw("Match error")
596612 }
597- let M = cD
598- if ($isInstanceOf(M, "Int"))
613+ let N = cG
614+ if ($isInstanceOf(N, "Int"))
599615 then {
600- let aw = M
601- aw
616+ let ax = N
617+ ax
602618 }
603619 else 0
604620 }
605621
606622
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)
623+func cI () = {
624+ let cJ = aP()
625+ func cK (aR,aS) = {
626+ let cL = aR
627+ let cM = cL._1
628+ let ax = cL._2
629+ if (cM)
630+ then $Tuple2(cM, ax)
615631 else {
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))
632+ let cN = (assetBalance(this, fromBase58String(aS)) + cF(fromBase58String(aS)))
633+ if ((cJ[ax] > cN))
634+ then $Tuple2(true, ax)
635+ else $Tuple2(false, (ax + 1))
620636 }
621637 }
622638
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])
639+ let aT = aq
640+ let aU = size(aT)
641+ let aV = $Tuple2(false, 0)
642+ func aW (aX,aY) = if ((aY >= aU))
643+ then aX
644+ else cK(aX, aT[aY])
629645
630- func aW (aU,aV) = if ((aV >= aR))
631- then aU
646+ func aZ (aX,aY) = if ((aY >= aU))
647+ then aX
632648 else throw("List size exceeds 15")
633649
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)
650+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
635651 }
636652
637653
638-func cL (aw) = ar(("Suspicious state with asset: " + ap[aw]))
654+func cO (ax) = as(("Suspicious state with asset: " + aq[ax]))
639655
640656
641-func cM (bT,cz) = {
642- func cN (aO,cO) = (aO :+ ScriptTransfer(bT, cO.amount, cO.assetId))
657+func cP (bW,cC) = {
658+ func cQ (aR,cR) = (aR :+ ScriptTransfer(bW, cR.amount, cR.assetId))
643659
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])
660+ let aT = cC
661+ let aU = size(aT)
662+ let aV = nil
663+ func aW (aX,aY) = if ((aY >= aU))
664+ then aX
665+ else cQ(aX, aT[aY])
650666
651- func aW (aU,aV) = if ((aV >= aR))
652- then aU
667+ func aZ (aX,aY) = if ((aY >= aU))
668+ then aX
653669 else throw("List size exceeds 15")
654670
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)
671+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
656672 }
657673
658674
659-func cP (cQ) = {
660- let cR = valueOrErrorMessage(getInteger(this, o), "No dAppThresholdCoef key")
661- let cS = 10000
662- let cT = max(cQ)
663- let cU = min(cQ)
664- let cV = fraction(cT, cS, cU)
665- if ((cV > (cR * cS)))
675+func cS (cT) = {
676+ let cU = valueOrErrorMessage(getInteger(this, o), "No dAppThresholdCoef key")
677+ let cV = 10000
678+ let cW = max(cT)
679+ let cX = min(cT)
680+ let cY = fraction(cW, cV, cX)
681+ if ((cY > (cU * cV)))
666682 then throw("New balance in assets of the DApp is less than threshold")
667683 else false
668684 }
669685
670686
671-func cW (ap) = {
672- let cX = split(ap, ",")
673- func cY (cZ,aP) = {
674- let da = valueOrErrorMessage(fromBase58String(aP), ("fromBase58String: " + aP))
675- let db = valueOrErrorMessage(assetInfo(da), ("assetInfo: " + aP)).decimals
676- if ((db != d))
687+func cZ (aq) = {
688+ let da = split(aq, ",")
689+ func db (dc,aS) = {
690+ let dd = valueOrErrorMessage(fromBase58String(aS), ("fromBase58String: " + aS))
691+ let de = valueOrErrorMessage(assetInfo(dd), ("assetInfo: " + aS)).decimals
692+ if ((de != d))
677693 then throw("wrong decimals")
678694 else false
679695 }
680696
681- let aQ = cX
682- let aR = size(aQ)
683- let aS = false
684- func aT (aU,aV) = if ((aV >= aR))
685- then aU
686- else cY(aU, aQ[aV])
697+ let aT = da
698+ let aU = size(aT)
699+ let aV = false
700+ func aW (aX,aY) = if ((aY >= aU))
701+ then aX
702+ else db(aX, aT[aY])
687703
688- func aW (aU,aV) = if ((aV >= aR))
689- then aU
704+ func aZ (aX,aY) = if ((aY >= aU))
705+ then aX
690706 else throw("List size exceeds 15")
691707
692- 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)
708+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
693709 }
694710
695711
696-@Callable(dc)
697-func D (aY,bc) = {
698- let bp = be(aY, bc)
699- $Tuple2([IntegerEntry("D", bp)], bp)
712+@Callable(df)
713+func D (bb,bf) = {
714+ let bs = bh(bb, bf)
715+ $Tuple2([IntegerEntry("D", bs)], bs)
700716 }
701717
702718
703719
704-@Callable(dc)
705-func init (ap,aH,dd,de) = if (!(isDataStorageUntouched(this)))
720+@Callable(df)
721+func init (aq,aK,dg,dh) = if (!(isDataStorageUntouched(this)))
706722 then throw("Already initialized")
707- else if ((0 >= aH))
723+ else if ((0 >= aK))
708724 then throw("Amp must be must > 0")
709- else if ((0 >= dd))
725+ else if ((0 >= dg))
710726 then throw("dApp Threshold Coef must be > 0")
711727 else {
712- let df = "s_Multi_USD"
713- let dg = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
714- let dh = Issue(df, dg, 0, 6, true)
715- let di = calculateAssetId(dh)
716- if (cW(ap))
728+ let di = "s_Multi_USD"
729+ let dj = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
730+ let dk = Issue(di, dj, 0, 6, true)
731+ let dl = calculateAssetId(dk)
732+ if (cZ(aq))
717733 then throw()
718734 else {
719- let dj = [StringEntry(g, f), StringEntry(h, ap), IntegerEntry("initial_A", aH), IntegerEntry("future_A", aH), IntegerEntry(n, getIntegerValue(J, "base_fee_flat")), StringEntry(l, toBase58String(di)), IntegerEntry(m, 0), IntegerEntry(o, dd), BooleanEntry(j, true), dh]
720- if (de)
721- then (dj ++ [BooleanEntry(t, de), IntegerEntry(u, (ac + (ae * ad)))])
722- else dj
735+ let dm = [StringEntry(g, f), StringEntry(h, aq), IntegerEntry("initial_A", aK), IntegerEntry("future_A", aK), IntegerEntry(n, getIntegerValue(K, "base_fee_flat")), StringEntry(l, toBase58String(dl)), IntegerEntry(m, 0), IntegerEntry(o, dg), BooleanEntry(j, true), dk]
736+ if (dh)
737+ then (dm ++ [BooleanEntry(t, dh), IntegerEntry(u, (ad + (af * ae)))])
738+ else dm
723739 }
724740 }
725741
726742
727743
728-@Callable(dc)
729-func addLiquidity (dk,dl) = valueOrElse(au(), {
730- let bc = aH()
731- let aY = aM()
732- let bX = if ((ah == 0))
744+@Callable(df)
745+func addLiquidity (dn,do) = valueOrElse(av(), {
746+ let bf = aK()
747+ let bb = aP()
748+ let ca = if ((ai == 0))
733749 then 0
734- else bs(aY, bc)
735- let cz = dc.payments
736- let dm = size(cz)
737- func dn (do) = if ((dm > aq))
738- then throw(("payments size > " + toString(aq)))
739- else if ((1 > dm))
750+ else bv(bb, bf)
751+ let cC = df.payments
752+ let dp = size(cC)
753+ func dq (dr) = if ((dp > ar))
754+ then throw(("payments size > " + toString(ar)))
755+ else if ((1 > dp))
740756 then throw("payments size < 1")
741- else if (if ((ah == 0))
742- then (aq != dm)
757+ else if (if ((ai == 0))
758+ then (ar != dp)
743759 else false)
744760 then throw("initial deposit requires all coins")
745761 else {
746- func dp (aO,cO) = if (containsElement(ap, ck(cO.assetId)))
762+ func ds (aR,cR) = if (containsElement(aq, cn(cR.assetId)))
747763 then true
748764 else throw("Invalid asset in payment")
749765
750- let aQ = cz
751- let aR = size(aQ)
752- let aS = false
753- func aT (aU,aV) = if ((aV >= aR))
754- then aU
755- else dp(aU, aQ[aV])
766+ let aT = cC
767+ let aU = size(aT)
768+ let aV = false
769+ func aW (aX,aY) = if ((aY >= aU))
770+ then aX
771+ else ds(aX, aT[aY])
756772
757- func aW (aU,aV) = if ((aV >= aR))
758- then aU
773+ func aZ (aX,aY) = if ((aY >= aU))
774+ then aX
759775 else throw("List size exceeds 15")
760776
761- 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)
777+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
762778 }
763779
764- if (!(dn(dm)))
780+ if (!(dq(dp)))
765781 then throw()
766782 else {
767- let cJ = cF()
768- if (cJ._1)
769- then (cL(cJ._2) ++ cM(dc.caller, cz))
783+ let cM = cI()
784+ if (cM._1)
785+ then (cO(cM._2) ++ cP(df.caller, cC))
770786 else {
771- func cN (aO,aP) = {
772- let dq = aO
773- let cQ = dq._1
774- let aw = dq._2
775- let dr = dq._3
776- if (if ((dm > dr))
777- then (ck(cz[dr].assetId) == aP)
787+ func cQ (aR,aS) = {
788+ let dt = aR
789+ let cT = dt._1
790+ let ax = dt._2
791+ let du = dt._3
792+ if (if ((dp > du))
793+ then (cn(cC[du].assetId) == aS)
778794 else false)
779- then $Tuple3((cQ :+ (aY[aw] + cz[dr].amount)), (aw + 1), (dr + 1))
780- else $Tuple3((cQ :+ aY[aw]), (aw + 1), dr)
795+ then $Tuple3((cT :+ (bb[ax] + cC[du].amount)), (ax + 1), (du + 1))
796+ else $Tuple3((cT :+ bb[ax]), (ax + 1), du)
781797 }
782798
783- let ds = {
784- let aQ = ap
785- let aR = size(aQ)
786- let aS = $Tuple3(nil, 0, 0)
787- func aT (aU,aV) = if ((aV >= aR))
788- then aU
789- else cN(aU, aQ[aV])
799+ let dv = {
800+ let aT = aq
801+ let aU = size(aT)
802+ let aV = $Tuple3(nil, 0, 0)
803+ func aW (aX,aY) = if ((aY >= aU))
804+ then aX
805+ else cQ(aX, aT[aY])
790806
791- func aW (aU,aV) = if ((aV >= aR))
792- then aU
807+ func aZ (aX,aY) = if ((aY >= aU))
808+ then aX
793809 else throw("List size exceeds 15")
794810
795- 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)
811+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
796812 }
797- let cQ = ds._1
798- let dt = ds._2
799- let du = ds._3
800- if ((dm > du))
813+ let cT = dv._1
814+ let dw = dv._2
815+ let dx = dv._3
816+ if ((dp > dx))
801817 then throw("Incorect payments order")
802- else if (cP(cQ))
818+ else if (cS(cT))
803819 then throw()
804820 else {
805- let bY = bs(cQ, bc)
806- if (aA((bY > bX)))
821+ let cb = bv(cT, bf)
822+ if (aB((cb > ca)))
807823 then throw("D1 > D0")
808824 else {
809- let bU = aC(dc.caller)
810- func dv (aO,dw) = {
811- let dx = aO
812- let dy = dx._1
813- let dz = dx._2
814- let aw = dx._3
815- if ((ah > 0))
825+ let bX = aD(df.caller)
826+ func dy (aR,dz) = {
827+ let dA = aR
828+ let dB = dA._1
829+ let dC = dA._2
830+ let ax = dA._3
831+ if ((ai > 0))
816832 then {
817- let bV = ((fraction(aj, bU, ai, CEILING) * aq) / (4 * (aq - 1)))
818- let dA = {
819- let dB = fraction(bY, aY[aw], bX)
820- let dC = if ((dB > dw))
821- then (dB - dw)
822- else (dw - dB)
823- fraction(bV, dC, ai)
833+ let bY = ((fraction(ak, bX, aj, CEILING) * ar) / (4 * (ar - 1)))
834+ let dD = {
835+ let dE = fraction(cb, bb[ax], ca)
836+ let dF = if ((dE > dz))
837+ then (dE - dz)
838+ else (dz - dE)
839+ fraction(bY, dF, aj)
824840 }
825- let dD = fraction(dA, ak, ai)
826- let dE = (dw - dA)
827- let dF = (dw - dA)
828- let dG = (dw - aY[aw])
829- let dH = if ((dG > 0))
830- then co((dG - dA), ap[aw])
831- else cA(dA, ap[aw])
832- if ((dH == dH))
833- then $Tuple3((dy :+ dF), (dz ++ [ScriptTransfer(Y, (dA - dD), fromBase58String(ap[aw])), ScriptTransfer(T, dD, fromBase58String(ap[aw])), IntegerEntry((ap[aw] + i), dE)]), (aw + 1))
841+ let dG = fraction(dD, al, aj)
842+ let dH = (dz - dD)
843+ let dI = (dz - dD)
844+ let dJ = (dz - bb[ax])
845+ let dK = (dD - dG)
846+ let dL = if ((dJ > 0))
847+ then cr((dJ - dD), aq[ax])
848+ else cD(dD, aq[ax])
849+ if ((dL == dL))
850+ then {
851+ let dM = if ((dK > 0))
852+ then invoke(Z, "airDrop", nil, [AttachedPayment(fromBase58String(aq[ax]), dK)])
853+ else 0
854+ if ((dM == dM))
855+ then $Tuple3((dB :+ dI), (dC ++ [ScriptTransfer(U, dG, fromBase58String(aq[ax])), IntegerEntry((aq[ax] + i), dH)]), (ax + 1))
856+ else throw("Strict value is not equal to itself.")
857+ }
834858 else throw("Strict value is not equal to itself.")
835859 }
836860 else {
837- let dH = co(dw, ap[aw])
838- if ((dH == dH))
839- then $Tuple3((dy :+ dw), (dz :+ IntegerEntry((ap[aw] + i), dw)), (aw + 1))
861+ let dL = cr(dz, aq[ax])
862+ if ((dL == dL))
863+ then $Tuple3((dB :+ dz), (dC :+ IntegerEntry((aq[ax] + i), dz)), (ax + 1))
840864 else throw("Strict value is not equal to itself.")
841865 }
842866 }
843867
844- let dI = {
845- let aQ = cQ
846- let aR = size(aQ)
847- let aS = $Tuple3(nil, nil, 0)
848- func bn (aU,aV) = if ((aV >= aR))
849- then aU
850- else dv(aU, aQ[aV])
868+ let dN = {
869+ let aT = cT
870+ let aU = size(aT)
871+ let aV = $Tuple3(nil, nil, 0)
872+ func bq (aX,aY) = if ((aY >= aU))
873+ then aX
874+ else dy(aX, aT[aY])
851875
852- func bo (aU,aV) = if ((aV >= aR))
853- then aU
876+ func br (aX,aY) = if ((aY >= aU))
877+ then aX
854878 else throw("List size exceeds 15")
855879
856- 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)
880+ br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
857881 }
858- let dy = dI._1
859- let dz = dI._2
860- let dJ = bs(dy, bc)
861- let dK = if ((ah == 0))
862- then bY
863- else fraction(ah, (dJ - bX), bX)
864- if (aA((dK >= dk)))
882+ let dB = dN._1
883+ let dC = dN._2
884+ let dO = bv(dB, bf)
885+ let dP = if ((ai == 0))
886+ then cb
887+ else fraction(ai, (dO - ca), ca)
888+ if (aB((dP >= dn)))
865889 then throw("Slippage screwed you")
866- else if (dl)
890+ else if (do)
867891 then {
868- let dL = invoke(this, "reissueShare", [dK], nil)
869- if ((dL == dL))
892+ let dQ = invoke(this, "reissueShare", [dP], nil)
893+ if ((dQ == dQ))
870894 then {
871- let dM = invoke(X, "lockShareTokens", [toString(this)], [AttachedPayment(ag, dK)])
872- if ((dM == dM))
873- then (dz :+ IntegerEntry(m, (ah + dK)))
895+ let dR = invoke(Y, "lockShareTokens", [toString(this)], [AttachedPayment(ah, dP)])
896+ if ((dR == dR))
897+ then (dC :+ IntegerEntry(m, (ai + dP)))
874898 else throw("Strict value is not equal to itself.")
875899 }
876900 else throw("Strict value is not equal to itself.")
877901 }
878- else (dz ++ [Reissue(ag, dK, true), ScriptTransfer(dc.caller, dK, ag), IntegerEntry(m, (ah + dK))])
902+ else (dC ++ [Reissue(ah, dP, true), ScriptTransfer(df.caller, dP, ah), IntegerEntry(m, (ai + dP))])
879903 }
880904 }
881905 }
882906 }
883907 })
884908
885909
886910
887-@Callable(dc)
888-func reissueShare (cq) = valueOrElse(ax(dc), [Reissue(ag, cq, true)])
911+@Callable(df)
912+func calcMintAmount (cT,aF) = {
913+ let bf = aK()
914+ let bb = aP()
915+ let cb = bv(cT, bf)
916+ if ((ai == 0))
917+ then $Tuple2(nil, cb)
918+ else {
919+ let ca = bv(bb, bf)
920+ let bX = aD(aF)
921+ func dS (aR,dz) = {
922+ let dT = aR
923+ let dB = dT._1
924+ let ax = dT._2
925+ let bY = ((fraction(ak, bX, aj, CEILING) * ar) / (4 * (ar - 1)))
926+ let dD = {
927+ let dE = fraction(cb, bb[ax], ca)
928+ let dF = if ((dE > dz))
929+ then (dE - dz)
930+ else (dz - dE)
931+ fraction(bY, dF, aj)
932+ }
933+ let dI = (dz - dD)
934+ $Tuple2((dB :+ dI), (ax + 1))
935+ }
889936
937+ let dU = {
938+ let aT = cT
939+ let aU = size(aT)
940+ let aV = $Tuple2(nil, 0)
941+ func aW (aX,aY) = if ((aY >= aU))
942+ then aX
943+ else dS(aX, aT[aY])
890944
945+ func aZ (aX,aY) = if ((aY >= aU))
946+ then aX
947+ else throw("List size exceeds 15")
891948
892-@Callable(dc)
893-func getDy (dN,dO,dP,dQ) = {
894- let aY = aM()
895- let dR = valueOrErrorMessage(indexOf(ap, dN), "unknown token in")
896- let dS = valueOrErrorMessage(indexOf(ap, dO), "unknown token out")
897- let bw = (aY[dR] + dP)
898- let bJ = bt(dR, dS, bw, aY)
899- let cj = ((aY[dS] - bJ) - 1)
900- let bU = aC(Address(fromBase58String(dQ)))
901- let bV = fraction(fraction(aj, bU, ai, CEILING), cj, ai)
902- $Tuple2(nil, $Tuple2((cj - bV), bV))
949+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
950+ }
951+ let dB = dU._1
952+ let dw = dU._2
953+ let dO = bv(dB, bf)
954+ let dV = fraction(ai, (dO - ca), ca)
955+ $Tuple2(nil, dV)
956+ }
903957 }
904958
905959
906960
907-@Callable(dc)
908-func exchange (dT,dU) = valueOrElse(au(), if ((size(dc.payments) != 1))
961+@Callable(df)
962+func reissueShare (ct) = valueOrElse(ay(df), [Reissue(ah, ct, true)])
963+
964+
965+
966+@Callable(df)
967+func getDy (dW,dX,dY,dZ) = {
968+ let bb = aP()
969+ let ea = valueOrErrorMessage(indexOf(aq, dW), "unknown token in")
970+ let eb = valueOrErrorMessage(indexOf(aq, dX), "unknown token out")
971+ let bz = (bb[ea] + dY)
972+ let bM = bw(ea, eb, bz, bb)
973+ let cm = ((bb[eb] - bM) - 1)
974+ let bX = aD(Address(fromBase58String(dZ)))
975+ let bY = fraction(fraction(ak, bX, aj, CEILING), cm, aj)
976+ $Tuple2(nil, $Tuple2((cm - bY), bY))
977+ }
978+
979+
980+
981+@Callable(df)
982+func exchange (ec,ed) = valueOrElse(av(), if ((size(df.payments) != 1))
909983 then throw("size(payments) != 1")
910984 else {
911- let cJ = cF()
912- if (cJ._1)
913- then (cL(cJ._2) ++ cM(dc.caller, dc.payments))
985+ let cM = cI()
986+ if (cM._1)
987+ then (cO(cM._2) ++ cP(df.caller, df.payments))
914988 else {
915- let cO = dc.payments[0]
916- let dV = ck(cO.assetId)
917- let dW = fromBase58String(dT)
918- let dP = cO.amount
919- let dR = valueOrErrorMessage(indexOf(ap, dV), "unknown token in")
920- let dS = valueOrErrorMessage(indexOf(ap, dT), "unknown token out")
921- let aY = aM()
922- let bw = (aY[dR] + dP)
923- let bJ = bt(dR, dS, bw, aY)
924- let dX = ((aY[dS] - bJ) - 1)
925- let bU = aC(dc.caller)
926- let bV = fraction(dX, fraction(aj, bU, ai, CEILING), ai)
927- let cj = (dX - bV)
928- let dD = fraction(bV, ak, ai)
929- if (aA((cj >= dU)))
989+ let cR = df.payments[0]
990+ let ee = cn(cR.assetId)
991+ let ef = fromBase58String(ec)
992+ let dY = cR.amount
993+ let ea = valueOrErrorMessage(indexOf(aq, ee), "unknown token in")
994+ let eb = valueOrErrorMessage(indexOf(aq, ec), "unknown token out")
995+ let bb = aP()
996+ let bz = (bb[ea] + dY)
997+ let bM = bw(ea, eb, bz, bb)
998+ let eg = ((bb[eb] - bM) - 1)
999+ let bX = aD(df.caller)
1000+ let bY = fraction(eg, fraction(ak, bX, aj, CEILING), aj)
1001+ let cm = (eg - bY)
1002+ let dG = fraction(bY, al, aj)
1003+ if (aB((cm >= ed)))
9301004 then throw("Exchange resulted in fewer coins than expected")
9311005 else {
932- func dY (aO,dZ) = {
933- let ea = aO
934- let cQ = ea._1
935- let aw = ea._2
936- if ((aw == dR))
937- then $Tuple2((cQ :+ (dZ + dP)), (aw + 1))
938- else if ((aw == dS))
939- then $Tuple2((cQ :+ (dZ - dX)), (aw + 1))
940- else $Tuple2((cQ :+ dZ), (aw + 1))
1006+ func eh (aR,ei) = {
1007+ let ej = aR
1008+ let cT = ej._1
1009+ let ax = ej._2
1010+ if ((ax == ea))
1011+ then $Tuple2((cT :+ (ei + dY)), (ax + 1))
1012+ else if ((ax == eb))
1013+ then $Tuple2((cT :+ (ei - eg)), (ax + 1))
1014+ else $Tuple2((cT :+ ei), (ax + 1))
9411015 }
9421016
943- let eb = {
944- let aQ = aY
945- let aR = size(aQ)
946- let aS = $Tuple2(nil, 0)
947- func aT (aU,aV) = if ((aV >= aR))
948- then aU
949- else dY(aU, aQ[aV])
1017+ let ek = {
1018+ let aT = bb
1019+ let aU = size(aT)
1020+ let aV = $Tuple2(nil, 0)
1021+ func aW (aX,aY) = if ((aY >= aU))
1022+ then aX
1023+ else eh(aX, aT[aY])
9501024
951- func aW (aU,aV) = if ((aV >= aR))
952- then aU
1025+ func aZ (aX,aY) = if ((aY >= aU))
1026+ then aX
9531027 else throw("List size exceeds 15")
9541028
955- 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)
1029+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
9561030 }
957- let cQ = eb._1
958- let aw = eb._2
959- if (cP(cQ))
1031+ let cT = ek._1
1032+ let ax = ek._2
1033+ if (cS(cT))
9601034 then throw()
9611035 else {
962- let dM = co(cO.amount, ck(cO.assetId))
963- if ((dM == dM))
1036+ let dR = cr(cR.amount, cn(cR.assetId))
1037+ if ((dR == dR))
9641038 then {
965- let ec = cA(dX, dT)
966- if ((ec == ec))
967- then $Tuple2([IntegerEntry((dV + i), bw), IntegerEntry((dT + i), (aY[dS] - dX)), ScriptTransfer(dc.caller, cj, dW), ScriptTransfer(T, dD, dW), ScriptTransfer(Y, (bV - dD), dW)], [cj, dW])
1039+ let el = cD(eg, ec)
1040+ if ((el == el))
1041+ then {
1042+ let dK = (bY - dG)
1043+ let dM = if ((dK > 0))
1044+ then invoke(Z, "airDrop", nil, [AttachedPayment(ef, dK)])
1045+ else 0
1046+ if ((dM == dM))
1047+ then $Tuple2([IntegerEntry((ee + i), bz), IntegerEntry((ec + i), (bb[eb] - eg)), ScriptTransfer(df.caller, cm, ef), ScriptTransfer(U, dG, ef)], [cm, ef])
1048+ else throw("Strict value is not equal to itself.")
1049+ }
9681050 else throw("Strict value is not equal to itself.")
9691051 }
9701052 else throw("Strict value is not equal to itself.")
9711053 }
9721054 }
9731055 }
9741056 })
9751057
9761058
9771059
978-@Callable(dc)
979-func withdraw (ed) = valueOrElse(au(), if ((size(dc.payments) != 1))
1060+@Callable(df)
1061+func withdraw (em) = valueOrElse(av(), if ((size(df.payments) != 1))
9801062 then throw("size(payments) != 1")
9811063 else {
982- let ee = dc.payments[0].amount
983- let ef = dc.payments[0].assetId
984- if ((ag != ef))
1064+ let en = df.payments[0].amount
1065+ let eo = df.payments[0].assetId
1066+ if ((ah != eo))
9851067 then throw("unknown payment token")
9861068 else {
987- let cJ = cF()
988- if (cJ._1)
989- then (cL(cJ._2) ++ cM(dc.originCaller, dc.payments))
1069+ let cM = cI()
1070+ if (cM._1)
1071+ then (cO(cM._2) ++ cP(df.originCaller, df.payments))
9901072 else {
991- func dv (aO,eg) = {
992- let eh = aO
993- let dz = eh._1
994- let aw = eh._2
995- let ei = fraction(eg, ee, ah)
996- if (aA((ei >= ed[aw])))
1073+ func dy (aR,ep) = {
1074+ let eq = aR
1075+ let dC = eq._1
1076+ let ax = eq._2
1077+ let er = fraction(ep, en, ai)
1078+ if (aB((er >= em[ax])))
9971079 then throw("Withdrawal resulted in fewer coins than expected")
9981080 else {
999- let ec = cA(ei, ap[aw])
1000- if ((ec == ec))
1001- then $Tuple2((dz ++ [IntegerEntry((ap[aw] + i), (eg - ei)), ScriptTransfer(dc.originCaller, ei, fromBase58String(ap[aw]))]), (aw + 1))
1081+ let el = cD(er, aq[ax])
1082+ if ((el == el))
1083+ then $Tuple2((dC ++ [IntegerEntry((aq[ax] + i), (ep - er)), ScriptTransfer(df.originCaller, er, fromBase58String(aq[ax]))]), (ax + 1))
10021084 else throw("Strict value is not equal to itself.")
10031085 }
10041086 }
10051087
1006- let ej = {
1007- let aQ = aM()
1008- let aR = size(aQ)
1009- let aS = $Tuple2(nil, 0)
1010- func aT (aU,aV) = if ((aV >= aR))
1011- then aU
1012- else dv(aU, aQ[aV])
1088+ let es = {
1089+ let aT = aP()
1090+ let aU = size(aT)
1091+ let aV = $Tuple2(nil, 0)
1092+ func aW (aX,aY) = if ((aY >= aU))
1093+ then aX
1094+ else dy(aX, aT[aY])
10131095
1014- func aW (aU,aV) = if ((aV >= aR))
1015- then aU
1096+ func aZ (aX,aY) = if ((aY >= aU))
1097+ then aX
10161098 else throw("List size exceeds 15")
10171099
1018- 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)
1100+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
10191101 }
1020- let dz = ej._1
1021- let aw = ej._2
1022- (dz ++ [Burn(ag, ee), IntegerEntry(m, (ah - ee))])
1102+ let dC = es._1
1103+ let ax = es._2
1104+ (dC ++ [Burn(ah, en), IntegerEntry(m, (ai - en))])
10231105 }
10241106 }
10251107 })
10261108
10271109
10281110
1029-@Callable(dc)
1030-func withdrawWithUnlock (ed,ek) = valueOrElse(au(), if ((0 >= ek))
1111+@Callable(df)
1112+func withdrawWithUnlock (em,et) = valueOrElse(av(), if ((0 >= et))
10311113 then throw("Unlock amount must be positive")
10321114 else {
1033- let cJ = cF()
1034- if (cJ._1)
1035- then (cL(cJ._2) ++ cM(dc.caller, dc.payments))
1115+ let cM = cI()
1116+ if (cM._1)
1117+ then (cO(cM._2) ++ cP(df.caller, df.payments))
10361118 else {
1037- let ee = if ((size(dc.payments) > 0))
1038- then if ((size(dc.payments) != 1))
1119+ let en = if ((size(df.payments) > 0))
1120+ then if ((size(df.payments) != 1))
10391121 then throw("size(payments) != 1")
10401122 else {
1041- let ef = dc.payments[0].assetId
1042- if ((ag != ef))
1123+ let eo = df.payments[0].assetId
1124+ if ((ah != eo))
10431125 then throw("unknown payment token")
1044- else dc.payments[0].amount
1126+ else df.payments[0].amount
10451127 }
10461128 else 0
1047- let el = invoke(X, "withdrawShareTokens", [toString(this), ek], nil)
1048- if ((el == el))
1129+ let eu = invoke(Y, "withdrawShareTokens", [toString(this), et], nil)
1130+ if ((eu == eu))
10491131 then {
1050- let em = (ee + ek)
1051- let dH = invoke(this, "withdraw", [ed], [AttachedPayment(ag, em)])
1052- if ((dH == dH))
1132+ let ev = (en + et)
1133+ let dL = invoke(this, "withdraw", [em], [AttachedPayment(ah, ev)])
1134+ if ((dL == dL))
10531135 then nil
10541136 else throw("Strict value is not equal to itself.")
10551137 }
10561138 else throw("Strict value is not equal to itself.")
10571139 }
10581140 })
10591141
10601142
10611143
1062-@Callable(dc)
1063-func calcWithdrawOneCoin (en,dT,eo) = {
1064- let aw = valueOrErrorMessage(indexOf(ap, dT), "unknown token out")
1065- $Tuple2(nil, bR(aM(), en, aw, Address(fromBase58String(eo)))._1)
1144+@Callable(df)
1145+func calcWithdrawOneCoin (ew,ec,aF) = {
1146+ let ax = valueOrErrorMessage(indexOf(aq, ec), "unknown token out")
1147+ $Tuple2(nil, bU(aP(), ew, ax, Address(fromBase58String(aF)))._1)
10661148 }
10671149
10681150
10691151
1070-@Callable(dc)
1071-func withdrawOneCoin (dT,ep) = valueOrElse(au(), if ((size(dc.payments) != 1))
1152+@Callable(df)
1153+func withdrawOneCoin (ec,ex) = valueOrElse(av(), if ((size(df.payments) != 1))
10721154 then throw("size(payments) != 1")
10731155 else {
1074- let cJ = cF()
1075- if (cJ._1)
1076- then (cL(cJ._2) ++ cM(dc.originCaller, dc.payments))
1156+ let cM = cI()
1157+ if (cM._1)
1158+ then (cO(cM._2) ++ cP(df.originCaller, df.payments))
10771159 else {
1078- let ee = dc.payments[0].amount
1079- let ef = dc.payments[0].assetId
1080- if ((ef != ag))
1160+ let en = df.payments[0].amount
1161+ let eo = df.payments[0].assetId
1162+ if ((eo != ah))
10811163 then throw("unknown token")
10821164 else {
1083- let eq = valueOrErrorMessage(indexOf(ap, dT), "unknown token out")
1084- let aY = aM()
1085- let er = bR(aY, ee, eq, dc.originCaller)
1086- let cj = er._1
1087- let es = er._2
1088- if (aA((cj >= ep)))
1165+ let ey = valueOrErrorMessage(indexOf(aq, ec), "unknown token out")
1166+ let ef = fromBase58String(ec)
1167+ let bb = aP()
1168+ let ez = bU(bb, en, ey, df.originCaller)
1169+ let cm = ez._1
1170+ let eA = ez._2
1171+ if (aB((cm >= ex)))
10891172 then throw("Not enough coins removed")
10901173 else {
1091- let dD = fraction(es, ak, ai)
1092- let et = (cj + es)
1093- func dY (aO,dZ) = {
1094- let eu = aO
1095- let cQ = eu._1
1096- let aw = eu._2
1097- if ((aw == eq))
1098- then $Tuple2((cQ :+ (dZ - et)), (aw + 1))
1099- else $Tuple2((cQ :+ dZ), (aw + 1))
1174+ let dG = fraction(eA, al, aj)
1175+ let eB = (cm + eA)
1176+ func eh (aR,ei) = {
1177+ let eC = aR
1178+ let cT = eC._1
1179+ let ax = eC._2
1180+ if ((ax == ey))
1181+ then $Tuple2((cT :+ (ei - eB)), (ax + 1))
1182+ else $Tuple2((cT :+ ei), (ax + 1))
11001183 }
11011184
1102- let ev = {
1103- let aQ = aY
1104- let aR = size(aQ)
1105- let aS = $Tuple2(nil, 0)
1106- func aT (aU,aV) = if ((aV >= aR))
1107- then aU
1108- else dY(aU, aQ[aV])
1185+ let eD = {
1186+ let aT = bb
1187+ let aU = size(aT)
1188+ let aV = $Tuple2(nil, 0)
1189+ func aW (aX,aY) = if ((aY >= aU))
1190+ then aX
1191+ else eh(aX, aT[aY])
11091192
1110- func aW (aU,aV) = if ((aV >= aR))
1111- then aU
1193+ func aZ (aX,aY) = if ((aY >= aU))
1194+ then aX
11121195 else throw("List size exceeds 15")
11131196
1114- 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)
1197+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
11151198 }
1116- let cQ = ev._1
1117- let ew = ev._2
1118- if (cP(cQ))
1199+ let cT = eD._1
1200+ let eE = eD._2
1201+ if (cS(cT))
11191202 then throw()
11201203 else {
1121- let ec = cA(et, dT)
1122- if ((ec == ec))
1123- then [ScriptTransfer(dc.originCaller, cj, fromBase58String(dT)), IntegerEntry((ap[eq] + i), (aY[eq] - et)), Burn(ag, ee), ScriptTransfer(T, dD, fromBase58String(dT)), ScriptTransfer(Y, (es - dD), fromBase58String(dT)), IntegerEntry(m, (ah - ee))]
1204+ let el = cD(eB, ec)
1205+ if ((el == el))
1206+ then {
1207+ let dK = (eA - dG)
1208+ let dM = if ((dK > 0))
1209+ then invoke(Z, "airDrop", nil, [AttachedPayment(ef, dK)])
1210+ else 0
1211+ if ((dM == dM))
1212+ then [ScriptTransfer(df.originCaller, cm, ef), IntegerEntry((aq[ey] + i), (bb[ey] - eB)), Burn(ah, en), ScriptTransfer(U, dG, ef), IntegerEntry(m, (ai - en))]
1213+ else throw("Strict value is not equal to itself.")
1214+ }
11241215 else throw("Strict value is not equal to itself.")
11251216 }
11261217 }
11271218 }
11281219 }
11291220 })
11301221
11311222
11321223
1133-@Callable(dc)
1134-func withdrawOneCoinWithUnlock (dT,ep,ek) = valueOrElse(au(), if ((0 >= ek))
1224+@Callable(df)
1225+func withdrawOneCoinWithUnlock (ec,ex,et) = valueOrElse(av(), if ((0 >= et))
11351226 then throw("Unlock amount must be positive")
11361227 else {
1137- let cJ = cF()
1138- if (cJ._1)
1139- then (cL(cJ._2) ++ cM(dc.caller, dc.payments))
1228+ let cM = cI()
1229+ if (cM._1)
1230+ then (cO(cM._2) ++ cP(df.caller, df.payments))
11401231 else {
1141- let ee = if ((size(dc.payments) > 0))
1142- then if ((size(dc.payments) != 1))
1232+ let en = if ((size(df.payments) > 0))
1233+ then if ((size(df.payments) != 1))
11431234 then throw("size(payments) != 1")
11441235 else {
1145- let ef = dc.payments[0].assetId
1146- if ((ag != ef))
1236+ let eo = df.payments[0].assetId
1237+ if ((ah != eo))
11471238 then throw("unknown payment token")
1148- else dc.payments[0].amount
1239+ else df.payments[0].amount
11491240 }
11501241 else 0
1151- let el = invoke(X, "withdrawShareTokens", [toString(this), ek], nil)
1152- if ((el == el))
1242+ let eu = invoke(Y, "withdrawShareTokens", [toString(this), et], nil)
1243+ if ((eu == eu))
11531244 then {
1154- let em = (ee + ek)
1155- let dH = invoke(this, "withdrawOneCoin", [dT, ep], [AttachedPayment(ag, em)])
1156- if ((dH == dH))
1245+ let ev = (en + et)
1246+ let dL = invoke(this, "withdrawOneCoin", [ec, ex], [AttachedPayment(ah, ev)])
1247+ if ((dL == dL))
11571248 then nil
11581249 else throw("Strict value is not equal to itself.")
11591250 }
11601251 else throw("Strict value is not equal to itself.")
11611252 }
11621253 })
11631254
11641255
11651256
1166-@Callable(dc)
1167-func A () = $Tuple2(nil, aH())
1257+@Callable(df)
1258+func A () = $Tuple2(nil, aK())
11681259
11691260
11701261
1171-@Callable(dc)
1262+@Callable(df)
11721263 func getVirtualPrice () = {
1173- let bp = bb(aM(), aH())
1174- $Tuple2(nil, fraction(bp, a, ah))
1264+ let bs = be(aP(), aK())
1265+ $Tuple2(nil, fraction(bs, a, ai))
11751266 }
11761267
11771268
11781269
1179-@Callable(dc)
1180-func calcTokenAmount (ex,ey) = {
1181- let bc = aH()
1182- let ez = aM()
1183- let bX = bs(ez, bc)
1184- func eA (aO,eg) = {
1185- let eB = aO
1186- let cQ = eB._1
1187- let aw = eB._2
1188- let dw = (eg + (if (ey)
1189- then ex[aw]
1190- else -(ex[aw])))
1191- $Tuple2((cQ :+ dw), (aw + 1))
1270+@Callable(df)
1271+func calcTokenAmount (eF,eG) = {
1272+ let bf = aK()
1273+ let eH = aP()
1274+ let ca = bv(eH, bf)
1275+ func eI (aR,ep) = {
1276+ let eJ = aR
1277+ let cT = eJ._1
1278+ let ax = eJ._2
1279+ let dz = (ep + (if (eG)
1280+ then eF[ax]
1281+ else -(eF[ax])))
1282+ $Tuple2((cT :+ dz), (ax + 1))
11921283 }
11931284
1194- let cQ = ( let aQ = ez
1195- let aR = size(aQ)
1196- let aS = $Tuple2(nil, 0)
1197- func aT (aU,aV) = if ((aV >= aR))
1198- then aU
1199- else eA(aU, aQ[aV])
1285+ let cT = ( let aT = eH
1286+ let aU = size(aT)
1287+ let aV = $Tuple2(nil, 0)
1288+ func aW (aX,aY) = if ((aY >= aU))
1289+ then aX
1290+ else eI(aX, aT[aY])
12001291
1201- func aW (aU,aV) = if ((aV >= aR))
1202- then aU
1292+ func aZ (aX,aY) = if ((aY >= aU))
1293+ then aX
12031294 else throw("List size exceeds 15")
12041295
1205- 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
1206- let bY = bs(cQ, bc)
1207- let eC = if (ey)
1208- then (bY - bX)
1209- else (bX - bY)
1210- $Tuple2(nil, fraction(eC, ah, bX))
1296+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
1297+ let cb = bv(cT, bf)
1298+ let eK = if (eG)
1299+ then (cb - ca)
1300+ else (ca - cb)
1301+ $Tuple2(nil, fraction(eK, ai, ca))
12111302 }
12121303
12131304
12141305
1215-@Callable(dc)
1216-func rampA (eD,eE) = valueOrElse(au(), valueOrElse(av(dc), if (aA((az >= (an + e))))
1306+@Callable(df)
1307+func rampA (eL,eM) = valueOrElse(av(), valueOrElse(aw(df), if (aB((aA >= (ao + e))))
12171308 then throw("too often")
1218- else if (aA((eE >= (az + e))))
1309+ else if (aB((eM >= (aA + e))))
12191310 then throw("insufficient time")
12201311 else {
1221- let eF = aH()
1222- if (aA(if ((eD > 0))
1223- then (b > eD)
1312+ let eN = aK()
1313+ if (aB(if ((eL > 0))
1314+ then (b > eL)
12241315 else false))
12251316 then throw("out of base range")
1226- else if (aA(if (if ((eD >= eF))
1227- then ((eF * c) >= eD)
1317+ else if (aB(if (if ((eL >= eN))
1318+ then ((eN * c) >= eL)
12281319 else false)
12291320 then true
1230- else if ((eF > eD))
1231- then ((eD * c) >= eF)
1321+ else if ((eN > eL))
1322+ then ((eL * c) >= eN)
12321323 else false))
12331324 then throw("out of range")
1234- else [IntegerEntry("initial_A", eF), IntegerEntry("future_A", eD), IntegerEntry("initial_A_time", az), IntegerEntry("future_A_time", eE)]
1325+ else [IntegerEntry("initial_A", eN), IntegerEntry("future_A", eL), IntegerEntry("initial_A_time", aA), IntegerEntry("future_A_time", eM)]
12351326 }))
12361327
12371328
12381329
1239-@Callable(dc)
1240-func stopRampA () = valueOrElse(au(), valueOrElse(av(dc), {
1241- let eG = aH()
1242-[IntegerEntry("initial_A", eG), IntegerEntry("future_A", eG), IntegerEntry("initial_A_time", az), IntegerEntry("future_A_time", az)]
1330+@Callable(df)
1331+func stopRampA () = valueOrElse(av(), valueOrElse(aw(df), {
1332+ let eO = aK()
1333+[IntegerEntry("initial_A", eO), IntegerEntry("future_A", eO), IntegerEntry("initial_A_time", aA), IntegerEntry("future_A_time", aA)]
12431334 }))
12441335
12451336
12461337
1247-@Callable(dc)
1248-func shutdown () = valueOrElse(av(dc), if (!(af))
1338+@Callable(df)
1339+func shutdown () = valueOrElse(aw(df), if (!(ag))
12491340 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, k), "the cause wasn't specified")))
1250- else ar("Paused by admin"))
1341+ else as("Paused by admin"))
12511342
12521343
12531344
1254-@Callable(dc)
1255-func activate () = valueOrElse(av(dc), if (af)
1256- then at()
1345+@Callable(df)
1346+func activate () = valueOrElse(aw(df), if (ag)
1347+ then au()
12571348 else [BooleanEntry(j, true), DeleteEntry(k)])
12581349
12591350
12601351
1261-@Callable(dc)
1262-func keepLimitForFirstHarvest (eH) = valueOrElse(au(), valueOrElse(av(dc), [IntegerEntry(v, eH)]))
1352+@Callable(df)
1353+func keepLimitForFirstHarvest (eP) = valueOrElse(av(), valueOrElse(aw(df), [IntegerEntry(v, eP)]))
12631354
12641355
1265-@Verifier(eI)
1266-func eJ () = {
1267- let eK = {
1268- let eL = if (sigVerify(eI.bodyBytes, eI.proofs[0], P))
1356+@Verifier(eQ)
1357+func eR () = {
1358+ let eS = {
1359+ let eT = if (sigVerify(eQ.bodyBytes, eQ.proofs[0], Q))
12691360 then 1
12701361 else 0
1271- let eM = if (sigVerify(eI.bodyBytes, eI.proofs[1], Q))
1362+ let eU = if (sigVerify(eQ.bodyBytes, eQ.proofs[1], R))
12721363 then 1
12731364 else 0
1274- let eN = if (sigVerify(eI.bodyBytes, eI.proofs[2], R))
1365+ let eV = if (sigVerify(eQ.bodyBytes, eQ.proofs[2], S))
12751366 then 1
12761367 else 0
1277- (((eL + eM) + eN) >= 2)
1368+ (((eT + eU) + eV) >= 2)
12781369 }
1279- let M = eI
1280- if ($isInstanceOf(M, "InvokeScriptTransaction"))
1370+ let N = eQ
1371+ if ($isInstanceOf(N, "InvokeScriptTransaction"))
12811372 then {
1282- let dH = M
1283- let eO = if ((dH.dApp == this))
1284- then (dH.function == "takeIntoAccountExtraFunds")
1373+ let dL = N
1374+ let eW = if ((dL.dApp == this))
1375+ then (dL.function == "takeIntoAccountExtraFunds")
12851376 else false
1286- let eP = if (if (if (sigVerify(eI.bodyBytes, eI.proofs[0], P))
1377+ let eX = if (if (if (sigVerify(eQ.bodyBytes, eQ.proofs[0], Q))
12871378 then true
1288- else sigVerify(eI.bodyBytes, eI.proofs[0], Q))
1379+ else sigVerify(eQ.bodyBytes, eQ.proofs[0], R))
12891380 then true
1290- else sigVerify(eI.bodyBytes, eI.proofs[0], R))
1381+ else sigVerify(eQ.bodyBytes, eQ.proofs[0], S))
12911382 then true
1292- else sigVerify(eI.bodyBytes, eI.proofs[0], S)
1293- if (if (eO)
1294- then eP
1383+ else sigVerify(eQ.bodyBytes, eQ.proofs[0], T)
1384+ if (if (eW)
1385+ then eX
12951386 else false)
12961387 then true
1297- else eK
1388+ else eS
12981389 }
1299- else eK
1390+ else eS
13001391 }
13011392

github/deemru/w8io/873ac7e 
629.45 ms