tx · 2kXCJQVH7Ba8hprJRjYidFkgvoyu8NjkQS5sNLbCJhwK

3MsVsEgTUxTm6ETYkHGaqMhMhiY2Nb3yDN5:  -0.01800000 Waves

2023.09.20 11:25 [2763454] smart account 3MsVsEgTUxTm6ETYkHGaqMhMhiY2Nb3yDN5 > SELF 0.00000000 Waves

{ "type": 13, "id": "2kXCJQVH7Ba8hprJRjYidFkgvoyu8NjkQS5sNLbCJhwK", "fee": 1800000, "feeAssetId": null, "timestamp": 1695198347129, "version": 2, "chainId": 84, "sender": "3MsVsEgTUxTm6ETYkHGaqMhMhiY2Nb3yDN5", "senderPublicKey": "2LmNyaN5YAXdg9C5vsXcTLU66hsW2KUNPsN7KcHBYhUo", "proofs": [ "4S9jrRdsAszjBrhgzMZFSnMDHx2ebkJhwQKARqi24g4Jy7mY6Td5Kw8Fx3o8bHPR3ZoowhKMztoLCieBpcMQ4zwd" ], "script": "base64:BgIbCAISAwoBCBIDCgEIEgMKAQgSAwoBCBIDCgEIBAAOZEFwcFNpbmNlU3RhcnQAwPf3jKoxAApYVE5Bc3NldElEASAIZYS3D/CKahrz4mjoLgiQJMPTJ1gDzSz2Ll4L39oVpAARQ29sbGVjdEZlZUFkZHJlc3MJAKcIAQEgUoPZoIvXkJI7M+XgQERyG3Ox4PxeH5gdLMWeskjH4iABCWNvdW50ZGF5cwAEB1RTX0RpZmYJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUOZEFwcFNpbmNlU3RhcnQECWRheW51bWJlcgkAawMAAQUHVFNfRGlmZgCAuJkpBQlkYXludW1iZXIFAWkBDFJlZ2lzdGVyUGFpcgEMRW50ZXJBc3NldElEBARwbXQxCQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEBHBtdDIJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAQQKY3VycmVudEtleQkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBAVXQVZFUwkBASEBCQEJaXNEZWZpbmVkAQgFBHBtdDIHYXNzZXRJZAQJZmV0Y2hwYWlyCQCdCAIFBHRoaXMJAKwCAgIIUGFpcl9VVl8FDEVudGVyQXNzZXRJRAQNYXNzZXRpbmZvcG10MgkA2QQBBQxFbnRlckFzc2V0SUQECkN1cnJlbnRkYXkJAQljb3VudGRheXMABARpbmZvCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQkA2QQBBQxFbnRlckFzc2V0SUQJAKwCAgkArAICAgZBc3NldCAFDEVudGVyQXNzZXRJRAIOIGRvZXNuJ3QgZXhpc3QEBG5hbWUIBQRpbmZvBG5hbWUECGRlY2ltYWxzCAUEaW5mbwhkZWNpbWFscwQKTFBkZWNpbWFscwkAawMJAGQCBQhkZWNpbWFscwAGAAEAAgQKRmlyc3RMUFF0eQkAaAIAAQkAbAYACgAABQpMUGRlY2ltYWxzAAAAAAUHQ0VJTElORwQQbXVsdGlwbHlfYW1vdW50cwkAawMIBQRwbXQxBmFtb3VudAgFBHBtdDIGYW1vdW50BQpGaXJzdExQUXR5BAdnZXRTcXJ0CQEEc3FydAQFEG11bHRpcGx5X2Ftb3VudHMFCkxQZGVjaW1hbHMFCkxQZGVjaW1hbHMFB0NFSUxJTkcEB0xQaXNzdWUJAMIIBQkArAICCQCsAgICA0xQLQkArwICBQRuYW1lAAgCBC1YVE4JAKwCAgkArAICCQCsAgIJAKwCAgIDTFAtBQRuYW1lAgQtWFROAi4gaXMgYSBMaXF1aWRpdHkgUHJvdmlkZXIgVG9rZW4gSXNzdWVkIEFnYWluc3QgBQxFbnRlckFzc2V0SUQFB2dldFNxcnQFCkxQZGVjaW1hbHMGBARMUGlkCQC4CAEFB0xQaXNzdWUDCQAAAgUJZmV0Y2hwYWlyBQxFbnRlckFzc2V0SUQJAAIBAhtQYWlyIEFscmVhZHkgRXhpc3QgaW4gTGlzdC4DCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAIJAAIBAnJUd28gYXR0YWNoZWQgYXNzZXRzIGV4cGVjdGVkIGFzIHBheW1lbnQuIEtpbmRseSBBdHRhY2ggcGF5bWVudDEgPSBXQVZFUyBUb2tlbiAmIHBheW1lbnQyID0gVG9rZW4geW91IHdhbnQgdG8gTGlzdC4DCQECIT0CCAUEcG10MQdhc3NldElkBQpYVE5Bc3NldElECQACAQI/SW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkIGFzIHBheW1lbnRbMV0sIHBsZWFzZSBhdHRhY2ggWFROIG9ubHkuAwkAZgIAoI0GCAUEcG10MQZhbW91bnQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEllvdSBhdHRhY2hlZCBvbmx5IAkApAMBCQBrAwgFBHBtdDEGYW1vdW50AAEAgMLXLwIBLgkApAMBCQBrAwgFBHBtdDEGYW1vdW50AAEAgK3iBAI5IFdBVkVTIGZvciBMaXN0aW5nIGluIHBheW1lbnRbMV0sIHBsZWFzZSBhdHRhY2ggMTAgV0FWRVMuAwkBAiE9AggFBHBtdDIHYXNzZXRJZAUNYXNzZXRpbmZvcG10MgkAAgECPElucHV0IFN0cmluZyAmIEF0dGFjaGVkIEFzc2V0SUQgaW4gcGF5bWVudDIgaXMgbm90IG1hdGNoaW5nLgMJAAACBQVXQVZFUwYJAAIBAl1Zb3UgQXR0YWNoZWQgV0FWRVMgQXNzZXQgSUQgZm9yIExpc3RpbmcsIHBsZWFzZSBhdHRhY2ggVG9rZW5zIFlvdSB3YW50IHRvIGxpc3QgaW4gcGF5bWVudFsyXS4JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICAghQYWlyX1VWXwUMRW50ZXJBc3NldElEBQxFbnRlckFzc2V0SUQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIMTGlzdGluZ19GZWVfBQxFbnRlckFzc2V0SUQIBQRwbXQxBmFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFB2dldFNxcnQFClhUTkFzc2V0SUQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfBQxFbnRlckFzc2V0SUQCAV8JANgEAQUKWFROQXNzZXRJRAgFBHBtdDEGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICAgtCYWxhbmNlX29mXwkA2AQBBQpYVE5Bc3NldElEAgFfBQxFbnRlckFzc2V0SUQIBQRwbXQyBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhNUb3RhbF9vZl9QYWlyX1R4bnNfBQxFbnRlckFzc2V0SUQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgIZVG90YWxfU3dhcF9GZWVfQ29sbGVjdGVkXwUMRW50ZXJBc3NldElEAgFfCQDYBAEFClhUTkFzc2V0SUQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhlUb3RhbF9Td2FwX0ZlZV9Db2xsZWN0ZWRfBQxFbnRlckFzc2V0SUQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCkAwEFCkN1cnJlbnRkYXkCDF9EYXlfVm9sdW1lXwUMRW50ZXJBc3NldElEAgFfCQDYBAEFClhUTkFzc2V0SUQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCkAwEFCkN1cnJlbnRkYXkCDF9EYXlfVm9sdW1lXwkA2AQBBQpYVE5Bc3NldElEAgFfBQxFbnRlckFzc2V0SUQAAAkAzAgCBQdMUGlzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgIDTFBfBQxFbnRlckFzc2V0SUQJANgEAQUETFBpZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAglUb3RhbF9MUF8FDEVudGVyQXNzZXRJRAUHZ2V0U3FydAUDbmlsAWkBF1N3YXBBc3NldFRvWFROUGFpckVudHJ5AQxFbnRlckFzc2V0SUQEDWNhbGxlcmFkZHJlc3MJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAACQACAQI1V2hpdGVsaXN0ZWQgVG9rZW4gaXMgcmVxdWlyZWQgYXMgQXR0YWNoZWQgcGF5bWVudFsxXS4EGWNoZWNrcGFpcmlzYXZhaWxhYmxlb3Jub3QJAJ0IAgUEdGhpcwkArAICAghQYWlyX1VWXwUMRW50ZXJBc3NldElEBA9DaGVja1hUTkJhbGFuY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfBQxFbnRlckFzc2V0SUQCAV8JANgEAQUKWFROQXNzZXRJRAQRQ2hlY2tBc3NldEJhbGFuY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfCQDYBAEFClhUTkFzc2V0SUQCAV8FDEVudGVyQXNzZXRJRAQPbmV3YmFsYW5jZW9mWFROCQBrAwUPQ2hlY2tYVE5CYWxhbmNlBRFDaGVja0Fzc2V0QmFsYW5jZQkAZAIFEUNoZWNrQXNzZXRCYWxhbmNlCAUDcG10BmFtb3VudAQUcXVhbnRpdHlvZnByaWNlYXNzZXQJAGUCBQ9DaGVja1hUTkJhbGFuY2UFD25ld2JhbGFuY2VvZlhUTgQHU3dhcEZlZQADBApDdXJyZW50ZGF5CQEJY291bnRkYXlzAAQQU3dhcEZlZXRvcmVjZWl2ZQkAaQIJAGgCBRRxdWFudGl0eW9mcHJpY2Vhc3NldAUHU3dhcEZlZQDoBwQUdXNlcmJhbGFuY2V0b3JlY2VpdmUJAGUCCQBlAgUUcXVhbnRpdHlvZnByaWNlYXNzZXQFEFN3YXBGZWV0b3JlY2VpdmUFEFN3YXBGZWV0b3JlY2VpdmUEGFN1bXVwb2ZBc3NldFRvWFROU3dhcEZlZQQHJG1hdGNoMAkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICAhlUb3RhbF9Td2FwX0ZlZV9Db2xsZWN0ZWRfBQxFbnRlckFzc2V0SUQCAV8JANgEAQUKWFROQXNzZXRJRAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQbTmV3U3VtdXBvZkFzc2V0VG9YVE5Td2FwRmVlCQBkAgkAZAIFGFN1bXVwb2ZBc3NldFRvWFROU3dhcEZlZQUQU3dhcEZlZXRvcmVjZWl2ZQUQU3dhcEZlZXRvcmVjZWl2ZQQRU3VtdXBBc3NldEJhbGFuY2UEByRtYXRjaDAJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8JANgEAQUKWFROQXNzZXRJRAIBXwUMRW50ZXJBc3NldElEAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBZOZXdTdW11cG9mQXNzZXRCYWxhbmNlCQBkAgURQ2hlY2tBc3NldEJhbGFuY2UIBQNwbXQGYW1vdW50BA9TdW11cFhUTkJhbGFuY2UEByRtYXRjaDAJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8FDEVudGVyQXNzZXRJRAIBXwkA2AQBBQpYVE5Bc3NldElEAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBROZXdTdW11cG9mWFROQmFsYW5jZQkAZAIJAGUCBQ9DaGVja1hUTkJhbGFuY2UFFHF1YW50aXR5b2ZwcmljZWFzc2V0BRBTd2FwRmVldG9yZWNlaXZlBARUT1BUBAckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgICE1RvdGFsX29mX1BhaXJfVHhuc18FDEVudGVyQXNzZXRJRAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQGTmV3VFBUCQBkAgUEVE9QVAABAwkAAAIFDEVudGVyQXNzZXRJRAkA2AQBBQpYVE5Bc3NldElECQACAQKFAUlucHV0IGNhbiBOZXZlciBiZSBhIFhUTiBBc3NldElELiBFbnRlciBXaGl0ZWxpc3RlZCBBc3NldElEIGluIGlucHV0ICYgQXR0YWNoIFdoaXRlbGlzdGVkIEFzc2V0IGFzIGFuIGF0dGFjaG1lbnQgVG9rZW4gaW4gcGF5bWVudFsxXS4DCQECIT0CBRljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90BQxFbnRlckFzc2V0SUQJAAIBAitQYWlyIGlzIG5vdCBhdmFpbGFibGUgaW4gV2hpdGVsaXN0ZWQgQXNzZXQuAwkAAAIIBQNwbXQHYXNzZXRJZAUKWFROQXNzZXRJRAkAAgECUllvdSBjYW4ndCBBdHRhY2ggWFROIGFzIGFuIEF0dGFjaGVkIFBheW1lbnQuIE9ubHkgV2hpdGVsaXN0ZWQgVG9rZW5zIGFyZSBhY2NlcHRlZC4DCQECIT0CCAUDcG10B2Fzc2V0SWQJANkEAQUMRW50ZXJBc3NldElECQACAQkArAICAjBJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQsIHBsZWFzZSBhdHRhY2ggb3Igc2VuZCAFDEVudGVyQXNzZXRJRAMJAAACBQ9DaGVja1hUTkJhbGFuY2UAAAkAAgECZVN3YXAgUGFpciBOZWVkIHRvIEFkZCBMaXF1aWRpdHkgZmlyc3QgaW50byBQb29sLiBPbmx5IEFmdGVyIHRoYXQgUGFpciB3aWxsIGJlIGFjdGl2YXRlZCBmb3IgU3dhcHBpbmcuAwkAAAIFEUNoZWNrQXNzZXRCYWxhbmNlAAAJAAIBAmVTd2FwIFBhaXIgTmVlZCB0byBBZGQgTGlxdWlkaXR5IGZpcnN0IGludG8gUG9vbC4gT25seSBBZnRlciB0aGF0IFBhaXIgd2lsbCBiZSBhY3RpdmF0ZWQgZm9yIFN3YXBwaW5nLgMJAGYCAKCNBgUUcXVhbnRpdHlvZnByaWNlYXNzZXQJAAIBCQCsAgIJAKwCAgI0WW91ciBBdHRhY2hlZCBBc3NldCBBbW91bnQgaXMgdmVyeSBsb3cuIEF0dGFjaCBNb3JlIAUMRW50ZXJBc3NldElEAjogVG9rZW5zIHRvIENsYWltIHRoZSBtaW5pbXVtIEFtb3VudCBvZiAwLjEgZG9sbGFyIGF0bGVhc3QuAwkAZgIFFHF1YW50aXR5b2ZwcmljZWFzc2V0BQ9DaGVja1hUTkJhbGFuY2UJAAIBCQCsAgIJAKwCAgIdUG9vbCBPbmx5IGhhcyBhIExpcXVpZGl0eSBvZiAJAKQDAQkAaQIFD0NoZWNrWFROQmFsYW5jZQkAbAYACgAAAAYAAAAABQdDRUlMSU5HAh4gWFROLiBBZGQgTGlxdWlkaXR5IGludG8gUG9vbC4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgICGVRvdGFsX1N3YXBfRmVlX0NvbGxlY3RlZF8FDEVudGVyQXNzZXRJRAIBXwkA2AQBBQpYVE5Bc3NldElEBRtOZXdTdW11cG9mQXNzZXRUb1hUTlN3YXBGZWUJAMwIAgkBDEludGVnZXJFbnRyeQICC0N1cnJlbnRfRGF5BQpDdXJyZW50ZGF5CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICE1RvdGFsX29mX1BhaXJfVHhuc18FDEVudGVyQXNzZXRJRAUGTmV3VFBUCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICAgtCYWxhbmNlX29mXwkA2AQBBQpYVE5Bc3NldElEAgFfBQxFbnRlckFzc2V0SUQFFk5ld1N1bXVwb2ZBc3NldEJhbGFuY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfBQxFbnRlckFzc2V0SUQCAV8JANgEAQUKWFROQXNzZXRJRAUUTmV3U3VtdXBvZlhUTkJhbGFuY2UJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRR1c2VyYmFsYW5jZXRvcmVjZWl2ZQUKWFROQXNzZXRJRAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRFDb2xsZWN0RmVlQWRkcmVzcwUQU3dhcEZlZXRvcmVjZWl2ZQUKWFROQXNzZXRJRAUDbmlsAWkBF1N3YXBYVE5Ub0Fzc2V0UGFpckVudHJ5AQxFbnRlckFzc2V0SUQEDWNhbGxlcmFkZHJlc3MJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAACQACAQkArAICCQCsAgICBU9ubHkgCQDYBAEFClhUTkFzc2V0SUQCMSBYVE4gVG9rZW4gaXMgcmVxdWlyZWQgYXMgYW4gQXR0YWNoZWQgcGF5bWVudFsxXS4ED0NoZWNrWFROQmFsYW5jZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8FDEVudGVyQXNzZXRJRAIBXwkA2AQBBQpYVE5Bc3NldElEBBFDaGVja0Fzc2V0QmFsYW5jZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8JANgEAQUKWFROQXNzZXRJRAIBXwUMRW50ZXJBc3NldElEBBFuZXdiYWxhbmNlb2ZBc3NldAkAawMFD0NoZWNrWFROQmFsYW5jZQURQ2hlY2tBc3NldEJhbGFuY2UJAGQCBQ9DaGVja1hUTkJhbGFuY2UIBQNwbXQGYW1vdW50BBRxdWFudGl0eW9mcHJpY2Vhc3NldAkAZQIFEUNoZWNrQXNzZXRCYWxhbmNlBRFuZXdiYWxhbmNlb2ZBc3NldAQZY2hlY2twYWlyaXNhdmFpbGFibGVvcm5vdAkAnQgCBQR0aGlzCQCsAgICCFBhaXJfVVZfBQxFbnRlckFzc2V0SUQEB1N3YXBGZWUAAwQKQ3VycmVudGRheQkBCWNvdW50ZGF5cwAEEFN3YXBGZWV0b3JlY2VpdmUJAGkCCQBoAgUUcXVhbnRpdHlvZnByaWNlYXNzZXQFB1N3YXBGZWUA6AcEFHVzZXJiYWxhbmNldG9yZWNlaXZlCQBlAgkAZQIFFHF1YW50aXR5b2ZwcmljZWFzc2V0BRBTd2FwRmVldG9yZWNlaXZlBRBTd2FwRmVldG9yZWNlaXZlBBhTdW11cG9mWFROVG9Bc3NldFN3YXBGZWUEByRtYXRjaDAJAJoIAgUEdGhpcwkArAICAhlUb3RhbF9Td2FwX0ZlZV9Db2xsZWN0ZWRfBQxFbnRlckFzc2V0SUQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEG05ld1N1bXVwb2ZYVE5Ub0Fzc2V0U3dhcEZlZQkAZAIJAGQCBRhTdW11cG9mWFROVG9Bc3NldFN3YXBGZWUFEFN3YXBGZWV0b3JlY2VpdmUFEFN3YXBGZWV0b3JlY2VpdmUEEVN1bXVwQXNzZXRCYWxhbmNlBAckbWF0Y2gwCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfCQDYBAEFClhUTkFzc2V0SUQCAV8FDEVudGVyQXNzZXRJRAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQWTmV3U3VtdXBvZkFzc2V0QmFsYW5jZQkAZAIJAGUCBRFDaGVja0Fzc2V0QmFsYW5jZQUUcXVhbnRpdHlvZnByaWNlYXNzZXQFEFN3YXBGZWV0b3JlY2VpdmUED1N1bXVwWFROQmFsYW5jZQQHJG1hdGNoMAkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICAgtCYWxhbmNlX29mXwUMRW50ZXJBc3NldElEAgFfCQDYBAEFClhUTkFzc2V0SUQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEFE5ld1N1bXVwb2ZYVE5CYWxhbmNlCQBkAgUPQ2hlY2tYVE5CYWxhbmNlCAUDcG10BmFtb3VudAQEVE9QVAQHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICAhNUb3RhbF9vZl9QYWlyX1R4bnNfBQxFbnRlckFzc2V0SUQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEBk5ld1RQVAkAZAIFBFRPUFQAAQMJAQIhPQIFGWNoZWNrcGFpcmlzYXZhaWxhYmxlb3Jub3QFDEVudGVyQXNzZXRJRAkAAgECK1BhaXIgaXMgbm90IGF2YWlsYWJsZSBpbiBXaGl0ZWxpc3RlZCBBc3NldC4DCQAAAgUMRW50ZXJBc3NldElECQDYBAEFClhUTkFzc2V0SUQJAAIBAndJbnB1dCBjYW4gTmV2ZXIgYmUgYSBYVE4gQXNzZXRJRC4gRW50ZXIgV2hpdGVsaXN0ZWQgQXNzZXRJRCBpbiBpbnB1dCAmIEF0dGFjaCBYVE4gYXMgYW4gYXR0YWNobWVudCBUb2tlbiBpbiBwYXltZW50WzFdLgMJAQIhPQIIBQNwbXQHYXNzZXRJZAUKWFROQXNzZXRJRAkAAgECe1lvdSBjYW4gQXR0YWNoIFhUTiBhcyBhbiBBdHRhY2hlZCBQYXltZW50WzFdIHRvIFN3YXAgWFROIFRvIFJlcXVpcmVkIFRva2VuLiBBbnkgb3RoZXIgYXNzZXQgZWxzZSB0aGFuIFhUTiB3aWxsIGJlIHJlamVjdGVkLgMJAGYCAKCNBggFA3BtdAZhbW91bnQJAAIBAllZb3VyIEF0dGFjaGVkIFhUTiBBbW91bnQgaXMgdmVyeSBsb3cuIEF0dGFjaCBBdGxlYXN0IDAuMSBYVE4gdG8gQ2xhaW0gdGhlIG1pbmltdW0gVG9rZW5zLgMJAAACBQ9DaGVja1hUTkJhbGFuY2UAAAkAAgECZVN3YXAgUGFpciBOZWVkIHRvIEFkZCBMaXF1aWRpdHkgZmlyc3QgaW50byBQb29sLiBPbmx5IEFmdGVyIHRoYXQgUGFpciB3aWxsIGJlIGFjdGl2YXRlZCBmb3IgU3dhcHBpbmcuAwkAAAIFEUNoZWNrQXNzZXRCYWxhbmNlAAAJAAIBAmVTd2FwIFBhaXIgTmVlZCB0byBBZGQgTGlxdWlkaXR5IGZpcnN0IGludG8gUG9vbC4gT25seSBBZnRlciB0aGF0IFBhaXIgd2lsbCBiZSBhY3RpdmF0ZWQgZm9yIFN3YXBwaW5nLgMJAGYCBRRxdWFudGl0eW9mcHJpY2Vhc3NldAURQ2hlY2tBc3NldEJhbGFuY2UJAAIBCQCsAgIJAKwCAgIdUG9vbCBPbmx5IGhhcyBhIExpcXVpZGl0eSBvZiAJAKQDAQURQ2hlY2tBc3NldEJhbGFuY2UCISBUb2tlbnMuIEFkZCBMaXF1aWRpdHkgaW50byBQb29sLgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhlUb3RhbF9Td2FwX0ZlZV9Db2xsZWN0ZWRfBQxFbnRlckFzc2V0SUQFG05ld1N1bXVwb2ZYVE5Ub0Fzc2V0U3dhcEZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgILQ3VycmVudF9EYXkFCkN1cnJlbnRkYXkJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgITVG90YWxfb2ZfUGFpcl9UeG5zXwUMRW50ZXJBc3NldElEBQZOZXdUUFQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfCQDYBAEFClhUTkFzc2V0SUQCAV8FDEVudGVyQXNzZXRJRAUWTmV3U3VtdXBvZkFzc2V0QmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8FDEVudGVyQXNzZXRJRAIBXwkA2AQBBQpYVE5Bc3NldElEBRROZXdTdW11cG9mWFROQmFsYW5jZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFFHVzZXJiYWxhbmNldG9yZWNlaXZlCQDZBAEFDEVudGVyQXNzZXRJRAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRFDb2xsZWN0RmVlQWRkcmVzcwUQU3dhcEZlZXRvcmVjZWl2ZQkA2QQBBQxFbnRlckFzc2V0SUQFA25pbAFpAQxBZGRMaXF1aWRpdHkBDEVudGVyQXNzZXRJRAQNY2FsbGVyYWRkcmVzcwkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBARwbXQxCQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEBHBtdDIJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAQQZY2hlY2twYWlyaXNhdmFpbGFibGVvcm5vdAkAnQgCBQR0aGlzCQCsAgICCFBhaXJfVVZfBQxFbnRlckFzc2V0SUQEDlJlaXNzdWVhc3NldElkCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgICA0xQXwUMRW50ZXJBc3NldElEAixMUCBUb2tlbiBpcyBNaXNzaW5nIG9yIE1heSBiZSBub3QgR2VuZXJhdGVkLgQPQ2hlY2tYVE5CYWxhbmNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICAgtCYWxhbmNlX29mXwUMRW50ZXJBc3NldElEAgFfCQDYBAEFClhUTkFzc2V0SUQEEUNoZWNrQXNzZXRCYWxhbmNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICAgtCYWxhbmNlX29mXwkA2AQBBQpYVE5Bc3NldElEAgFfBQxFbnRlckFzc2V0SUQEDGRlY2ltYWxzaW5mbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUMRW50ZXJBc3NldElECQCsAgIJAKwCAgIGQXNzZXQgBQxFbnRlckFzc2V0SUQCDiBkb2Vzbid0IGV4aXN0BAhkZWNpbWFscwgFDGRlY2ltYWxzaW5mbwhkZWNpbWFscwQEYXJnMQUPQ2hlY2tYVE5CYWxhbmNlBARhcmcyBRFDaGVja0Fzc2V0QmFsYW5jZQQFYXJnczMJAGwGCQBoAgkAaQIJAGgCBQRhcmcxAMCEPQUEYXJnMgkAbAYACgAABQhkZWNpbWFscwAAAAAFB0NFSUxJTkcAAAABAAAAAAUHQ0VJTElORwQSYm90aGFzc2V0c2RlY2ltYWxzCQBkAgAGBQhkZWNpbWFscwQNc2hhcmVkZWNpbWFscwkAaQIFEmJvdGhhc3NldHNkZWNpbWFscwACBBZxdWFudGl0eW9mRW50ZXJBc3NldElECQBrAwUFYXJnczMIBQRwbXQxBmFtb3VudAkAbAYACgAABRJib3RoYXNzZXRzZGVjaW1hbHMAAAAABQdDRUlMSU5HBBJxdWFudGl0eW9mTFBUb2tlbjEJAGwGCQBoAgkAawMIBQRwbXQxBmFtb3VudAABCQBsBgAKAAAFCGRlY2ltYWxzAAAAAAUHQ0VJTElORwkAawMIBQRwbXQyBmFtb3VudAABCQBsBgAKAAAABgAAAAAFB0NFSUxJTkcAAAAFAAEFDXNoYXJlZGVjaW1hbHMFBERPV04EEFhUTkhvbGRpbmdJblBhaXIEByRtYXRjaDAJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8FDEVudGVyQXNzZXRJRAIBXwkA2AQBBQpYVE5Bc3NldElEAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBNOZXdYVE5Ib2xkaW5nSW5QYWlyCQBkAgUQWFROSG9sZGluZ0luUGFpcggFBHBtdDIGYW1vdW50BBJBc3NldEhvbGRpbmdJblBhaXIEByRtYXRjaDAJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8JANgEAQUKWFROQXNzZXRJRAIBXwUMRW50ZXJBc3NldElEAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBVOZXdBc3NldEhvbGRpbmdJblBhaXIJAGQCBRJBc3NldEhvbGRpbmdJblBhaXIIBQRwbXQxBmFtb3VudAQNTFBUb2tlbklzc3VlZAQHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICAglUb3RhbF9MUF8FDEVudGVyQXNzZXRJRAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQQTmV3TFBUb2tlbklzc3VlZAkAZAIFDUxQVG9rZW5Jc3N1ZWQFEnF1YW50aXR5b2ZMUFRva2VuMQMJAQIhPQIFGWNoZWNrcGFpcmlzYXZhaWxhYmxlb3Jub3QFDEVudGVyQXNzZXRJRAkAAgECK1BhaXIgaXMgbm90IGF2YWlsYWJsZSBpbiBXaGl0ZWxpc3RlZCBBc3NldC4DCQAAAgUMRW50ZXJBc3NldElECQDYBAEFClhUTkFzc2V0SUQJAAIBApABSW5wdXQgY2FuIE5ldmVyIGJlIGEgWFROIEFzc2V0SUQuIEVudGVyIFdoaXRlbGlzdGVkIEFzc2V0SUQgaW4gaW5wdXQgYXMgd2VsbCBhcyBpbiBwYXltZW50WzFdICYgQXR0YWNoIFhUTiBhcyBhbiBhdHRhY2htZW50IFRva2VuIGluIHBheW1lbnRbMl0uAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwACCQACAQKdAVR3byBhdHRhY2hlZCBhc3NldHMgZXhwZWN0ZWQgYXMgcGF5bWVudCBpbiA1MCUtNTAlLiBLaW5kbHkgQXR0YWNoIHBheW1lbnQxID0gVG9rZW4geW91IHdhbnQgdG8gYWRkIGZvciBMaXF1aWRpdHkgJiBwYXltZW50MiA9IEVxdWl2YWxlbnQgQW1vdW50IG9mIFhUTiBUb2tlbi4DCQAAAggFBHBtdDEHYXNzZXRJZAUKWFROQXNzZXRJRAkAAgECdllvdSBBdHRhY2hlZCBYVE4gYXNzZXQgaW4gcGF5bWVudFsxXSwgcGxlYXNlIGF0dGFjaCBvbmx5IHdoaXRlbGlzdGVkIFRva2VuIGluIHBheW1lbnRbMV0gYWxvbmcgd2l0aCBYVE4gaW4gcGF5bWVudFsyXS4DCQECIT0CCAUEcG10MQdhc3NldElkCQDZBAEFDEVudGVyQXNzZXRJRAkAAgECa0luY29ycmVjdCBhc3NldCBhdHRhY2hlZCBmb3IgTGlxdWlkaXR5IGluIHBheW1lbnRbMV0sIHBsZWFzZSBhdHRhY2ggU3RyaW5nIEFzc2V0IG9yIFdoaXRlbGlzdGVkIFRva2VuIG9ubHkuAwkBAiE9AggFBHBtdDEHYXNzZXRJZAkA2QQBBQxFbnRlckFzc2V0SUQJAAIBAmtJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQgZm9yIExpcXVpZGl0eSBpbiBwYXltZW50WzFdLCBwbGVhc2UgYXR0YWNoIFN0cmluZyBBc3NldCBvciBXaGl0ZWxpc3RlZCBUb2tlbiBvbmx5LgMJAQIhPQIIBQRwbXQyB2Fzc2V0SWQFClhUTkFzc2V0SUQJAAIBAmlXcm9uZyBBc3NldCBBdHRhY2hlZCBpbiBwYXltZW50c1syXSwgUGxlYXNlIGF0dGFjaCBwYXltZW50WzFdID0gTGlxdWlkaXR5IFRva2VuICYgcGF5bWVudFsyXSA9IFhUTiBUb2tlbi4DCQBmAgDAlrECCAUEcG10MgZhbW91bnQJAAIBAlNwbGVhc2UgYXR0YWNoIGF0bGVhc3QgNSBYVE4gaW4gcGF5bWVudFsyXSAmIEVxdWl2YWxlbnQgd29ydGggb2YgVG9rZW4gaW4gcGF5bWVudFsxXQMJAQIhPQIIBQRwbXQyBmFtb3VudAUWcXVhbnRpdHlvZkVudGVyQXNzZXRJRAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICXkF0dGFjaGVkIHBheW1lbnRbMl0gcXR5IGlzIG5vdCBtYXRjaGluZyBhcyBwZXIgYXR0YWNoZWQgcGF5bWVudFsxXS5wYXltZW50WzJdIG11c3QgYmUgYXMgaW50IFsJAKQDAQUWcXVhbnRpdHlvZkVudGVyQXNzZXRJRAIFXSBvciAJAKQDAQkAawMFFnF1YW50aXR5b2ZFbnRlckFzc2V0SUQAAQDAhD0CAS4JALICAgkApAMBBRZxdWFudGl0eW9mRW50ZXJBc3NldElEAAYCBSBYVE4uAwkAZgIAAQUScXVhbnRpdHlvZkxQVG9rZW4xCQACAQkArAICCQCsAgICIExQIFRva2VuIE91dGNvbWUgaXMgZ29pbmcgYmVsb3cgCQCkAwEFDXNoYXJlZGVjaW1hbHMCOiBEZWNpbWFscy4gUGxlYXNlIEF0dGFjaCBtaW4uIDEgTFAgdG9rZW4gb3IgNSBYVE4gQXRsZWFzdC4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfBQxFbnRlckFzc2V0SUQCAV8JANgEAQUKWFROQXNzZXRJRAUTTmV3WFROSG9sZGluZ0luUGFpcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8JANgEAQUKWFROQXNzZXRJRAIBXwUMRW50ZXJBc3NldElEBRVOZXdBc3NldEhvbGRpbmdJblBhaXIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIJVG90YWxfTFBfBQxFbnRlckFzc2V0SUQFEE5ld0xQVG9rZW5Jc3N1ZWQJAMwIAgkBB1JlaXNzdWUDBQ5SZWlzc3VlYXNzZXRJZAUScXVhbnRpdHlvZkxQVG9rZW4xBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFEnF1YW50aXR5b2ZMUFRva2VuMQUOUmVpc3N1ZWFzc2V0SWQFA25pbAFpAQ9SZW1vdmVMaXF1aWRpdHkBDEVudGVyQXNzZXRJRAQNY2FsbGVyYWRkcmVzcwkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBANwbXQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAAJAAIBAjpObyBwYXltZW50IGF0dGFjaGVkLCBQbGVhc2UgQXR0YWNoIExQIFRva2VuIGFzIHBheW1lbnRbMV0uBBljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90CQCdCAIFBHRoaXMJAKwCAgIIUGFpcl9VVl8FDEVudGVyQXNzZXRJRAQSUmVpc3N1ZWFibGVhc3NldElkCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgICA0xQXwUMRW50ZXJBc3NldElEAiVMUCBUb2tlbiBpcyBNaXNzaW5nIG9yIG5vdCBHZW5lcmF0ZWQuBAxkZWNpbWFsc2luZm8JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFDEVudGVyQXNzZXRJRAkArAICCQCsAgICBkFzc2V0IAUMRW50ZXJBc3NldElEAg4gZG9lc24ndCBleGlzdAQIZGVjaW1hbHMIBQxkZWNpbWFsc2luZm8IZGVjaW1hbHMEEmJvdGhhc3NldHNkZWNpbWFscwkAZAIABgUIZGVjaW1hbHMEDXNoYXJlZGVjaW1hbHMJAGkCBRJib3RoYXNzZXRzZGVjaW1hbHMAAgQSQ2hlY2tUb3RhbExQQW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgICCVRvdGFsX0xQXwUMRW50ZXJBc3NldElEBBBVc2VyTFBQZXJjZW50YWdlCQBsBgkAawMIBQNwbXQGYW1vdW50CQBsBgAKAAAACAAAAAAFB0NFSUxJTkcFEkNoZWNrVG90YWxMUEFtb3VudAAGAAEAAAAGBQdDRUlMSU5HBA9DaGVja1hUTkJhbGFuY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfBQxFbnRlckFzc2V0SUQCAV8JANgEAQUKWFROQXNzZXRJRAQRQ2hlY2tBc3NldEJhbGFuY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfCQDYBAEFClhUTkFzc2V0SUQCAV8FDEVudGVyQXNzZXRJRAQOVXNlckxQV29ydGhYVE4JAGsDBQ9DaGVja1hUTkJhbGFuY2UFEFVzZXJMUFBlcmNlbnRhZ2UJAGwGAAoAAAAIAAAAAAUHQ0VJTElORwQQVXNlckxQV29ydGhBc3NldAkAawMFEUNoZWNrQXNzZXRCYWxhbmNlBRBVc2VyTFBQZXJjZW50YWdlCQBsBgAKAAAACAAAAAAFB0NFSUxJTkcEEFhUTkhvbGRpbmdJblBhaXIEByRtYXRjaDAJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8FDEVudGVyQXNzZXRJRAIBXwkA2AQBBQpYVE5Bc3NldElEAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBNOZXdYVE5Ib2xkaW5nSW5QYWlyCQBlAgUQWFROSG9sZGluZ0luUGFpcgUOVXNlckxQV29ydGhYVE4EEkFzc2V0SG9sZGluZ0luUGFpcgQHJG1hdGNoMAkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICAgtCYWxhbmNlX29mXwkA2AQBBQpYVE5Bc3NldElEAgFfBQxFbnRlckFzc2V0SUQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEFU5ld0Fzc2V0SG9sZGluZ0luUGFpcgkAZQIFEkFzc2V0SG9sZGluZ0luUGFpcgUQVXNlckxQV29ydGhBc3NldAQNTFBUb2tlbklzc3VlZAQHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICAglUb3RhbF9MUF8FDEVudGVyQXNzZXRJRAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQQTmV3TFBUb2tlbklzc3VlZAkAZQIFDUxQVG9rZW5Jc3N1ZWQIBQNwbXQGYW1vdW50AwkBAiE9AgUZY2hlY2twYWlyaXNhdmFpbGFibGVvcm5vdAUMRW50ZXJBc3NldElECQACAQIjUGFpciBpcyBub3QgYXZhaWxhYmxlIGluIFdoaXRlbGlzdC4DCQAAAgkA2QQBBQxFbnRlckFzc2V0SUQFClhUTkFzc2V0SUQJAAIBAmpEb24ndCBjaG9vc2UgWFROIEFzc2V0SUQgYXMgSW5wdXQsIE9ubHkgV2hpdGVsaXN0ZWQgQXNzZXQgYXMgSW5wdXQgU3RyaW5nICYgQXR0YWNoIExQIFRva2VucyBhcyBwYXltZW50WzFdAwkBAiE9AggFA3BtdAdhc3NldElkBRJSZWlzc3VlYWJsZWFzc2V0SWQJAAIBAkdXcm9uZyBBc3NldCBpcyBhdHRhY2hlZCBpbiBwYXltZW50WzFdIG9yIExQIFRva2VuIE5vdCBGb3VuZCBvciBNaXNzaW5nLgMJAGYCAAEFEFVzZXJMUFBlcmNlbnRhZ2UJAAIBAi5Zb3VyIExQIFRva2VuIGFtb3VudCAlIGlzIHZlcnkgbG93IHRvIGNvbnZlcnQuAwkAZgIAAQUOVXNlckxQV29ydGhYVE4JAAIBAlFZb3VyIExQIFRva2VuIGNvbnZlcnNpb24gYW1vdW50IGlzIHZlcnkgbG93IHRvIGNvbnZlcnQgb3IgbGVzcyB0aGFuIDAuMDAwMDAxIFhUTi4DCQBmAgABBRBVc2VyTFBXb3J0aEFzc2V0CQACAQJcWW91ciBMUCBUb2tlbiBjb252ZXJzaW9uIGFtb3VudCBpcyB2ZXJ5IGxvdyB0byBjb252ZXJ0IG9yIGxlc3MgdGhhbiBmcmFjdGlvbiB2YWx1ZSBvZiBUb2tlbi4JAMwIAgkBDEludGVnZXJFbnRyeQICFldpdGhkcmF3X0xQX1BlcmNlbnRhZ2UFEFVzZXJMUFBlcmNlbnRhZ2UJAMwIAgkBBEJ1cm4CBRJSZWlzc3VlYWJsZWFzc2V0SWQIBQNwbXQGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICCVRvdGFsX0xQXwUMRW50ZXJBc3NldElEBRBOZXdMUFRva2VuSXNzdWVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICAgtCYWxhbmNlX29mXwUMRW50ZXJBc3NldElEAgFfCQDYBAEFClhUTkFzc2V0SUQFE05ld1hUTkhvbGRpbmdJblBhaXIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfCQDYBAEFClhUTkFzc2V0SUQCAV8FDEVudGVyQXNzZXRJRAUVTmV3QXNzZXRIb2xkaW5nSW5QYWlyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUOVXNlckxQV29ydGhYVE4FClhUTkFzc2V0SUQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRBVc2VyTFBXb3J0aEFzc2V0CQDZBAEFDEVudGVyQXNzZXRJRAUDbmlsAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleYfGQmE=", "height": 2763454, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FNb9ZMFuQRJN2a2rE9DWVyyrPiiepT5BhXoX9x81o7fs Next: HRQE2tJ8bv3NBjnUEABuVAmG2GsqSUigivLj8HTLJa92 Diff:
OldNewDifferences
2222 let l = !(isDefined(j.assetId))
2323 let m = getString(this, ("Pair_UV_" + h))
2424 let n = fromBase58String(h)
25- let o = valueOrErrorMessage(assetInfo(fromBase58String(h)), (("Asset " + h) + " doesn't exist"))
26- let p = o.name
27- let q = o.decimals
28- let r = fraction((q + 6), 1, 2)
29- let s = (1 * pow(10, 0, r, 0, 0, CEILING))
30- let t = fraction(i.amount, j.amount, s)
31- let u = sqrt(t, r, r, CEILING)
32- let v = Issue((("LP-" + take(p, 8)) + "-XTN"), (((("LP-" + p) + "-XTN") + " is a Liquidity Provider Token Issued Against ") + h), u, r, true)
33- let w = calculateAssetId(v)
25+ let o = d()
26+ let p = valueOrErrorMessage(assetInfo(fromBase58String(h)), (("Asset " + h) + " doesn't exist"))
27+ let q = p.name
28+ let r = p.decimals
29+ let s = fraction((r + 6), 1, 2)
30+ let t = (1 * pow(10, 0, s, 0, 0, CEILING))
31+ let u = fraction(i.amount, j.amount, t)
32+ let v = sqrt(u, s, s, CEILING)
33+ let w = Issue((("LP-" + take(q, 8)) + "-XTN"), (((("LP-" + q) + "-XTN") + " is a Liquidity Provider Token Issued Against ") + h), v, s, true)
34+ let x = calculateAssetId(w)
3435 if ((m == h))
3536 then throw("Pair Already Exist in List.")
3637 else if ((size(g.payments) != 2))
4344 then throw("Input String & Attached AssetID in payment2 is not matching.")
4445 else if ((l == true))
4546 then throw("You Attached WAVES Asset ID for Listing, please attach Tokens You want to list in payment[2].")
46- else [StringEntry(("Pair_UV_" + h), h), IntegerEntry(("Listing_Fee_" + h), i.amount), ScriptTransfer(g.caller, u, b), IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), i.amount), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), j.amount), IntegerEntry(("Total_of_Pair_Txns_" + h), 0), IntegerEntry(((("Total_Swap_Fee_Collected_" + h) + "_") + toBase58String(b)), 0), IntegerEntry(("Total_Swap_Fee_Collected_" + h), 0), IntegerEntry(((((toString(d()) + "_Day_Volume_") + h) + "_") + toBase58String(b)), 0), IntegerEntry(((((toString(d()) + "_Day_Volume_") + toBase58String(b)) + "_") + h), 0), v, StringEntry(("LP_" + h), toBase58String(w)), IntegerEntry(("Total_LP_" + h), u)]
47- }
48-
49-
50-
51-@Callable(g)
52-func IssueLPToken (h) = {
53- let x = valueOrErrorMessage(getString(this, "LP_Admin_Rights"), "LP Admin Rights are Not Included into Smart Contract. Deploy Admin Rights First.")
54- let y = toBase58String(g.caller.bytes)
55- let z = valueOrErrorMessage(getString(this, ("Pair_UV_" + h)), "Asset not Found in Whitelisted Token")
56- let o = valueOrErrorMessage(assetInfo(fromBase58String(h)), (("Asset " + h) + " doesn't exist"))
57- let p = o.name
58- let q = o.decimals
59- let s = (1 * pow(10, 0, fraction((q + 6), 1, 2), 0, 0, CEILING))
60- let v = Issue((("LP-" + take(p, 8)) + "-XTN"), (((("LP-" + p) + "-XTN") + " is a Liquidity Provider Token Issued Against ") + h), s, fraction((q + 6), 1, 2), true)
61- let w = calculateAssetId(v)
62- if ((x != y))
63- then throw((("Your are not allowded to Issue LP Token. Only " + x) + " can issue the LP Token."))
64- else if ((z != h))
65- then throw("Pair is not available in List.")
66- else [v, StringEntry(("LP_" + h), toBase58String(w)), IntegerEntry(("Total_LP_" + h), s)]
47+ else [StringEntry(("Pair_UV_" + h), h), IntegerEntry(("Listing_Fee_" + h), i.amount), ScriptTransfer(g.caller, v, b), IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), i.amount), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), j.amount), IntegerEntry(("Total_of_Pair_Txns_" + h), 0), IntegerEntry(((("Total_Swap_Fee_Collected_" + h) + "_") + toBase58String(b)), 0), IntegerEntry(("Total_Swap_Fee_Collected_" + h), 0), IntegerEntry(((((toString(o) + "_Day_Volume_") + h) + "_") + toBase58String(b)), 0), IntegerEntry(((((toString(o) + "_Day_Volume_") + toBase58String(b)) + "_") + h), 0), w, StringEntry(("LP_" + h), toBase58String(x)), IntegerEntry(("Total_LP_" + h), v)]
6748 }
6849
6950
7152 @Callable(g)
7253 func SwapAssetToXTNPairEntry (h) = {
7354 let y = toBase58String(g.caller.bytes)
74- let A = if ((size(g.payments) == 1))
55+ let z = if ((size(g.payments) == 1))
7556 then g.payments[0]
7657 else throw("Whitelisted Token is required as Attached payment[1].")
77- let z = getString(this, ("Pair_UV_" + h))
58+ let A = getString(this, ("Pair_UV_" + h))
7859 let B = getIntegerValue(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
7960 let C = getIntegerValue(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
80- let D = fraction(B, C, (C + A.amount))
61+ let D = fraction(B, C, (C + z.amount))
8162 let E = (B - D)
8263 let F = 3
83- let G = d()
84- let H = ((E * F) / 1000)
85- let I = ((E - H) - H)
86- let J = {
87- let K = getInteger(this, ((("Total_Swap_Fee_Collected_" + h) + "_") + toBase58String(b)))
88- if ($isInstanceOf(K, "Int"))
64+ let o = d()
65+ let G = ((E * F) / 1000)
66+ let H = ((E - G) - G)
67+ let I = {
68+ let J = getInteger(this, ((("Total_Swap_Fee_Collected_" + h) + "_") + toBase58String(b)))
69+ if ($isInstanceOf(J, "Int"))
8970 then {
90- let L = K
91- L
71+ let K = J
72+ K
9273 }
9374 else 0
9475 }
95- let M = ((J + H) + H)
96- let N = {
97- let K = getInteger(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
98- if ($isInstanceOf(K, "Int"))
76+ let L = ((I + G) + G)
77+ let M = {
78+ let J = getInteger(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
79+ if ($isInstanceOf(J, "Int"))
9980 then {
100- let L = K
101- L
81+ let K = J
82+ K
10283 }
10384 else 0
10485 }
105- let O = (C + A.amount)
106- let P = {
107- let K = getInteger(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
108- if ($isInstanceOf(K, "Int"))
86+ let N = (C + z.amount)
87+ let O = {
88+ let J = getInteger(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
89+ if ($isInstanceOf(J, "Int"))
10990 then {
110- let L = K
111- L
91+ let K = J
92+ K
11293 }
11394 else 0
11495 }
115- let Q = ((B - E) + H)
116- let R = {
117- let K = getIntegerValue(this, ("Total_of_Pair_Txns_" + h))
118- if ($isInstanceOf(K, "Int"))
96+ let P = ((B - E) + G)
97+ let Q = {
98+ let J = getIntegerValue(this, ("Total_of_Pair_Txns_" + h))
99+ if ($isInstanceOf(J, "Int"))
119100 then {
120- let L = K
121- L
101+ let K = J
102+ K
122103 }
123104 else 0
124105 }
125- let S = (R + 1)
126- let T = {
127- let K = getIntegerValue(this, ((((toString(G) + "_Day_Volume_") + toBase58String(b)) + "_") + h))
128- if ($isInstanceOf(K, "Int"))
129- then {
130- let L = K
131- L
132- }
133- else 0
134- }
135- let U = (T + A.amount)
106+ let R = (Q + 1)
136107 if ((h == toBase58String(b)))
137108 then throw("Input can Never be a XTN AssetID. Enter Whitelisted AssetID in input & Attach Whitelisted Asset as an attachment Token in payment[1].")
138- else if ((z != h))
109+ else if ((A != h))
139110 then throw("Pair is not available in Whitelisted Asset.")
140- else if ((A.assetId == b))
111+ else if ((z.assetId == b))
141112 then throw("You can't Attach XTN as an Attached Payment. Only Whitelisted Tokens are accepted.")
142- else if ((A.assetId != fromBase58String(h)))
113+ else if ((z.assetId != fromBase58String(h)))
143114 then throw(("Incorrect asset attached, please attach or send " + h))
144115 else if ((B == 0))
145116 then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
149120 then throw((("Your Attached Asset Amount is very low. Attach More " + h) + " Tokens to Claim the minimum Amount of 0.1 dollar atleast."))
150121 else if ((E > B))
151122 then throw((("Pool Only has a Liquidity of " + toString((B / pow(10, 0, 6, 0, 0, CEILING)))) + " XTN. Add Liquidity into Pool."))
152- else [IntegerEntry(((("Total_Swap_Fee_Collected_" + h) + "_") + toBase58String(b)), M), IntegerEntry(((((toString(G) + "_Day_Volume_") + toBase58String(b)) + "_") + h), U), IntegerEntry("Current_Day", G), IntegerEntry(("Total_of_Pair_Txns_" + h), S), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), O), IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), Q), ScriptTransfer(g.caller, I, b), ScriptTransfer(c, H, b)]
123+ else [IntegerEntry(((("Total_Swap_Fee_Collected_" + h) + "_") + toBase58String(b)), L), IntegerEntry("Current_Day", o), IntegerEntry(("Total_of_Pair_Txns_" + h), R), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), N), IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), P), ScriptTransfer(g.caller, H, b), ScriptTransfer(c, G, b)]
153124 }
154125
155126
157128 @Callable(g)
158129 func SwapXTNToAssetPairEntry (h) = {
159130 let y = toBase58String(g.caller.bytes)
160- let A = if ((size(g.payments) == 1))
131+ let z = if ((size(g.payments) == 1))
161132 then g.payments[0]
162133 else throw((("Only " + toBase58String(b)) + " XTN Token is required as an Attached payment[1]."))
163134 let B = getIntegerValue(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
164135 let C = getIntegerValue(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
165- let V = fraction(B, C, (B + A.amount))
166- let E = (C - V)
167- let z = getString(this, ("Pair_UV_" + h))
136+ let S = fraction(B, C, (B + z.amount))
137+ let E = (C - S)
138+ let A = getString(this, ("Pair_UV_" + h))
168139 let F = 3
169- let H = ((E * F) / 1000)
170- let I = ((E - H) - H)
171- let W = {
172- let K = getInteger(this, ("Total_Swap_Fee_Collected_" + h))
173- if ($isInstanceOf(K, "Int"))
140+ let o = d()
141+ let G = ((E * F) / 1000)
142+ let H = ((E - G) - G)
143+ let T = {
144+ let J = getInteger(this, ("Total_Swap_Fee_Collected_" + h))
145+ if ($isInstanceOf(J, "Int"))
174146 then {
175- let L = K
176- L
147+ let K = J
148+ K
177149 }
178150 else 0
179151 }
180- let X = ((W + H) + H)
181- let N = {
182- let K = getInteger(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
183- if ($isInstanceOf(K, "Int"))
152+ let U = ((T + G) + G)
153+ let M = {
154+ let J = getInteger(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
155+ if ($isInstanceOf(J, "Int"))
184156 then {
185- let L = K
186- L
157+ let K = J
158+ K
187159 }
188160 else 0
189161 }
190- let O = ((C - E) + H)
191- let P = {
192- let K = getInteger(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
193- if ($isInstanceOf(K, "Int"))
162+ let N = ((C - E) + G)
163+ let O = {
164+ let J = getInteger(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
165+ if ($isInstanceOf(J, "Int"))
194166 then {
195- let L = K
196- L
167+ let K = J
168+ K
197169 }
198170 else 0
199171 }
200- let Q = (B + A.amount)
201- let R = {
202- let K = getIntegerValue(this, ("Total_of_Pair_Txns_" + h))
203- if ($isInstanceOf(K, "Int"))
172+ let P = (B + z.amount)
173+ let Q = {
174+ let J = getIntegerValue(this, ("Total_of_Pair_Txns_" + h))
175+ if ($isInstanceOf(J, "Int"))
204176 then {
205- let L = K
206- L
177+ let K = J
178+ K
207179 }
208180 else 0
209181 }
210- let S = (R + 1)
211- let T = {
212- let K = getIntegerValue(this, ((((toString(d()) + "_Day_Volume_") + h) + "_") + toBase58String(b)))
213- if ($isInstanceOf(K, "Int"))
214- then {
215- let L = K
216- L
217- }
218- else 0
219- }
220- let U = (T + A.amount)
221- if ((z != h))
182+ let R = (Q + 1)
183+ if ((A != h))
222184 then throw("Pair is not available in Whitelisted Asset.")
223185 else if ((h == toBase58String(b)))
224186 then throw("Input can Never be a XTN AssetID. Enter Whitelisted AssetID in input & Attach XTN as an attachment Token in payment[1].")
225- else if ((A.assetId != b))
187+ else if ((z.assetId != b))
226188 then throw("You can Attach XTN as an Attached Payment[1] to Swap XTN To Required Token. Any other asset else than XTN will be rejected.")
227- else if ((100000 > A.amount))
189+ else if ((100000 > z.amount))
228190 then throw("Your Attached XTN Amount is very low. Attach Atleast 0.1 XTN to Claim the minimum Tokens.")
229191 else if ((B == 0))
230192 then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
232194 then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
233195 else if ((E > C))
234196 then throw((("Pool Only has a Liquidity of " + toString(C)) + " Tokens. Add Liquidity into Pool."))
235- else [IntegerEntry(("Total_Swap_Fee_Collected_" + h), X), IntegerEntry(((((toString(d()) + "_Day_Volume_") + h) + "_") + toBase58String(b)), U), IntegerEntry(("Total_of_Pair_Txns_" + h), S), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), O), IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), Q), ScriptTransfer(g.caller, I, fromBase58String(h)), ScriptTransfer(c, H, fromBase58String(h))]
197+ else [IntegerEntry(("Total_Swap_Fee_Collected_" + h), U), IntegerEntry("Current_Day", o), IntegerEntry(("Total_of_Pair_Txns_" + h), R), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), N), IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), P), ScriptTransfer(g.caller, H, fromBase58String(h)), ScriptTransfer(c, G, fromBase58String(h))]
236198 }
237199
238200
242204 let y = toBase58String(g.caller.bytes)
243205 let i = value(g.payments[0])
244206 let j = value(g.payments[1])
245- let z = getString(this, ("Pair_UV_" + h))
246- let Y = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + h)), "LP Token is Missing or May be not Generated."))
207+ let A = getString(this, ("Pair_UV_" + h))
208+ let V = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + h)), "LP Token is Missing or May be not Generated."))
247209 let B = getIntegerValue(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
248210 let C = getIntegerValue(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
249- let Z = valueOrErrorMessage(assetInfo(fromBase58String(h)), (("Asset " + h) + " doesn't exist"))
250- let q = Z.decimals
251- let aa = B
252- let ab = C
253- let ac = pow((((aa * 1000000) / ab) * pow(10, 0, q, 0, 0, CEILING)), 0, 1, 0, 0, CEILING)
254- let ad = (6 + q)
255- let ae = (ad / 2)
256- let af = fraction(ac, i.amount, pow(10, 0, ad, 0, 0, CEILING))
257- let ag = pow((fraction(i.amount, 1, pow(10, 0, q, 0, 0, CEILING)) * fraction(j.amount, 1, pow(10, 0, 6, 0, 0, CEILING))), 0, 5, 1, ae, DOWN)
258- let ah = {
259- let K = getInteger(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
260- if ($isInstanceOf(K, "Int"))
211+ let W = valueOrErrorMessage(assetInfo(fromBase58String(h)), (("Asset " + h) + " doesn't exist"))
212+ let r = W.decimals
213+ let X = B
214+ let Y = C
215+ let Z = pow((((X * 1000000) / Y) * pow(10, 0, r, 0, 0, CEILING)), 0, 1, 0, 0, CEILING)
216+ let aa = (6 + r)
217+ let ab = (aa / 2)
218+ let ac = fraction(Z, i.amount, pow(10, 0, aa, 0, 0, CEILING))
219+ let ad = pow((fraction(i.amount, 1, pow(10, 0, r, 0, 0, CEILING)) * fraction(j.amount, 1, pow(10, 0, 6, 0, 0, CEILING))), 0, 5, 1, ab, DOWN)
220+ let ae = {
221+ let J = getInteger(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
222+ if ($isInstanceOf(J, "Int"))
261223 then {
262- let L = K
263- L
224+ let K = J
225+ K
264226 }
265227 else 0
266228 }
267- let ai = (ah + j.amount)
268- let aj = {
269- let K = getInteger(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
270- if ($isInstanceOf(K, "Int"))
229+ let af = (ae + j.amount)
230+ let ag = {
231+ let J = getInteger(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
232+ if ($isInstanceOf(J, "Int"))
271233 then {
272- let L = K
273- L
234+ let K = J
235+ K
274236 }
275237 else 0
276238 }
277- let ak = (aj + i.amount)
278- let al = {
279- let K = getIntegerValue(this, ("Total_LP_" + h))
280- if ($isInstanceOf(K, "Int"))
239+ let ah = (ag + i.amount)
240+ let ai = {
241+ let J = getIntegerValue(this, ("Total_LP_" + h))
242+ if ($isInstanceOf(J, "Int"))
281243 then {
282- let L = K
283- L
244+ let K = J
245+ K
284246 }
285247 else 0
286248 }
287- let am = (al + ag)
288- if ((z != h))
249+ let aj = (ai + ad)
250+ if ((A != h))
289251 then throw("Pair is not available in Whitelisted Asset.")
290252 else if ((h == toBase58String(b)))
291253 then throw("Input can Never be a XTN AssetID. Enter Whitelisted AssetID in input as well as in payment[1] & Attach XTN as an attachment Token in payment[2].")
301263 then throw("Wrong Asset Attached in payments[2], Please attach payment[1] = Liquidity Token & payment[2] = XTN Token.")
302264 else if ((5000000 > j.amount))
303265 then throw("please attach atleast 5 XTN in payment[2] & Equivalent worth of Token in payment[1]")
304- else if ((j.amount != af))
305- then throw((((((("Attached payment[2] qty is not matching as per attached payment[1].payment[2] must be as int [" + toString(af)) + "] or ") + toString(fraction(af, 1, 1000000))) + ".") + takeRight(toString(af), 6)) + " XTN."))
306- else if ((1 > ag))
307- then throw((("LP Token Outcome is going below " + toString(ae)) + " Decimals. Please Attach min. 1 LP token or 5 XTN Atleast."))
308- else [IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), ai), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), ak), IntegerEntry(("Total_LP_" + h), am), Reissue(Y, ag, true), ScriptTransfer(g.caller, ag, Y)]
266+ else if ((j.amount != ac))
267+ then throw((((((("Attached payment[2] qty is not matching as per attached payment[1].payment[2] must be as int [" + toString(ac)) + "] or ") + toString(fraction(ac, 1, 1000000))) + ".") + takeRight(toString(ac), 6)) + " XTN."))
268+ else if ((1 > ad))
269+ then throw((("LP Token Outcome is going below " + toString(ab)) + " Decimals. Please Attach min. 1 LP token or 5 XTN Atleast."))
270+ else [IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), af), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), ah), IntegerEntry(("Total_LP_" + h), aj), Reissue(V, ad, true), ScriptTransfer(g.caller, ad, V)]
309271 }
310272
311273
313275 @Callable(g)
314276 func RemoveLiquidity (h) = {
315277 let y = toBase58String(g.caller.bytes)
316- let A = if ((size(g.payments) == 1))
278+ let z = if ((size(g.payments) == 1))
317279 then g.payments[0]
318280 else throw("No payment attached, Please Attach LP Token as payment[1].")
319- let z = getString(this, ("Pair_UV_" + h))
320- let an = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + h)), "LP Token is Missing or not Generated."))
321- let Z = valueOrErrorMessage(assetInfo(fromBase58String(h)), (("Asset " + h) + " doesn't exist"))
322- let q = Z.decimals
323- let ad = (6 + q)
324- let ae = (ad / 2)
325- let ao = getIntegerValue(this, ("Total_LP_" + h))
326- let ap = pow(fraction(A.amount, pow(10, 0, 8, 0, 0, CEILING), ao), 6, 1, 0, 6, CEILING)
281+ let A = getString(this, ("Pair_UV_" + h))
282+ let ak = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + h)), "LP Token is Missing or not Generated."))
283+ let W = valueOrErrorMessage(assetInfo(fromBase58String(h)), (("Asset " + h) + " doesn't exist"))
284+ let r = W.decimals
285+ let aa = (6 + r)
286+ let ab = (aa / 2)
287+ let al = getIntegerValue(this, ("Total_LP_" + h))
288+ let am = pow(fraction(z.amount, pow(10, 0, 8, 0, 0, CEILING), al), 6, 1, 0, 6, CEILING)
327289 let B = getIntegerValue(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
328290 let C = getIntegerValue(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
329- let aq = fraction(B, ap, pow(10, 0, 8, 0, 0, CEILING))
330- let ar = fraction(C, ap, pow(10, 0, 8, 0, 0, CEILING))
331- let ah = {
332- let K = getInteger(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
333- if ($isInstanceOf(K, "Int"))
291+ let an = fraction(B, am, pow(10, 0, 8, 0, 0, CEILING))
292+ let ao = fraction(C, am, pow(10, 0, 8, 0, 0, CEILING))
293+ let ae = {
294+ let J = getInteger(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
295+ if ($isInstanceOf(J, "Int"))
334296 then {
335- let L = K
336- L
297+ let K = J
298+ K
337299 }
338300 else 0
339301 }
340- let ai = (ah - aq)
341- let aj = {
342- let K = getInteger(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
343- if ($isInstanceOf(K, "Int"))
302+ let af = (ae - an)
303+ let ag = {
304+ let J = getInteger(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
305+ if ($isInstanceOf(J, "Int"))
344306 then {
345- let L = K
346- L
307+ let K = J
308+ K
347309 }
348310 else 0
349311 }
350- let ak = (aj - ar)
351- let al = {
352- let K = getIntegerValue(this, ("Total_LP_" + h))
353- if ($isInstanceOf(K, "Int"))
312+ let ah = (ag - ao)
313+ let ai = {
314+ let J = getIntegerValue(this, ("Total_LP_" + h))
315+ if ($isInstanceOf(J, "Int"))
354316 then {
355- let L = K
356- L
317+ let K = J
318+ K
357319 }
358320 else 0
359321 }
360- let am = (al - A.amount)
361- if ((z != h))
322+ let aj = (ai - z.amount)
323+ if ((A != h))
362324 then throw("Pair is not available in Whitelist.")
363325 else if ((fromBase58String(h) == b))
364326 then throw("Don't choose XTN AssetID as Input, Only Whitelisted Asset as Input String & Attach LP Tokens as payment[1]")
365- else if ((A.assetId != an))
327+ else if ((z.assetId != ak))
366328 then throw("Wrong Asset is attached in payment[1] or LP Token Not Found or Missing.")
367- else if ((1 > ap))
329+ else if ((1 > am))
368330 then throw("Your LP Token amount % is very low to convert.")
369- else if ((1 > aq))
331+ else if ((1 > an))
370332 then throw("Your LP Token conversion amount is very low to convert or less than 0.000001 XTN.")
371- else if ((1 > ar))
333+ else if ((1 > ao))
372334 then throw("Your LP Token conversion amount is very low to convert or less than fraction value of Token.")
373- else [IntegerEntry("Withdraw_LP_Percentage", ap), Burn(an, A.amount), IntegerEntry(("Total_LP_" + h), am), IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), ai), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), ak), ScriptTransfer(g.caller, aq, b), ScriptTransfer(g.caller, ar, fromBase58String(h))]
335+ else [IntegerEntry("Withdraw_LP_Percentage", am), Burn(ak, z.amount), IntegerEntry(("Total_LP_" + h), aj), IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), af), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), ah), ScriptTransfer(g.caller, an, b), ScriptTransfer(g.caller, ao, fromBase58String(h))]
374336 }
375337
376338
377-@Verifier(as)
378-func at () = sigVerify(as.bodyBytes, as.proofs[0], as.senderPublicKey)
339+@Verifier(ap)
340+func aq () = sigVerify(ap.bodyBytes, ap.proofs[0], ap.senderPublicKey)
379341
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 1694928600000
55
66 let b = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H'
77
88 let c = addressFromPublicKey(base58'6Z73KxcX3sugpiStpSRXxKxTmWqCaLVwFeM6kwyiKVDR')
99
1010 func d () = {
1111 let e = (lastBlock.timestamp - a)
1212 let f = fraction(1, e, 86400000)
1313 f
1414 }
1515
1616
1717 @Callable(g)
1818 func RegisterPair (h) = {
1919 let i = value(g.payments[0])
2020 let j = value(g.payments[1])
2121 let k = toBase58String(g.caller.bytes)
2222 let l = !(isDefined(j.assetId))
2323 let m = getString(this, ("Pair_UV_" + h))
2424 let n = fromBase58String(h)
25- let o = valueOrErrorMessage(assetInfo(fromBase58String(h)), (("Asset " + h) + " doesn't exist"))
26- let p = o.name
27- let q = o.decimals
28- let r = fraction((q + 6), 1, 2)
29- let s = (1 * pow(10, 0, r, 0, 0, CEILING))
30- let t = fraction(i.amount, j.amount, s)
31- let u = sqrt(t, r, r, CEILING)
32- let v = Issue((("LP-" + take(p, 8)) + "-XTN"), (((("LP-" + p) + "-XTN") + " is a Liquidity Provider Token Issued Against ") + h), u, r, true)
33- let w = calculateAssetId(v)
25+ let o = d()
26+ let p = valueOrErrorMessage(assetInfo(fromBase58String(h)), (("Asset " + h) + " doesn't exist"))
27+ let q = p.name
28+ let r = p.decimals
29+ let s = fraction((r + 6), 1, 2)
30+ let t = (1 * pow(10, 0, s, 0, 0, CEILING))
31+ let u = fraction(i.amount, j.amount, t)
32+ let v = sqrt(u, s, s, CEILING)
33+ let w = Issue((("LP-" + take(q, 8)) + "-XTN"), (((("LP-" + q) + "-XTN") + " is a Liquidity Provider Token Issued Against ") + h), v, s, true)
34+ let x = calculateAssetId(w)
3435 if ((m == h))
3536 then throw("Pair Already Exist in List.")
3637 else if ((size(g.payments) != 2))
3738 then throw("Two attached assets expected as payment. Kindly Attach payment1 = WAVES Token & payment2 = Token you want to List.")
3839 else if ((i.assetId != b))
3940 then throw("Incorrect asset attached as payment[1], please attach XTN only.")
4041 else if ((100000 > i.amount))
4142 then throw((((("You attached only " + toString(fraction(i.amount, 1, 100000000))) + ".") + toString(fraction(i.amount, 1, 10000000))) + " WAVES for Listing in payment[1], please attach 10 WAVES."))
4243 else if ((j.assetId != n))
4344 then throw("Input String & Attached AssetID in payment2 is not matching.")
4445 else if ((l == true))
4546 then throw("You Attached WAVES Asset ID for Listing, please attach Tokens You want to list in payment[2].")
46- else [StringEntry(("Pair_UV_" + h), h), IntegerEntry(("Listing_Fee_" + h), i.amount), ScriptTransfer(g.caller, u, b), IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), i.amount), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), j.amount), IntegerEntry(("Total_of_Pair_Txns_" + h), 0), IntegerEntry(((("Total_Swap_Fee_Collected_" + h) + "_") + toBase58String(b)), 0), IntegerEntry(("Total_Swap_Fee_Collected_" + h), 0), IntegerEntry(((((toString(d()) + "_Day_Volume_") + h) + "_") + toBase58String(b)), 0), IntegerEntry(((((toString(d()) + "_Day_Volume_") + toBase58String(b)) + "_") + h), 0), v, StringEntry(("LP_" + h), toBase58String(w)), IntegerEntry(("Total_LP_" + h), u)]
47- }
48-
49-
50-
51-@Callable(g)
52-func IssueLPToken (h) = {
53- let x = valueOrErrorMessage(getString(this, "LP_Admin_Rights"), "LP Admin Rights are Not Included into Smart Contract. Deploy Admin Rights First.")
54- let y = toBase58String(g.caller.bytes)
55- let z = valueOrErrorMessage(getString(this, ("Pair_UV_" + h)), "Asset not Found in Whitelisted Token")
56- let o = valueOrErrorMessage(assetInfo(fromBase58String(h)), (("Asset " + h) + " doesn't exist"))
57- let p = o.name
58- let q = o.decimals
59- let s = (1 * pow(10, 0, fraction((q + 6), 1, 2), 0, 0, CEILING))
60- let v = Issue((("LP-" + take(p, 8)) + "-XTN"), (((("LP-" + p) + "-XTN") + " is a Liquidity Provider Token Issued Against ") + h), s, fraction((q + 6), 1, 2), true)
61- let w = calculateAssetId(v)
62- if ((x != y))
63- then throw((("Your are not allowded to Issue LP Token. Only " + x) + " can issue the LP Token."))
64- else if ((z != h))
65- then throw("Pair is not available in List.")
66- else [v, StringEntry(("LP_" + h), toBase58String(w)), IntegerEntry(("Total_LP_" + h), s)]
47+ else [StringEntry(("Pair_UV_" + h), h), IntegerEntry(("Listing_Fee_" + h), i.amount), ScriptTransfer(g.caller, v, b), IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), i.amount), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), j.amount), IntegerEntry(("Total_of_Pair_Txns_" + h), 0), IntegerEntry(((("Total_Swap_Fee_Collected_" + h) + "_") + toBase58String(b)), 0), IntegerEntry(("Total_Swap_Fee_Collected_" + h), 0), IntegerEntry(((((toString(o) + "_Day_Volume_") + h) + "_") + toBase58String(b)), 0), IntegerEntry(((((toString(o) + "_Day_Volume_") + toBase58String(b)) + "_") + h), 0), w, StringEntry(("LP_" + h), toBase58String(x)), IntegerEntry(("Total_LP_" + h), v)]
6748 }
6849
6950
7051
7152 @Callable(g)
7253 func SwapAssetToXTNPairEntry (h) = {
7354 let y = toBase58String(g.caller.bytes)
74- let A = if ((size(g.payments) == 1))
55+ let z = if ((size(g.payments) == 1))
7556 then g.payments[0]
7657 else throw("Whitelisted Token is required as Attached payment[1].")
77- let z = getString(this, ("Pair_UV_" + h))
58+ let A = getString(this, ("Pair_UV_" + h))
7859 let B = getIntegerValue(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
7960 let C = getIntegerValue(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
80- let D = fraction(B, C, (C + A.amount))
61+ let D = fraction(B, C, (C + z.amount))
8162 let E = (B - D)
8263 let F = 3
83- let G = d()
84- let H = ((E * F) / 1000)
85- let I = ((E - H) - H)
86- let J = {
87- let K = getInteger(this, ((("Total_Swap_Fee_Collected_" + h) + "_") + toBase58String(b)))
88- if ($isInstanceOf(K, "Int"))
64+ let o = d()
65+ let G = ((E * F) / 1000)
66+ let H = ((E - G) - G)
67+ let I = {
68+ let J = getInteger(this, ((("Total_Swap_Fee_Collected_" + h) + "_") + toBase58String(b)))
69+ if ($isInstanceOf(J, "Int"))
8970 then {
90- let L = K
91- L
71+ let K = J
72+ K
9273 }
9374 else 0
9475 }
95- let M = ((J + H) + H)
96- let N = {
97- let K = getInteger(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
98- if ($isInstanceOf(K, "Int"))
76+ let L = ((I + G) + G)
77+ let M = {
78+ let J = getInteger(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
79+ if ($isInstanceOf(J, "Int"))
9980 then {
100- let L = K
101- L
81+ let K = J
82+ K
10283 }
10384 else 0
10485 }
105- let O = (C + A.amount)
106- let P = {
107- let K = getInteger(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
108- if ($isInstanceOf(K, "Int"))
86+ let N = (C + z.amount)
87+ let O = {
88+ let J = getInteger(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
89+ if ($isInstanceOf(J, "Int"))
10990 then {
110- let L = K
111- L
91+ let K = J
92+ K
11293 }
11394 else 0
11495 }
115- let Q = ((B - E) + H)
116- let R = {
117- let K = getIntegerValue(this, ("Total_of_Pair_Txns_" + h))
118- if ($isInstanceOf(K, "Int"))
96+ let P = ((B - E) + G)
97+ let Q = {
98+ let J = getIntegerValue(this, ("Total_of_Pair_Txns_" + h))
99+ if ($isInstanceOf(J, "Int"))
119100 then {
120- let L = K
121- L
101+ let K = J
102+ K
122103 }
123104 else 0
124105 }
125- let S = (R + 1)
126- let T = {
127- let K = getIntegerValue(this, ((((toString(G) + "_Day_Volume_") + toBase58String(b)) + "_") + h))
128- if ($isInstanceOf(K, "Int"))
129- then {
130- let L = K
131- L
132- }
133- else 0
134- }
135- let U = (T + A.amount)
106+ let R = (Q + 1)
136107 if ((h == toBase58String(b)))
137108 then throw("Input can Never be a XTN AssetID. Enter Whitelisted AssetID in input & Attach Whitelisted Asset as an attachment Token in payment[1].")
138- else if ((z != h))
109+ else if ((A != h))
139110 then throw("Pair is not available in Whitelisted Asset.")
140- else if ((A.assetId == b))
111+ else if ((z.assetId == b))
141112 then throw("You can't Attach XTN as an Attached Payment. Only Whitelisted Tokens are accepted.")
142- else if ((A.assetId != fromBase58String(h)))
113+ else if ((z.assetId != fromBase58String(h)))
143114 then throw(("Incorrect asset attached, please attach or send " + h))
144115 else if ((B == 0))
145116 then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
146117 else if ((C == 0))
147118 then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
148119 else if ((100000 > E))
149120 then throw((("Your Attached Asset Amount is very low. Attach More " + h) + " Tokens to Claim the minimum Amount of 0.1 dollar atleast."))
150121 else if ((E > B))
151122 then throw((("Pool Only has a Liquidity of " + toString((B / pow(10, 0, 6, 0, 0, CEILING)))) + " XTN. Add Liquidity into Pool."))
152- else [IntegerEntry(((("Total_Swap_Fee_Collected_" + h) + "_") + toBase58String(b)), M), IntegerEntry(((((toString(G) + "_Day_Volume_") + toBase58String(b)) + "_") + h), U), IntegerEntry("Current_Day", G), IntegerEntry(("Total_of_Pair_Txns_" + h), S), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), O), IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), Q), ScriptTransfer(g.caller, I, b), ScriptTransfer(c, H, b)]
123+ else [IntegerEntry(((("Total_Swap_Fee_Collected_" + h) + "_") + toBase58String(b)), L), IntegerEntry("Current_Day", o), IntegerEntry(("Total_of_Pair_Txns_" + h), R), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), N), IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), P), ScriptTransfer(g.caller, H, b), ScriptTransfer(c, G, b)]
153124 }
154125
155126
156127
157128 @Callable(g)
158129 func SwapXTNToAssetPairEntry (h) = {
159130 let y = toBase58String(g.caller.bytes)
160- let A = if ((size(g.payments) == 1))
131+ let z = if ((size(g.payments) == 1))
161132 then g.payments[0]
162133 else throw((("Only " + toBase58String(b)) + " XTN Token is required as an Attached payment[1]."))
163134 let B = getIntegerValue(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
164135 let C = getIntegerValue(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
165- let V = fraction(B, C, (B + A.amount))
166- let E = (C - V)
167- let z = getString(this, ("Pair_UV_" + h))
136+ let S = fraction(B, C, (B + z.amount))
137+ let E = (C - S)
138+ let A = getString(this, ("Pair_UV_" + h))
168139 let F = 3
169- let H = ((E * F) / 1000)
170- let I = ((E - H) - H)
171- let W = {
172- let K = getInteger(this, ("Total_Swap_Fee_Collected_" + h))
173- if ($isInstanceOf(K, "Int"))
140+ let o = d()
141+ let G = ((E * F) / 1000)
142+ let H = ((E - G) - G)
143+ let T = {
144+ let J = getInteger(this, ("Total_Swap_Fee_Collected_" + h))
145+ if ($isInstanceOf(J, "Int"))
174146 then {
175- let L = K
176- L
147+ let K = J
148+ K
177149 }
178150 else 0
179151 }
180- let X = ((W + H) + H)
181- let N = {
182- let K = getInteger(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
183- if ($isInstanceOf(K, "Int"))
152+ let U = ((T + G) + G)
153+ let M = {
154+ let J = getInteger(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
155+ if ($isInstanceOf(J, "Int"))
184156 then {
185- let L = K
186- L
157+ let K = J
158+ K
187159 }
188160 else 0
189161 }
190- let O = ((C - E) + H)
191- let P = {
192- let K = getInteger(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
193- if ($isInstanceOf(K, "Int"))
162+ let N = ((C - E) + G)
163+ let O = {
164+ let J = getInteger(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
165+ if ($isInstanceOf(J, "Int"))
194166 then {
195- let L = K
196- L
167+ let K = J
168+ K
197169 }
198170 else 0
199171 }
200- let Q = (B + A.amount)
201- let R = {
202- let K = getIntegerValue(this, ("Total_of_Pair_Txns_" + h))
203- if ($isInstanceOf(K, "Int"))
172+ let P = (B + z.amount)
173+ let Q = {
174+ let J = getIntegerValue(this, ("Total_of_Pair_Txns_" + h))
175+ if ($isInstanceOf(J, "Int"))
204176 then {
205- let L = K
206- L
177+ let K = J
178+ K
207179 }
208180 else 0
209181 }
210- let S = (R + 1)
211- let T = {
212- let K = getIntegerValue(this, ((((toString(d()) + "_Day_Volume_") + h) + "_") + toBase58String(b)))
213- if ($isInstanceOf(K, "Int"))
214- then {
215- let L = K
216- L
217- }
218- else 0
219- }
220- let U = (T + A.amount)
221- if ((z != h))
182+ let R = (Q + 1)
183+ if ((A != h))
222184 then throw("Pair is not available in Whitelisted Asset.")
223185 else if ((h == toBase58String(b)))
224186 then throw("Input can Never be a XTN AssetID. Enter Whitelisted AssetID in input & Attach XTN as an attachment Token in payment[1].")
225- else if ((A.assetId != b))
187+ else if ((z.assetId != b))
226188 then throw("You can Attach XTN as an Attached Payment[1] to Swap XTN To Required Token. Any other asset else than XTN will be rejected.")
227- else if ((100000 > A.amount))
189+ else if ((100000 > z.amount))
228190 then throw("Your Attached XTN Amount is very low. Attach Atleast 0.1 XTN to Claim the minimum Tokens.")
229191 else if ((B == 0))
230192 then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
231193 else if ((C == 0))
232194 then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
233195 else if ((E > C))
234196 then throw((("Pool Only has a Liquidity of " + toString(C)) + " Tokens. Add Liquidity into Pool."))
235- else [IntegerEntry(("Total_Swap_Fee_Collected_" + h), X), IntegerEntry(((((toString(d()) + "_Day_Volume_") + h) + "_") + toBase58String(b)), U), IntegerEntry(("Total_of_Pair_Txns_" + h), S), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), O), IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), Q), ScriptTransfer(g.caller, I, fromBase58String(h)), ScriptTransfer(c, H, fromBase58String(h))]
197+ else [IntegerEntry(("Total_Swap_Fee_Collected_" + h), U), IntegerEntry("Current_Day", o), IntegerEntry(("Total_of_Pair_Txns_" + h), R), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), N), IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), P), ScriptTransfer(g.caller, H, fromBase58String(h)), ScriptTransfer(c, G, fromBase58String(h))]
236198 }
237199
238200
239201
240202 @Callable(g)
241203 func AddLiquidity (h) = {
242204 let y = toBase58String(g.caller.bytes)
243205 let i = value(g.payments[0])
244206 let j = value(g.payments[1])
245- let z = getString(this, ("Pair_UV_" + h))
246- let Y = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + h)), "LP Token is Missing or May be not Generated."))
207+ let A = getString(this, ("Pair_UV_" + h))
208+ let V = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + h)), "LP Token is Missing or May be not Generated."))
247209 let B = getIntegerValue(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
248210 let C = getIntegerValue(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
249- let Z = valueOrErrorMessage(assetInfo(fromBase58String(h)), (("Asset " + h) + " doesn't exist"))
250- let q = Z.decimals
251- let aa = B
252- let ab = C
253- let ac = pow((((aa * 1000000) / ab) * pow(10, 0, q, 0, 0, CEILING)), 0, 1, 0, 0, CEILING)
254- let ad = (6 + q)
255- let ae = (ad / 2)
256- let af = fraction(ac, i.amount, pow(10, 0, ad, 0, 0, CEILING))
257- let ag = pow((fraction(i.amount, 1, pow(10, 0, q, 0, 0, CEILING)) * fraction(j.amount, 1, pow(10, 0, 6, 0, 0, CEILING))), 0, 5, 1, ae, DOWN)
258- let ah = {
259- let K = getInteger(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
260- if ($isInstanceOf(K, "Int"))
211+ let W = valueOrErrorMessage(assetInfo(fromBase58String(h)), (("Asset " + h) + " doesn't exist"))
212+ let r = W.decimals
213+ let X = B
214+ let Y = C
215+ let Z = pow((((X * 1000000) / Y) * pow(10, 0, r, 0, 0, CEILING)), 0, 1, 0, 0, CEILING)
216+ let aa = (6 + r)
217+ let ab = (aa / 2)
218+ let ac = fraction(Z, i.amount, pow(10, 0, aa, 0, 0, CEILING))
219+ let ad = pow((fraction(i.amount, 1, pow(10, 0, r, 0, 0, CEILING)) * fraction(j.amount, 1, pow(10, 0, 6, 0, 0, CEILING))), 0, 5, 1, ab, DOWN)
220+ let ae = {
221+ let J = getInteger(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
222+ if ($isInstanceOf(J, "Int"))
261223 then {
262- let L = K
263- L
224+ let K = J
225+ K
264226 }
265227 else 0
266228 }
267- let ai = (ah + j.amount)
268- let aj = {
269- let K = getInteger(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
270- if ($isInstanceOf(K, "Int"))
229+ let af = (ae + j.amount)
230+ let ag = {
231+ let J = getInteger(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
232+ if ($isInstanceOf(J, "Int"))
271233 then {
272- let L = K
273- L
234+ let K = J
235+ K
274236 }
275237 else 0
276238 }
277- let ak = (aj + i.amount)
278- let al = {
279- let K = getIntegerValue(this, ("Total_LP_" + h))
280- if ($isInstanceOf(K, "Int"))
239+ let ah = (ag + i.amount)
240+ let ai = {
241+ let J = getIntegerValue(this, ("Total_LP_" + h))
242+ if ($isInstanceOf(J, "Int"))
281243 then {
282- let L = K
283- L
244+ let K = J
245+ K
284246 }
285247 else 0
286248 }
287- let am = (al + ag)
288- if ((z != h))
249+ let aj = (ai + ad)
250+ if ((A != h))
289251 then throw("Pair is not available in Whitelisted Asset.")
290252 else if ((h == toBase58String(b)))
291253 then throw("Input can Never be a XTN AssetID. Enter Whitelisted AssetID in input as well as in payment[1] & Attach XTN as an attachment Token in payment[2].")
292254 else if ((size(g.payments) != 2))
293255 then throw("Two attached assets expected as payment in 50%-50%. Kindly Attach payment1 = Token you want to add for Liquidity & payment2 = Equivalent Amount of XTN Token.")
294256 else if ((i.assetId == b))
295257 then throw("You Attached XTN asset in payment[1], please attach only whitelisted Token in payment[1] along with XTN in payment[2].")
296258 else if ((i.assetId != fromBase58String(h)))
297259 then throw("Incorrect asset attached for Liquidity in payment[1], please attach String Asset or Whitelisted Token only.")
298260 else if ((i.assetId != fromBase58String(h)))
299261 then throw("Incorrect asset attached for Liquidity in payment[1], please attach String Asset or Whitelisted Token only.")
300262 else if ((j.assetId != b))
301263 then throw("Wrong Asset Attached in payments[2], Please attach payment[1] = Liquidity Token & payment[2] = XTN Token.")
302264 else if ((5000000 > j.amount))
303265 then throw("please attach atleast 5 XTN in payment[2] & Equivalent worth of Token in payment[1]")
304- else if ((j.amount != af))
305- then throw((((((("Attached payment[2] qty is not matching as per attached payment[1].payment[2] must be as int [" + toString(af)) + "] or ") + toString(fraction(af, 1, 1000000))) + ".") + takeRight(toString(af), 6)) + " XTN."))
306- else if ((1 > ag))
307- then throw((("LP Token Outcome is going below " + toString(ae)) + " Decimals. Please Attach min. 1 LP token or 5 XTN Atleast."))
308- else [IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), ai), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), ak), IntegerEntry(("Total_LP_" + h), am), Reissue(Y, ag, true), ScriptTransfer(g.caller, ag, Y)]
266+ else if ((j.amount != ac))
267+ then throw((((((("Attached payment[2] qty is not matching as per attached payment[1].payment[2] must be as int [" + toString(ac)) + "] or ") + toString(fraction(ac, 1, 1000000))) + ".") + takeRight(toString(ac), 6)) + " XTN."))
268+ else if ((1 > ad))
269+ then throw((("LP Token Outcome is going below " + toString(ab)) + " Decimals. Please Attach min. 1 LP token or 5 XTN Atleast."))
270+ else [IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), af), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), ah), IntegerEntry(("Total_LP_" + h), aj), Reissue(V, ad, true), ScriptTransfer(g.caller, ad, V)]
309271 }
310272
311273
312274
313275 @Callable(g)
314276 func RemoveLiquidity (h) = {
315277 let y = toBase58String(g.caller.bytes)
316- let A = if ((size(g.payments) == 1))
278+ let z = if ((size(g.payments) == 1))
317279 then g.payments[0]
318280 else throw("No payment attached, Please Attach LP Token as payment[1].")
319- let z = getString(this, ("Pair_UV_" + h))
320- let an = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + h)), "LP Token is Missing or not Generated."))
321- let Z = valueOrErrorMessage(assetInfo(fromBase58String(h)), (("Asset " + h) + " doesn't exist"))
322- let q = Z.decimals
323- let ad = (6 + q)
324- let ae = (ad / 2)
325- let ao = getIntegerValue(this, ("Total_LP_" + h))
326- let ap = pow(fraction(A.amount, pow(10, 0, 8, 0, 0, CEILING), ao), 6, 1, 0, 6, CEILING)
281+ let A = getString(this, ("Pair_UV_" + h))
282+ let ak = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + h)), "LP Token is Missing or not Generated."))
283+ let W = valueOrErrorMessage(assetInfo(fromBase58String(h)), (("Asset " + h) + " doesn't exist"))
284+ let r = W.decimals
285+ let aa = (6 + r)
286+ let ab = (aa / 2)
287+ let al = getIntegerValue(this, ("Total_LP_" + h))
288+ let am = pow(fraction(z.amount, pow(10, 0, 8, 0, 0, CEILING), al), 6, 1, 0, 6, CEILING)
327289 let B = getIntegerValue(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
328290 let C = getIntegerValue(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
329- let aq = fraction(B, ap, pow(10, 0, 8, 0, 0, CEILING))
330- let ar = fraction(C, ap, pow(10, 0, 8, 0, 0, CEILING))
331- let ah = {
332- let K = getInteger(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
333- if ($isInstanceOf(K, "Int"))
291+ let an = fraction(B, am, pow(10, 0, 8, 0, 0, CEILING))
292+ let ao = fraction(C, am, pow(10, 0, 8, 0, 0, CEILING))
293+ let ae = {
294+ let J = getInteger(this, ((("Balance_of_" + h) + "_") + toBase58String(b)))
295+ if ($isInstanceOf(J, "Int"))
334296 then {
335- let L = K
336- L
297+ let K = J
298+ K
337299 }
338300 else 0
339301 }
340- let ai = (ah - aq)
341- let aj = {
342- let K = getInteger(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
343- if ($isInstanceOf(K, "Int"))
302+ let af = (ae - an)
303+ let ag = {
304+ let J = getInteger(this, ((("Balance_of_" + toBase58String(b)) + "_") + h))
305+ if ($isInstanceOf(J, "Int"))
344306 then {
345- let L = K
346- L
307+ let K = J
308+ K
347309 }
348310 else 0
349311 }
350- let ak = (aj - ar)
351- let al = {
352- let K = getIntegerValue(this, ("Total_LP_" + h))
353- if ($isInstanceOf(K, "Int"))
312+ let ah = (ag - ao)
313+ let ai = {
314+ let J = getIntegerValue(this, ("Total_LP_" + h))
315+ if ($isInstanceOf(J, "Int"))
354316 then {
355- let L = K
356- L
317+ let K = J
318+ K
357319 }
358320 else 0
359321 }
360- let am = (al - A.amount)
361- if ((z != h))
322+ let aj = (ai - z.amount)
323+ if ((A != h))
362324 then throw("Pair is not available in Whitelist.")
363325 else if ((fromBase58String(h) == b))
364326 then throw("Don't choose XTN AssetID as Input, Only Whitelisted Asset as Input String & Attach LP Tokens as payment[1]")
365- else if ((A.assetId != an))
327+ else if ((z.assetId != ak))
366328 then throw("Wrong Asset is attached in payment[1] or LP Token Not Found or Missing.")
367- else if ((1 > ap))
329+ else if ((1 > am))
368330 then throw("Your LP Token amount % is very low to convert.")
369- else if ((1 > aq))
331+ else if ((1 > an))
370332 then throw("Your LP Token conversion amount is very low to convert or less than 0.000001 XTN.")
371- else if ((1 > ar))
333+ else if ((1 > ao))
372334 then throw("Your LP Token conversion amount is very low to convert or less than fraction value of Token.")
373- else [IntegerEntry("Withdraw_LP_Percentage", ap), Burn(an, A.amount), IntegerEntry(("Total_LP_" + h), am), IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), ai), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), ak), ScriptTransfer(g.caller, aq, b), ScriptTransfer(g.caller, ar, fromBase58String(h))]
335+ else [IntegerEntry("Withdraw_LP_Percentage", am), Burn(ak, z.amount), IntegerEntry(("Total_LP_" + h), aj), IntegerEntry(((("Balance_of_" + h) + "_") + toBase58String(b)), af), IntegerEntry(((("Balance_of_" + toBase58String(b)) + "_") + h), ah), ScriptTransfer(g.caller, an, b), ScriptTransfer(g.caller, ao, fromBase58String(h))]
374336 }
375337
376338
377-@Verifier(as)
378-func at () = sigVerify(as.bodyBytes, as.proofs[0], as.senderPublicKey)
339+@Verifier(ap)
340+func aq () = sigVerify(ap.bodyBytes, ap.proofs[0], ap.senderPublicKey)
379341

github/deemru/w8io/169f3d6 
220.17 ms