tx · 9ZLneEys5zXjNynoVz4z3JZMLQtgYuv9vbCY5tdsH51W

3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH:  -0.04000000 Waves

2023.07.06 17:44 [3719821] smart account 3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH > SELF 0.00000000 Waves

{ "type": 13, "id": "9ZLneEys5zXjNynoVz4z3JZMLQtgYuv9vbCY5tdsH51W", "fee": 4000000, "feeAssetId": null, "timestamp": 1688654725637, "version": 2, "chainId": 87, "sender": "3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH", "senderPublicKey": "8DxbUxhy23djr6kUEE1Jzp7oVJXBsHNaATLRiABpkSde", "proofs": [ "2t5Bk4sm8hjbTbkaynyT8qWuRD9KMerQufvJoRgRj3QqhgpWHNtjbVUaWXT2oL2ab35DLG1JrQM4yYaoy9MjkGj9" ], "script": "base64:BgKPAQgCEgASBAoCCAESBAoCCAESABIDCgEIEgMKAQgSBAoCCAESBAoCCAESBAoCCAESABIGCgQICAgIEgYKBAgICAgSBAoCCAgSBAoCCAgSAwoBBBIDCgEIEgMKAQQSCAoGBAgBCAgIEgUKAwQICBIGCgQECAQIEgMKAQQSBAoCCAQSBAoCCAQSAwoBBBIDCgEEHwAScmVzZXJ2ZUZ1bmRBZGRyZXNzCQEHQWRkcmVzcwEBGgFXHuH7QDFrgebsS1YbBSxRoZNu3wmxPNLBAAtyZXNlcnZlRnVuZAAUABFhZ2dyZWdhdG9yQWRkcmVzcwkBB0FkZHJlc3MBARoBV50MqsYTUaluy4D3Y33BZHji73JNqAy60wAJb3JhY2xlU3RyAiMzUFBYVktqTjZuUk16WGVlZ2NZaGZpaWM5NnBkMmM5OEVrbQARc2h1dGRvd25XaGl0ZWxpc3QJAMwIAgEaAVfX4SNRjnyriFrV1yiXddiIddOPriMFpuEJAMwIAgEaAVdjDQOBpn9bVNIcueQoKvOngDTw2LWN1WUJAMwIAgEaAVez1ZJUSQmaKhD7xvifEHar7z8PcqWJFYwJAMwIAgEaAVf4+voCJsBRi+xqO0YzSdIccbB1i/mkypoJAMwIAgEaAVer3aoi85i5H0XYLNSn6vkSYq+JNmpQO3IJAMwIAgEaAVcwORzRpGYYO35/49jeov24Z5j/V00RJp0FA25pbAEWdmVyaWZ5TGlxdWlkYXRvclJpZ2h0cwEHYWRkcmVzcwkBASEBAwMJAQIhPQIFB2FkZHJlc3MJAQdBZGRyZXNzAQEaAVd3qs7ReFboqZ5eq5Xvv+nhcVh1XjKacYEJAQIhPQIFB2FkZHJlc3MJAQdBZGRyZXNzAQEaAVfX4SNRjnyriFrV1yiXddiIddOPriMFpuEHCQECIT0CBQdhZGRyZXNzCQEHQWRkcmVzcwEBGgFXq92qIvOYuR9F2CzUp+r5EmKviTZqUDtyBwEMZ2V0UmF0ZUN1cnZlAQphc3NldElkU3RyBAckbWF0Y2gwBQphc3NldElkU3RyAwkAAAICLDl3YzNMWE5BNFRFQnNYeUt0b0xFOW1yYkREN1dNSFh2WHJDalp2YWJMQXNpBQckbWF0Y2gwCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLEhHZ2FiVHFVUzhXdFZGVUp6Zm1yVERNZ0VjY0p1WkxCUGhGZ1FGeHZuc29XBQckbWF0Y2gwCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLDM0TjlZY0VFVExXbjkzcVlRNjRFc1AxeDg5dFNydUpVNDRSckVNU1hYRVBKBQckbWF0Y2gwCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLDZYdEhqcFhiczlSUkpQMlNyOUdVeVZxekFDY2J5OVRrVGhIWG5qVkM1Q0RKBQckbWF0Y2gwCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwBQckbWF0Y2gwCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLEFqc282blRUanB0dTJVSEx4NmhmU1hWdEhGdFJCSkNrS1lkNVNBeWo3emY1BQckbWF0Y2gwCQCWCgQAgIl6AIC0iRMAgOiSJgCAo8NHAwkAAAICLEhFQjhRYXc5eHJXcFdzOHRIc2lBVFlHQldEQnRQMlM3a2NQQUxyTXU0M0FTBQckbWF0Y2gwCQCWCgQAAACA4esXAIDokiYAgIjevgEDCQAAAgIFV0FWRVMFByRtYXRjaDAJAJYKBACAiXoAgIenDgCA6JImAIDokiYDCQAAAgIsQXRxdjU5RVl6akZHdWl0S1ZuTVJrNkg4RnVram9WM2t0UG9yYkV5czI1b24FByRtYXRjaDAJAJYKBAAAAIDaxAkAgOiSJgCAtIkTAwkAAAICLERTYmJoTHNTVGVEZzVMc2l1ZmsyQW5laDNEalZxSnVQcjJNOXVVMWd3eTVwBQckbWF0Y2gwCQCWCgQAAACA2sQJAIDokiYAgMLXLwMJAAACAiw4dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQUHJG1hdGNoMAkAlgoEAAAAgIenDgCA6JImAIC0iRMDCQAAAgIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wFByRtYXRjaDAJAJYKBAAAAMDw9QsAgOiSJgCAtIkTAwkAAAICLDhMUVc4ZjdQNWQ1UFpNN0d0WkVCZ2FxUlBHU3pTM0RmUHVpWHJVUko0QUpTBQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDQ3NGpUZVl4MnIyVmEzNTc5NHRDU2NBWFdKRzloVTJIY2d4ek1vd2FaVW51BQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDVVWUJQcHE0V29VNW40TXdwRmtnSm5XM0ZxNEIxdTN1a3BLMzNpazRRZXJSBQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDJ0aHNBQ3VIbXpETXVOZXpQTTMyd2c5YTNCd1V6QldEZVNLYWtnejNjdzIxBQckbWF0Y2gwCQCWCgQAgIl6AIC0iRMAgOiSJgCAwtcvAwkAAAICK1lpTmJvZkZ6QzE3akVISENNd3JSY3B5OU1ycmphYk1NTFp4ZzhnNXhtZjcFByRtYXRjaDAJAJYKBACAiXoAgIenDgCA6JImAIDokiYDCQAAAgIsOXdjM0xYTkE0VEVCc1h5S3RvTEU5bXJiREQ3V01IWHZYckNqWnZhYkxBc2kFByRtYXRjaDAJAJYKBAAAAIDh6xcAgOiSJgCAhK9fAwkAAAICLDNWdVY1V1RtRHo0N0RtZG4zUXBjWWp6YlNkaXBqUUU0Sk1kTmUxeFpwWDEzBQckbWF0Y2gwCQCWCgQAAACAwtcvAIDokiYAgIjevgEJAJYKBAAAAIDaxAkAgOiSJgCA6JImAAZTY2FsZTgAgMLXLwAHU2NhbGUxMACAyK+gJQAHU2NhbGUxNgkAaAIFBlNjYWxlOAUGU2NhbGU4AAlkYXlCbG9ja3MAoAsBCmxpSW50VG9TdHIBAmxpCgEBZgIFYWNjdW0EbmV4dAkArAICCQCsAgIFBWFjY3VtCQCkAwEFBG5leHQCASwKAAIkbAUCbGkKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAQ10cnlHZXRJbnRlZ2VyAQNrZXkEByRtYXRjaDAJAJoIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAAAQ10cnlHZXRCb29sZWFuAQNrZXkEByRtYXRjaDAJAJsIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHAQx0cnlHZXRTdHJpbmcBA2tleQQHJG1hdGNoMAkAnQgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFiBQckbWF0Y2gwBQFiAgABDHRyeUdldEJpbmFyeQEDa2V5BAckbWF0Y2gwCQCcCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwBQFiAQABDmdldEFzc2V0U3RyaW5nAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJANgEAQUBYgIFV0FWRVMBDWdldEFzc2V0Qnl0ZXMBCmFzc2V0SWRTdHIDCQAAAgUKYXNzZXRJZFN0cgIFV0FWRVMFBHVuaXQJANkEAQUKYXNzZXRJZFN0cgEKZ2V0QmFsYW5jZQEKYXNzZXRJZFN0cgMJAAACBQphc3NldElkU3RyAgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQphc3NldElkU3RyAQ9nZXRNYXJrZXRBc3NldHMACQC1CQIJAQx0cnlHZXRTdHJpbmcBAgxzZXR1cF90b2tlbnMCASwBEmdldEFzc2V0c01heFN1cHBseQAEAXMJAQx0cnlHZXRTdHJpbmcBAg9zZXR1cF9tYXhTdXBwbHkDCQAAAgUBcwIACQDMCAIA////////////AQkAzAgCAP///////////wEJAMwIAgD///////////8BCQDMCAIA////////////AQkAzAgCAP///////////wEJAMwIAgD///////////8BCQDMCAIA////////////AQUDbmlsCQC1CQIFAXMCASwBDWdldE91dGRhdGVkVXIBCmFzc2V0SWRTdHIEBGRvd24JAGsDCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlBQdTY2FsZTE2AwkAAAIFBGRvd24AAAAACQBrAwUGU2NhbGU4CQBrAwkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9iUmF0ZQUHU2NhbGUxNgUEZG93bgELZ2V0SW50ZXJlc3QBCmFzc2V0SWRTdHIEAnVyCQENZ2V0T3V0ZGF0ZWRVcgEFCmFzc2V0SWRTdHIEBWN1cnZlCQEMZ2V0UmF0ZUN1cnZlAQUKYXNzZXRJZFN0cgQEcmF0ZQkAZAIIBQVjdXJ2ZQJfMQMJAGcCCAUFY3VydmUCXzMFAnVyCQBrAwUCdXIIBQVjdXJ2ZQJfMggFBWN1cnZlAl8zCQBkAggFBWN1cnZlAl8yCQBrAwkAZQIFAnVyCAUFY3VydmUCXzMIBQVjdXJ2ZQJfNAkAZQIAgMLXLwgFBWN1cnZlAl8zCQCWAwEJAMwIAgkAawMFBHJhdGUFBlNjYWxlOAkAaAIFCWRheUJsb2NrcwDtAgkAzAgCAAEFA25pbAEQdG9rZW5SYXRlc1JlY2FsYwEKYXNzZXRJZFN0cgQIaW50ZXJlc3QJAQtnZXRJbnRlcmVzdAEFCmFzc2V0SWRTdHIEAnVyCQENZ2V0T3V0ZGF0ZWRVcgEFCmFzc2V0SWRTdHIEEGxhc3RSZWNhbGNIZWlnaHQJAQ10cnlHZXRJbnRlZ2VyAQIObGFzdFJhdGVIZWlnaHQECWxhc3RCUmF0ZQkAlgMBCQDMCAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfYlJhdGUJAMwIAgUHU2NhbGUxNgUDbmlsBAhuZXdCUmF0ZQkAZAIFCWxhc3RCUmF0ZQkAaAIJAGUCBQZoZWlnaHQFEGxhc3RSZWNhbGNIZWlnaHQFCGludGVyZXN0BAlsYXN0U1JhdGUJAJYDAQkAzAgCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlCQDMCAIFB1NjYWxlMTYFA25pbAQIbmV3U1JhdGUJAGQCBQlsYXN0U1JhdGUJAGkCCQBoAgkAaAIJAGUCBQZoZWlnaHQFEGxhc3RSZWNhbGNIZWlnaHQJAGsDBQhpbnRlcmVzdAUCdXIFBlNjYWxlOAkAZQIAZAULcmVzZXJ2ZUZ1bmQAZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQphc3NldElkU3RyAgZfc1JhdGUFCG5ld1NSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCmFzc2V0SWRTdHICBl9iUmF0ZQUIbmV3QlJhdGUJAMwIAgkBDEludGVnZXJFbnRyeQICDmxhc3RSYXRlSGVpZ2h0BQZoZWlnaHQFA25pbAENZ2V0QWN0dWFsUmF0ZQIKYXNzZXRJZFN0cghyYXRlVHlwZQoBAWYCBWFjY3VtBXRva2VuBAZyZWNhbGMJARB0b2tlblJhdGVzUmVjYWxjAQUFdG9rZW4JAJQKAgMJAQIhPQIFBXRva2VuBQphc3NldElkU3RyCAUFYWNjdW0CXzEDCQAAAgUIcmF0ZVR5cGUCBXNSYXRlCAkAkQMCBQZyZWNhbGMAAAV2YWx1ZQgJAJEDAgUGcmVjYWxjAAEFdmFsdWUJAM4IAggFBWFjY3VtAl8yBQZyZWNhbGMKAAIkbAkBD2dldE1hcmtldEFzc2V0cwAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAEFZ2V0VXIBCmFzc2V0SWRTdHIEBXJhdGVzCQEQdG9rZW5SYXRlc1JlY2FsYwEFCmFzc2V0SWRTdHIEBGRvd24JAGsDCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyCAkAkQMCBQVyYXRlcwAABXZhbHVlBQdTY2FsZTE2CQBrAwUGU2NhbGU4CQBrAwkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cggJAJEDAgUFcmF0ZXMAAQV2YWx1ZQUHU2NhbGUxNgUEZG93bgELcmF0ZXNSZWNhbGMACgEBZgIFYWNjdW0FdG9rZW4JAM4IAgUFYWNjdW0JARB0b2tlblJhdGVzUmVjYWxjAQUFdG9rZW4KAAIkbAkBD2dldE1hcmtldEFzc2V0cwAKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMARVnZXRUb2tlblByaWNlV2l0aFJpc2sCCmFzc2V0SWRTdHIMcmlza0F2ZXJzaXR5AwMJAAACBQphc3NldElkU3RyAiw5d2MzTFhOQTRURUJzWHlLdG9MRTltcmJERDdXTUhYdlhyQ2padmFiTEFzaQYJAAACBQphc3NldElkU3RyAixIR2dhYlRxVVM4V3RWRlVKemZtclRETWdFY2NKdVpMQlBoRmdRRnh2bnNvVwkAlAoCAMCEPQDAhD0EBXByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCCQEHQWRkcmVzcwEBGgFXSWbQy/OK9Vd6rfwhb3HFW4mIK9CBs7F/CQCsAgIFCmFzc2V0SWRTdHICB190d2FwNUIECXJpc2tMZXZlbAkBEUBleHRyTmF0aXZlKDEwNTApAgkBB0FkZHJlc3MBARoBV0lm0MvzivVXeq38IW9xxVuJiCvQgbOxfwkArAICBQphc3NldElkU3RyAgpfcmlza0xldmVsAwkAZwIFDHJpc2tBdmVyc2l0eQUJcmlza0xldmVsCQCUCgIFBXByaWNlBQVwcmljZQkAAgEJAKwCAgkArAICAhtvcmFjbGUgcHJpY2VzIGRvbid0IG1hdGNoOiAJAKQDAQUFcHJpY2UCIyBpcyB0aGUgcHJpY2UsIGJ1dCByaXNrIGlzIHRvbyBoaWdoAQ1nZXRUb2tlblByaWNlAQphc3NldElkU3RyCQEVZ2V0VG9rZW5QcmljZVdpdGhSaXNrAgUKYXNzZXRJZFN0cgADAQ5jYWxjQXNzZXRTY2FsZQEKYXNzZXRJZFN0cgQIZGVjaW1hbHMDCQAAAgUKYXNzZXRJZFN0cgIFV0FWRVMACAgJAQV2YWx1ZQEJAOwHAQkA2QQBBQphc3NldElkU3RyCGRlY2ltYWxzCQBsBgAKAAAFCGRlY2ltYWxzAAAAAAUERE9XTgESY2FsY1VzZXJDb2xsYXRlcmFsAQdhZGRyZXNzBBR1c2VyQ29sbGF0ZXJhbEludm9rZQkA/AcEBQR0aGlzAhFnZXRVc2VyQ29sbGF0ZXJhbAkAzAgCBwkAzAgCBQdhZGRyZXNzCQDMCAIGCQDMCAICAAUDbmlsBQNuaWwDCQAAAgUUdXNlckNvbGxhdGVyYWxJbnZva2UFFHVzZXJDb2xsYXRlcmFsSW52b2tlBBN1c2VyQ29sbGF0ZXJhbFZhbHVlBAckbWF0Y2gwBRR1c2VyQ29sbGF0ZXJhbEludm9rZQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAiRpc3N1ZSB3aGlsZSBkb2luZyBpbi1kYXBwIGludm9jYXRpb24DCQAAAgUTdXNlckNvbGxhdGVyYWxWYWx1ZQUTdXNlckNvbGxhdGVyYWxWYWx1ZQUTdXNlckNvbGxhdGVyYWxWYWx1ZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLhkBaQEGc3VwcGx5AAMJAQEhAQkBDXRyeUdldEJvb2xlYW4BAgxzZXR1cF9hY3RpdmUJAAIBAhFtYXJrZXQgaXMgc3RvcHBlZAMDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEGCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAAkAAgECHDEgcGF5bWVudCBoYXMgdG8gYmUgYXR0YWNoZWQECmFzc2V0SWRTdHIJAQ5nZXRBc3NldFN0cmluZwEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLYXNzZXRBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAskdDA4MjcwODMzNwkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgVzUmF0ZQQFc1JhdGUIBQskdDA4MjcwODMzNwJfMQQRcmF0ZXNSZWNhbGNSZXN1bHQIBQskdDA4MjcwODMzNwJfMgQGYW1vdW50CQBuBAULYXNzZXRBbW91bnQFB1NjYWxlMTYFBXNSYXRlBQRET1dOBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQJbWF4U3VwcGx5BAckbWF0Y2gwCQCiCAEJAKwCAgIQc2V0dXBfbWF4U3VwcGx5XwUKYXNzZXRJZFN0cgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXgFByRtYXRjaDAJAQ1wYXJzZUludFZhbHVlAQUBeAkBDXRyeUdldEludGVnZXIBCQCsAgICEHNldHVwX21heFN1cHBseV8FCmFzc2V0SWRTdHIECmFzc2V0UHJpY2UJAQ1nZXRUb2tlblByaWNlAQUKYXNzZXRJZFN0cgQSbmV3QWRkcmVzc1N1cHBsaWVkCQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUGYW1vdW50BBBuZXdUb3RhbFN1cHBsaWVkCQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUGYW1vdW50BARyYXRlCAkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgVzUmF0ZQJfMQQKYXNzZXRTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQUKYXNzZXRJZFN0cgQTbmV3VG90YWxTdXBwbGllZFVzZAkAawMJAGsDBRBuZXdUb3RhbFN1cHBsaWVkBQRyYXRlBQdTY2FsZTE2CAUKYXNzZXRQcmljZQJfMQUKYXNzZXRTY2FsZQMJAAACCQCzCQIJAQx0cnlHZXRTdHJpbmcBAgxzZXR1cF90b2tlbnMFCmFzc2V0SWRTdHIFBHVuaXQJAAIBAil0aGlzIGFzc2V0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIG1hcmtldAMDCQECIT0CBQltYXhTdXBwbHkAAAkAZgIFE25ld1RvdGFsU3VwcGxpZWRVc2QFCW1heFN1cHBseQcJAAIBAjNtYXggdG90YWwgc3VwcGx5IGZvciB0aGlzIHRva2VuIHJlYWNoZWQgaW4gdGhlIHBvb2wDCQBmAgkBDXRyeUdldEludGVnZXIBCQCsAgICDXNldHVwX3BhdXNlZF8FCmFzc2V0SWRTdHIAAAkAAgECKHRoaXMgYXNzZXQgY2FuJ3QgYmUgc3VwcGxpZWQgb3IgYm9ycm93ZWQJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIFEm5ld0FkZHJlc3NTdXBwbGllZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIFEG5ld1RvdGFsU3VwcGxpZWQFA25pbAURcmF0ZXNSZWNhbGNSZXN1bHQBaQEId2l0aGRyYXcCCmFzc2V0SWRTdHILYXNzZXRBbW91bnQECyR0MDk4MDk5ODc2CQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBXNSYXRlBAVzUmF0ZQgFCyR0MDk4MDk5ODc2Al8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFCyR0MDk4MDk5ODc2Al8yBAZhbW91bnQJAG4EBQthc3NldEFtb3VudAUHU2NhbGUxNgUFc1JhdGUFB0NFSUxJTkcEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBA1hc3NldFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBA1hc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyBBF1c2VyQXNzZXRTdXBwbGllZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgQRdXNlckFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIEEmNvbGxhdGVyYWxWYWx1ZUludgkA/AcEBQR0aGlzAhFnZXRVc2VyQ29sbGF0ZXJhbAkAzAgCBwkAzAgCBQdhZGRyZXNzCQDMCAIGCQDMCAIJAKwCAgkArAICBQphc3NldElkU3RyAgosc3VwcGxpZWQsCQCkAwEJAQEtAQUGYW1vdW50BQNuaWwFA25pbAMJAAACBRJjb2xsYXRlcmFsVmFsdWVJbnYFEmNvbGxhdGVyYWxWYWx1ZUludgQPY29sbGF0ZXJhbFZhbHVlBAckbWF0Y2gwBRJjb2xsYXRlcmFsVmFsdWVJbnYDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQIfY2FuJ3QgZ2V0IHVzZXIgY29sbGF0ZXJhbCB2YWx1ZQMJAQEhAQkBDXRyeUdldEJvb2xlYW4BAgxzZXR1cF9hY3RpdmUJAAIBAhFtYXJrZXQgaXMgc3RvcHBlZAMJAGYCAAAFD2NvbGxhdGVyYWxWYWx1ZQkAAgECMnlvdSBkb250IGhhdmUgZW5vdWdoIGNvbGxhdGVyYWwgZm9yIHRoaXMgb3BlcmF0aW9uAwkAZgIFBmFtb3VudAkAZQIFDWFzc2V0U3VwcGxpZWQFDWFzc2V0Qm9ycm93ZWQJAAIBAip0aGlzIGFtb3VudCBpcyBub3QgYXZhaWxhYmxlIG9uIHRoZSBtYXJrZXQDCQBmAgUGYW1vdW50CQBlAgURdXNlckFzc2V0U3VwcGxpZWQFEXVzZXJBc3NldEJvcnJvd2VkCQACAQIqdGhpcyBhbW91bnQgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyCQBlAgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIFBmFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFC2Fzc2V0QW1vdW50CQENZ2V0QXNzZXRCeXRlcwEFCmFzc2V0SWRTdHIFA25pbAURcmF0ZXNSZWNhbGNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEGYm9ycm93Agphc3NldElkU3RyC2Fzc2V0QW1vdW50BAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQNJHQwMTE0NDgxMTUxNQkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgViUmF0ZQQFYlJhdGUIBQ0kdDAxMTQ0ODExNTE1Al8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFDSR0MDExNDQ4MTE1MTUCXzIEBmFtb3VudAkAbgQFC2Fzc2V0QW1vdW50BQdTY2FsZTE2BQViUmF0ZQUHQ0VJTElORwQSY29sbGF0ZXJhbFZhbHVlSW52CQD8BwQFBHRoaXMCEWdldFVzZXJDb2xsYXRlcmFsCQDMCAIHCQDMCAIFB2FkZHJlc3MJAMwIAgYJAMwIAgkArAICCQCsAgIFCmFzc2V0SWRTdHICCixib3Jyb3dlZCwJAKQDAQUGYW1vdW50BQNuaWwFA25pbAMJAAACBRJjb2xsYXRlcmFsVmFsdWVJbnYFEmNvbGxhdGVyYWxWYWx1ZUludgQPY29sbGF0ZXJhbFZhbHVlBAckbWF0Y2gwBRJjb2xsYXRlcmFsVmFsdWVJbnYDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQIfY2FuJ3QgZ2V0IHVzZXIgY29sbGF0ZXJhbCB2YWx1ZQMJAQEhAQkBDXRyeUdldEJvb2xlYW4BAgxzZXR1cF9hY3RpdmUJAAIBAhFtYXJrZXQgaXMgc3RvcHBlZAMJAGYCAAAFD2NvbGxhdGVyYWxWYWx1ZQkAAgECIXlvdSBoYXZlIHRvIHN1cHBseSBtb3JlIHRvIGJvcnJvdwMJAGYCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgINc2V0dXBfcGF1c2VkXwUKYXNzZXRJZFN0cgAACQACAQIodGhpcyBhc3NldCBjYW4ndCBiZSBzdXBwbGllZCBvciBib3Jyb3dlZAQNYXNzZXRTdXBwbGllZAkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgQNYXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgQRdXNlckFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIDCQBmAgUGYW1vdW50CQBlAgUNYXNzZXRTdXBwbGllZAUNYXNzZXRCb3Jyb3dlZAkAAgECHHRoaXMgYW1vdW50IGlzIG5vdCBhdmFpbGFibGUJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIJAGQCBRF1c2VyQXNzZXRCb3Jyb3dlZAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgkAZAIFDWFzc2V0Qm9ycm93ZWQFBmFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFC2Fzc2V0QW1vdW50CQENZ2V0QXNzZXRCeXRlcwEFCmFzc2V0SWRTdHIFA25pbAURcmF0ZXNSZWNhbGNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEFcmVwYXkAAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkAwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAAACQACAQIcMSBwYXltZW50IGhhcyB0byBiZSBhdHRhY2hlZAQKYXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAthc3NldEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEDSR0MDEzMjAzMTMyNzAJAQ1nZXRBY3R1YWxSYXRlAgUKYXNzZXRJZFN0cgIFYlJhdGUEBWJSYXRlCAUNJHQwMTMyMDMxMzI3MAJfMQQRcmF0ZXNSZWNhbGNSZXN1bHQIBQ0kdDAxMzIwMzEzMjcwAl8yBAZhbW91bnQJAG4EBQthc3NldEFtb3VudAUHU2NhbGUxNgUFYlJhdGUFB0NFSUxJTkcEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBA1hc3NldFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBA1hc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyBBF1c2VyQXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgQKYW1vdW50TGVmdAkAZQIFEXVzZXJBc3NldEJvcnJvd2VkBQZhbW91bnQEC3JlcGF5QW1vdW50AwkAZwIFCmFtb3VudExlZnQAAAUGYW1vdW50BRF1c2VyQXNzZXRCb3Jyb3dlZAMJAAACCQCzCQIJAQx0cnlHZXRTdHJpbmcBAgxzZXR1cF90b2tlbnMFCmFzc2V0SWRTdHIFBHVuaXQJAAIBAil0aGlzIGFzc2V0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIG1hcmtldAkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyCQBlAgURdXNlckFzc2V0Qm9ycm93ZWQFC3JlcGF5QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgkAZQIFDWFzc2V0Qm9ycm93ZWQFC3JlcGF5QW1vdW50BQNuaWwFEXJhdGVzUmVjYWxjUmVzdWx0AwkAZwIFCmFtb3VudExlZnQAAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkBAS0BBQphbW91bnRMZWZ0CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA25pbAFpAQhyZXBheUZvcgEHYWRkcmVzcwMJAQEhAQkBDXRyeUdldEJvb2xlYW4BAgxzZXR1cF9hY3RpdmUJAAIBAhFtYXJrZXQgaXMgc3RvcHBlZAMJAQIhPQIIBQFpBmNhbGxlcgkBB0FkZHJlc3MBARoBVx7h+0Axa4Hm7EtWGwUsUaGTbt8JsTzSwQkAAgECJ2F2YWlsYWJsZSBvbmx5IGZvciByZXNlcnZlIGZ1bmQgYWRkcmVzcwMJAAACBQdhZGRyZXNzAgZnbG9iYWwJAAIBAiB5b3UgY2FuJ3QgcmVwYXkgZm9yIGV2ZXJ5b25lIDpfKQMDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEGCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAAkAAgECHDEgcGF5bWVudCBoYXMgdG8gYmUgYXR0YWNoZWQECmFzc2V0SWRTdHIJAQ5nZXRBc3NldFN0cmluZwEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLYXNzZXRBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BA0kdDAxNDg2NzE0OTM0CQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBWJSYXRlBAViUmF0ZQgFDSR0MDE0ODY3MTQ5MzQCXzEEEXJhdGVzUmVjYWxjUmVzdWx0CAUNJHQwMTQ4NjcxNDkzNAJfMgQGYW1vdW50CQBuBAULYXNzZXRBbW91bnQFB1NjYWxlMTYFBWJSYXRlBQdDRUlMSU5HBA1hc3NldFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBA1hc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyBBF1c2VyQXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgQKYW1vdW50TGVmdAkAZQIFEXVzZXJBc3NldEJvcnJvd2VkBQZhbW91bnQEC3JlcGF5QW1vdW50AwkAZwIFCmFtb3VudExlZnQAAAUGYW1vdW50BRF1c2VyQXNzZXRCb3Jyb3dlZAMJAAACCQCzCQIJAQx0cnlHZXRTdHJpbmcBAgxzZXR1cF90b2tlbnMFCmFzc2V0SWRTdHIFBHVuaXQJAAIBAil0aGlzIGFzc2V0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIG1hcmtldAkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyCQBlAgURdXNlckFzc2V0Qm9ycm93ZWQFC3JlcGF5QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgkAZQIFDWFzc2V0Qm9ycm93ZWQFC3JlcGF5QW1vdW50BQNuaWwFEXJhdGVzUmVjYWxjUmVzdWx0AwkAZwIFCmFtb3VudExlZnQAAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkBAS0BBQphbW91bnRMZWZ0CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA25pbAFpAQ1zdGFrZVRva2VuQWxsAQphc3NldElkU3RyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIsb25seSBmb3IgaW50ZXJuYWwgc21hcnQgY29udHJhY3QgaW52b2NhdGlvbnMEBmFtb3VudAkBCmdldEJhbGFuY2UBBQphc3NldElkU3RyBANpbnYJAPwHBAUEdGhpcwIKc3Rha2VUb2tlbgkAzAgCBQphc3NldElkU3RyCQDMCAIFBmFtb3VudAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpzdGFrZVRva2VuAgphc3NldElkU3RyBmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECLG9ubHkgZm9yIGludGVybmFsIHNtYXJ0IGNvbnRyYWN0IGludm9jYXRpb25zAwkAAAIFCmFzc2V0SWRTdHICLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwBAxhbW91bnRTdGFrZWQJAQ10cnlHZXRJbnRlZ2VyAQI9YXV0b3N0YWtlX2Ftb3VudF9ERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAQDaW52CQD8BwQJAQdBZGRyZXNzAQEaAVfkDqc2T5IL15fPpB0/NRvPQ2rrqjzzcZ0CBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIBILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRBQZhbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAzAgCCQEMSW50ZWdlckVudHJ5AgI9YXV0b3N0YWtlX2Ftb3VudF9ERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAkAZAIFDGFtb3VudFN0YWtlZAUGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUKYXNzZXRJZFN0cgIsOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEEDGFtb3VudFN0YWtlZAkBDXRyeUdldEludGVnZXIBAj1hdXRvc3Rha2VfYW1vdW50Xzh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxBANpbnYJAPwHBAkBB0FkZHJlc3MBARoBV/cVNRHF7XKFU1QQ8N0bTeJqPNO0aHcpWgIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgEgdRYQOIB2DVVlfknzrrHb5hmcahBoH8lVYfpKRlp3MBwFBmFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQDMCAIJAQxJbnRlZ2VyRW50cnkCAj1hdXRvc3Rha2VfYW1vdW50Xzh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxCQBkAgUMYW1vdW50U3Rha2VkBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQphc3NldElkU3RyAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAQMYW1vdW50U3Rha2VkCQENdHJ5R2V0SW50ZWdlcgECPWF1dG9zdGFrZV9hbW91bnRfQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wEA2ludgkA/AcECQEHQWRkcmVzcwEBGgFXa2g44QPUmoyfEhvGLLwjBzkLze0S1wpfAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCASCS0fRK4hEBK/R+6t4hjj3F+8nyfc6Hsu1SGfA6TiRY9QUGYW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAMwIAgkBDEludGVnZXJFbnRyeQICPWF1dG9zdGFrZV9hbW91bnRfQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wJAGQCBQxhbW91bnRTdGFrZWQFBmFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwBaQEMdW5zdGFrZVRva2VuAgphc3NldElkU3RyBmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECLG9ubHkgZm9yIGludGVybmFsIHNtYXJ0IGNvbnRyYWN0IGludm9jYXRpb25zAwkAAAIFCmFzc2V0SWRTdHICLDh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxBAxhbW91bnRTdGFrZWQJAQ10cnlHZXRJbnRlZ2VyAQI9YXV0b3N0YWtlX2Ftb3VudF84dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQQDaW52CQD8BwQJAQdBZGRyZXNzAQEaAVf3FTURxe1yhVNUEPDdG03iajzTtGh3KVoCB3VuU3Rha2UJAMwIAgUGYW1vdW50BQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgkAzAgCCQEMSW50ZWdlckVudHJ5AgI9YXV0b3N0YWtlX2Ftb3VudF84dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQkAZQIFDGFtb3VudFN0YWtlZAUGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUKYXNzZXRJZFN0cgIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wEDGFtb3VudFN0YWtlZAkBDXRyeUdldEludGVnZXIBAj1hdXRvc3Rha2VfYW1vdW50X0F0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBANpbnYJAPwHBAkBB0FkZHJlc3MBARoBV2toOOED1JqMnxIbxiy8Iwc5C83tEtcKXwIHdW5zdGFrZQkAzAgCBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BARiYWwwCQEKZ2V0QmFsYW5jZQECLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMAwkAAAIFBGJhbDAFBGJhbDAEBGludjIJAPwHBAkBB0FkZHJlc3MBARoBV/t16usT/RnAywjcj2CzfgO6EY6tj7fQ6wIXZ25zYnRSZXdhcmRzU1lTUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAACBQRpbnYyBQRpbnYyBAx0b3B1cFJld2FyZHMEByRtYXRjaDAFBGludjIDCQABAgUHJG1hdGNoMAIJTGlzdFtBbnldBAF4BQckbWF0Y2gwBAhzZWNvbmRFbAkAkQMCBQF4AAEEByRtYXRjaDEFCHNlY29uZEVsAwkAAQIFByRtYXRjaDECBlN0cmluZwQIc2Vjb25kRWwFByRtYXRjaDEECXVzZG5WYWx1ZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCCQC1CQIFCHNlY29uZEVsAgFfAAECAToAAQQKd2F2ZXNWYWx1ZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCCQC1CQIFCHNlY29uZEVsAgFfAAACAToAAQMDCQECIT0CBQl1c2RuVmFsdWUAAAYJAQIhPQIFCndhdmVzVmFsdWUAAAQIdXNkbkJhbDAJAQpnZXRCYWxhbmNlAQIsREcyeEZrUGREd0tVb0JrekdBaFF0THBTR3pmWExpQ1lQRXplS0gyQWQyNHADCQAAAgUIdXNkbkJhbDAFCHVzZG5CYWwwBAl3YXZlc0JhbDAJAQpnZXRCYWxhbmNlAQIFV0FWRVMDCQAAAgUJd2F2ZXNCYWwwBQl3YXZlc0JhbDAEBGludjMJAPwHBAkBB0FkZHJlc3MBARoBV2toOOED1JqMnxIbxiy8Iwc5C83tEtcKXwIMY2xhaW1SZXdhcmRzBQNuaWwFA25pbAMJAAACBQRpbnYzBQRpbnYzBAl3YXZlc0JhbDEJAQpnZXRCYWxhbmNlAQIFV0FWRVMDCQAAAgUJd2F2ZXNCYWwxBQl3YXZlc0JhbDEEBGludjQJAPwHBAkBB0FkZHJlc3MBARoBV84UFJ0WWAPkQ0x69aXssp+tv82zg/kpogIEc3dhcAkAzAgCAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAkAZQIFCXdhdmVzQmFsMQUJd2F2ZXNCYWwwBQNuaWwDCQAAAgUEaW52NAUEaW52NAQIdXNkbkJhbDEJAQpnZXRCYWxhbmNlAQIsREcyeEZrUGREd0tVb0JrekdBaFF0THBTR3pmWExpQ1lQRXplS0gyQWQyNHADCQAAAgUIdXNkbkJhbDEFCHVzZG5CYWwxBARpbnY1CQD8BwQJAQdBZGRyZXNzAQEaAVdA6qFcZYEoPXSEW1dgnvvjeSu33Iq0kHcCBHN3YXAJAMwIAgIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIBILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRCQBlAgUIdXNkbkJhbDEFCHVzZG5CYWwwBQNuaWwDCQAAAgUEaW52NQUEaW52NQQEaW52NgkA/AcEBQR0aGlzAgthZGRJbnRlcmVzdAkAzAgCAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAkAzAgCCQBlAgkBCmdldEJhbGFuY2UBAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAUEYmFsMAUDbmlsBQNuaWwDCQAAAgUEaW52NgUEaW52NgACCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAEAAQAAAwkAAAIFDHRvcHVwUmV3YXJkcwUMdG9wdXBSZXdhcmRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAj1hdXRvc3Rha2VfYW1vdW50X0F0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMCQBlAgUMYW1vdW50U3Rha2VkBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAWkBC2FkZEludGVyZXN0Agphc3NldElkU3RyBmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECGG9ubHkgZm9yIHNlbGYgaW52b2NhdGlvbgQGZWFybmVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIVYXV0b3N0YWtlX2xhc3RFYXJuZWRfBQphc3NldElkU3RyBApsYXN0SGVpZ2h0CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIUYXV0b3N0YWtlX2xhc3RCbG9ja18FCmFzc2V0SWRTdHIEC2NsZWFuQW1vdW50CQBrAwUGYW1vdW50AFAAZAQMc3RhdGVDaGFuZ2VzAwMJAAACBQpsYXN0SGVpZ2h0BQZoZWlnaHQGCQAAAgUGYW1vdW50AAAFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhhhdXRvc3Rha2VfcHJlTGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIFBmVhcm5lZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhdhdXRvc3Rha2VfcHJlTGFzdEJsb2NrXwUKYXNzZXRJZFN0cgUKbGFzdEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhVhdXRvc3Rha2VfbGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIJAGQCBQZlYXJuZWQFC2NsZWFuQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICFGF1dG9zdGFrZV9sYXN0QmxvY2tfBQphc3NldElkU3RyBQZoZWlnaHQFA25pbAkAzggCBQxzdGF0ZUNoYW5nZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlCQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQkAawMFB1NjYWxlMTYFC2NsZWFuQW1vdW50CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBQNuaWwBaQETYWRkSW50ZXJlc3RFWFRFUk5BTAAEBmFtb3VudAkAawMICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AFAAZAQHYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAphc3NldElkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBBQdhc3NldElkBAZlYXJuZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhVhdXRvc3Rha2VfbGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIECmxhc3RIZWlnaHQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhRhdXRvc3Rha2VfbGFzdEJsb2NrXwUKYXNzZXRJZFN0cgQMc3RhdGVDaGFuZ2VzAwMJAAACBQpsYXN0SGVpZ2h0BQZoZWlnaHQGCQAAAgUGYW1vdW50AAAFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhhhdXRvc3Rha2VfcHJlTGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIFBmVhcm5lZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhdhdXRvc3Rha2VfcHJlTGFzdEJsb2NrXwUKYXNzZXRJZFN0cgUKbGFzdEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhVhdXRvc3Rha2VfbGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIJAGQCBQZlYXJuZWQFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhRhdXRvc3Rha2VfbGFzdEJsb2NrXwUKYXNzZXRJZFN0cgUGaGVpZ2h0BQNuaWwJAM4IAgUMc3RhdGVDaGFuZ2VzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfc1JhdGUJAGsDBQdTY2FsZTE2BQZhbW91bnQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIFA25pbAFpAQdwcmVJbml0BAZ0b2tlbnMEbHR2cwNsdHMJcGVuYWx0aWVzCgEBZgIFYWNjdW0FdG9rZW4JAM4IAgUFYWNjdW0JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUFdG9rZW4CBl9iUmF0ZQUHU2NhbGUxNgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQV0b2tlbgIGX3NSYXRlBQdTY2FsZTE2BQNuaWwDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgphZG1pbiBvbmx5BAVyYXRlcwoAAiRsCQC1CQIFBnRva2VucwIBLAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCAgxzZXR1cF90b2tlbnMFBnRva2VucwkAzAgCCQELU3RyaW5nRW50cnkCAgpzZXR1cF9sdHZzBQRsdHZzCQDMCAIJAQtTdHJpbmdFbnRyeQICCXNldHVwX2x0cwUDbHRzCQDMCAIJAQtTdHJpbmdFbnRyeQICD3NldHVwX3BlbmFsdGllcwUJcGVuYWx0aWVzCQDMCAIJAQxCb29sZWFuRW50cnkCAgxzZXR1cF9hY3RpdmUGBQNuaWwFBXJhdGVzAWkBDGluaXROZXdUb2tlbgQFdG9rZW4DbHR2Amx0B3BlbmFsdHkDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgphZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQICDHNldHVwX3Rva2VucwkArAICCQCsAgIJAQx0cnlHZXRTdHJpbmcBAgxzZXR1cF90b2tlbnMCASwFBXRva2VuCQDMCAIJAQtTdHJpbmdFbnRyeQICCnNldHVwX2x0dnMJAKwCAgkArAICCQEMdHJ5R2V0U3RyaW5nAQIKc2V0dXBfbHR2cwIBLAUDbHR2CQDMCAIJAQtTdHJpbmdFbnRyeQICCXNldHVwX2x0cwkArAICCQCsAgIJAQx0cnlHZXRTdHJpbmcBAglzZXR1cF9sdHMCASwFAmx0CQDMCAIJAQtTdHJpbmdFbnRyeQICD3NldHVwX3BlbmFsdGllcwkArAICCQCsAgIJAQx0cnlHZXRTdHJpbmcBAg9zZXR1cF9wZW5hbHRpZXMCASwFB3BlbmFsdHkJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUFdG9rZW4CBl9iUmF0ZQUHU2NhbGUxNgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQV0b2tlbgIGX3NSYXRlBQdTY2FsZTE2BQNuaWwBaQEPdXBkYXRlUGFyYW1ldGVyAgNrZXkDdmFsAwMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFXFHlYhcD6GmfnFDSNDPfE8G1F7fYc+T1BBwkAAgECCmFkbWluIG9ubHkJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQkBDXBhcnNlSW50VmFsdWUBBQN2YWwFA25pbAFpAQx1cGRhdGVTdHJpbmcCA2tleQN2YWwDAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQECIT0CCAUBaQZjYWxsZXIJAQdBZGRyZXNzAQEaAVcUeViFwPoaZ+cUNI0M98TwbUXt9hz5PUEHCQACAQIKYWRtaW4gb25seQkAzAgCCQELU3RyaW5nRW50cnkCBQNrZXkFA3ZhbAUDbmlsAWkBEmNsYWltVG9SZXNlcnZlRnVuZAEFZGVidWcEBmFzc2V0cwkBD2dldE1hcmtldEFzc2V0cwAEBXJhdGVzCAkBDWdldEFjdHVhbFJhdGUCCQCRAwIFBmFzc2V0cwAAAgVzUmF0ZQJfMgQCbGkJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsFA25pbAoBAWYCBWFjY3VtAW4DCQBnAgUBbgkAkAMBBQZhc3NldHMFBWFjY3VtBAphc3NldElkU3RyCQCRAwIFBmFzc2V0cwUBbgQPYXV0b3N0YWtlQW1vdW50CQEMdHJ5R2V0U3RyaW5nAQkArAICAhFhdXRvc3Rha2VfYW1v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c2V0dXBfBQphc3NldElkU3RyAgdfdGVtcExUCQBrAwUGdGVtcExUAKlOAJBOBQNuaWwFA25pbAFpAQhzaHV0ZG93bgEIc2h1dGRvd24DCQAAAgkAzwgCBRFzaHV0ZG93bldoaXRlbGlzdAgIBQFpBmNhbGxlcgVieXRlcwUEdW5pdAkAAgECF3VzZXIgbm90IGluIGEgd2hpdGVsaXN0CQDMCAIJAQxCb29sZWFuRW50cnkCAgxzZXR1cF9hY3RpdmUJAQEhAQUIc2h1dGRvd24FA25pbAFpAQlsaXF1aWRhdGUGBWRlYnVnB2FkZHJlc3MLYXNzZXRBbW91bnQLc0Fzc2V0SWRTdHILYkFzc2V0SWRTdHIIcm91dGVTdHIDCQEBIQEJARZ2ZXJpZnlMaXF1aWRhdG9yUmlnaHRzAQgFAWkGY2FsbGVyCQACAQIodGVtcG9yYXJpbHkgYXZhaWxhYmxlIGZvciB3aGl0ZWxpc3Qgb25seQMJAQEhAQkBDXRyeUdldEJvb2xlYW4BAgxzZXR1cF9hY3RpdmUJAAIBAhFtYXJrZXQgaXMgc3RvcHBlZAQOdXNlckNvbGxhdGVyYWwJARJjYWxjVXNlckNvbGxhdGVyYWwBBQdhZGRyZXNzAwkAAAIFDnVzZXJDb2xsYXRlcmFsBQ51c2VyQ29sbGF0ZXJhbAQNJHQwMjg0MzAyODQ5MgkBDWdldEFjdHVhbFJhdGUCBQtzQXNzZXRJZFN0cgIFc1JhdGUEBXNSYXRlCAUNJHQwMjg0MzAyODQ5MgJfMQQLcmF0ZXNSZXN1bHQIBQ0kdDAyODQzMDI4NDkyAl8yBA0kdDAyODQ5NzI4NTY2CQENZ2V0QWN0dWFsUmF0ZQIFC2JBc3NldElkU3RyAgViUmF0ZQQFYlJhdGUIBQ0kdDAyODQ5NzI4NTY2Al8xBBJyYXRlc1JlY2FsY1Jlc3VsdDIIBQ0kdDAyODQ5NzI4NTY2Al8yBAxzQXNzZXRBbW91bnQJAGsDBQthc3NldEFtb3VudAUHU2NhbGUxNgUFc1JhdGUEEGN1cnJlbnRTUG9zaXRpb24JAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FC3NBc3NldElkU3RyBBNjdXJyZW50QlBvc2l0aW9uVmFsCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgQQY3VycmVudEJQb3NpdGlvbgMJAGYCBRNjdXJyZW50QlBvc2l0aW9uVmFsAAAFE2N1cnJlbnRCUG9zaXRpb25WYWwJAAIBAiB1c2VyIGhhcyBubyBib3Jyb3cgaW4gdGhpcyB0b2tlbgMJAGYCBQ51c2VyQ29sbGF0ZXJhbAAACQACAQIYdXNlciBjYW4ndCBiZSBsaXF1aWRhdGVkAwkAZgIFDHNBc3NldEFtb3VudAUQY3VycmVudFNQb3NpdGlvbgkAAgECMnBvc2l0aW9uIHRvIGxpcXVpZGF0ZSBpcyBiaWdnZXIgdGhhbiB1c2VyJ3Mgc3VwcGx5BA5iYWxhbmNlMEJlZm9yZQkBCmdldEJhbGFuY2UBBQtzQXNzZXRJZFN0cgMJAAACBQ5iYWxhbmNlMEJlZm9yZQUOYmFsYW5jZTBCZWZvcmUEDmJhbGFuY2UxQmVmb3JlCQEKZ2V0QmFsYW5jZQEFC2JBc3NldElkU3RyAwkAAAIFDmJhbGFuY2UxQmVmb3JlBQ5iYWxhbmNlMUJlZm9yZQQOZXhjaGFuZ2VJbnZva2UJAPwHBAURYWdncmVnYXRvckFkZHJlc3MCBHN3YXAJAMwIAgUIcm91dGVTdHIJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ1nZXRBc3NldEJ5dGVzAQULc0Fzc2V0SWRTdHIFC2Fzc2V0QW1vdW50BQNuaWwDCQAAAgUOZXhjaGFuZ2VJbnZva2UFDmV4Y2hhbmdlSW52b2tlBAphc3NldDBTb2xkCQBlAgUOYmFsYW5jZTBCZWZvcmUJAQpnZXRCYWxhbmNlAQULc0Fzc2V0SWRTdHIDCQAAAgUKYXNzZXQwU29sZAUKYXNzZXQwU29sZAQMYXNzZXQxQm91Z2h0CQBlAgkBCmdldEJhbGFuY2UBBQtiQXNzZXRJZFN0cgUOYmFsYW5jZTFCZWZvcmUDCQAAAgUMYXNzZXQxQm91Z2h0BQxhc3NldDFCb3VnaHQEC2Fzc2V0MFByaWNlCAkBDWdldFRva2VuUHJpY2UBBQtzQXNzZXRJZFN0cgJfMQQLYXNzZXQwU2NhbGUJAQ5jYWxjQXNzZXRTY2FsZQEFC3NBc3NldElkU3RyBAlhc3NldDBVc2QJAGsDBQphc3NldDBTb2xkBQthc3NldDBQcmljZQULYXNzZXQwU2NhbGUEC2Fzc2V0MVByaWNlCAkBDWdldFRva2VuUHJpY2UBBQtiQXNzZXRJZFN0cgJfMgQLYXNzZXQxU2NhbGUJAQ5jYWxjQXNzZXRTY2FsZQEFC2JBc3NldElkU3RyBAlhc3NldDFVc2QJAGsDBQxhc3NldDFCb3VnaHQFC2Fzc2V0MVByaWNlBQthc3NldDFTY2FsZQQHcGVuYWx0eQkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkBDHRyeUdldFN0cmluZwECD3NldHVwX3BlbmFsdGllcwIBLAkBBXZhbHVlAQkAzwgCCQEPZ2V0TWFya2V0QXNzZXRzAAULYkFzc2V0SWRTdHIEEWxpcXVpZGF0aW9uUHJvZml0CQBlAgUJYXNzZXQxVXNkCQBrAwUJYXNzZXQwVXNkCQBlAgUGU2NhbGU4BQdwZW5hbHR5BQZTY2FsZTgEDHNBc3NldENoYW5nZQkAawMFCmFzc2V0MFNvbGQFB1NjYWxlMTYFBXNSYXRlBAxiQXNzZXRDaGFuZ2UJAGsDCQBrAwUMYXNzZXQxQm91Z2h0BQdTY2FsZTE2BQViUmF0ZQkAZQIFBlNjYWxlOAkAawMFEWxpcXVpZGF0aW9uUHJvZml0BQZTY2FsZTgFCWFzc2V0MVVzZAUGU2NhbGU4AwkAZgIFCmFzc2V0MFNvbGQFC2Fzc2V0QW1vdW50CQACAQIjbW9yZSBhc3NldHMgZXhjaGFuZ2VkIHRoYW4gZXhwZWN0ZWQDCQBmAgAABRFsaXF1aWRhdGlvblByb2ZpdAkAAgECL3ByaWNlIGltcGFjdCBpcyBiaWdnZXIgdGhhbiBsaXF1aWRhdGlvbiBwZW5hbHR5CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIJAGUCBRBjdXJyZW50U1Bvc2l0aW9uBQxzQXNzZXRDaGFuZ2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgkAZQIFEGN1cnJlbnRCUG9zaXRpb24FDGJBc3NldENoYW5nZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg90b3RhbF9zdXBwbGllZF8FC3NBc3NldElkU3RyCQBlAgkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIFDHNBc3NldENoYW5nZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg90b3RhbF9ib3Jyb3dlZF8FC2JBc3NldElkU3RyCQBlAgkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIFDGJBc3NldENoYW5nZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC2xpcXVpZGF0ZVYyAwVkZWJ1ZwdhZGRyZXNzC3NBc3NldElkU3RyAwkBASEBCQEWdmVyaWZ5TGlxdWlkYXRvclJpZ2h0cwEIBQFpBmNhbGxlcgkAAgECKHRlbXBvcmFyaWx5IGF2YWlsYWJsZSBmb3Igd2hpdGVsaXN0IG9ubHkDCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQECGJBc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC2JBc3NldElkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBBQhiQXNzZXRJZAQMYkFzc2V0QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQOdXNlckNvbGxhdGVyYWwJARJjYWxjVXNlckNvbGxhdGVyYWwBBQdhZGRyZXNzAwkAAAIFDnVzZXJDb2xsYXRlcmFsBQ51c2VyQ29sbGF0ZXJhbAMJAGYCBQ51c2VyQ29sbGF0ZXJhbAAACQACAQIYdXNlciBjYW4ndCBiZSBsaXF1aWRhdGVkBAxtYXJrZXRBc3NldHMJAQ9nZXRNYXJrZXRBc3NldHMABAlhc3NldDFOdW0JAQV2YWx1ZQEJAM8IAgUMbWFya2V0QXNzZXRzBQtiQXNzZXRJZFN0cgQJYXNzZXQwTnVtCQEFdmFsdWUBCQDPCAIFDG1hcmtldEFzc2V0cwULc0Fzc2V0SWRTdHIEDSR0MDMxNzIxMzE3ODMJAQ1nZXRBY3R1YWxSYXRlAgULYkFzc2V0SWRTdHICBWJSYXRlBAViUmF0ZQgFDSR0MDMxNzIxMzE3ODMCXzEEC3JhdGVzUmVzdWx0CAUNJHQwMzE3MjEzMTc4MwJfMgQLYXNzZXQxUHJpY2UICQENZ2V0VG9rZW5QcmljZQEFC2JBc3NldElkU3RyAl8yBAthc3NldDFTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQULYkFzc2V0SWRTdHIECmJBbW91bnRVc2QJAGsDBQxiQXNzZXRBbW91bnQFC2Fzc2V0MVByaWNlBQthc3NldDFTY2FsZQQHcGVuYWx0eQkBDXBhcnNlSW50VmFsdWUBCQEFdmFsdWUBCQCRAwIJALUJAgkBDHRyeUdldFN0cmluZwECD3NldHVwX3BlbmFsdGllcwIBLAUJYXNzZXQxTnVtBAthc3NldDBQcmljZQgJAQ1nZXRUb2tlblByaWNlAQULc0Fzc2V0SWRTdHICXzEEC2Fzc2V0MFNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBBQtzQXNzZXRJZFN0cgQKc0Ftb3VudFVzZAkAawMFCmJBbW91bnRVc2QJAGQCBQZTY2FsZTgFB3BlbmFsdHkFBlNjYWxlOAQMc0Fzc2V0QW1vdW50CQBrAwUKc0Ftb3VudFVzZAULYXNzZXQwU2NhbGUFC2Fzc2V0MFByaWNlBAdiQW1vdW50CQBrAwUMYkFzc2V0QW1vdW50BQdTY2FsZTE2BQViUmF0ZQQHc0Ftb3VudAkAawMFDHNBc3NldEFtb3VudAUHU2NhbGUxNggJAJEDAgULcmF0ZXNSZXN1bHQJAGQCCQBoAgUJYXNzZXQwTnVtAAMAAQV2YWx1ZQQQY3VycmVudFNQb3NpdGlvbgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIEE2N1cnJlbnRCUG9zaXRpb25WYWwJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FC2JBc3NldElkU3RyBBBjdXJyZW50QlBvc2l0aW9uAwkAZgIFE2N1cnJlbnRCUG9zaXRpb25WYWwAAAUTY3VycmVudEJQb3NpdGlvblZhbAkAAgECIHVzZXIgaGFzIG5vIGJvcnJvdyBpbiB0aGlzIHRva2VuAwkAZgIFB3NBbW91bnQFEGN1cnJlbnRTUG9zaXRpb24JAAIBAjJwb3NpdGlvbiB0byBsaXF1aWRhdGUgaXMgYmlnZ2VyIHRoYW4gdXNlcidzIHN1cHBseQMFBWRlYnVnCQACAQIVbGlxdWlkYXRpb24gd2lsbCBwYXNzCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQxzQXNzZXRBbW91bnQJAQ1nZXRBc3NldEJ5dGVzAQULc0Fzc2V0SWRTdHIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgkAZQIFEGN1cnJlbnRTUG9zaXRpb24FB3NBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgkAZQIFEGN1cnJlbnRCUG9zaXRpb24FB2JBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FC3NBc3NldElkU3RyBQdzQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgUHYkFtb3VudAUDbmlsBQtyYXRlc1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFnZXRVc2VyQ29sbGF0ZXJhbAQFZGVidWcHYWRkcmVzcw1taW51c0JvcnJvd2VkC2FmdGVyQ2hhbmdlBAZhc3NldHMJAQ9nZXRNYXJrZXRBc3NldHMABARsdHZzCQC1CQIJAQx0cnlHZXRTdHJpbmcBAgpzZXR1cF9sdHZzAgEsBANsdHMJALUJAgkBDHRyeUdldFN0cmluZwECCXNldHVwX2x0cwIBLAQFcmF0ZXMICQENZ2V0QWN0dWFsUmF0ZQIJAJEDAgUGYXNzZXRzAAACBXNSYXRlAl8yBA1jaGFuZ2VIYW5kbGVyCQC1CQIFC2FmdGVyQ2hhbmdlAgEsCgEBZgIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0CQCQAwEFBmFzc2V0cwUFYWNjdW0EDHVzZXJTdXBwbGllZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwkAkQMCBQZhc3NldHMFBG5leHQEDHVzZXJCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwkAkQMCBQZhc3NldHMFBG5leHQEE25lZWRUb2tlbkFjY291bnRpbmcDCQAAAgULYWZ0ZXJDaGFuZ2UCAAMDCQECIT0CBQx1c2VyQm9ycm93ZWQAAAYJAQIhPQIFDHVzZXJTdXBwbGllZAAABgcGAwUTbmVlZFRva2VuQWNjb3VudGluZwQKYXNzZXRTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQkAkQMCBQZhc3NldHMFBG5leHQECmFzc2V0UHJpY2UJAQ1nZXRUb2tlblByaWNlAQkAkQMCBQZhc3NldHMFBG5leHQJAGUCCQBkAgUFYWNjdW0JAGsDCQBrAwkAawMJAGQCBQx1c2VyU3VwcGxpZWQDAwMJAQIhPQIFC2FmdGVyQ2hhbmdlAgAJAAACCQCRAwIFDWNoYW5nZUhhbmRsZXIAAAkAkQMCBQZhc3NldHMFBG5leHQHCQAAAgkAkQMCBQ1jaGFuZ2VIYW5kbGVyAAECCHN1cHBsaWVkBwkB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", "height": 3719821, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CWcXBfsTHzdjcJNPVSa3B9cRUtTmTmwWWs4aiRwnJVi6 Next: 4qmt6u1Zk6o9Vw3GNrt2xN1MdzELhzdvYickjfZK4cbw Diff:
OldNewDifferences
315315 }
316316 let az = al(i)
317317 let aA = (A(((g + "_supplied_") + i)) + ax)
318+ let aB = (A(("total_supplied_" + i)) + ax)
318319 let S = aa(i, "sRate")._1
319- let aB = am(i)
320- let aC = fraction(fraction(aA, S, m), az._1, aB)
320+ let aC = am(i)
321+ let aD = fraction(fraction(aB, S, m), az._1, aC)
321322 if ((indexOf(E("setup_tokens"), i) == unit))
322323 then throw("this asset is not supported by the market")
323324 else if (if ((ay != 0))
324- then (aC > ay)
325+ then (aD > ay)
325326 else false)
326327 then throw("max total supply for this token reached in the pool")
327328 else if ((A(("setup_paused_" + i)) > 0))
328329 then throw("this asset can't be supplied or borrowed")
329- else ([IntegerEntry(((g + "_supplied_") + i), aA), IntegerEntry(("total_supplied_" + i), (A(("total_supplied_" + i)) + ax))] ++ aw)
330+ else ([IntegerEntry(((g + "_supplied_") + i), aA), IntegerEntry(("total_supplied_" + i), aB)] ++ aw)
330331 }
331332
332333
333334
334335 @Callable(as)
335336 func withdraw (i,at) = {
336- let aD = aa(i, "sRate")
337- let av = aD._1
338- let aw = aD._2
337+ let aE = aa(i, "sRate")
338+ let av = aE._1
339+ let aw = aE._2
339340 let ax = fraction(at, m, av, CEILING)
340341 let g = toString(as.caller)
341- let aE = A(("total_supplied_" + i))
342- let aF = A(("total_borrowed_" + i))
343- let aG = A(((g + "_supplied_") + i))
344- let aH = A(((g + "_borrowed_") + i))
345- let aI = invoke(this, "getUserCollateral", [false, g, true, ((i + ",supplied,") + toString(-(ax)))], nil)
346- if ((aI == aI))
342+ let aF = A(("total_supplied_" + i))
343+ let aG = A(("total_borrowed_" + i))
344+ let aH = A(((g + "_supplied_") + i))
345+ let aI = A(((g + "_borrowed_") + i))
346+ let aJ = invoke(this, "getUserCollateral", [false, g, true, ((i + ",supplied,") + toString(-(ax)))], nil)
347+ if ((aJ == aJ))
347348 then {
348- let aJ = {
349- let j = aI
349+ let aK = {
350+ let j = aJ
350351 if ($isInstanceOf(j, "Int"))
351352 then {
352353 let ar = j
356357 }
357358 if (!(D("setup_active")))
358359 then throw("market is stopped")
359- else if ((0 > aJ))
360+ else if ((0 > aK))
360361 then throw("you dont have enough collateral for this operation")
361- else if ((ax > (aE - aF)))
362+ else if ((ax > (aF - aG)))
362363 then throw("this amount is not available on the market")
363- else if ((ax > (aG - aH)))
364+ else if ((ax > (aH - aI)))
364365 then throw("this amount is not available for this user")
365366 else ([IntegerEntry(((g + "_supplied_") + i), (A(((g + "_supplied_") + i)) - ax)), IntegerEntry(("total_supplied_" + i), (A(("total_supplied_" + i)) - ax)), ScriptTransfer(as.caller, at, I(i))] ++ aw)
366367 }
372373 @Callable(as)
373374 func borrow (i,at) = {
374375 let g = toString(as.caller)
375- let aK = aa(i, "bRate")
376- let aL = aK._1
377- let aw = aK._2
378- let ax = fraction(at, m, aL, CEILING)
379- let aI = invoke(this, "getUserCollateral", [false, g, true, ((i + ",borrowed,") + toString(ax))], nil)
380- if ((aI == aI))
376+ let aL = aa(i, "bRate")
377+ let aM = aL._1
378+ let aw = aL._2
379+ let ax = fraction(at, m, aM, CEILING)
380+ let aJ = invoke(this, "getUserCollateral", [false, g, true, ((i + ",borrowed,") + toString(ax))], nil)
381+ if ((aJ == aJ))
381382 then {
382- let aJ = {
383- let j = aI
383+ let aK = {
384+ let j = aJ
384385 if ($isInstanceOf(j, "Int"))
385386 then {
386387 let ar = j
390391 }
391392 if (!(D("setup_active")))
392393 then throw("market is stopped")
393- else if ((0 > aJ))
394+ else if ((0 > aK))
394395 then throw("you have to supply more to borrow")
395396 else if ((A(("setup_paused_" + i)) > 0))
396397 then throw("this asset can't be supplied or borrowed")
397398 else {
398- let aE = A(("total_supplied_" + i))
399- let aF = A(("total_borrowed_" + i))
400- let aH = A(((g + "_borrowed_") + i))
401- if ((ax > (aE - aF)))
399+ let aF = A(("total_supplied_" + i))
400+ let aG = A(("total_borrowed_" + i))
401+ let aI = A(((g + "_borrowed_") + i))
402+ if ((ax > (aF - aG)))
402403 then throw("this amount is not available")
403- else ([IntegerEntry(((g + "_borrowed_") + i), (aH + ax)), IntegerEntry(("total_borrowed_" + i), (aF + ax)), ScriptTransfer(as.caller, at, I(i))] ++ aw)
404+ else ([IntegerEntry(((g + "_borrowed_") + i), (aI + ax)), IntegerEntry(("total_borrowed_" + i), (aG + ax)), ScriptTransfer(as.caller, at, I(i))] ++ aw)
404405 }
405406 }
406407 else throw("Strict value is not equal to itself.")
418419 else {
419420 let i = G(as.payments[0].assetId)
420421 let at = as.payments[0].amount
421- let aM = aa(i, "bRate")
422- let aL = aM._1
423- let aw = aM._2
424- let ax = fraction(at, m, aL, CEILING)
422+ let aN = aa(i, "bRate")
423+ let aM = aN._1
424+ let aw = aN._2
425+ let ax = fraction(at, m, aM, CEILING)
425426 let g = toString(as.caller)
426- let aE = A(("total_supplied_" + i))
427- let aF = A(("total_borrowed_" + i))
428- let aH = A(((g + "_borrowed_") + i))
429- let aN = (aH - ax)
430- let aO = if ((aN >= 0))
427+ let aF = A(("total_supplied_" + i))
428+ let aG = A(("total_borrowed_" + i))
429+ let aI = A(((g + "_borrowed_") + i))
430+ let aO = (aI - ax)
431+ let aP = if ((aO >= 0))
431432 then ax
432- else aH
433+ else aI
433434 if ((indexOf(E("setup_tokens"), i) == unit))
434435 then throw("this asset is not supported by the market")
435- else (([IntegerEntry(((g + "_borrowed_") + i), (aH - aO)), IntegerEntry(("total_borrowed_" + i), (aF - aO))] ++ aw) ++ (if ((aN >= 0))
436+ else (([IntegerEntry(((g + "_borrowed_") + i), (aI - aP)), IntegerEntry(("total_borrowed_" + i), (aG - aP))] ++ aw) ++ (if ((aO >= 0))
436437 then nil
437- else [ScriptTransfer(as.caller, -(aN), as.payments[0].assetId)]))
438+ else [ScriptTransfer(as.caller, -(aO), as.payments[0].assetId)]))
438439 }
439440
440441
453454 else {
454455 let i = G(as.payments[0].assetId)
455456 let at = as.payments[0].amount
456- let aP = aa(i, "bRate")
457- let aL = aP._1
458- let aw = aP._2
459- let ax = fraction(at, m, aL, CEILING)
460- let aE = A(("total_supplied_" + i))
461- let aF = A(("total_borrowed_" + i))
462- let aH = A(((g + "_borrowed_") + i))
463- let aN = (aH - ax)
464- let aO = if ((aN >= 0))
457+ let aQ = aa(i, "bRate")
458+ let aM = aQ._1
459+ let aw = aQ._2
460+ let ax = fraction(at, m, aM, CEILING)
461+ let aF = A(("total_supplied_" + i))
462+ let aG = A(("total_borrowed_" + i))
463+ let aI = A(((g + "_borrowed_") + i))
464+ let aO = (aI - ax)
465+ let aP = if ((aO >= 0))
465466 then ax
466- else aH
467+ else aI
467468 if ((indexOf(E("setup_tokens"), i) == unit))
468469 then throw("this asset is not supported by the market")
469- else (([IntegerEntry(((g + "_borrowed_") + i), (aH - aO)), IntegerEntry(("total_borrowed_" + i), (aF - aO))] ++ aw) ++ (if ((aN >= 0))
470+ else (([IntegerEntry(((g + "_borrowed_") + i), (aI - aP)), IntegerEntry(("total_borrowed_" + i), (aG - aP))] ++ aw) ++ (if ((aO >= 0))
470471 then nil
471- else [ScriptTransfer(as.caller, -(aN), as.payments[0].assetId)]))
472+ else [ScriptTransfer(as.caller, -(aO), as.payments[0].assetId)]))
472473 }
473474
474475
478479 then throw("only for internal smart contract invocations")
479480 else {
480481 let ax = J(i)
481- let aQ = invoke(this, "stakeToken", [i, ax], nil)
482- if ((aQ == aQ))
482+ let aR = invoke(this, "stakeToken", [i, ax], nil)
483+ if ((aR == aR))
483484 then nil
484485 else throw("Strict value is not equal to itself.")
485486 }
491492 then throw("only for internal smart contract invocations")
492493 else if ((i == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
493494 then {
494- let aR = A("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
495- let aQ = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', ax)])
496- if ((aQ == aQ))
497- then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (aR + ax))]
495+ let aS = A("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
496+ let aR = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', ax)])
497+ if ((aR == aR))
498+ then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (aS + ax))]
498499 else throw("Strict value is not equal to itself.")
499500 }
500501 else if ((i == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
501502 then {
502- let aR = A("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
503- let aQ = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', ax)])
504- if ((aQ == aQ))
505- then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aR + ax))]
503+ let aS = A("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
504+ let aR = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', ax)])
505+ if ((aR == aR))
506+ then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aS + ax))]
506507 else throw("Strict value is not equal to itself.")
507508 }
508509 else if ((i == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
509510 then {
510- let aR = A("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
511- let aQ = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', ax)])
512- if ((aQ == aQ))
513- then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aR + ax))]
511+ let aS = A("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
512+ let aR = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', ax)])
513+ if ((aR == aR))
514+ then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aS + ax))]
514515 else throw("Strict value is not equal to itself.")
515516 }
516517 else nil
522523 then throw("only for internal smart contract invocations")
523524 else if ((i == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
524525 then {
525- let aR = A("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
526- let aQ = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [ax], nil)
527- if ((aQ == aQ))
528- then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aR - ax))]
526+ let aS = A("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
527+ let aR = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [ax], nil)
528+ if ((aR == aR))
529+ then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aS - ax))]
529530 else throw("Strict value is not equal to itself.")
530531 }
531532 else if ((i == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
532533 then {
533- let aR = A("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
534- let aQ = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [ax], nil)
535- if ((aQ == aQ))
534+ let aS = A("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
535+ let aR = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [ax], nil)
536+ if ((aR == aR))
536537 then {
537- let aS = J("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
538- if ((aS == aS))
538+ let aT = J("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
539+ if ((aT == aT))
539540 then {
540- let aT = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
541- if ((aT == aT))
541+ let aU = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
542+ if ((aU == aU))
542543 then {
543- let aU = {
544- let j = aT
544+ let aV = {
545+ let j = aU
545546 if ($isInstanceOf(j, "List[Any]"))
546547 then {
547548 let ar = j
548- let aV = ar[1]
549- let aW = aV
550- if ($isInstanceOf(aW, "String"))
549+ let aW = ar[1]
550+ let aX = aW
551+ if ($isInstanceOf(aX, "String"))
551552 then {
552- let aV = aW
553- let aX = parseIntValue(split(split(aV, "_")[1], ":")[1])
554- let aY = parseIntValue(split(split(aV, "_")[0], ":")[1])
555- if (if ((aX != 0))
553+ let aW = aX
554+ let aY = parseIntValue(split(split(aW, "_")[1], ":")[1])
555+ let aZ = parseIntValue(split(split(aW, "_")[0], ":")[1])
556+ if (if ((aY != 0))
556557 then true
557- else (aY != 0))
558+ else (aZ != 0))
558559 then {
559- let aZ = J("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
560- if ((aZ == aZ))
560+ let ba = J("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
561+ if ((ba == ba))
561562 then {
562- let ba = J("WAVES")
563- if ((ba == ba))
563+ let bb = J("WAVES")
564+ if ((bb == bb))
564565 then {
565- let bb = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
566- if ((bb == bb))
566+ let bc = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
567+ if ((bc == bc))
567568 then {
568- let bc = J("WAVES")
569- if ((bc == bc))
569+ let bd = J("WAVES")
570+ if ((bd == bd))
570571 then {
571- let bd = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (bc - ba))])
572- if ((bd == bd))
572+ let be = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (bd - bb))])
573+ if ((be == be))
573574 then {
574- let be = J("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
575- if ((be == be))
575+ let bf = J("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
576+ if ((bf == bf))
576577 then {
577- let bf = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (be - aZ))])
578- if ((bf == bf))
578+ let bg = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (bf - ba))])
579+ if ((bg == bg))
579580 then {
580- let bg = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (J("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - aS)], nil)
581- if ((bg == bg))
581+ let bh = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (J("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - aT)], nil)
582+ if ((bh == bh))
582583 then 2
583584 else throw("Strict value is not equal to itself.")
584585 }
602603 }
603604 else 0
604605 }
605- if ((aU == aU))
606- then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aR - ax))]
606+ if ((aV == aV))
607+ then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aS - ax))]
607608 else throw("Strict value is not equal to itself.")
608609 }
609610 else throw("Strict value is not equal to itself.")
620621 func addInterest (i,ax) = if ((as.caller != this))
621622 then throw("only for self invocation")
622623 else {
623- let bh = A(("autostake_lastEarned_" + i))
624- let bi = A(("autostake_lastBlock_" + i))
625- let bj = fraction(ax, 80, 100)
626- let bk = if (if ((bi == height))
624+ let bi = A(("autostake_lastEarned_" + i))
625+ let bj = A(("autostake_lastBlock_" + i))
626+ let bk = fraction(ax, 80, 100)
627+ let bl = if (if ((bj == height))
627628 then true
628629 else (ax == 0))
629630 then nil
630- else [IntegerEntry(("autostake_preLastEarned_" + i), bh), IntegerEntry(("autostake_preLastBlock_" + i), bi), IntegerEntry(("autostake_lastEarned_" + i), (bh + bj)), IntegerEntry(("autostake_lastBlock_" + i), height)]
631- (bk ++ [IntegerEntry((i + "_sRate"), (A((i + "_sRate")) + fraction(m, bj, A(("total_supplied_" + i)))))])
631+ else [IntegerEntry(("autostake_preLastEarned_" + i), bi), IntegerEntry(("autostake_preLastBlock_" + i), bj), IntegerEntry(("autostake_lastEarned_" + i), (bi + bk)), IntegerEntry(("autostake_lastBlock_" + i), height)]
632+ (bl ++ [IntegerEntry((i + "_sRate"), (A((i + "_sRate")) + fraction(m, bk, A(("total_supplied_" + i)))))])
632633 }
633634
634635
638639 let ax = fraction(as.payments[0].amount, 80, 100)
639640 let H = as.payments[0].assetId
640641 let i = G(H)
641- let bh = A(("autostake_lastEarned_" + i))
642- let bi = A(("autostake_lastBlock_" + i))
643- let bk = if (if ((bi == height))
642+ let bi = A(("autostake_lastEarned_" + i))
643+ let bj = A(("autostake_lastBlock_" + i))
644+ let bl = if (if ((bj == height))
644645 then true
645646 else (ax == 0))
646647 then nil
647- else [IntegerEntry(("autostake_preLastEarned_" + i), bh), IntegerEntry(("autostake_preLastBlock_" + i), bi), IntegerEntry(("autostake_lastEarned_" + i), (bh + ax)), IntegerEntry(("autostake_lastBlock_" + i), height)]
648- (bk ++ [IntegerEntry((i + "_sRate"), (A((i + "_sRate")) + fraction(m, ax, A(("total_supplied_" + i)))))])
648+ else [IntegerEntry(("autostake_preLastEarned_" + i), bi), IntegerEntry(("autostake_preLastBlock_" + i), bj), IntegerEntry(("autostake_lastEarned_" + i), (bi + ax)), IntegerEntry(("autostake_lastBlock_" + i), height)]
649+ (bl ++ [IntegerEntry((i + "_sRate"), (A((i + "_sRate")) + fraction(m, ax, A(("total_supplied_" + i)))))])
649650 }
650651
651652
652653
653654 @Callable(as)
654-func preInit (bl,bm,bn,bo) = {
655+func preInit (bm,bn,bo,bp) = {
655656 func q (r,ac) = (r ++ [IntegerEntry((ac + "_bRate"), m), IntegerEntry((ac + "_sRate"), m)])
656657
657658 if ((as.caller != this))
658659 then throw("admin only")
659660 else {
660661 let af = {
661- let t = split(bl, ",")
662+ let t = split(bm, ",")
662663 let u = size(t)
663664 let v = nil
664665 func w (x,y) = if ((y >= u))
671672
672673 z(w(w(w(w(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
673674 }
674- ([StringEntry("setup_tokens", bl), StringEntry("setup_ltvs", bm), StringEntry("setup_lts", bn), StringEntry("setup_penalties", bo), BooleanEntry("setup_active", true)] ++ af)
675+ ([StringEntry("setup_tokens", bm), StringEntry("setup_ltvs", bn), StringEntry("setup_lts", bo), StringEntry("setup_penalties", bp), BooleanEntry("setup_active", true)] ++ af)
675676 }
676677 }
677678
678679
679680
680681 @Callable(as)
681-func initNewToken (ac,bp,bq,br) = if ((as.caller != this))
682+func initNewToken (ac,bq,br,bs) = if ((as.caller != this))
682683 then throw("admin only")
683- else [StringEntry("setup_tokens", ((E("setup_tokens") + ",") + ac)), StringEntry("setup_ltvs", ((E("setup_ltvs") + ",") + bp)), StringEntry("setup_lts", ((E("setup_lts") + ",") + bq)), StringEntry("setup_penalties", ((E("setup_penalties") + ",") + br)), IntegerEntry((ac + "_bRate"), m), IntegerEntry((ac + "_sRate"), m)]
684+ else [StringEntry("setup_tokens", ((E("setup_tokens") + ",") + ac)), StringEntry("setup_ltvs", ((E("setup_ltvs") + ",") + bq)), StringEntry("setup_lts", ((E("setup_lts") + ",") + br)), StringEntry("setup_penalties", ((E("setup_penalties") + ",") + bs)), IntegerEntry((ac + "_bRate"), m), IntegerEntry((ac + "_sRate"), m)]
684685
685686
686687
687688 @Callable(as)
688-func updateParameter (B,bs) = if (if ((as.caller != this))
689+func updateParameter (B,bt) = if (if ((as.caller != this))
689690 then (as.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
690691 else false)
691692 then throw("admin only")
692- else [IntegerEntry(B, parseIntValue(bs))]
693+ else [IntegerEntry(B, parseIntValue(bt))]
693694
694695
695696
696697 @Callable(as)
697-func updateString (B,bs) = if (if ((as.caller != this))
698+func updateString (B,bt) = if (if ((as.caller != this))
698699 then (as.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
699700 else false)
700701 then throw("admin only")
701- else [StringEntry(B, bs)]
702+ else [StringEntry(B, bt)]
702703
703704
704705
705706 @Callable(as)
706-func claimToReserveFund (bt) = {
707- let bu = K()
708- let af = aa(bu[0], "sRate")._2
707+func claimToReserveFund (bu) = {
708+ let bv = K()
709+ let af = aa(bv[0], "sRate")._2
709710 let p = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
710- func q (r,bv) = if ((bv >= size(bu)))
711+ func q (r,bw) = if ((bw >= size(bv)))
711712 then r
712713 else {
713- let i = bu[bv]
714- let bw = E(("autostake_amount_" + i))
715- let ax = ((((J(i) + A(("autostake_amount_" + i))) + (if ((bw != ""))
716- then parseIntValue(bw)
717- else 0)) + fraction(A(("total_borrowed_" + i)), af[((bv * 3) + 1)].value, m)) - fraction(A(("total_supplied_" + i)), af[(bv * 3)].value, m))
714+ let i = bv[bw]
715+ let bx = E(("autostake_amount_" + i))
716+ let ax = ((((J(i) + A(("autostake_amount_" + i))) + (if ((bx != ""))
717+ then parseIntValue(bx)
718+ else 0)) + fraction(A(("total_borrowed_" + i)), af[((bw * 3) + 1)].value, m)) - fraction(A(("total_supplied_" + i)), af[(bw * 3)].value, m))
718719 (r ++ [ax])
719720 }
720721
721- let bx = {
722+ let by = {
722723 let t = p
723724 let u = size(t)
724725 let v = nil
732733
733734 z(w(w(w(w(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
734735 }
735- func by (r,bv) = if ((bv >= size(bu)))
736+ func bz (r,bw) = if ((bw >= size(bv)))
736737 then r
737738 else {
738- let i = bu[bv]
739- (r ++ [ScriptTransfer(a, max([bx[bv], 0]), I(i))])
739+ let i = bv[bw]
740+ (r ++ [ScriptTransfer(a, max([by[bw], 0]), I(i))])
740741 }
741742
742- if (bt)
743- then throw(o(bx))
743+ if (bu)
744+ then throw(o(by))
744745 else $Tuple2({
745746 let t = p
746747 let u = size(t)
747748 let v = nil
748- func bz (x,y) = if ((y >= u))
749+ func bA (x,y) = if ((y >= u))
749750 then x
750- else by(x, t[y])
751+ else bz(x, t[y])
751752
752- func bA (x,y) = if ((y >= u))
753+ func bB (x,y) = if ((y >= u))
753754 then x
754755 else throw("List size exceeds 12")
755756
756- bA(bz(bz(bz(bz(bz(bz(bz(bz(bz(bz(bz(bz(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
757- }, bx)
757+ bB(bA(bA(bA(bA(bA(bA(bA(bA(bA(bA(bA(bA(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
758+ }, by)
758759 }
759760
760761
761762
762763 @Callable(as)
763764 func reSetup (i) = {
764- let bB = A("resetup_lastUpdate")
765- if ((n > (height - bB)))
765+ let bC = A("resetup_lastUpdate")
766+ if ((n > (height - bC)))
766767 then throw("can be updated only once per day")
767768 else {
768- let bn = split(E("setup_lts"), ",")
769- let bu = K()
769+ let bo = split(E("setup_lts"), ",")
770+ let bv = K()
770771 let Q = ae(i)
771- let bC = A((("setup_" + i) + "_tempLT"))
772- let bq = parseIntValue(bu[value(indexOf(bu, i))])
772+ let bD = A((("setup_" + i) + "_tempLT"))
773+ let br = parseIntValue(bv[value(indexOf(bv, i))])
773774 if ((Q > 90000000))
774- then [IntegerEntry((("setup_" + i) + "_tempLT"), fraction(bC, 9975, 10000))]
775- else if (if ((bq > bC))
775+ then [IntegerEntry((("setup_" + i) + "_tempLT"), fraction(bD, 9975, 10000))]
776+ else if (if ((br > bD))
776777 then (90000000 > Q)
777778 else false)
778- then [IntegerEntry((("setup_" + i) + "_tempLT"), fraction(bC, 10025, 10000))]
779+ then [IntegerEntry((("setup_" + i) + "_tempLT"), fraction(bD, 10025, 10000))]
779780 else nil
780781 }
781782 }
783784
784785
785786 @Callable(as)
786-func shutdown (bD) = if ((indexOf(e, as.caller.bytes) == unit))
787+func shutdown (bE) = if ((indexOf(e, as.caller.bytes) == unit))
787788 then throw("user not in a whitelist")
788- else [BooleanEntry("setup_active", !(bD))]
789+ else [BooleanEntry("setup_active", !(bE))]
789790
790791
791792
792793 @Callable(as)
793-func liquidate (bt,g,at,bE,bF,bG) = if (!(f(as.caller)))
794+func liquidate (bu,g,at,bF,bG,bH) = if (!(f(as.caller)))
794795 then throw("temporarily available for whitelist only")
795796 else if (!(D("setup_active")))
796797 then throw("market is stopped")
797798 else {
798- let bH = ao(g)
799- if ((bH == bH))
799+ let bI = ao(g)
800+ if ((bI == bI))
800801 then {
801- let bI = aa(bE, "sRate")
802- let av = bI._1
803- let bJ = bI._2
804- let bK = aa(bF, "bRate")
805- let aL = bK._1
806- let bL = bK._2
807- let bM = fraction(at, m, av)
808- let bN = A(((g + "_supplied_") + bE))
809- let bO = A(((g + "_borrowed_") + bF))
810- let bP = if ((bO > 0))
811- then bO
802+ let bJ = aa(bF, "sRate")
803+ let av = bJ._1
804+ let bK = bJ._2
805+ let bL = aa(bG, "bRate")
806+ let aM = bL._1
807+ let bM = bL._2
808+ let bN = fraction(at, m, av)
809+ let bO = A(((g + "_supplied_") + bF))
810+ let bP = A(((g + "_borrowed_") + bG))
811+ let bQ = if ((bP > 0))
812+ then bP
812813 else throw("user has no borrow in this token")
813- if ((bH > 0))
814+ if ((bI > 0))
814815 then throw("user can't be liquidated")
815- else if ((bM > bN))
816+ else if ((bN > bO))
816817 then throw("position to liquidate is bigger than user's supply")
817818 else {
818- let bQ = J(bE)
819- if ((bQ == bQ))
819+ let bR = J(bF)
820+ if ((bR == bR))
820821 then {
821- let bR = J(bF)
822- if ((bR == bR))
822+ let bS = J(bG)
823+ if ((bS == bS))
823824 then {
824- let bS = invoke(c, "swap", [bG, 0], [AttachedPayment(I(bE), at)])
825- if ((bS == bS))
825+ let bT = invoke(c, "swap", [bH, 0], [AttachedPayment(I(bF), at)])
826+ if ((bT == bT))
826827 then {
827- let bT = (bQ - J(bE))
828- if ((bT == bT))
828+ let bU = (bR - J(bF))
829+ if ((bU == bU))
829830 then {
830- let bU = (J(bF) - bR)
831- if ((bU == bU))
831+ let bV = (J(bG) - bS)
832+ if ((bV == bV))
832833 then {
833- let bV = al(bE)._1
834- let bW = am(bE)
835- let bX = fraction(bT, bV, bW)
836- let bY = al(bF)._2
837- let bZ = am(bF)
838- let ca = fraction(bU, bY, bZ)
839- let br = parseIntValue(split(E("setup_penalties"), ",")[value(indexOf(K(), bF))])
840- let cb = (ca - fraction(bX, (k - br), k))
841- let cc = fraction(bT, m, av)
842- let cd = fraction(fraction(bU, m, aL), (k - fraction(cb, k, ca)), k)
843- if ((bT > at))
834+ let bW = al(bF)._1
835+ let bX = am(bF)
836+ let bY = fraction(bU, bW, bX)
837+ let bZ = al(bG)._2
838+ let ca = am(bG)
839+ let cb = fraction(bV, bZ, ca)
840+ let bs = parseIntValue(split(E("setup_penalties"), ",")[value(indexOf(K(), bG))])
841+ let cc = (cb - fraction(bY, (k - bs), k))
842+ let cd = fraction(bU, m, av)
843+ let ce = fraction(fraction(bV, m, aM), (k - fraction(cc, k, cb)), k)
844+ if ((bU > at))
844845 then throw("more assets exchanged than expected")
845- else if ((0 > cb))
846+ else if ((0 > cc))
846847 then throw("price impact is bigger than liquidation penalty")
847- else [IntegerEntry(((g + "_supplied_") + bE), (bN - cc)), IntegerEntry(((g + "_borrowed_") + bF), (bP - cd)), IntegerEntry(("total_supplied_" + bE), (A(("total_supplied_" + bE)) - cc)), IntegerEntry(("total_borrowed_" + bF), (A(("total_borrowed_" + bF)) - cd))]
848+ else [IntegerEntry(((g + "_supplied_") + bF), (bO - cd)), IntegerEntry(((g + "_borrowed_") + bG), (bQ - ce)), IntegerEntry(("total_supplied_" + bF), (A(("total_supplied_" + bF)) - cd)), IntegerEntry(("total_borrowed_" + bG), (A(("total_borrowed_" + bG)) - ce))]
848849 }
849850 else throw("Strict value is not equal to itself.")
850851 }
863864
864865
865866 @Callable(as)
866-func liquidateV2 (bt,g,bE) = if (!(f(as.caller)))
867+func liquidateV2 (bu,g,bF) = if (!(f(as.caller)))
867868 then throw("temporarily available for whitelist only")
868869 else if (!(D("setup_active")))
869870 then throw("market is stopped")
870871 else {
871- let ce = as.payments[0].assetId
872- let bF = G(ce)
873- let cf = as.payments[0].amount
874- let bH = ao(g)
875- if ((bH == bH))
876- then if ((bH > 0))
872+ let cf = as.payments[0].assetId
873+ let bG = G(cf)
874+ let cg = as.payments[0].amount
875+ let bI = ao(g)
876+ if ((bI == bI))
877+ then if ((bI > 0))
877878 then throw("user can't be liquidated")
878879 else {
879- let cg = K()
880- let ch = value(indexOf(cg, bF))
881- let ci = value(indexOf(cg, bE))
882- let cj = aa(bF, "bRate")
883- let aL = cj._1
884- let bJ = cj._2
885- let bY = al(bF)._2
886- let bZ = am(bF)
887- let ck = fraction(cf, bY, bZ)
888- let br = parseIntValue(value(split(E("setup_penalties"), ",")[ch]))
889- let bV = al(bE)._1
890- let bW = am(bE)
891- let cl = fraction(ck, (k + br), k)
892- let bM = fraction(cl, bW, bV)
893- let cm = fraction(cf, m, aL)
894- let cn = fraction(bM, m, bJ[((ci * 3) + 1)].value)
895- let bN = A(((g + "_supplied_") + bE))
896- let bO = A(((g + "_borrowed_") + bF))
897- let bP = if ((bO > 0))
898- then bO
880+ let ch = K()
881+ let ci = value(indexOf(ch, bG))
882+ let cj = value(indexOf(ch, bF))
883+ let ck = aa(bG, "bRate")
884+ let aM = ck._1
885+ let bK = ck._2
886+ let bZ = al(bG)._2
887+ let ca = am(bG)
888+ let cl = fraction(cg, bZ, ca)
889+ let bs = parseIntValue(value(split(E("setup_penalties"), ",")[ci]))
890+ let bW = al(bF)._1
891+ let bX = am(bF)
892+ let cm = fraction(cl, (k + bs), k)
893+ let bN = fraction(cm, bX, bW)
894+ let cn = fraction(cg, m, aM)
895+ let co = fraction(bN, m, bK[((cj * 3) + 1)].value)
896+ let bO = A(((g + "_supplied_") + bF))
897+ let bP = A(((g + "_borrowed_") + bG))
898+ let bQ = if ((bP > 0))
899+ then bP
899900 else throw("user has no borrow in this token")
900- if ((cn > bN))
901+ if ((co > bO))
901902 then throw("position to liquidate is bigger than user's supply")
902- else if (bt)
903+ else if (bu)
903904 then throw("liquidation will pass")
904- else ([ScriptTransfer(as.caller, bM, I(bE)), IntegerEntry(((g + "_supplied_") + bE), (bN - cn)), IntegerEntry(((g + "_borrowed_") + bF), (bP - cm)), IntegerEntry(("total_supplied_" + bE), (A(("total_supplied_" + bE)) - cn)), IntegerEntry(("total_borrowed_" + bF), (A(("total_borrowed_" + bF)) - cm))] ++ bJ)
905+ else ([ScriptTransfer(as.caller, bN, I(bF)), IntegerEntry(((g + "_supplied_") + bF), (bO - co)), IntegerEntry(((g + "_borrowed_") + bG), (bQ - cn)), IntegerEntry(("total_supplied_" + bF), (A(("total_supplied_" + bF)) - co)), IntegerEntry(("total_borrowed_" + bG), (A(("total_borrowed_" + bG)) - cn))] ++ bK)
905906 }
906907 else throw("Strict value is not equal to itself.")
907908 }
909910
910911
911912 @Callable(as)
912-func getUserCollateral (bt,g,co,cp) = {
913- let bu = K()
914- let bm = split(E("setup_ltvs"), ",")
915- let bn = split(E("setup_lts"), ",")
916- let af = aa(bu[0], "sRate")._2
917- let cq = split(cp, ",")
918- func q (r,s) = if ((s >= size(bu)))
913+func getUserCollateral (bu,g,cp,cq) = {
914+ let bv = K()
915+ let bn = split(E("setup_ltvs"), ",")
916+ let bo = split(E("setup_lts"), ",")
917+ let af = aa(bv[0], "sRate")._2
918+ let cr = split(cq, ",")
919+ func q (r,s) = if ((s >= size(bv)))
919920 then r
920921 else {
921- let cr = A(((g + "_supplied_") + bu[s]))
922- let cs = A(((g + "_borrowed_") + bu[s]))
923- let ct = if ((cp == ""))
924- then if (if ((cs != 0))
922+ let cs = A(((g + "_supplied_") + bv[s]))
923+ let ct = A(((g + "_borrowed_") + bv[s]))
924+ let cu = if ((cq == ""))
925+ then if (if ((ct != 0))
925926 then true
926- else (cr != 0))
927+ else (cs != 0))
927928 then true
928929 else false
929930 else true
930- if (ct)
931+ if (cu)
931932 then {
932- let aB = am(bu[s])
933- let az = al(bu[s])
934- ((r + fraction(fraction(fraction((cr + (if (if (if ((cp != ""))
935- then (cq[0] == bu[s])
933+ let aC = am(bv[s])
934+ let az = al(bv[s])
935+ ((r + fraction(fraction(fraction((cs + (if (if (if ((cq != ""))
936+ then (cr[0] == bv[s])
936937 else false)
937- then (cq[1] == "supplied")
938+ then (cr[1] == "supplied")
938939 else false)
939- then parseIntValue(cq[2])
940- else 0)), af[(s * 3)].value, m), parseIntValue(bm[s]), k), az._1, aB)) - (if (co)
941- then fraction(fraction(fraction((cs + (if (if (if ((cp != ""))
942- then (cq[0] == bu[s])
940+ then parseIntValue(cr[2])
941+ else 0)), af[(s * 3)].value, m), parseIntValue(bn[s]), k), az._1, aC)) - (if (cp)
942+ then fraction(fraction(fraction((ct + (if (if (if ((cq != ""))
943+ then (cr[0] == bv[s])
943944 else false)
944- then (cq[1] == "borrowed")
945+ then (cr[1] == "borrowed")
945946 else false)
946- then parseIntValue(cq[2])
947- else 0)), af[((s * 3) + 1)].value, m), k, parseIntValue(bn[s])), az._2, aB)
947+ then parseIntValue(cr[2])
948+ else 0)), af[((s * 3) + 1)].value, m), k, parseIntValue(bo[s])), az._2, aC)
948949 else 0))
949950 }
950951 else r
951952 }
952953
953- let cu = {
954+ let cv = {
954955 let t = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
955956 let u = size(t)
956957 let v = 0
964965
965966 z(w(w(w(w(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
966967 }
967- if (bt)
968- then throw(toString(cu))
969- else $Tuple2(af, cu)
968+ if (bu)
969+ then throw(toString(cv))
970+ else $Tuple2(af, cv)
970971 }
971972
972973
973974
974975 @Callable(as)
975-func getPrices (bt) = {
976- let bu = K()
977- func q (r,s) = if ((s >= size(bu)))
976+func getPrices (bu) = {
977+ let bv = K()
978+ func q (r,s) = if ((s >= size(bv)))
978979 then r
979980 else {
980- let az = ah(bu[s], 3)
981+ let az = ah(bv[s], 3)
981982 ((((r + toString(az._1)) + ",") + toString(az._2)) + "|")
982983 }
983984
984- let cu = {
985+ let cv = {
985986 let t = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
986987 let u = size(t)
987988 let v = ""
995996
996997 z(w(w(w(w(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
997998 }
998- if (bt)
999- then throw(cu)
1000- else $Tuple2(nil, cu)
999+ if (bu)
1000+ then throw(cv)
1001+ else $Tuple2(nil, cv)
10011002 }
10021003
10031004
10041005
10051006 @Callable(as)
1006-func calculateUtilizationRatio (i,bt) = if (bt)
1007+func calculateUtilizationRatio (i,bu) = if (bu)
10071008 then throw(toString(ae(i)))
10081009 else $Tuple2(nil, ae(i))
10091010
10101011
10111012
10121013 @Callable(as)
1013-func calculateOutdatedUR (i,bt) = if (bt)
1014+func calculateOutdatedUR (i,bu) = if (bu)
10141015 then throw(toString(N(i)))
10151016 else $Tuple2(nil, N(i))
10161017
10171018
10181019
10191020 @Callable(as)
1020-func calculateTokenRates (bt) = {
1021+func calculateTokenRates (bu) = {
10211022 func q (r,i) = {
10221023 let af = T(i)
10231024 $Tuple2(((((r._1 + toString(af[1].value)) + "|") + toString(af[0].value)) + ","), (r._2 ++ af))
10241025 }
10251026
1026- let bx = {
1027+ let by = {
10271028 let t = K()
10281029 let u = size(t)
10291030 let v = $Tuple2("", nil)
10371038
10381039 z(w(w(w(w(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
10391040 }
1040- if (bt)
1041- then throw(bx._1)
1042- else $Tuple2(bx._2, bx._1)
1041+ if (bu)
1042+ then throw(by._1)
1043+ else $Tuple2(by._2, by._1)
10431044 }
10441045
10451046
10461047
10471048 @Callable(as)
1048-func calculateTokensInterest (bt) = {
1049+func calculateTokensInterest (bu) = {
10491050 func q (r,i) = {
10501051 let S = fraction(P(i), n, k)
10511052 ((r + toString(S)) + ",")
10521053 }
10531054
1054- let bx = {
1055+ let by = {
10551056 let t = K()
10561057 let u = size(t)
10571058 let v = ""
10651066
10661067 z(w(w(w(w(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
10671068 }
1068- if (bt)
1069- then throw(bx)
1070- else $Tuple2(nil, bx)
1069+ if (bu)
1070+ then throw(by)
1071+ else $Tuple2(nil, by)
10711072 }
10721073
10731074
1074-@Verifier(cv)
1075-func cw () = sigVerify(cv.bodyBytes, cv.proofs[0], cv.senderPublicKey)
1075+@Verifier(cw)
1076+func cx () = sigVerify(cw.bodyBytes, cw.proofs[0], cw.senderPublicKey)
10761077
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = Address(base58'3P4kBiU4wr2yV1S5gMfu3MdkVvy7kxXHsKe')
55
66 let b = 20
77
88 let c = Address(base58'3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU')
99
1010 let d = "3PPXVKjN6nRMzXeegcYhfiic96pd2c98Ekm"
1111
1212 let e = [base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL', base58'3PAxdDSmN758L5SHSGRC5apEtQE2aApZotG', base58'3PJKmXoHJvVeQXjSJdhtkUcFDtdiQqMbUTD', base58'3PQdNxynJy5mche2kxMVc5shXWzK8Gstq3o', base58'3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3', base58'3P6Ksahs71SiKQgQ4qaZuFAVhqncdi2nvJQ']
1313
1414 func f (g) = !(if (if ((g != Address(base58'3PCqdm1mAoQqR46oZotFanmqb5CLUvrKEo2')))
1515 then (g != Address(base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL'))
1616 else false)
1717 then (g != Address(base58'3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3'))
1818 else false)
1919
2020
2121 func h (i) = {
2222 let j = i
2323 if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == j))
2424 then $Tuple4(2000000, 25000000, 80000000, 100000000)
2525 else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == j))
2626 then $Tuple4(2000000, 25000000, 80000000, 100000000)
2727 else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == j))
2828 then $Tuple4(2000000, 25000000, 80000000, 100000000)
2929 else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == j))
3030 then $Tuple4(2000000, 25000000, 80000000, 100000000)
3131 else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == j))
3232 then $Tuple4(2000000, 25000000, 80000000, 100000000)
3333 else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == j))
3434 then $Tuple4(2000000, 40000000, 80000000, 150000000)
3535 else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == j))
3636 then $Tuple4(0, 50000000, 80000000, 400000000)
3737 else if (("WAVES" == j))
3838 then $Tuple4(2000000, 30000000, 80000000, 80000000)
3939 else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == j))
4040 then $Tuple4(0, 20000000, 80000000, 40000000)
4141 else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == j))
4242 then $Tuple4(0, 20000000, 80000000, 100000000)
4343 else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == j))
4444 then $Tuple4(0, 30000000, 80000000, 40000000)
4545 else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == j))
4646 then $Tuple4(0, 25000000, 80000000, 40000000)
4747 else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == j))
4848 then $Tuple4(2000000, 30000000, 80000000, 50000000)
4949 else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == j))
5050 then $Tuple4(2000000, 30000000, 80000000, 50000000)
5151 else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == j))
5252 then $Tuple4(2000000, 30000000, 80000000, 50000000)
5353 else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == j))
5454 then $Tuple4(2000000, 40000000, 80000000, 100000000)
5555 else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == j))
5656 then $Tuple4(2000000, 30000000, 80000000, 80000000)
5757 else if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == j))
5858 then $Tuple4(0, 50000000, 80000000, 200000000)
5959 else if (("3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13" == j))
6060 then $Tuple4(0, 100000000, 80000000, 400000000)
6161 else $Tuple4(0, 20000000, 80000000, 80000000)
6262 }
6363
6464
6565 let k = 100000000
6666
6767 let l = 10000000000
6868
6969 let m = (k * k)
7070
7171 let n = 1440
7272
7373 func o (p) = {
7474 func q (r,s) = ((r + toString(s)) + ",")
7575
7676 let t = p
7777 let u = size(t)
7878 let v = ""
7979 func w (x,y) = if ((y >= u))
8080 then x
8181 else q(x, t[y])
8282
8383 func z (x,y) = if ((y >= u))
8484 then x
8585 else throw("List size exceeds 12")
8686
8787 z(w(w(w(w(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
8888 }
8989
9090
9191 func A (B) = {
9292 let j = getInteger(this, B)
9393 if ($isInstanceOf(j, "Int"))
9494 then {
9595 let C = j
9696 C
9797 }
9898 else 0
9999 }
100100
101101
102102 func D (B) = {
103103 let j = getBoolean(this, B)
104104 if ($isInstanceOf(j, "Boolean"))
105105 then {
106106 let C = j
107107 C
108108 }
109109 else false
110110 }
111111
112112
113113 func E (B) = {
114114 let j = getString(this, B)
115115 if ($isInstanceOf(j, "String"))
116116 then {
117117 let C = j
118118 C
119119 }
120120 else ""
121121 }
122122
123123
124124 func F (B) = {
125125 let j = getBinary(this, B)
126126 if ($isInstanceOf(j, "ByteVector"))
127127 then {
128128 let C = j
129129 C
130130 }
131131 else base58''
132132 }
133133
134134
135135 func G (H) = {
136136 let j = H
137137 if ($isInstanceOf(j, "ByteVector"))
138138 then {
139139 let C = j
140140 toBase58String(C)
141141 }
142142 else "WAVES"
143143 }
144144
145145
146146 func I (i) = if ((i == "WAVES"))
147147 then unit
148148 else fromBase58String(i)
149149
150150
151151 func J (i) = if ((i == "WAVES"))
152152 then wavesBalance(this).available
153153 else assetBalance(this, fromBase58String(i))
154154
155155
156156 func K () = split(E("setup_tokens"), ",")
157157
158158
159159 func L () = {
160160 let M = E("setup_maxSupply")
161161 if ((M == ""))
162162 then [-1, -1, -1, -1, -1, -1, -1]
163163 else split(M, ",")
164164 }
165165
166166
167167 func N (i) = {
168168 let O = fraction(A(("total_supplied_" + i)), A((i + "_sRate")), m)
169169 if ((O == 0))
170170 then 0
171171 else fraction(k, fraction(A(("total_borrowed_" + i)), A((i + "_bRate")), m), O)
172172 }
173173
174174
175175 func P (i) = {
176176 let Q = N(i)
177177 let R = h(i)
178178 let S = (R._1 + (if ((R._3 >= Q))
179179 then fraction(Q, R._2, R._3)
180180 else (R._2 + fraction((Q - R._3), R._4, (100000000 - R._3)))))
181181 max([fraction(S, k, (n * 365)), 1])
182182 }
183183
184184
185185 func T (i) = {
186186 let U = P(i)
187187 let Q = N(i)
188188 let V = A("lastRateHeight")
189189 let W = max([A((i + "_bRate")), m])
190190 let X = (W + ((height - V) * U))
191191 let Y = max([A((i + "_sRate")), m])
192192 let Z = (Y + ((((height - V) * fraction(U, Q, k)) * (100 - b)) / 100))
193193 [IntegerEntry((i + "_sRate"), Z), IntegerEntry((i + "_bRate"), X), IntegerEntry("lastRateHeight", height)]
194194 }
195195
196196
197197 func aa (i,ab) = {
198198 func q (r,ac) = {
199199 let ad = T(ac)
200200 $Tuple2(if ((ac != i))
201201 then r._1
202202 else if ((ab == "sRate"))
203203 then ad[0].value
204204 else ad[1].value, (r._2 ++ ad))
205205 }
206206
207207 let t = K()
208208 let u = size(t)
209209 let v = $Tuple2(0, nil)
210210 func w (x,y) = if ((y >= u))
211211 then x
212212 else q(x, t[y])
213213
214214 func z (x,y) = if ((y >= u))
215215 then x
216216 else throw("List size exceeds 12")
217217
218218 z(w(w(w(w(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
219219 }
220220
221221
222222 func ae (i) = {
223223 let af = T(i)
224224 let O = fraction(A(("total_supplied_" + i)), af[0].value, m)
225225 fraction(k, fraction(A(("total_borrowed_" + i)), af[1].value, m), O)
226226 }
227227
228228
229229 func ag () = {
230230 func q (r,ac) = (r ++ T(ac))
231231
232232 let t = K()
233233 let u = size(t)
234234 let v = nil
235235 func w (x,y) = if ((y >= u))
236236 then x
237237 else q(x, t[y])
238238
239239 func z (x,y) = if ((y >= u))
240240 then x
241241 else throw("List size exceeds 12")
242242
243243 z(w(w(w(w(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
244244 }
245245
246246
247247 func ah (i,ai) = if (if ((i == "9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi"))
248248 then true
249249 else (i == "HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW"))
250250 then $Tuple2(1000000, 1000000)
251251 else {
252252 let aj = getIntegerValue(Address(base58'3P8d1E1BLKoD52y3bQJ1bDTd2TD1gpaLn9t'), (i + "_twap5B"))
253253 let ak = getIntegerValue(Address(base58'3P8d1E1BLKoD52y3bQJ1bDTd2TD1gpaLn9t'), (i + "_riskLevel"))
254254 if ((ai >= ak))
255255 then $Tuple2(aj, aj)
256256 else throw((("oracle prices don't match: " + toString(aj)) + " is the price, but risk is too high"))
257257 }
258258
259259
260260 func al (i) = ah(i, 3)
261261
262262
263263 func am (i) = {
264264 let an = if ((i == "WAVES"))
265265 then 8
266266 else value(assetInfo(fromBase58String(i))).decimals
267267 pow(10, 0, an, 0, 0, DOWN)
268268 }
269269
270270
271271 func ao (g) = {
272272 let ap = invoke(this, "getUserCollateral", [false, g, true, ""], nil)
273273 if ((ap == ap))
274274 then {
275275 let aq = {
276276 let j = ap
277277 if ($isInstanceOf(j, "Int"))
278278 then {
279279 let ar = j
280280 ar
281281 }
282282 else throw("issue while doing in-dapp invocation")
283283 }
284284 if ((aq == aq))
285285 then aq
286286 else throw("Strict value is not equal to itself.")
287287 }
288288 else throw("Strict value is not equal to itself.")
289289 }
290290
291291
292292 @Callable(as)
293293 func supply () = if (!(D("setup_active")))
294294 then throw("market is stopped")
295295 else if (if ((size(as.payments) != 1))
296296 then true
297297 else (as.payments[0].amount == 0))
298298 then throw("1 payment has to be attached")
299299 else {
300300 let i = G(as.payments[0].assetId)
301301 let at = as.payments[0].amount
302302 let au = aa(i, "sRate")
303303 let av = au._1
304304 let aw = au._2
305305 let ax = fraction(at, m, av, DOWN)
306306 let g = toString(as.caller)
307307 let ay = {
308308 let j = getString(("setup_maxSupply_" + i))
309309 if ($isInstanceOf(j, "String"))
310310 then {
311311 let ar = j
312312 parseIntValue(ar)
313313 }
314314 else A(("setup_maxSupply_" + i))
315315 }
316316 let az = al(i)
317317 let aA = (A(((g + "_supplied_") + i)) + ax)
318+ let aB = (A(("total_supplied_" + i)) + ax)
318319 let S = aa(i, "sRate")._1
319- let aB = am(i)
320- let aC = fraction(fraction(aA, S, m), az._1, aB)
320+ let aC = am(i)
321+ let aD = fraction(fraction(aB, S, m), az._1, aC)
321322 if ((indexOf(E("setup_tokens"), i) == unit))
322323 then throw("this asset is not supported by the market")
323324 else if (if ((ay != 0))
324- then (aC > ay)
325+ then (aD > ay)
325326 else false)
326327 then throw("max total supply for this token reached in the pool")
327328 else if ((A(("setup_paused_" + i)) > 0))
328329 then throw("this asset can't be supplied or borrowed")
329- else ([IntegerEntry(((g + "_supplied_") + i), aA), IntegerEntry(("total_supplied_" + i), (A(("total_supplied_" + i)) + ax))] ++ aw)
330+ else ([IntegerEntry(((g + "_supplied_") + i), aA), IntegerEntry(("total_supplied_" + i), aB)] ++ aw)
330331 }
331332
332333
333334
334335 @Callable(as)
335336 func withdraw (i,at) = {
336- let aD = aa(i, "sRate")
337- let av = aD._1
338- let aw = aD._2
337+ let aE = aa(i, "sRate")
338+ let av = aE._1
339+ let aw = aE._2
339340 let ax = fraction(at, m, av, CEILING)
340341 let g = toString(as.caller)
341- let aE = A(("total_supplied_" + i))
342- let aF = A(("total_borrowed_" + i))
343- let aG = A(((g + "_supplied_") + i))
344- let aH = A(((g + "_borrowed_") + i))
345- let aI = invoke(this, "getUserCollateral", [false, g, true, ((i + ",supplied,") + toString(-(ax)))], nil)
346- if ((aI == aI))
342+ let aF = A(("total_supplied_" + i))
343+ let aG = A(("total_borrowed_" + i))
344+ let aH = A(((g + "_supplied_") + i))
345+ let aI = A(((g + "_borrowed_") + i))
346+ let aJ = invoke(this, "getUserCollateral", [false, g, true, ((i + ",supplied,") + toString(-(ax)))], nil)
347+ if ((aJ == aJ))
347348 then {
348- let aJ = {
349- let j = aI
349+ let aK = {
350+ let j = aJ
350351 if ($isInstanceOf(j, "Int"))
351352 then {
352353 let ar = j
353354 ar
354355 }
355356 else throw("can't get user collateral value")
356357 }
357358 if (!(D("setup_active")))
358359 then throw("market is stopped")
359- else if ((0 > aJ))
360+ else if ((0 > aK))
360361 then throw("you dont have enough collateral for this operation")
361- else if ((ax > (aE - aF)))
362+ else if ((ax > (aF - aG)))
362363 then throw("this amount is not available on the market")
363- else if ((ax > (aG - aH)))
364+ else if ((ax > (aH - aI)))
364365 then throw("this amount is not available for this user")
365366 else ([IntegerEntry(((g + "_supplied_") + i), (A(((g + "_supplied_") + i)) - ax)), IntegerEntry(("total_supplied_" + i), (A(("total_supplied_" + i)) - ax)), ScriptTransfer(as.caller, at, I(i))] ++ aw)
366367 }
367368 else throw("Strict value is not equal to itself.")
368369 }
369370
370371
371372
372373 @Callable(as)
373374 func borrow (i,at) = {
374375 let g = toString(as.caller)
375- let aK = aa(i, "bRate")
376- let aL = aK._1
377- let aw = aK._2
378- let ax = fraction(at, m, aL, CEILING)
379- let aI = invoke(this, "getUserCollateral", [false, g, true, ((i + ",borrowed,") + toString(ax))], nil)
380- if ((aI == aI))
376+ let aL = aa(i, "bRate")
377+ let aM = aL._1
378+ let aw = aL._2
379+ let ax = fraction(at, m, aM, CEILING)
380+ let aJ = invoke(this, "getUserCollateral", [false, g, true, ((i + ",borrowed,") + toString(ax))], nil)
381+ if ((aJ == aJ))
381382 then {
382- let aJ = {
383- let j = aI
383+ let aK = {
384+ let j = aJ
384385 if ($isInstanceOf(j, "Int"))
385386 then {
386387 let ar = j
387388 ar
388389 }
389390 else throw("can't get user collateral value")
390391 }
391392 if (!(D("setup_active")))
392393 then throw("market is stopped")
393- else if ((0 > aJ))
394+ else if ((0 > aK))
394395 then throw("you have to supply more to borrow")
395396 else if ((A(("setup_paused_" + i)) > 0))
396397 then throw("this asset can't be supplied or borrowed")
397398 else {
398- let aE = A(("total_supplied_" + i))
399- let aF = A(("total_borrowed_" + i))
400- let aH = A(((g + "_borrowed_") + i))
401- if ((ax > (aE - aF)))
399+ let aF = A(("total_supplied_" + i))
400+ let aG = A(("total_borrowed_" + i))
401+ let aI = A(((g + "_borrowed_") + i))
402+ if ((ax > (aF - aG)))
402403 then throw("this amount is not available")
403- else ([IntegerEntry(((g + "_borrowed_") + i), (aH + ax)), IntegerEntry(("total_borrowed_" + i), (aF + ax)), ScriptTransfer(as.caller, at, I(i))] ++ aw)
404+ else ([IntegerEntry(((g + "_borrowed_") + i), (aI + ax)), IntegerEntry(("total_borrowed_" + i), (aG + ax)), ScriptTransfer(as.caller, at, I(i))] ++ aw)
404405 }
405406 }
406407 else throw("Strict value is not equal to itself.")
407408 }
408409
409410
410411
411412 @Callable(as)
412413 func repay () = if (!(D("setup_active")))
413414 then throw("market is stopped")
414415 else if (if ((size(as.payments) != 1))
415416 then true
416417 else (as.payments[0].amount == 0))
417418 then throw("1 payment has to be attached")
418419 else {
419420 let i = G(as.payments[0].assetId)
420421 let at = as.payments[0].amount
421- let aM = aa(i, "bRate")
422- let aL = aM._1
423- let aw = aM._2
424- let ax = fraction(at, m, aL, CEILING)
422+ let aN = aa(i, "bRate")
423+ let aM = aN._1
424+ let aw = aN._2
425+ let ax = fraction(at, m, aM, CEILING)
425426 let g = toString(as.caller)
426- let aE = A(("total_supplied_" + i))
427- let aF = A(("total_borrowed_" + i))
428- let aH = A(((g + "_borrowed_") + i))
429- let aN = (aH - ax)
430- let aO = if ((aN >= 0))
427+ let aF = A(("total_supplied_" + i))
428+ let aG = A(("total_borrowed_" + i))
429+ let aI = A(((g + "_borrowed_") + i))
430+ let aO = (aI - ax)
431+ let aP = if ((aO >= 0))
431432 then ax
432- else aH
433+ else aI
433434 if ((indexOf(E("setup_tokens"), i) == unit))
434435 then throw("this asset is not supported by the market")
435- else (([IntegerEntry(((g + "_borrowed_") + i), (aH - aO)), IntegerEntry(("total_borrowed_" + i), (aF - aO))] ++ aw) ++ (if ((aN >= 0))
436+ else (([IntegerEntry(((g + "_borrowed_") + i), (aI - aP)), IntegerEntry(("total_borrowed_" + i), (aG - aP))] ++ aw) ++ (if ((aO >= 0))
436437 then nil
437- else [ScriptTransfer(as.caller, -(aN), as.payments[0].assetId)]))
438+ else [ScriptTransfer(as.caller, -(aO), as.payments[0].assetId)]))
438439 }
439440
440441
441442
442443 @Callable(as)
443444 func repayFor (g) = if (!(D("setup_active")))
444445 then throw("market is stopped")
445446 else if ((as.caller != Address(base58'3P4kBiU4wr2yV1S5gMfu3MdkVvy7kxXHsKe')))
446447 then throw("available only for reserve fund address")
447448 else if ((g == "global"))
448449 then throw("you can't repay for everyone :_)")
449450 else if (if ((size(as.payments) != 1))
450451 then true
451452 else (as.payments[0].amount == 0))
452453 then throw("1 payment has to be attached")
453454 else {
454455 let i = G(as.payments[0].assetId)
455456 let at = as.payments[0].amount
456- let aP = aa(i, "bRate")
457- let aL = aP._1
458- let aw = aP._2
459- let ax = fraction(at, m, aL, CEILING)
460- let aE = A(("total_supplied_" + i))
461- let aF = A(("total_borrowed_" + i))
462- let aH = A(((g + "_borrowed_") + i))
463- let aN = (aH - ax)
464- let aO = if ((aN >= 0))
457+ let aQ = aa(i, "bRate")
458+ let aM = aQ._1
459+ let aw = aQ._2
460+ let ax = fraction(at, m, aM, CEILING)
461+ let aF = A(("total_supplied_" + i))
462+ let aG = A(("total_borrowed_" + i))
463+ let aI = A(((g + "_borrowed_") + i))
464+ let aO = (aI - ax)
465+ let aP = if ((aO >= 0))
465466 then ax
466- else aH
467+ else aI
467468 if ((indexOf(E("setup_tokens"), i) == unit))
468469 then throw("this asset is not supported by the market")
469- else (([IntegerEntry(((g + "_borrowed_") + i), (aH - aO)), IntegerEntry(("total_borrowed_" + i), (aF - aO))] ++ aw) ++ (if ((aN >= 0))
470+ else (([IntegerEntry(((g + "_borrowed_") + i), (aI - aP)), IntegerEntry(("total_borrowed_" + i), (aG - aP))] ++ aw) ++ (if ((aO >= 0))
470471 then nil
471- else [ScriptTransfer(as.caller, -(aN), as.payments[0].assetId)]))
472+ else [ScriptTransfer(as.caller, -(aO), as.payments[0].assetId)]))
472473 }
473474
474475
475476
476477 @Callable(as)
477478 func stakeTokenAll (i) = if ((as.caller != this))
478479 then throw("only for internal smart contract invocations")
479480 else {
480481 let ax = J(i)
481- let aQ = invoke(this, "stakeToken", [i, ax], nil)
482- if ((aQ == aQ))
482+ let aR = invoke(this, "stakeToken", [i, ax], nil)
483+ if ((aR == aR))
483484 then nil
484485 else throw("Strict value is not equal to itself.")
485486 }
486487
487488
488489
489490 @Callable(as)
490491 func stakeToken (i,ax) = if ((as.caller != this))
491492 then throw("only for internal smart contract invocations")
492493 else if ((i == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
493494 then {
494- let aR = A("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
495- let aQ = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', ax)])
496- if ((aQ == aQ))
497- then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (aR + ax))]
495+ let aS = A("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
496+ let aR = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', ax)])
497+ if ((aR == aR))
498+ then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (aS + ax))]
498499 else throw("Strict value is not equal to itself.")
499500 }
500501 else if ((i == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
501502 then {
502- let aR = A("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
503- let aQ = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', ax)])
504- if ((aQ == aQ))
505- then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aR + ax))]
503+ let aS = A("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
504+ let aR = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', ax)])
505+ if ((aR == aR))
506+ then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aS + ax))]
506507 else throw("Strict value is not equal to itself.")
507508 }
508509 else if ((i == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
509510 then {
510- let aR = A("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
511- let aQ = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', ax)])
512- if ((aQ == aQ))
513- then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aR + ax))]
511+ let aS = A("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
512+ let aR = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', ax)])
513+ if ((aR == aR))
514+ then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aS + ax))]
514515 else throw("Strict value is not equal to itself.")
515516 }
516517 else nil
517518
518519
519520
520521 @Callable(as)
521522 func unstakeToken (i,ax) = if ((as.caller != this))
522523 then throw("only for internal smart contract invocations")
523524 else if ((i == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
524525 then {
525- let aR = A("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
526- let aQ = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [ax], nil)
527- if ((aQ == aQ))
528- then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aR - ax))]
526+ let aS = A("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
527+ let aR = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [ax], nil)
528+ if ((aR == aR))
529+ then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aS - ax))]
529530 else throw("Strict value is not equal to itself.")
530531 }
531532 else if ((i == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
532533 then {
533- let aR = A("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
534- let aQ = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [ax], nil)
535- if ((aQ == aQ))
534+ let aS = A("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
535+ let aR = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [ax], nil)
536+ if ((aR == aR))
536537 then {
537- let aS = J("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
538- if ((aS == aS))
538+ let aT = J("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
539+ if ((aT == aT))
539540 then {
540- let aT = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
541- if ((aT == aT))
541+ let aU = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
542+ if ((aU == aU))
542543 then {
543- let aU = {
544- let j = aT
544+ let aV = {
545+ let j = aU
545546 if ($isInstanceOf(j, "List[Any]"))
546547 then {
547548 let ar = j
548- let aV = ar[1]
549- let aW = aV
550- if ($isInstanceOf(aW, "String"))
549+ let aW = ar[1]
550+ let aX = aW
551+ if ($isInstanceOf(aX, "String"))
551552 then {
552- let aV = aW
553- let aX = parseIntValue(split(split(aV, "_")[1], ":")[1])
554- let aY = parseIntValue(split(split(aV, "_")[0], ":")[1])
555- if (if ((aX != 0))
553+ let aW = aX
554+ let aY = parseIntValue(split(split(aW, "_")[1], ":")[1])
555+ let aZ = parseIntValue(split(split(aW, "_")[0], ":")[1])
556+ if (if ((aY != 0))
556557 then true
557- else (aY != 0))
558+ else (aZ != 0))
558559 then {
559- let aZ = J("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
560- if ((aZ == aZ))
560+ let ba = J("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
561+ if ((ba == ba))
561562 then {
562- let ba = J("WAVES")
563- if ((ba == ba))
563+ let bb = J("WAVES")
564+ if ((bb == bb))
564565 then {
565- let bb = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
566- if ((bb == bb))
566+ let bc = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
567+ if ((bc == bc))
567568 then {
568- let bc = J("WAVES")
569- if ((bc == bc))
569+ let bd = J("WAVES")
570+ if ((bd == bd))
570571 then {
571- let bd = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (bc - ba))])
572- if ((bd == bd))
572+ let be = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (bd - bb))])
573+ if ((be == be))
573574 then {
574- let be = J("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
575- if ((be == be))
575+ let bf = J("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
576+ if ((bf == bf))
576577 then {
577- let bf = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (be - aZ))])
578- if ((bf == bf))
578+ let bg = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (bf - ba))])
579+ if ((bg == bg))
579580 then {
580- let bg = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (J("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - aS)], nil)
581- if ((bg == bg))
581+ let bh = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (J("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - aT)], nil)
582+ if ((bh == bh))
582583 then 2
583584 else throw("Strict value is not equal to itself.")
584585 }
585586 else throw("Strict value is not equal to itself.")
586587 }
587588 else throw("Strict value is not equal to itself.")
588589 }
589590 else throw("Strict value is not equal to itself.")
590591 }
591592 else throw("Strict value is not equal to itself.")
592593 }
593594 else throw("Strict value is not equal to itself.")
594595 }
595596 else throw("Strict value is not equal to itself.")
596597 }
597598 else throw("Strict value is not equal to itself.")
598599 }
599600 else 1
600601 }
601602 else 1
602603 }
603604 else 0
604605 }
605- if ((aU == aU))
606- then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aR - ax))]
606+ if ((aV == aV))
607+ then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aS - ax))]
607608 else throw("Strict value is not equal to itself.")
608609 }
609610 else throw("Strict value is not equal to itself.")
610611 }
611612 else throw("Strict value is not equal to itself.")
612613 }
613614 else throw("Strict value is not equal to itself.")
614615 }
615616 else nil
616617
617618
618619
619620 @Callable(as)
620621 func addInterest (i,ax) = if ((as.caller != this))
621622 then throw("only for self invocation")
622623 else {
623- let bh = A(("autostake_lastEarned_" + i))
624- let bi = A(("autostake_lastBlock_" + i))
625- let bj = fraction(ax, 80, 100)
626- let bk = if (if ((bi == height))
624+ let bi = A(("autostake_lastEarned_" + i))
625+ let bj = A(("autostake_lastBlock_" + i))
626+ let bk = fraction(ax, 80, 100)
627+ let bl = if (if ((bj == height))
627628 then true
628629 else (ax == 0))
629630 then nil
630- else [IntegerEntry(("autostake_preLastEarned_" + i), bh), IntegerEntry(("autostake_preLastBlock_" + i), bi), IntegerEntry(("autostake_lastEarned_" + i), (bh + bj)), IntegerEntry(("autostake_lastBlock_" + i), height)]
631- (bk ++ [IntegerEntry((i + "_sRate"), (A((i + "_sRate")) + fraction(m, bj, A(("total_supplied_" + i)))))])
631+ else [IntegerEntry(("autostake_preLastEarned_" + i), bi), IntegerEntry(("autostake_preLastBlock_" + i), bj), IntegerEntry(("autostake_lastEarned_" + i), (bi + bk)), IntegerEntry(("autostake_lastBlock_" + i), height)]
632+ (bl ++ [IntegerEntry((i + "_sRate"), (A((i + "_sRate")) + fraction(m, bk, A(("total_supplied_" + i)))))])
632633 }
633634
634635
635636
636637 @Callable(as)
637638 func addInterestEXTERNAL () = {
638639 let ax = fraction(as.payments[0].amount, 80, 100)
639640 let H = as.payments[0].assetId
640641 let i = G(H)
641- let bh = A(("autostake_lastEarned_" + i))
642- let bi = A(("autostake_lastBlock_" + i))
643- let bk = if (if ((bi == height))
642+ let bi = A(("autostake_lastEarned_" + i))
643+ let bj = A(("autostake_lastBlock_" + i))
644+ let bl = if (if ((bj == height))
644645 then true
645646 else (ax == 0))
646647 then nil
647- else [IntegerEntry(("autostake_preLastEarned_" + i), bh), IntegerEntry(("autostake_preLastBlock_" + i), bi), IntegerEntry(("autostake_lastEarned_" + i), (bh + ax)), IntegerEntry(("autostake_lastBlock_" + i), height)]
648- (bk ++ [IntegerEntry((i + "_sRate"), (A((i + "_sRate")) + fraction(m, ax, A(("total_supplied_" + i)))))])
648+ else [IntegerEntry(("autostake_preLastEarned_" + i), bi), IntegerEntry(("autostake_preLastBlock_" + i), bj), IntegerEntry(("autostake_lastEarned_" + i), (bi + ax)), IntegerEntry(("autostake_lastBlock_" + i), height)]
649+ (bl ++ [IntegerEntry((i + "_sRate"), (A((i + "_sRate")) + fraction(m, ax, A(("total_supplied_" + i)))))])
649650 }
650651
651652
652653
653654 @Callable(as)
654-func preInit (bl,bm,bn,bo) = {
655+func preInit (bm,bn,bo,bp) = {
655656 func q (r,ac) = (r ++ [IntegerEntry((ac + "_bRate"), m), IntegerEntry((ac + "_sRate"), m)])
656657
657658 if ((as.caller != this))
658659 then throw("admin only")
659660 else {
660661 let af = {
661- let t = split(bl, ",")
662+ let t = split(bm, ",")
662663 let u = size(t)
663664 let v = nil
664665 func w (x,y) = if ((y >= u))
665666 then x
666667 else q(x, t[y])
667668
668669 func z (x,y) = if ((y >= u))
669670 then x
670671 else throw("List size exceeds 12")
671672
672673 z(w(w(w(w(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
673674 }
674- ([StringEntry("setup_tokens", bl), StringEntry("setup_ltvs", bm), StringEntry("setup_lts", bn), StringEntry("setup_penalties", bo), BooleanEntry("setup_active", true)] ++ af)
675+ ([StringEntry("setup_tokens", bm), StringEntry("setup_ltvs", bn), StringEntry("setup_lts", bo), StringEntry("setup_penalties", bp), BooleanEntry("setup_active", true)] ++ af)
675676 }
676677 }
677678
678679
679680
680681 @Callable(as)
681-func initNewToken (ac,bp,bq,br) = if ((as.caller != this))
682+func initNewToken (ac,bq,br,bs) = if ((as.caller != this))
682683 then throw("admin only")
683- else [StringEntry("setup_tokens", ((E("setup_tokens") + ",") + ac)), StringEntry("setup_ltvs", ((E("setup_ltvs") + ",") + bp)), StringEntry("setup_lts", ((E("setup_lts") + ",") + bq)), StringEntry("setup_penalties", ((E("setup_penalties") + ",") + br)), IntegerEntry((ac + "_bRate"), m), IntegerEntry((ac + "_sRate"), m)]
684+ else [StringEntry("setup_tokens", ((E("setup_tokens") + ",") + ac)), StringEntry("setup_ltvs", ((E("setup_ltvs") + ",") + bq)), StringEntry("setup_lts", ((E("setup_lts") + ",") + br)), StringEntry("setup_penalties", ((E("setup_penalties") + ",") + bs)), IntegerEntry((ac + "_bRate"), m), IntegerEntry((ac + "_sRate"), m)]
684685
685686
686687
687688 @Callable(as)
688-func updateParameter (B,bs) = if (if ((as.caller != this))
689+func updateParameter (B,bt) = if (if ((as.caller != this))
689690 then (as.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
690691 else false)
691692 then throw("admin only")
692- else [IntegerEntry(B, parseIntValue(bs))]
693+ else [IntegerEntry(B, parseIntValue(bt))]
693694
694695
695696
696697 @Callable(as)
697-func updateString (B,bs) = if (if ((as.caller != this))
698+func updateString (B,bt) = if (if ((as.caller != this))
698699 then (as.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
699700 else false)
700701 then throw("admin only")
701- else [StringEntry(B, bs)]
702+ else [StringEntry(B, bt)]
702703
703704
704705
705706 @Callable(as)
706-func claimToReserveFund (bt) = {
707- let bu = K()
708- let af = aa(bu[0], "sRate")._2
707+func claimToReserveFund (bu) = {
708+ let bv = K()
709+ let af = aa(bv[0], "sRate")._2
709710 let p = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
710- func q (r,bv) = if ((bv >= size(bu)))
711+ func q (r,bw) = if ((bw >= size(bv)))
711712 then r
712713 else {
713- let i = bu[bv]
714- let bw = E(("autostake_amount_" + i))
715- let ax = ((((J(i) + A(("autostake_amount_" + i))) + (if ((bw != ""))
716- then parseIntValue(bw)
717- else 0)) + fraction(A(("total_borrowed_" + i)), af[((bv * 3) + 1)].value, m)) - fraction(A(("total_supplied_" + i)), af[(bv * 3)].value, m))
714+ let i = bv[bw]
715+ let bx = E(("autostake_amount_" + i))
716+ let ax = ((((J(i) + A(("autostake_amount_" + i))) + (if ((bx != ""))
717+ then parseIntValue(bx)
718+ else 0)) + fraction(A(("total_borrowed_" + i)), af[((bw * 3) + 1)].value, m)) - fraction(A(("total_supplied_" + i)), af[(bw * 3)].value, m))
718719 (r ++ [ax])
719720 }
720721
721- let bx = {
722+ let by = {
722723 let t = p
723724 let u = size(t)
724725 let v = nil
725726 func w (x,y) = if ((y >= u))
726727 then x
727728 else q(x, t[y])
728729
729730 func z (x,y) = if ((y >= u))
730731 then x
731732 else throw("List size exceeds 12")
732733
733734 z(w(w(w(w(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
734735 }
735- func by (r,bv) = if ((bv >= size(bu)))
736+ func bz (r,bw) = if ((bw >= size(bv)))
736737 then r
737738 else {
738- let i = bu[bv]
739- (r ++ [ScriptTransfer(a, max([bx[bv], 0]), I(i))])
739+ let i = bv[bw]
740+ (r ++ [ScriptTransfer(a, max([by[bw], 0]), I(i))])
740741 }
741742
742- if (bt)
743- then throw(o(bx))
743+ if (bu)
744+ then throw(o(by))
744745 else $Tuple2({
745746 let t = p
746747 let u = size(t)
747748 let v = nil
748- func bz (x,y) = if ((y >= u))
749+ func bA (x,y) = if ((y >= u))
749750 then x
750- else by(x, t[y])
751+ else bz(x, t[y])
751752
752- func bA (x,y) = if ((y >= u))
753+ func bB (x,y) = if ((y >= u))
753754 then x
754755 else throw("List size exceeds 12")
755756
756- bA(bz(bz(bz(bz(bz(bz(bz(bz(bz(bz(bz(bz(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
757- }, bx)
757+ bB(bA(bA(bA(bA(bA(bA(bA(bA(bA(bA(bA(bA(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
758+ }, by)
758759 }
759760
760761
761762
762763 @Callable(as)
763764 func reSetup (i) = {
764- let bB = A("resetup_lastUpdate")
765- if ((n > (height - bB)))
765+ let bC = A("resetup_lastUpdate")
766+ if ((n > (height - bC)))
766767 then throw("can be updated only once per day")
767768 else {
768- let bn = split(E("setup_lts"), ",")
769- let bu = K()
769+ let bo = split(E("setup_lts"), ",")
770+ let bv = K()
770771 let Q = ae(i)
771- let bC = A((("setup_" + i) + "_tempLT"))
772- let bq = parseIntValue(bu[value(indexOf(bu, i))])
772+ let bD = A((("setup_" + i) + "_tempLT"))
773+ let br = parseIntValue(bv[value(indexOf(bv, i))])
773774 if ((Q > 90000000))
774- then [IntegerEntry((("setup_" + i) + "_tempLT"), fraction(bC, 9975, 10000))]
775- else if (if ((bq > bC))
775+ then [IntegerEntry((("setup_" + i) + "_tempLT"), fraction(bD, 9975, 10000))]
776+ else if (if ((br > bD))
776777 then (90000000 > Q)
777778 else false)
778- then [IntegerEntry((("setup_" + i) + "_tempLT"), fraction(bC, 10025, 10000))]
779+ then [IntegerEntry((("setup_" + i) + "_tempLT"), fraction(bD, 10025, 10000))]
779780 else nil
780781 }
781782 }
782783
783784
784785
785786 @Callable(as)
786-func shutdown (bD) = if ((indexOf(e, as.caller.bytes) == unit))
787+func shutdown (bE) = if ((indexOf(e, as.caller.bytes) == unit))
787788 then throw("user not in a whitelist")
788- else [BooleanEntry("setup_active", !(bD))]
789+ else [BooleanEntry("setup_active", !(bE))]
789790
790791
791792
792793 @Callable(as)
793-func liquidate (bt,g,at,bE,bF,bG) = if (!(f(as.caller)))
794+func liquidate (bu,g,at,bF,bG,bH) = if (!(f(as.caller)))
794795 then throw("temporarily available for whitelist only")
795796 else if (!(D("setup_active")))
796797 then throw("market is stopped")
797798 else {
798- let bH = ao(g)
799- if ((bH == bH))
799+ let bI = ao(g)
800+ if ((bI == bI))
800801 then {
801- let bI = aa(bE, "sRate")
802- let av = bI._1
803- let bJ = bI._2
804- let bK = aa(bF, "bRate")
805- let aL = bK._1
806- let bL = bK._2
807- let bM = fraction(at, m, av)
808- let bN = A(((g + "_supplied_") + bE))
809- let bO = A(((g + "_borrowed_") + bF))
810- let bP = if ((bO > 0))
811- then bO
802+ let bJ = aa(bF, "sRate")
803+ let av = bJ._1
804+ let bK = bJ._2
805+ let bL = aa(bG, "bRate")
806+ let aM = bL._1
807+ let bM = bL._2
808+ let bN = fraction(at, m, av)
809+ let bO = A(((g + "_supplied_") + bF))
810+ let bP = A(((g + "_borrowed_") + bG))
811+ let bQ = if ((bP > 0))
812+ then bP
812813 else throw("user has no borrow in this token")
813- if ((bH > 0))
814+ if ((bI > 0))
814815 then throw("user can't be liquidated")
815- else if ((bM > bN))
816+ else if ((bN > bO))
816817 then throw("position to liquidate is bigger than user's supply")
817818 else {
818- let bQ = J(bE)
819- if ((bQ == bQ))
819+ let bR = J(bF)
820+ if ((bR == bR))
820821 then {
821- let bR = J(bF)
822- if ((bR == bR))
822+ let bS = J(bG)
823+ if ((bS == bS))
823824 then {
824- let bS = invoke(c, "swap", [bG, 0], [AttachedPayment(I(bE), at)])
825- if ((bS == bS))
825+ let bT = invoke(c, "swap", [bH, 0], [AttachedPayment(I(bF), at)])
826+ if ((bT == bT))
826827 then {
827- let bT = (bQ - J(bE))
828- if ((bT == bT))
828+ let bU = (bR - J(bF))
829+ if ((bU == bU))
829830 then {
830- let bU = (J(bF) - bR)
831- if ((bU == bU))
831+ let bV = (J(bG) - bS)
832+ if ((bV == bV))
832833 then {
833- let bV = al(bE)._1
834- let bW = am(bE)
835- let bX = fraction(bT, bV, bW)
836- let bY = al(bF)._2
837- let bZ = am(bF)
838- let ca = fraction(bU, bY, bZ)
839- let br = parseIntValue(split(E("setup_penalties"), ",")[value(indexOf(K(), bF))])
840- let cb = (ca - fraction(bX, (k - br), k))
841- let cc = fraction(bT, m, av)
842- let cd = fraction(fraction(bU, m, aL), (k - fraction(cb, k, ca)), k)
843- if ((bT > at))
834+ let bW = al(bF)._1
835+ let bX = am(bF)
836+ let bY = fraction(bU, bW, bX)
837+ let bZ = al(bG)._2
838+ let ca = am(bG)
839+ let cb = fraction(bV, bZ, ca)
840+ let bs = parseIntValue(split(E("setup_penalties"), ",")[value(indexOf(K(), bG))])
841+ let cc = (cb - fraction(bY, (k - bs), k))
842+ let cd = fraction(bU, m, av)
843+ let ce = fraction(fraction(bV, m, aM), (k - fraction(cc, k, cb)), k)
844+ if ((bU > at))
844845 then throw("more assets exchanged than expected")
845- else if ((0 > cb))
846+ else if ((0 > cc))
846847 then throw("price impact is bigger than liquidation penalty")
847- else [IntegerEntry(((g + "_supplied_") + bE), (bN - cc)), IntegerEntry(((g + "_borrowed_") + bF), (bP - cd)), IntegerEntry(("total_supplied_" + bE), (A(("total_supplied_" + bE)) - cc)), IntegerEntry(("total_borrowed_" + bF), (A(("total_borrowed_" + bF)) - cd))]
848+ else [IntegerEntry(((g + "_supplied_") + bF), (bO - cd)), IntegerEntry(((g + "_borrowed_") + bG), (bQ - ce)), IntegerEntry(("total_supplied_" + bF), (A(("total_supplied_" + bF)) - cd)), IntegerEntry(("total_borrowed_" + bG), (A(("total_borrowed_" + bG)) - ce))]
848849 }
849850 else throw("Strict value is not equal to itself.")
850851 }
851852 else throw("Strict value is not equal to itself.")
852853 }
853854 else throw("Strict value is not equal to itself.")
854855 }
855856 else throw("Strict value is not equal to itself.")
856857 }
857858 else throw("Strict value is not equal to itself.")
858859 }
859860 }
860861 else throw("Strict value is not equal to itself.")
861862 }
862863
863864
864865
865866 @Callable(as)
866-func liquidateV2 (bt,g,bE) = if (!(f(as.caller)))
867+func liquidateV2 (bu,g,bF) = if (!(f(as.caller)))
867868 then throw("temporarily available for whitelist only")
868869 else if (!(D("setup_active")))
869870 then throw("market is stopped")
870871 else {
871- let ce = as.payments[0].assetId
872- let bF = G(ce)
873- let cf = as.payments[0].amount
874- let bH = ao(g)
875- if ((bH == bH))
876- then if ((bH > 0))
872+ let cf = as.payments[0].assetId
873+ let bG = G(cf)
874+ let cg = as.payments[0].amount
875+ let bI = ao(g)
876+ if ((bI == bI))
877+ then if ((bI > 0))
877878 then throw("user can't be liquidated")
878879 else {
879- let cg = K()
880- let ch = value(indexOf(cg, bF))
881- let ci = value(indexOf(cg, bE))
882- let cj = aa(bF, "bRate")
883- let aL = cj._1
884- let bJ = cj._2
885- let bY = al(bF)._2
886- let bZ = am(bF)
887- let ck = fraction(cf, bY, bZ)
888- let br = parseIntValue(value(split(E("setup_penalties"), ",")[ch]))
889- let bV = al(bE)._1
890- let bW = am(bE)
891- let cl = fraction(ck, (k + br), k)
892- let bM = fraction(cl, bW, bV)
893- let cm = fraction(cf, m, aL)
894- let cn = fraction(bM, m, bJ[((ci * 3) + 1)].value)
895- let bN = A(((g + "_supplied_") + bE))
896- let bO = A(((g + "_borrowed_") + bF))
897- let bP = if ((bO > 0))
898- then bO
880+ let ch = K()
881+ let ci = value(indexOf(ch, bG))
882+ let cj = value(indexOf(ch, bF))
883+ let ck = aa(bG, "bRate")
884+ let aM = ck._1
885+ let bK = ck._2
886+ let bZ = al(bG)._2
887+ let ca = am(bG)
888+ let cl = fraction(cg, bZ, ca)
889+ let bs = parseIntValue(value(split(E("setup_penalties"), ",")[ci]))
890+ let bW = al(bF)._1
891+ let bX = am(bF)
892+ let cm = fraction(cl, (k + bs), k)
893+ let bN = fraction(cm, bX, bW)
894+ let cn = fraction(cg, m, aM)
895+ let co = fraction(bN, m, bK[((cj * 3) + 1)].value)
896+ let bO = A(((g + "_supplied_") + bF))
897+ let bP = A(((g + "_borrowed_") + bG))
898+ let bQ = if ((bP > 0))
899+ then bP
899900 else throw("user has no borrow in this token")
900- if ((cn > bN))
901+ if ((co > bO))
901902 then throw("position to liquidate is bigger than user's supply")
902- else if (bt)
903+ else if (bu)
903904 then throw("liquidation will pass")
904- else ([ScriptTransfer(as.caller, bM, I(bE)), IntegerEntry(((g + "_supplied_") + bE), (bN - cn)), IntegerEntry(((g + "_borrowed_") + bF), (bP - cm)), IntegerEntry(("total_supplied_" + bE), (A(("total_supplied_" + bE)) - cn)), IntegerEntry(("total_borrowed_" + bF), (A(("total_borrowed_" + bF)) - cm))] ++ bJ)
905+ else ([ScriptTransfer(as.caller, bN, I(bF)), IntegerEntry(((g + "_supplied_") + bF), (bO - co)), IntegerEntry(((g + "_borrowed_") + bG), (bQ - cn)), IntegerEntry(("total_supplied_" + bF), (A(("total_supplied_" + bF)) - co)), IntegerEntry(("total_borrowed_" + bG), (A(("total_borrowed_" + bG)) - cn))] ++ bK)
905906 }
906907 else throw("Strict value is not equal to itself.")
907908 }
908909
909910
910911
911912 @Callable(as)
912-func getUserCollateral (bt,g,co,cp) = {
913- let bu = K()
914- let bm = split(E("setup_ltvs"), ",")
915- let bn = split(E("setup_lts"), ",")
916- let af = aa(bu[0], "sRate")._2
917- let cq = split(cp, ",")
918- func q (r,s) = if ((s >= size(bu)))
913+func getUserCollateral (bu,g,cp,cq) = {
914+ let bv = K()
915+ let bn = split(E("setup_ltvs"), ",")
916+ let bo = split(E("setup_lts"), ",")
917+ let af = aa(bv[0], "sRate")._2
918+ let cr = split(cq, ",")
919+ func q (r,s) = if ((s >= size(bv)))
919920 then r
920921 else {
921- let cr = A(((g + "_supplied_") + bu[s]))
922- let cs = A(((g + "_borrowed_") + bu[s]))
923- let ct = if ((cp == ""))
924- then if (if ((cs != 0))
922+ let cs = A(((g + "_supplied_") + bv[s]))
923+ let ct = A(((g + "_borrowed_") + bv[s]))
924+ let cu = if ((cq == ""))
925+ then if (if ((ct != 0))
925926 then true
926- else (cr != 0))
927+ else (cs != 0))
927928 then true
928929 else false
929930 else true
930- if (ct)
931+ if (cu)
931932 then {
932- let aB = am(bu[s])
933- let az = al(bu[s])
934- ((r + fraction(fraction(fraction((cr + (if (if (if ((cp != ""))
935- then (cq[0] == bu[s])
933+ let aC = am(bv[s])
934+ let az = al(bv[s])
935+ ((r + fraction(fraction(fraction((cs + (if (if (if ((cq != ""))
936+ then (cr[0] == bv[s])
936937 else false)
937- then (cq[1] == "supplied")
938+ then (cr[1] == "supplied")
938939 else false)
939- then parseIntValue(cq[2])
940- else 0)), af[(s * 3)].value, m), parseIntValue(bm[s]), k), az._1, aB)) - (if (co)
941- then fraction(fraction(fraction((cs + (if (if (if ((cp != ""))
942- then (cq[0] == bu[s])
940+ then parseIntValue(cr[2])
941+ else 0)), af[(s * 3)].value, m), parseIntValue(bn[s]), k), az._1, aC)) - (if (cp)
942+ then fraction(fraction(fraction((ct + (if (if (if ((cq != ""))
943+ then (cr[0] == bv[s])
943944 else false)
944- then (cq[1] == "borrowed")
945+ then (cr[1] == "borrowed")
945946 else false)
946- then parseIntValue(cq[2])
947- else 0)), af[((s * 3) + 1)].value, m), k, parseIntValue(bn[s])), az._2, aB)
947+ then parseIntValue(cr[2])
948+ else 0)), af[((s * 3) + 1)].value, m), k, parseIntValue(bo[s])), az._2, aC)
948949 else 0))
949950 }
950951 else r
951952 }
952953
953- let cu = {
954+ let cv = {
954955 let t = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
955956 let u = size(t)
956957 let v = 0
957958 func w (x,y) = if ((y >= u))
958959 then x
959960 else q(x, t[y])
960961
961962 func z (x,y) = if ((y >= u))
962963 then x
963964 else throw("List size exceeds 12")
964965
965966 z(w(w(w(w(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
966967 }
967- if (bt)
968- then throw(toString(cu))
969- else $Tuple2(af, cu)
968+ if (bu)
969+ then throw(toString(cv))
970+ else $Tuple2(af, cv)
970971 }
971972
972973
973974
974975 @Callable(as)
975-func getPrices (bt) = {
976- let bu = K()
977- func q (r,s) = if ((s >= size(bu)))
976+func getPrices (bu) = {
977+ let bv = K()
978+ func q (r,s) = if ((s >= size(bv)))
978979 then r
979980 else {
980- let az = ah(bu[s], 3)
981+ let az = ah(bv[s], 3)
981982 ((((r + toString(az._1)) + ",") + toString(az._2)) + "|")
982983 }
983984
984- let cu = {
985+ let cv = {
985986 let t = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
986987 let u = size(t)
987988 let v = ""
988989 func w (x,y) = if ((y >= u))
989990 then x
990991 else q(x, t[y])
991992
992993 func z (x,y) = if ((y >= u))
993994 then x
994995 else throw("List size exceeds 12")
995996
996997 z(w(w(w(w(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
997998 }
998- if (bt)
999- then throw(cu)
1000- else $Tuple2(nil, cu)
999+ if (bu)
1000+ then throw(cv)
1001+ else $Tuple2(nil, cv)
10011002 }
10021003
10031004
10041005
10051006 @Callable(as)
1006-func calculateUtilizationRatio (i,bt) = if (bt)
1007+func calculateUtilizationRatio (i,bu) = if (bu)
10071008 then throw(toString(ae(i)))
10081009 else $Tuple2(nil, ae(i))
10091010
10101011
10111012
10121013 @Callable(as)
1013-func calculateOutdatedUR (i,bt) = if (bt)
1014+func calculateOutdatedUR (i,bu) = if (bu)
10141015 then throw(toString(N(i)))
10151016 else $Tuple2(nil, N(i))
10161017
10171018
10181019
10191020 @Callable(as)
1020-func calculateTokenRates (bt) = {
1021+func calculateTokenRates (bu) = {
10211022 func q (r,i) = {
10221023 let af = T(i)
10231024 $Tuple2(((((r._1 + toString(af[1].value)) + "|") + toString(af[0].value)) + ","), (r._2 ++ af))
10241025 }
10251026
1026- let bx = {
1027+ let by = {
10271028 let t = K()
10281029 let u = size(t)
10291030 let v = $Tuple2("", nil)
10301031 func w (x,y) = if ((y >= u))
10311032 then x
10321033 else q(x, t[y])
10331034
10341035 func z (x,y) = if ((y >= u))
10351036 then x
10361037 else throw("List size exceeds 12")
10371038
10381039 z(w(w(w(w(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
10391040 }
1040- if (bt)
1041- then throw(bx._1)
1042- else $Tuple2(bx._2, bx._1)
1041+ if (bu)
1042+ then throw(by._1)
1043+ else $Tuple2(by._2, by._1)
10431044 }
10441045
10451046
10461047
10471048 @Callable(as)
1048-func calculateTokensInterest (bt) = {
1049+func calculateTokensInterest (bu) = {
10491050 func q (r,i) = {
10501051 let S = fraction(P(i), n, k)
10511052 ((r + toString(S)) + ",")
10521053 }
10531054
1054- let bx = {
1055+ let by = {
10551056 let t = K()
10561057 let u = size(t)
10571058 let v = ""
10581059 func w (x,y) = if ((y >= u))
10591060 then x
10601061 else q(x, t[y])
10611062
10621063 func z (x,y) = if ((y >= u))
10631064 then x
10641065 else throw("List size exceeds 12")
10651066
10661067 z(w(w(w(w(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
10671068 }
1068- if (bt)
1069- then throw(bx)
1070- else $Tuple2(nil, bx)
1069+ if (bu)
1070+ then throw(by)
1071+ else $Tuple2(nil, by)
10711072 }
10721073
10731074
1074-@Verifier(cv)
1075-func cw () = sigVerify(cv.bodyBytes, cv.proofs[0], cv.senderPublicKey)
1075+@Verifier(cw)
1076+func cx () = sigVerify(cw.bodyBytes, cw.proofs[0], cw.senderPublicKey)
10761077

github/deemru/w8io/3ef1775 
358.59 ms