tx · 2WAWN9TTEUyrpbfw2KLaVtveWQG6BV7aqWJZAikT7P1m

3MrRa3KaEgRyyjQdMLuU78m5GkJLvP5DZLj:  -0.05000000 Waves

2022.07.02 22:12 [2122442] smart account 3MrRa3KaEgRyyjQdMLuU78m5GkJLvP5DZLj > SELF 0.00000000 Waves

{ "type": 13, "id": "2WAWN9TTEUyrpbfw2KLaVtveWQG6BV7aqWJZAikT7P1m", "fee": 5000000, "feeAssetId": null, "timestamp": 1656789165360, "version": 2, "chainId": 84, "sender": "3MrRa3KaEgRyyjQdMLuU78m5GkJLvP5DZLj", "senderPublicKey": "AJNTN7EtP9dsAmPzcKRp9bRMvzZL4uwkmVxQuFuar3Qr", "proofs": [ "YCLGwuaYoZAsCq4jcS2JBRNH5PUQhscja3k577KGQkWST24fsbT131gWKNZiEdcucN96UBwRp6LzhsQ3UmxCebt" ], "script": "base64:AAIFAAAAAAAAAEoIAhIAEgASCQoHAQEBAQEBARIOCgwBAQEBAQEBCAgIAQESBgoEAQEBARIFCgMBAQESABIDCgEBEgASAwoBCBIAEgMKAQgSAwoBCAAAAHAAAAAACWtfb3JhX2tleQIAAAAJa19vcmFfa2V5AAAAAA9rX29yYV9ibG9ja19rZXkCAAAAD2tfb3JhX2Jsb2NrX2tleQAAAAAFa19vcmECAAAABWtfb3JhAAAAAAlrX2JhbGFuY2UCAAAACWtfYmFsYW5jZQAAAAAOa19wb3NpdGlvblNpemUCAAAADmtfcG9zaXRpb25TaXplAAAAABBrX3Bvc2l0aW9uTWFyZ2luAgAAABBrX3Bvc2l0aW9uTWFyZ2luAAAAABZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAgAAABZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAAAAAC5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAgAAABJrX3Bvc2l0aW9uRnJhY3Rpb24AAAAADWtfaW5pdGlhbGl6ZWQCAAAADWtfaW5pdGlhbGl6ZWQAAAAACGtfcGF1c2VkAgAAAAhrX3BhdXNlZAAAAAAFa19mZWUCAAAABWtfZmVlAAAAAA9rX2Z1bmRpbmdQZXJpb2QCAAAAD2tfZnVuZGluZ1BlcmlvZAAAAAARa19pbml0TWFyZ2luUmF0aW8CAAAAEWtfaW5pdE1hcmdpblJhdGlvAAAAABhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8CAAAABWtfbW1yAAAAABVrX2xpcXVpZGF0aW9uRmVlUmF0aW8CAAAAFWtfbGlxdWlkYXRpb25GZWVSYXRpbwAAAAANa19zcHJlYWRMaW1pdAIAAAANa19zcHJlYWRMaW1pdAAAAAAQa19tYXhQcmljZUltcGFjdAIAAAAQa19tYXhQcmljZUltcGFjdAAAAAANa19sYXN0RGF0YVN0cgIAAAANa19sYXN0RGF0YVN0cgAAAAAOa19sYXN0TWludXRlSWQCAAAADmtfbGFzdE1pbnV0ZUlkAAAAAB1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIAAAAda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UAAAAAE2tfdHdhcERhdGFMYXN0UHJpY2UCAAAAE2tfdHdhcERhdGFMYXN0UHJpY2UAAAAAJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CAAAAG2tfbGF0ZXN0TG9uZ1ByZW1pdW1GcmFjdGlvbgAAAAAma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CAAAAHGtfbGF0ZXN0U2hvcnRQcmVtaXVtRnJhY3Rpb24AAAAAEmtfbmV4dEZ1bmRpbmdCbG9jawIAAAAea19uZXh0RnVuZGluZ0Jsb2NrTWluVGltZXN0YW1wAAAAABFrX2xvbmdGdW5kaW5nUmF0ZQIAAAARa19sb25nRnVuZGluZ1JhdGUAAAAAEmtfc2hvcnRGdW5kaW5nUmF0ZQIAAAASa19zaG9ydEZ1bmRpbmdSYXRlAAAAABNrX3F1b3RlQXNzZXRSZXNlcnZlAgAAAAhrX3F0QXN0UgAAAAASa19iYXNlQXNzZXRSZXNlcnZlAgAAAAhrX2JzQXN0UgAAAAATa190b3RhbFBvc2l0aW9uU2l6ZQIAAAATa190b3RhbFBvc2l0aW9uU2l6ZQAAAAAXa190b3RhbExvbmdQb3NpdGlvblNpemUCAAAAF2tfdG90YWxMb25nUG9zaXRpb25TaXplAAAAABhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUCAAAAGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAAAAAUa19jdW11bGF0aXZlTm90aW9uYWwCAAAAFGtfY3VtdWxhdGl2ZU5vdGlvbmFsAAAAABZrX29wZW5JbnRlcmVzdE5vdGlvbmFsAgAAABZrX29wZW5JbnRlcmVzdE5vdGlvbmFsAAAAABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIAAAAUa19jb29yZGluYXRvckFkZHJlc3MAAAAAE2tfaW5zdXJhbmNlX2FkZHJlc3MCAAAAE2tfaW5zdXJhbmNlX2FkZHJlc3MAAAAAD2tfYWRtaW5fYWRkcmVzcwIAAAAPa19hZG1pbl9hZGRyZXNzAAAAABJrX2FkbWluX3B1YmxpY19rZXkCAAAAEmtfYWRtaW5fcHVibGljX2tleQAAAAANa19xdW90ZV9hc3NldAIAAAANa19xdW90ZV9hc3NldAAAAAAPa19xdW90ZV9zdGFraW5nAgAAAA9rX3F1b3RlX3N0YWtpbmcAAAAAEWtfc3Rha2luZ19hZGRyZXNzAgAAABFrX3N0YWtpbmdfYWRkcmVzcwEAAAALY29vcmRpbmF0b3IAAAAACQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwUAAAAUa19jb29yZGluYXRvckFkZHJlc3MCAAAAE0Nvb3JkaW5hdG9yIG5vdCBzZXQBAAAADGFkbWluQWRkcmVzcwAAAAAJAAQmAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgkBAAAAC2Nvb3JkaW5hdG9yAAAAAAUAAAAPa19hZG1pbl9hZGRyZXNzAQAAAA5hZG1pblB1YmxpY0tleQAAAAAJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgkBAAAAC2Nvb3JkaW5hdG9yAAAAAAUAAAASa19hZG1pbl9wdWJsaWNfa2V5AQAAAApxdW90ZUFzc2V0AAAAAAkAAlkAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACCQEAAAALY29vcmRpbmF0b3IAAAAABQAAAA1rX3F1b3RlX2Fzc2V0AQAAABFxdW90ZUFzc2V0U3Rha2luZwAAAAAJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACCQEAAAALY29vcmRpbmF0b3IAAAAABQAAAA9rX3F1b3RlX3N0YWtpbmcCAAAAG1F1b3RlIGFzc2V0IHN0YWtpbmcgbm90IHNldAEAAAAOc3Rha2luZ0FkZHJlc3MAAAAACQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgkBAAAAC2Nvb3JkaW5hdG9yAAAAAAUAAAARa19zdGFraW5nX2FkZHJlc3MCAAAAEUluc3VyYW5jZSBub3Qgc2V0AQAAABBpbnN1cmFuY2VBZGRyZXNzAAAAAAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAQAAABFAZXh0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YWludGVuYW5jZU1hcmdpblJhdGlvAQAAABNsaXF1aWRhdGlvbkZlZVJhdGlvAAAAAAkBAAAAA2ludAAAAAEFAAAAFWtfbGlxdWlkYXRpb25GZWVSYXRpbwEAAAALc3ByZWFkTGltaXQAAAAACQEAAAADaW50AAAAAQUAAAANa19zcHJlYWRMaW1pdAEAAAAObWF4UHJpY2VJbXBhY3QAAAAACQEAAAADaW50AAAAAQUAAAAQa19tYXhQcmljZUltcGFjdAEAAAAjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24AAAAACQEAAAADaW50AAAAAQUAAAAla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEAAAAkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAAAAAkBAAAAA2ludAAAAAEFAAAAJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQAAABZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAAAAAkBAAAAA2ludAAAAAEFAAAAGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQEAAAAVdG90YWxMb25nUG9zaXRpb25TaXplAAAAAAkBAAAAA2ludAAAAAEFAAAAF2tfdG90YWxMb25nUG9zaXRpb25TaXplAQAAABZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAAAAAwAAAAxfbWFyZ2luUmF0aW8AAAAQX2Jhc2VNYXJnaW5SYXRpbwAAABRfbGFyZ2VyVGhhbk9yRXF1YWxUbwQAAAAUcmVtYWluaW5nTWFyZ2luUmF0aW8JAABlAAAAAgUAAAAMX21hcmdpblJhdGlvBQAAABBfYmFzZU1hcmdpblJhdGlvAwMFAAAAFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQAAZgAAAAIAAAAAAAAAAAAFAAAAFHJlbWFpbmluZ01hcmdpblJhdGlvBwkAAAIAAAABAgAAAA5JbnZhbGlkIG1hcmdpbgMDCQEAAAABIQAAAAEFAAAAFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQAAZwAAAAIFAAAAFHJlbWFpbmluZ01hcmdpblJhdGlvAAAAAAAAAAAABwkAAAIAAAABAgAAAA5JbnZhbGlkIG1hcmdpbgYBAAAAH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24AAAABAAAADV9wb3NpdGlvblNpemUDCQAAAAAAAAIFAAAADV9wb3NpdGlvblNpemUAAAAAAAAAAAAJAAACAAAAAQIAAAAsU2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBfcG9zaXRpb25TaXplID09IDADCQAAZgAAAAIFAAAADV9wb3NpdGlvblNpemUAAAAAAAAAAAAJAQAAACNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAAAAAJAQAAACRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24AAAAAAQAAAAtnZXRQb3NpdGlvbgAAAAEAAAAHX3RyYWRlcgQAAAAPcG9zaXRpb25TaXplT3B0CQAEGgAAAAIFAAAABHRoaXMJAQAAAA50b0NvbXBvc2l0ZUtleQAAAAIFAAAADmtfcG9zaXRpb25TaXplBQAAAAdfdHJhZGVyBAAAAAckbWF0Y2gwBQAAAA9wb3NpdGlvblNpemVPcHQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAMcG9zaXRpb25TaXplBQAAAAckbWF0Y2gwCQAFFgAAAAQFAAAADHBvc2l0aW9uU2l6ZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgUAAAAQa19wb3NpdGlvbk1hcmdpbgUAAAAHX3RyYWRlcgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgUAAAAWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUAAAAHX3RyYWRlcgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgUAAAAua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUAAAAHX3RyYWRlcgkABRYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABNyZXF1aXJlT3BlblBvc2l0aW9uAAAAAQAAAAdfdHJhZGVyAwkAAAAAAAACCAkBAAAAC2dldFBvc2l0aW9uAAAAAQUAAAAHX3RyYWRlcgAAAAJfMQAAAAAAAAAAAAkAAAIAAAABAgAAABBObyBvcGVuIHBvc2l0aW9uBgEAAAALaW5pdGlhbGl6ZWQAAAAACQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAABHRoaXMFAAAADWtfaW5pdGlhbGl6ZWQHAQAAAAZwYXVzZWQAAAAACQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAABHRoaXMFAAAACGtfcGF1c2VkBwEAAAANdXBkYXRlUmVzZXJ2ZQAAAAMAAAAGX2lzQWRkAAAAEV9xdW90ZUFzc2V0QW1vdW50AAAAEF9iYXNlQXNzZXRBbW91bnQDBQAAAAZfaXNBZGQEAAAAB25ld0Jhc2UJAABlAAAAAgkBAAAABmJzQXN0UgAAAAAFAAAAEF9iYXNlQXNzZXRBbW91bnQDCQAAZwAAAAIAAAAAAAAAAAAFAAAAB25ld0Jhc2UJAAACAAAAAQIAAAAqVHggbGVhZCB0byBiYXNlIGFzc2V0IHJlc2VydmUgPD0gMCwgcmV2ZXJ0CQAFFgAAAAQJAABkAAAAAgkBAAAABnF0QXN0UgAAAAAFAAAAEV9xdW90ZUFzc2V0QW1vdW50BQAAAAduZXdCYXNlCQAAZAAAAAIJAQAAABF0b3RhbFBvc2l0aW9uU2l6ZQAAAAAFAAAAEF9iYXNlQXNzZXRBbW91bnQJAABkAAAAAgkBAAAAEmN1bXVsYXRpdmVOb3Rpb25hbAAAAAAFAAAAEV9xdW90ZUFzc2V0QW1vdW50BAAAAAhuZXdRdW90ZQkAAGUAAAACCQEAAAAGcXRBc3RSAAAAAAUAAAARX3F1b3RlQXNzZXRBbW91bnQDCQAAZwAAAAIAAAAAAAAAAAAFAAAACG5ld1F1b3RlCQAAAgAAAAECAAAAKlR4IGxlYWQgdG8gYmFzZSBxdW90ZSByZXNlcnZlIDw9IDAsIHJldmVydAkABRYAAAAEBQAAAAhuZXdRdW90ZQkAAGQAAAACCQEAAAAGYnNBc3RSAAAAAAUAAAAQX2Jhc2VBc3NldEFtb3VudAkAAGUAAAACCQEAAAARdG90YWxQb3NpdGlvblNpemUAAAAABQAAABBfYmFzZUFzc2V0QW1vdW50CQAAZQAAAAIJAQAAABJjdW11bGF0aXZlTm90aW9uYWwAAAAABQAAABFfcXVvdGVBc3NldEFtb3VudAEAAAAJc3dhcElucHV0AAAAAgAAAAZfaXNBZGQAAAARX3F1b3RlQXNzZXRBbW91bnQEAAAAB19xdEFzdFIJAQAAAAZxdEFzdFIAAAAABAAAAAdfYnNBc3RSCQEAAAAGYnNBc3RSAAAAAAQAAAALcHJpY2VCZWZvcmUJAQAAAARkaXZkAAAAAgUAAAAHX3F0QXN0UgUAAAAHX2JzQXN0UgQAAAAnYW1vdW50QmFzZUFzc2V0Qm91Z2h0V2l0aG91dFByaWNlSW1wYWN0CQEAAAAEbXVsZAAAAAIFAAAAEV9xdW90ZUFzc2V0QW1vdW50BQAAAAtwcmljZUJlZm9yZQQAAAABawkBAAAABG11bGQAAAACBQAAAAdfcXRBc3RSBQAAAAdfYnNBc3RSBAAAABZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyAwUAAAAGX2lzQWRkCQAAZAAAAAIFAAAAB19xdEFzdFIFAAAAEV9xdW90ZUFzc2V0QW1vdW50CQAAZQAAAAIFAAAAB19xdEFzdFIFAAAAEV9xdW90ZUFzc2V0QW1vdW50BAAAABViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAQAAAARkaXZkAAAAAgUAAAABawUAAAAWcXVvdGVBc3NldFJlc2VydmVBZnRlcgQAAAAYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzCQEAAAADYWJzAAAAAQkAAGUAAAACBQAAABViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFAAAAB19ic0FzdFIEAAAAFWFtb3VudEJhc2VBc3NldEJvdWdodAMFAAAABl9pc0FkZAUAAAAYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzCQEAAAABLQAAAAEFAAAAGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQAAAALcHJpY2VJbXBhY3QJAABpAAAAAgkAAGUAAAACBQAAACdhbW91bnRCYXNlQXNzZXRCb3VnaHRXaXRob3V0UHJpY2VJbXBhY3QFAAAAGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwUAAAAnYW1vdW50QmFzZUFzc2V0Qm91Z2h0V2l0aG91dFByaWNlSW1wYWN0BAAAABNtYXhQcmljZUltcGFjdFZhbHVlCQEAAAAObWF4UHJpY2VJbXBhY3QAAAAAAwkAAGYAAAACBQAAAAtwcmljZUltcGFjdAUAAAATbWF4UHJpY2VJbXBhY3RWYWx1ZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAA1QcmljZSBpbXBhY3QgCQABpAAAAAEFAAAAC3ByaWNlSW1wYWN0AgAAABQgPiBtYXggcHJpY2UgaW1wYWN0IAkAAaQAAAABBQAAABNtYXhQcmljZUltcGFjdFZhbHVlBAAAAA0kdDAxMTQzMjExNjM1CQEAAAANdXBkYXRlUmVzZXJ2ZQAAAAMFAAAABl9pc0FkZAUAAAARX3F1b3RlQXNzZXRBbW91bnQFAAAAGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQAAAAXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEIBQAAAA0kdDAxMTQzMjExNjM1AAAAAl8xBAAAABZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUAAAANJHQwMTE0MzIxMTYzNQAAAAJfMgQAAAAXdG90YWxQb3NpdGlvblNpemVBZnRlcjEIBQAAAA0kdDAxMTQzMjExNjM1AAAAAl8zBAAAABhjdW11bGF0aXZlTm90aW9uYWxBZnRlcjEIBQAAAA0kdDAxMTQzMjExNjM1AAAAAl80CQAFFwAAAAUFAAAAFWFtb3VudEJhc2VBc3NldEJvdWdodAUAAAAXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFAAAAFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFAAAAF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxBQAAABhjdW11bGF0aXZlTm90aW9uYWxBZnRlcjEBAAAAImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQAAAAEAAAAEF9vbGRQb3NpdGlvblNpemUAAAASX29sZFBvc2l0aW9uTWFyZ2luAAAAJV9vbGRQb3NpdGlvbkN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24AAAAMX21hcmdpbkRlbHRhBAAAAA5mdW5kaW5nUGF5bWVudAMJAQAAAAIhPQAAAAIFAAAAEF9vbGRQb3NpdGlvblNpemUAAAAAAAAAAAAEAAAAIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQEAAAAfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAAAAEFAAAAEF9vbGRQb3NpdGlvblNpemUJAQAAAARtdWxkAAAAAgkAAGUAAAACBQAAACBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUAAAAlX29sZFBvc2l0aW9uQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUAAAAQX29sZFBvc2l0aW9uU2l6ZQAAAAAAAAAAAAQAAAAMc2lnbmVkTWFyZ2luCQAAZAAAAAIJAABlAAAAAgUAAAAMX21hcmdpbkRlbHRhBQAAAA5mdW5kaW5nUGF5bWVudAUAAAASX29sZFBvc2l0aW9uTWFyZ2luBAAAAA0kdDAxMjM4MjEyNTA5AwkAAGYAAAACAAAAAAAAAAAABQAAAAxzaWduZWRNYXJnaW4JAAUUAAAAAgAAAAAAAAAAAAkBAAAAA2FicwAAAAEFAAAADHNpZ25lZE1hcmdpbgkABRQAAAACCQEAAAADYWJzAAAAAQUAAAAMc2lnbmVkTWFyZ2luAAAAAAAAAAAABAAAAAxyZW1haW5NYXJnaW4IBQAAAA0kdDAxMjM4MjEyNTA5AAAAAl8xBAAAAAdiYWREZWJ0CAUAAAANJHQwMTIzODIxMjUwOQAAAAJfMgkABRUAAAADBQAAAAxyZW1haW5NYXJnaW4FAAAAB2JhZERlYnQFAAAADmZ1bmRpbmdQYXltZW50AQAAAApzd2FwT3V0cHV0AAAAAgAAAAZfaXNBZGQAAAAQX2Jhc2VBc3NldEFtb3VudAQAAAASX3F1b3RlQXNzZXRSZXNlcnZlCQEAAAAGcXRBc3RSAAAAAAQAAAARX2Jhc2VBc3NldFJlc2VydmUJAQAAAAZic0FzdFIAAAAAAwkAAAAAAAACBQAAABBfYmFzZUFzc2V0QW1vdW50AAAAAAAAAAAACQAAAgAAAAECAAAAGUludmFsaWQgYmFzZSBhc3NldCBhbW91bnQEAAAAAWsJAQAAAARtdWxkAAAAAgUAAAASX3F1b3RlQXNzZXRSZXNlcnZlBQAAABFfYmFzZUFzc2V0UmVzZXJ2ZQQAAAAYYmFzZUFzc2V0UG9vbEFtb3VudEFmdGVyAwUAAAAGX2lzQWRkCQAAZAAAAAIFAAAAEV9iYXNlQXNzZXRSZXNlcnZlBQAAABBfYmFzZUFzc2V0QW1vdW50CQAAZQAAAAIFAAAAEV9iYXNlQXNzZXRSZXNlcnZlBQAAABBfYmFzZUFzc2V0QW1vdW50BAAAAA9xdW90ZUFzc2V0QWZ0ZXIJAQAAAARkaXZkAAAAAgUAAAABawUAAAAYYmFzZUFzc2V0UG9vbEFtb3VudEFmdGVyBAAAAA5xdW90ZUFzc2V0U29sZAkBAAAAA2FicwAAAAEJAABlAAAAAgUAAAAPcXVvdGVBc3NldEFmdGVyBQAAABJfcXVvdGVBc3NldFJlc2VydmUEAAAADSR0MDEzMzQ3MTM1NDAJAQAAAA11cGRhdGVSZXNlcnZlAAAAAwkBAAAAASEAAAABBQAAAAZfaXNBZGQFAAAADnF1b3RlQXNzZXRTb2xkBQAAABBfYmFzZUFzc2V0QW1vdW50BAAAABdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFAAAADSR0MDEzMzQ3MTM1NDAAAAACXzEEAAAAFmJhc2VBc3NldFJlc2VydmVBZnRlcjEIBQAAAA0kdDAxMzM0NzEzNTQwAAAAAl8yBAAAABd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFAAAADSR0MDEzMzQ3MTM1NDAAAAACXzMEAAAAGGN1bXVsYXRpdmVOb3Rpb25hbEFmdGVyMQgFAAAADSR0MDEzMzQ3MTM1NDAAAAACXzQJAAUZAAAABwUAAAAOcXVvdGVBc3NldFNvbGQFAAAAF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxBQAAABZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxBQAAABd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQUAAAAYY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIxCQAAZQAAAAIJAQAAABV0b3RhbExvbmdQb3NpdGlvblNpemUAAAAAAwUAAAAGX2lzQWRkCQEAAAADYWJzAAAAAQUAAAAQX2Jhc2VBc3NldEFtb3VudAAAAAAAAAAAAAkAAGUAAAACCQEAAAAWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAAAAADCQEAAAABIQAAAAEFAAAABl9pc0FkZAkBAAAAA2FicwAAAAEFAAAAEF9iYXNlQXNzZXRBbW91bnQAAAAAAAAAAAABAAAAEmdldE9yYWNsZVR3YXBQcmljZQAAAAAEAAAABm9yYWNsZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMFAAAABWtfb3JhAgAAAAAEAAAACHByaWNlS2V5CQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzBQAAAAlrX29yYV9rZXkEAAAACGJsb2NrS2V5CQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzBQAAAA9rX29yYV9ibG9ja19rZXkEAAAACWxhc3RWYWx1ZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAGb3JhY2xlBQAAAAhwcmljZUtleQUAAAAJbGFzdFZhbHVlAQAAAAxnZXRTcG90UHJpY2UAAAAABAAAABJfcXVvdGVBc3NldFJlc2VydmUJAQAAAAZxdEFzdFIAAAAABAAAABFfYmFzZUFzc2V0UmVzZXJ2ZQkBAAAABmJzQXN0UgAAAAAJAQAAAARkaXZkAAAAAgUAAAASX3F1b3RlQXNzZXRSZXNlcnZlBQAAABFfYmFzZUFzc2V0UmVzZXJ2ZQEAAAAWaXNPdmVyRmx1Y3R1YXRpb25MaW1pdAAAAAAEAAAAC29yYWNsZVByaWNlCQEAAAASZ2V0T3JhY2xlVHdhcFByaWNlAAAAAAQAAAAMY3VycmVudFByaWNlCQEAAAAMZ2V0U3BvdFByaWNlAAAAAAkAAGYAAAACCQEAAAAEZGl2ZAAAAAIJAQAAAANhYnMAAAABCQAAZQAAAAIFAAAAC29yYWNsZVByaWNlBQAAAAxjdXJyZW50UHJpY2UFAAAAC29yYWNsZVByaWNlCQEAAAALc3ByZWFkTGltaXQAAAAAAQAAACNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAAAAAIAAAAHX3RyYWRlcgAAAAdfb3B0aW9uBAAAAA0kdDAxNTE3MjE1MzAwCQEAAAALZ2V0UG9zaXRpb24AAAABBQAAAAdfdHJhZGVyBAAAAAxwb3NpdGlvblNpemUIBQAAAA0kdDAxNTE3MjE1MzAwAAAAAl8xBAAAAA5wb3NpdGlvbk1hcmdpbggFAAAADSR0MDE1MTcyMTUzMDAAAAACXzIEAAAAFHBvc2l0aW9uT3Blbk5vdGlvbmFsCAUAAAANJHQwMTUxNzIxNTMwMAAAAAJfMwQAAAARcG9zaXRpb25Mc3RVcGRDUEYIBQAAAA0kdDAxNTE3MjE1MzAwAAAAAl80BAAAAA9wb3NpdGlvblNpemVBYnMJAQAAAANhYnMAAAABBQAAAAxwb3NpdGlvblNpemUDCQAAAAAAAAIFAAAAD3Bvc2l0aW9uU2l6ZUFicwAAAAAAAAAAAAkAAAIAAAABAgAAABVJbnZhbGlkIHBvc2l0aW9uIHNpemUEAAAAB2lzU2hvcnQJAABmAAAAAgAAAAAAAAAAAAUAAAAMcG9zaXRpb25TaXplBAAAABBwb3NpdGlvbk5vdGlvbmFsAwkAAAAAAAACBQAAAAdfb3B0aW9uBQAAAA9QTkxfT1BUSU9OX1NQT1QEAAAADSR0MDE1NTQ3MTU2NTQJAQAAAApzd2FwT3V0cHV0AAAAAgkBAAAAASEAAAABBQAAAAdpc1Nob3J0BQAAAA9wb3NpdGlvblNpemVBYnMEAAAAE291dFBvc2l0aW9uTm90aW9uYWwIBQAAAA0kdDAxNTU0NzE1NjU0AAAAAl8xBAAAAAJ4MQgFAAAADSR0MDE1NTQ3MTU2NTQAAAACXzIEAAAAAngyCAUAAAANJHQwMTU1NDcxNTY1NAAAAAJfMwQAAAACeDMIBQAAAA0kdDAxNTU0NzE1NjU0AAAAAl80BQAAABNvdXRQb3NpdGlvbk5vdGlvbmFsCQAAaAAAAAIFAAAAD3Bvc2l0aW9uU2l6ZUFicwkBAAAAEmdldE9yYWNsZVR3YXBQcmljZQAAAAAEAAAADXVucmVhbGl6ZWRQbmwDBQAAAAdpc1Nob3J0CQAAZQAAAAIFAAAAFHBvc2l0aW9uT3Blbk5vdGlvbmFsBQAAABBwb3NpdGlvbk5vdGlvbmFsCQAAZQAAAAIFAAAAEHBvc2l0aW9uTm90aW9uYWwFAAAAFHBvc2l0aW9uT3Blbk5vdGlvbmFsCQAFFAAAAAIFAAAAEHBvc2l0aW9uTm90aW9uYWwFAAAADXVucmVhbGl6ZWRQbmwBAAAAFmdldE1hcmdpblJhdGlvQnlPcHRpb24AAAACAAAAB190cmFkZXIAAAAHX29wdGlvbgQAAAANJHQwMTYxNDkxNjI2MAkBAAAAC2dldFBvc2l0aW9uAAAAAQUAAAAHX3RyYWRlcgQAAAAMcG9zaXRpb25TaXplCAUAAAANJHQwMTYxNDkxNjI2MAAAAAJfMQQAAAAOcG9zaXRpb25NYXJnaW4IBQAAAA0kdDAxNjE0OTE2MjYwAAAAAl8yBAAAAANwb24IBQAAAA0kdDAxNjE0OTE2MjYwAAAAAl8zBAAAABFwb3NpdGlvbkxzdFVwZENQRggFAAAADSR0MDE2MTQ5MTYyNjAAAAACXzQEAAAADSR0MDE2MjY2MTYzNTkJAQAAACNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAAAAAIFAAAAB190cmFkZXIFAAAAB19vcHRpb24EAAAAEHBvc2l0aW9uTm90aW9uYWwIBQAAAA0kdDAxNjI2NjE2MzU5AAAAAl8xBAAAAA11bnJlYWxpemVkUG5sCAUAAAANJHQwMTYyNjYxNjM1OQAAAAJfMgQAAAANJHQwMTYzNjQxNjUzMAkBAAAAImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQAAAAEBQAAAAxwb3NpdGlvblNpemUFAAAADnBvc2l0aW9uTWFyZ2luBQAAABFwb3NpdGlvbkxzdFVwZENQRgUAAAANdW5yZWFsaXplZFBubAQAAAAMcmVtYWluTWFyZ2luCAUAAAANJHQwMTYzNjQxNjUzMAAAAAJfMQQAAAAHYmFkRGVidAgFAAAADSR0MDE2MzY0MTY1MzAAAAACXzIJAQAAAARkaXZkAAAAAgkAAGUAAAACBQAAAAxyZW1haW5NYXJnaW4FAAAAB2JhZERlYnQFAAAAEHBvc2l0aW9uTm90aW9uYWwBAAAADmdldE1hcmdpblJhdGlvAAAAAQAAAAdfdHJhZGVyCQEAAAAWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgAAAAIFAAAAB190cmFkZXIFAAAAD1BOTF9PUFRJT05fU1BPVAEAAAAVaW50ZXJuYWxDbG9zZVBvc2l0aW9uAAAAAQAAAAdfdHJhZGVyBAAAAA0kdDAxNjgzNjE2OTQ3CQEAAAALZ2V0UG9zaXRpb24AAAABBQAAAAdfdHJhZGVyBAAAAAxwb3NpdGlvblNpemUIBQAAAA0kdDAxNjgzNjE2OTQ3AAAAAl8xBAAAAA5wb3NpdGlvbk1hcmdpbggFAAAADSR0MDE2ODM2MTY5NDcAAAACXzIEAAAAA3BvbggFAAAADSR0MDE2ODM2MTY5NDcAAAACXzMEAAAAEXBvc2l0aW9uTHN0VXBkQ1BGCAUAAAANJHQwMTY4MzYxNjk0NwAAAAJfNAQAAAANJHQwMTY5NTMxNzA0MAkBAAAAI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAAAAAgUAAAAHX3RyYWRlcgUAAAAPUE5MX09QVElPTl9TUE9UBAAAAAJ4MQgFAAAADSR0MDE2OTUzMTcwNDAAAAACXzEEAAAADXVucmVhbGl6ZWRQbmwIBQAAAA0kdDAxNjk1MzE3MDQwAAAAAl8yBAAAAA0kdDAxNzA0NTE3MjEzCQEAAAAiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAAAAAQFAAAADHBvc2l0aW9uU2l6ZQUAAAAOcG9zaXRpb25NYXJnaW4FAAAAEXBvc2l0aW9uTHN0VXBkQ1BGBQAAAA11bnJlYWxpemVkUG5sBAAAAAxyZW1haW5NYXJnaW4IBQAAAA0kdDAxNzA0NTE3MjEzAAAAAl8xBAAAAAdiYWREZWJ0CAUAAAANJHQwMTcwNDUxNzIxMwAAAAJfMgQAAAAVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQEAAAABLQAAAAEFAAAADHBvc2l0aW9uU2l6ZQQAAAALcmVhbGl6ZWRQbmwFAAAADXVucmVhbGl6ZWRQbmwEAAAADW1hcmdpblRvVmF1bHQJAQAAAAEtAAAAAQUAAAAMcmVtYWluTWFyZ2luBAAAAA0kdDAxNzM0MDE3NjIxCQEAAAAKc3dhcE91dHB1dAAAAAIJAABmAAAAAgUAAAAMcG9zaXRpb25TaXplAAAAAAAAAAAACQEAAAADYWJzAAAAAQUAAAAMcG9zaXRpb25TaXplBAAAABlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUAAAANJHQwMTczNDAxNzYyMQAAAAJfMQQAAAAWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFAAAADSR0MDE3MzQwMTc2MjEAAAACXzIEAAAAFWJhc2VBc3NldFJlc2VydmVBZnRlcggFAAAADSR0MDE3MzQwMTc2MjEAAAACXzMEAAAAFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQAAAA0kdDAxNzM0MDE3NjIxAAAAAl80BAAAABdjdW11bGF0aXZlTm90aW9uYWxBZnRlcggFAAAADSR0MDE3MzQwMTc2MjEAAAACXzUEAAAADnRvdGFsTG9uZ0FmdGVyCAUAAAANJHQwMTczNDAxNzYyMQAAAAJfNgQAAAAPdG90YWxTaG9ydEFmdGVyCAUAAAANJHQwMTczNDAxNzYyMQAAAAJfNwQAAAAZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgkAAGUAAAACCQEAAAAUb3BlbkludGVyZXN0Tm90aW9uYWwAAAAABQAAAANwb24JAAUeAAAADAUAAAAVZXhjaGFuZ2VkUG9zaXRpb25TaXplBQAAAAdiYWREZWJ0BQAAAAtyZWFsaXplZFBubAUAAAANbWFyZ2luVG9WYXVsdAUAAAAWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUAAAAVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBQAAABZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBQAAABdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUAAAAZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUAAAAZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUAAAAOdG90YWxMb25nQWZ0ZXIFAAAAD3RvdGFsU2hvcnRBZnRlcgEAAAAQZ2V0VHdhcFNwb3RQcmljZQAAAAAEAAAACG1pbnV0ZUlkCQAAaQAAAAIJAABpAAAAAggFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAAAAAAAAAAA+gAAAAAAAAAADwEAAAADXN0YXJ0TWludXRlSWQJAABlAAAAAgUAAAAIbWludXRlSWQFAAAADVRXQVBfSU5URVJWQUwEAAAAB2xpc3RTdHIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAANa19sYXN0RGF0YVN0cgIAAAAABAAAAARsaXN0CQAEtQAAAAIFAAAAB2xpc3RTdHICAAAAASwKAQAAAAhmaWx0ZXJGbgAAAAIAAAALYWNj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AAAIbWF4SW5kZXgAAAAAAAAAAAAEAAAAFHN0YXJ0Q3VtdWxhdGl2ZVByaWNlCQAAZAAAAAIFAAAAGHN0YXJ0TGFzdEN1bXVsYXRpdmVQcmljZQkAAGgAAAACCQAAZQAAAAIFAAAADXN0YXJ0TWludXRlSWQFAAAACG1heEluZGV4BQAAAA5zdGFydExhc3RQcmljZQkAAGkAAAACCQAAZQAAAAIFAAAAEm5vd0N1bXVsYXRpdmVQcmljZQUAAAAUc3RhcnRDdW11bGF0aXZlUHJpY2UFAAAADVRXQVBfSU5URVJWQUwBAAAADnVwZGF0ZVNldHRpbmdzAAAABwAAABBfaW5pdE1hcmdpblJhdGlvAAAABF9tbXIAAAAUX2xpcXVpZGF0aW9uRmVlUmF0aW8AAAAOX2Z1bmRpbmdQZXJpb2QAAAAEX2ZlZQAAAAxfc3ByZWFkTGltaXQAAAAPX21heFByaWNlSW1wYWN0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABFrX2luaXRNYXJnaW5SYXRpbwUAAAAQX2luaXRNYXJnaW5SYXRpbwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAYa19tYWludGVuYW5jZU1hcmdpblJhdGlvBQAAAARfbW1yCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABVrX2xpcXVpZGF0aW9uRmVlUmF0aW8FAAAAFF9saXF1aWRhdGlvbkZlZVJhdGlvCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA9rX2Z1bmRpbmdQZXJpb2QFAAAADl9mdW5kaW5nUGVyaW9kCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAVrX2ZlZQUAAAAEX2ZlZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANa19zcHJlYWRMaW1pdAUAAAAMX3NwcmVhZExpbWl0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABBrX21heFByaWNlSW1wYWN0BQAAAA9fbWF4UHJpY2VJbXBhY3QFAAAAA25pbAEAAAANdXBkYXRlRnVuZGluZwAAAAUAAAARX25leHRGdW5kaW5nQmxvY2sAAAAkX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAAAJV9sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24AAAAQX2xvbmdGdW5kaW5nUmF0ZQAAABFfc2hvcnRGdW5kaW5nUmF0ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAASa19uZXh0RnVuZGluZ0Jsb2NrBQAAABFfbmV4dEZ1bmRpbmdCbG9jawkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUAAAAkX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAACZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUAAAAlX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARa19sb25nRnVuZGluZ1JhdGUFAAAAEF9sb25nRnVuZGluZ1JhdGUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEmtfc2hvcnRGdW5kaW5nUmF0ZQUAAAARX3Nob3J0RnVuZGluZ1JhdGUFAAAAA25pbAEAAAAOdXBkYXRlUG9zaXRpb24AAAAFAAAACF9hZGRyZXNzAAAABV9zaXplAAAAB19tYXJnaW4AAAANX29wZW5Ob3Rpb25hbAAAACBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgUAAAAOa19wb3NpdGlvblNpemUFAAAACF9hZGRyZXNzBQAAAAVfc2l6ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgUAAAAQa19wb3NpdGlvbk1hcmdpbgUAAAAIX2FkZHJlc3MFAAAAB19tYXJnaW4JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA50b0NvbXBvc2l0ZUtleQAAAAIFAAAAFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFAAAACF9hZGRyZXNzBQAAAA1fb3Blbk5vdGlvbmFsCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAOdG9Db21wb3NpdGVLZXkAAAACBQAAAC5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQAAAAhfYWRkcmVzcwUAAAAgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FAAAAA25pbAEAAAAKYXBwZW5kVHdhcAAAAAEAAAAFcHJpY2UEAAAACG1pbnV0ZUlkCQAAaQAAAAIJAABpAAAAAggFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAAAAAAAAAAA+gAAAAAAAAAADwEAAAAEHByZXZpb3VzTWludXRlSWQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAOa19sYXN0TWludXRlSWQAAAAAAAAAAAADCQAAZgAAAAIFAAAAEHByZXZpb3VzTWludXRlSWQFAAAACG1pbnV0ZUlkCQAAAgAAAAECAAAAEVRXQVAgb3V0LW9mLW9yZGVyBAAAAAxsYXN0TWludXRlSWQDCQAAAAAAAAIFAAAAEHByZXZpb3VzTWludXRlSWQAAAAAAAAAAAAFAAAACG1pbnV0ZUlkBQAAABBwcmV2aW91c01pbnV0ZUlkBAAAAAdsaXN0U3RyCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAADWtfbGFzdERhdGFTdHICAAAAAAQAAAAHb2xkTGlzdAkABLUAAAACBQAAAAdsaXN0U3RyAgAAAAEsBAAAAARsaXN0AwkAAGYAAAACCQABkAAAAAEFAAAAB29sZExpc3QFAAAADVRXQVBfSU5URVJWQUwJAARNAAAAAgkABFEAAAACBQAAAAdvbGRMaXN0AAAAAAAAAAAACQABpAAAAAEFAAAACG1pbnV0ZUlkCQAETQAAAAIFAAAAB29sZExpc3QJAAGkAAAAAQUAAAAIbWludXRlSWQEAAAAE3ByZXZDdW11bGF0aXZlUHJpY2UJAQAA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AAAHX3F0QXN0UgAAAAdfYnNBc3RSAAAAF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyAAAAGF9jdW11bGF0aXZlTm90aW9uYWxBZnRlcgAAABVfb3BlbkludGVyZXN0Tm90aW9uYWwAAAAWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAAABdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQMJAQAAAAIhPQAAAAIJAABlAAAAAgUAAAAWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQUAAAAXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFAAAAF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABhJbnZhbGlkIEFNTSBzdGF0ZSBkYXRhOiAJAAGkAAAAAQUAAAAWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQIAAAAEICsgIAkAAaQAAAABBQAAABdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQIAAAAEICE9IAkAAaQAAAABBQAAABdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkABE4AAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNrX3F1b3RlQXNzZXRSZXNlcnZlBQAAAAdfcXRBc3RSCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABJrX2Jhc2VBc3NldFJlc2VydmUFAAAAB19ic0FzdFIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tfdG90YWxQb3NpdGlvblNpemUFAAAAF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABRrX2N1bXVsYXRpdmVOb3Rpb25hbAUAAAAYX2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABZrX29wZW5JbnRlcmVzdE5vdGlvbmFsBQAAABVfb3BlbkludGVyZXN0Tm90aW9uYWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAF2tfdG90YWxMb25nUG9zaXRpb25TaXplBQAAABZfdG90YWxMb25nUG9zaXRpb25TaXplCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFAAAAF190b3RhbFNob3J0UG9zaXRpb25TaXplBQAAAANuaWwJAQAAAAphcHBlbmRUd2FwAAAAAQkBAAAABGRpdmQAAAACBQAAAAdfcXRBc3RSBQAAAAdfYnNBc3RSAQAAAA5kZWxldGVQb3NpdGlvbgAAAAEAAAAIX2FkZHJlc3MJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgUAAAAOa19wb3NpdGlvblNpemUFAAAACF9hZGRyZXNzCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAA50b0NvbXBvc2l0ZUtleQAAAAIFAAAAEGtfcG9zaXRpb25NYXJnaW4FAAAACF9hZGRyZXNzCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAA50b0NvbXBvc2l0ZUtleQAAAAIFAAAAFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFAAAACF9hZGRyZXNzCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAA50b0NvbXBvc2l0ZUtleQAAAAIFAAAALmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FAAAACF9hZGRyZXNzBQAAAANuaWwBAAAACHdpdGhkcmF3AAAAAgAAAAhfYWRkcmVzcwAAAAdfYW1vdW50BAAAAAdiYWxhbmNlCQAD8AAAAAIFAAAABHRoaXMJAQAAAApxdW90ZUFzc2V0AAAAAAMJAABmAAAAAgUAAAAHX2Ftb3VudAUAAAAHYmFsYW5jZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABNVbmFibGUgdG8gd2l0aGRyYXcgCQABpAAAAAEFAAAAB19hbW91bnQCAAAAFyBmcm9tIGNvbnRyYWN0IGJhbGFuY2UgCQABpAAAAAEFAAAAB2JhbGFuY2UJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAIX2FkZHJl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AAEhAAAAAQkBAAAAE3JlcXVpcmVPcGVuUG9zaXRpb24AAAABCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgYJAQAAAAZwYXVzZWQAAAAACQAAAgAAAAECAAAAI0ludmFsaWQgZGVjcmVhc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBAAAAA0kdDAyNjgwMTI2OTUzCQEAAAALZ2V0UG9zaXRpb24AAAABCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAPb2xkUG9zaXRpb25TaXplCAUAAAANJHQwMjY4MDEyNjk1MwAAAAJfMQQAAAARb2xkUG9zaXRpb25NYXJnaW4IBQAAAA0kdDAyNjgwMTI2OTUzAAAAAl8yBAAAABdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFAAAADSR0MDI2ODAxMjY5NTMAAAACXzMEAAAAFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUAAAANJHQwMjY4MDEyNjk1MwAAAAJfNAQAAAANaXNOZXdQb3NpdGlvbgkAAAAAAAACBQAAAA9vbGRQb3NpdGlvblNpemUAAAAAAAAAAAAEAAAAD2lzU2FtZURpcmVjdGlvbgMJAABmAAAAAgUAAAAPb2xkUG9zaXRpb25TaXplAAAAAAAAAAAACQAAAAAAAAIFAAAACl9kaXJlY3Rpb24FAAAACERJUl9MT05HCQAAAAAAAAIFAAAACl9kaXJlY3Rpb24FAAAACURJUl9TSE9SVAQAAAAOZXhwYW5kRXhpc3RpbmcDCQEAAAABIQAAAAEFAAAADWlzTmV3UG9zaXRpb24FAAAAD2lzU2FtZURpcmVjdGlvbgcEAAAABWlzQWRkCQAAAAAAAAIFAAAACl9kaXJlY3Rpb24FAAAACERJUl9MT05HBAAAAA0kdDAyNzI0MjMwMjgwAwMFAAAADWlzTmV3UG9zaXRpb24GBQAAAA5leHBhbmRFeGlzdGluZwkAAAIAAAABAgAAADVVc2UgaW5jcmVhc2VQb3NpdGlvbiB0byBvcGVuIG5ldyBvciBpbmNyZWFzZSBwb3NpdGlvbgQAAAAMb3Blbk5vdGlvbmFsCQEAAAAEbXVsZAAAAAIFAAAAB19hbW91bnQFAAAACV9sZXZlcmFnZQQAAAANJHQwMjc3NDgyNzg2NAkBAAAAI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAD1BOTF9PUFRJT05fU1BPVAQAAAATb2xkUG9zaXRpb25Ob3Rpb25hbAgFAAAADSR0MDI3NzQ4Mjc4NjQAAAACXzEEAAAADXVucmVhbGl6ZWRQbmwIBQAAAA0kdDAyNzc0ODI3ODY0AAAAAl8yAwkAAGYAAAACBQAAABNvbGRQb3NpdGlvbk5vdGlvbmFsBQAAAAxvcGVuTm90aW9uYWwEAAAADSR0MDI3OTI2MjgxNTYJAQAAAAlzd2FwSW5wdXQAAAACBQAAAAVpc0FkZAUAAAAMb3Blbk5vdGlvbmFsBAAAABVleGNoYW5nZWRQb3NpdGlvblNpemUIBQAAAA0kdDAyNzkyNjI4MTU2AAAAAl8xBAAAABZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUAAAANJHQwMjc5MjYyODE1NgAAAAJfMgQAAAAVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUAAAANJHQwMjc5MjYyODE1NgAAAAJfMwQAAAAWdG90YWxQb3NpdGlvblNpemVBZnRlcggFAAAADSR0MDI3OTI2MjgxNTYAAAACXzQEAAAAF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUAAAANJHQwMjc5MjYyODE1NgAAAAJfNQQAAAAYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzCQEAAAADYWJzAAAAAQUAAAAVZXhjaGFuZ2VkUG9zaXRpb25TaXplAwMJAQAAAAIhPQAAAAIFAAAAE19taW5CYXNlQXNzZXRBbW91bnQAAAAAAAAAAAAJAABmAAAAAgUAAAATX21pbkJhc2VBc3NldEFtb3VudAUAAAAYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzBwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACVUb28gbGl0dGxlIGJhc2UgYXNzZXQgZXhjaGFuZ2VkLCBnb3QgCQABpAAAAAEFAAAAGGV4Y2hhbmdlZFBvc2l0aW9uU2l6ZUFicwIAAAAKIGV4cGVjdGVkIAkAAaQAAAABBQAAABNfbWluQmFzZUFzc2V0QW1vdW50BAAAAAtyZWFsaXplZFBubAMJAQAAAAIhPQAAAAIFAAAAD29sZFBvc2l0aW9uU2l6ZQAAAAAAAAAAAAkBAAAABGRpdmQAAAACCQEAAAAEbXVsZAAAAAIFAAAADXVucmVhbGl6ZWRQbmwFAAAAGGV4Y2hhbmdlZFBvc2l0aW9uU2l6ZUFicwUAAAAPb2xkUG9zaXRpb25TaXplAAAAAAAAAAAABAAAAA0kdDAyODY5NjI4OTUzCQEAAAAiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAAAAAQFAAAAD29sZFBvc2l0aW9uU2l6ZQUAAAARb2xkUG9zaXRpb25NYXJnaW4FAAAAFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQAAAAtyZWFsaXplZFBubAQAAAAMcmVtYWluTWFyZ2luCAUAAAANJHQwMjg2OTYyODk1MwAAAAJfMQQAAAAHYmFkRGVidAgFAAAADSR0MDI4Njk2Mjg5NTMAAAACXzIEAAAADmZ1bmRpbmdQYXltZW50CAUAAAANJHQwMjg2OTYyODk1MwAAAAJfMwQAAAAZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUAAAAMb3Blbk5vdGlvbmFsBAAAABJ1bnJlYWxpemVkUG5sQWZ0ZXIJAABlAAAAAgUAAAANdW5yZWFsaXplZFBubAUAAAALcmVhbGl6ZWRQbmwEAAAAEnJlbWFpbk9wZW5Ob3Rpb25hbAMJAABmAAAAAgUAAAAPb2xkUG9zaXRpb25TaXplAAAAAAAAAAAACQAAZQAAAAIJAABlAAAAAgUAAAATb2xkUG9zaXRpb25Ob3Rpb25hbAUAAAAZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUAAAASdW5yZWFsaXplZFBubEFmdGVyCQAAZQAAAAIJAABkAAAAAgUAAAASdW5yZWFsaXplZFBubEFmdGVyBQAAABNvbGRQb3NpdGlvbk5vdGlvbmFsBQAAABlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BAAAAA9uZXdQb3NpdGlvblNpemUJAABkAAAAAgUAAAAPb2xkUG9zaXRpb25TaXplBQAAABVleGNoYW5nZWRQb3NpdGlvblNpemUJAAUdAAAACwUAAAAPbmV3UG9zaXRpb25TaXplBQAAAAxyZW1haW5NYXJnaW4JAQAAAANhYnMAAAABBQAAABJyZW1haW5PcGVuTm90aW9uYWwJAQAAAB9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAAAAQUAAAAPbmV3UG9zaXRpb25TaXplBQAAABViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFAAAAFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFAAAAFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFAAAAF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCQAAZQAAAAIJAQAAABRvcGVuSW50ZXJlc3ROb3Rpb25hbAAAAAAFAAAADG9wZW5Ob3Rpb25hbAkAAGUAAAACCQEAAAAVdG90YWxMb25nUG9zaXRpb25TaXplAAAAAAMJAABmAAAAAgUAAAAPbmV3UG9zaXRpb25TaXplAAAAAAAAAAAACQEAAAADYWJzAAAAAQUAAAAVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAAAAAAAAAACQAAZQAAAAIJAQAAABZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAAAAAMJAABmAAAAAgAAAAAAAAAAAAUAAAAPbmV3UG9zaXRpb25TaXplCQEAAAADYWJzAAAAAQUAAAAVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAAAAAAAAAACQAAAgAAAAECAAAAFENsb3NlIHBvc2l0aW9uIGZpcnN0BAAAAA9uZXdQb3NpdGlvblNpemUIBQAAAA0kdDAyNzI0MjMwMjgwAAAAAl8xBAAAABduZXdQb3NpdGlvblJlbWFpbk1hcmdpbggFAAAADSR0MDI3MjQyMzAyODAAAAACXzIEAAAAF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUAAAANJHQwMjcyNDIzMDI4MAAAAAJfMwQAAAAUbmV3UG9zaXRpb25MYXRlc3RDUEYIBQAAAA0kdDAyNzI0MjMwMjgwAAAAAl80BAAAABViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQAAAA0kdDAyNzI0MjMwMjgwAAAAAl81BAAAABZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUAAAANJHQwMjcyNDIzMDI4MAAAAAJfNgQAAAAWdG90YWxQb3NpdGlvblNpemVBZnRlcggFAAAADSR0MDI3MjQyMzAyODAAAAACXzcEAAAAF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUAAAANJHQwMjcyNDIzMDI4MAAAAAJfOAQAAAAZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFAAAADSR0MDI3MjQyMzAyODAAAAACXzkEAAAADnRvdGFsTG9uZ0FmdGVyCAUAAAANJHQwMjcyNDIzMDI4MAAAAANfMTAEAAAAD3RvdGFsU2hvcnRBZnRlcggFAAAADSR0MDI3MjQyMzAyODAAAAADXzExCQAETgAAAAIJAQAAAA51cGRhdGVQb3NpdGlvbgAAAAUJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAA9uZXdQb3NpdGlvblNpemUFAAAAF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luBQAAABduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUAAAAUbmV3UG9zaXRpb25MYXRlc3RDUEYJAQAAAAl1cGRhdGVBbW0AAAAHBQAAABZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBQAAABViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFAAAAFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFAAAAF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyBQAAABlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQAAAA50b3RhbExvbmdBZnRlcgUAAAAPdG90YWxTaG9ydEFmdGVyAAAAAWkBAAAAEGluY3JlYXNlUG9zaXRpb24AAAADAAAACl9kaXJlY3Rpb24AAAAJX2xldmVyYWdlAAAAE19taW5CYXNlQXNzZXRBbW91bnQEAAAACl9yYXdBbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAMDAwMDAwMDCQEAAAACIT0AAAACBQAAAApfZGlyZWN0aW9uBQAAAAhESVJfTE9ORwkBAAAAAiE9AAAAAgUAAAAKX2RpcmVjdGlvbgUAAAAJRElSX1NIT1JUBwYJAABnAAAAAgAAAAAAAAAAAAUAAAAKX3Jhd0Ftb3VudAYDCQAAZgAAAAIJAABoAAAAAgAAAAAAAAAAAQUAAAAMREVDSU1BTF9VTklUBQAAAAlfbGV2ZXJhZ2UGCQAAZgAAAAIFAAAACV9sZXZlcmFnZQkAAGgAAAACAAAAAAAAAAADBQAAAAxERUNJTUFMX1VOSVQGCQEAAAABIQAAAAEJAQAAAAtpbml0aWFsaXplZAAAAAAGCQEAAAACIT0AAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkCQEAAAAKcXVvdGVBc3NldAAAAAAGCQEAAAABIQAAAAEJAQAAABZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAAAAAwkBAAAABGRpdmQAAAACBQAAAAxERUNJTUFMX1VOSVQFAAAACV9sZXZlcmFnZQkBAAAAD2luaXRNYXJnaW5SYXRpbwAAAAAGBgkBAAAABnBhdXNlZAAAAAAJAAACAAAAAQIAAAAjSW52YWxpZCBpbmNyZWFzZVBvc2l0aW9uIHBhcmFtZXRlcnMEAAAACWZlZUFtb3VudAkBAAAABG11bGQAAAACBQAAAApfcmF3QW1vdW50CQEAAAADZmVlAAAAAAQAAAAHX2Ftb3VudAkAAGUAAAACBQAAAApfcmF3QW1vdW50BQAAAAlmZWVBbW91bnQEAAAADSR0MDMxMzE2MzE0NDAJAQAAAAtnZXRQb3NpdGlvbgAAAAEJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAA9vbGRQb3NpdGlvblNpemUIBQAAAA0kdDAzMTMxNjMxNDQwAAAAAl8xBAAAABFvbGRQb3NpdGlvbk1hcmdpbggFAAAADSR0MDMxMzE2MzE0NDAAAAACXzIEAAAAF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUAAAANJHQwMzEzMTYzMTQ0MAAAAAJfMwQAAAANaXNOZXdQb3NpdGlvbgkAAAAAAAACBQAAAA9vbGRQb3NpdGlvblNpemUAAAAAAAAAAAAEAAAAD2lzU2FtZURpcmVjdGlvbgMJAABmAAAAAgUAAAAPb2xkUG9zaXRpb25TaXplAAAAAAAAAAAACQAAAAAAAAIFAAAACl9kaXJlY3Rpb24FAAAACERJUl9MT05HCQAAAAAAAAIFAAAACl9kaXJlY3Rpb24FAAAACURJUl9TSE9SVAQAAAAOZXhwYW5kRXhpc3RpbmcDCQEAAAABIQAAAAEFAAAADWlzTmV3UG9zaXRpb24FAAAAD2lzU2FtZURpcmVjdGlvbgcEAAAABWlzQWRkCQAAAAAAAAIFAAAACl9kaXJlY3Rpb24FAAAACERJUl9MT05HBAAAAA0kdDAzMTcyOTM0MTk2AwMFAAAADWlzTmV3UG9zaXRpb24GBQAAAA5leHBhbmRFeGlzdGluZwQAAAAMb3Blbk5vdGlvbmFsCQEAAAAEbXVsZAAAAAIFAAAAB19hbW91bnQFAAAACV9sZXZlcmFnZQQAAAANJHQwMzIxNTMzMjM1OQkBAAAACXN3YXBJbnB1dAAAAAIFAAAABWlzQWRkBQAAAAxvcGVuTm90aW9uYWwEAAAAFWFtb3VudEJhc2VBc3NldEJvdWdodAgFAAAADSR0MDMyMTUzMzIzNTkAAAACXzEEAAAAFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQAAAA0kdDAzMjE1MzMyMzU5AAAAAl8yBAAAABViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQAAAA0kdDAzMjE1MzMyMzU5AAAAAl8zBAAAABZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUAAAANJHQwMzIxNTMzMjM1OQAAAAJfNAQAAAAXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQAAAA0kdDAzMjE1MzMyMzU5AAAAAl81AwMJAQAAAAIhPQAAAAIFAAAAE19taW5CYXNlQXNzZXRBbW91bnQAAAAAAAAAAAAJAABmAAAAAgUAAAATX21pbkJhc2VBc3NldEFtb3VudAkBAAAAA2FicwAAAAEFAAAAFWFtb3VudEJhc2VBc3NldEJvdWdodAcJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAANTGltaXQgZXJyb3I6IAkAAaQAAAABCQEAAAADYWJzAAAAAQUAAAAVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AgAAAAMgPCAJAAGkAAAAAQUAAAATX21pbkJhc2VBc3NldEFtb3VudAQAAAAPbmV3UG9zaXRpb25TaXplCQAAZAAAAAIFAAAAD29sZFBvc2l0aW9uU2l6ZQUAAAAVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BAAAABFwb3NpdGlvbkxzdFVwZENQRgkBAAAAH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24AAAABBQAAAA9uZXdQb3NpdGlvblNpemUEAAAAGWluY3JlYXNlTWFyZ2luUmVxdWlyZW1lbnQJAQAAAARkaXZkAAAAAgUAAAAMb3Blbk5vdGlvbmFsBQAAAAlfbGV2ZXJhZ2UEAAAADSR0MDMyODIxMzMwNTcJAQAAACJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50AAAABAUAAAAPb2xkUG9zaXRpb25TaXplBQAAABFvbGRQb3NpdGlvbk1hcmdpbgUAAAARcG9zaXRpb25Mc3RVcGRDUEYFAAAAGWluY3JlYXNlTWFyZ2luUmVxdWlyZW1lbnQEAAAADHJlbWFpbk1hcmdpbggFAAAADSR0MDMyODIxMzMwNTcAAAACXzEEAAAAAngxCAUAAAANJHQwMzI4MjEzMzA1NwAAAAJfMgQAAAACeDIIBQAAAA0kdDAzMjgyMTMzMDU3AAAAAl8zCQAFHQAAAAsFAAAAD25ld1Bvc2l0aW9uU2l6ZQUAAAAMcmVtYWluTWFyZ2luCQAAZAAAAAIFAAAAF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBQAAAAxvcGVuTm90aW9uYWwJAQAAAB9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAAAAQUAAAAPbmV3UG9zaXRpb25TaXplBQAAABViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFAAAAFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFAAAAFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFAAAAF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCQAAZAAAAAIJAQAAABRvcGVuSW50ZXJlc3ROb3Rpb25hbAAAAAAFAAAADG9wZW5Ob3Rpb25hbAkAAGQAAAACCQEAAAAVdG90YWxMb25nUG9zaXRpb25TaXplAAAAAAMJAABmAAAAAgUAAAAPbmV3UG9zaXRpb25TaXplAAAAAAAAAAAACQEAAAADYWJzAAAAAQUAAAAVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AAAAAAAAAAAACQAAZAAAAAIJAQAAABZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAAAAAMJAABmAAAAAgAAAAAAAAAAAAUAAAAPbmV3UG9zaXRpb25TaXplCQEAAAADYWJzAAAAAQUAAAAVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AAAAAAAAAAAABAAAAAxvcGVuTm90aW9uYWwJAQAAAARtdWxkAAAAAgUAAAAHX2Ftb3VudAUAAAAJX2xldmVyYWdlBAAAAA0kdDAzMzg4OTM0MDA1CQEAAAAjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAPUE5MX09QVElPTl9TUE9UBAAAABNvbGRQb3NpdGlvbk5vdGlvbmFsCAUAAAANJHQwMzM4ODkzNDAwNQAAAAJfMQQAAAANdW5yZWFsaXplZFBubAgFAAAADSR0MDMzODg5MzQwMDUAAAACXzIDCQAAZgAAAAIFAAAAE29sZFBvc2l0aW9uTm90aW9uYWwFAAAADG9wZW5Ob3Rpb25hbAkAAAIAAAABAgAAAC5Vc2UgZGVjcmVhc2VQb3NpdGlvbiB0byBkZWNyZWFzZSBwb3NpdGlvbiBzaXplCQAAAgAAAAECAAAAFENsb3NlIHBvc2l0aW9uIGZpcnN0BAAAAA9uZXdQb3NpdGlvblNpemUIBQAAAA0kdDAzMTcyOTM0MTk2AAAAAl8xBAAAABduZXdQb3NpdGlvblJlbWFpbk1hcmdpbggFAAAADSR0MDMxNzI5MzQxOTYAAAACXzIEAAAAF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUAAAANJHQwMzE3MjkzNDE5NgAAAAJfMwQAAAAUbmV3UG9zaXRpb25MYXRlc3RDUEYIBQAAAA0kdDAzMTcyOTM0MTk2AAAAAl80BAAAABViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQAAAA0kdDAzMTcyOTM0MTk2AAAAAl81BAAAABZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUAAAANJHQwMzE3MjkzNDE5NgAAAAJfNgQAAAAWdG90YWxQb3NpdGlvblNpemVBZnRlcggFAAAADSR0MDMxNzI5MzQxOTYAAAACXzcEAAAAF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUAAAANJHQwMzE3MjkzNDE5NgAAAAJfOAQAAAAZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFAAAADSR0MDMxNzI5MzQxOTYAAAACXzkEAAAADnRvdGFsTG9uZ0FmdGVyCAUAAAANJHQwMzE3MjkzNDE5NgAAAANfMTAEAAAAD3RvdGFsU2hvcnRBZnRlcggFAAAADSR0MDMxNzI5MzQxOTYAAAADXzExBAAAAAxmZWVUb1N0YWtlcnMJAABpAAAAAgUAAAAJZmVlQW1vdW50AAAAAAAAAAACBAAAAA5mZWVUb0luc3VyYW5jZQkAAGUAAAACBQAAAAlmZWVBbW91bnQFAAAADGZlZVRvU3Rha2VycwQAAAAFc3Rha2UJAAP8AAAABAkBAAAAEXF1b3RlQXNzZXRTdGFraW5nAAAAAAIAAAAObG9ja05ldXRyaW5vU1AJAARMAAAAAgkABCUAAAABCQEAAAAOc3Rha2luZ0FkZHJlc3MAAAAACQAETAAAAAIFAAAACEFMTF9GRUVTBQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIJAQAAAApxdW90ZUFzc2V0AAAAAAUAAAAHX2Ftb3VudAUAAAADbmlsAwkAAAAAAAACBQAAAAVzdGFrZQUAAAAFc3Rha2UEAAAAEGRlcG9zaXRJbnN1cmFuY2UJAAP8AAAABAkBAAAAEGluc3VyYW5jZUFkZHJlc3MAAAAAAgAAAAdkZXBvc2l0BQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIJAQAAAApxdW90ZUFzc2V0AAAAAAUAAAAOZmVlVG9JbnN1cmFuY2UFAAAAA25pbAMJAAAAAAAAAgUAAAAQZGVwb3NpdEluc3VyYW5jZQUAAAAQZGVwb3NpdEluc3VyYW5jZQkABE4AAAACCQAETgAAAAIJAAROAAAAAgkBAAAADnVwZGF0ZVBvc2l0aW9uAAAABQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAD25ld1Bvc2l0aW9uU2l6ZQUAAAAXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4FAAAAF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQAAABRuZXdQb3NpdGlvbkxhdGVzdENQRgkBAAAACXVwZGF0ZUFtbQAAAAcFAAAAFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFAAAAFWJhc2VBc3NldFJlc2VydmVBZnRlcgUAAAAWdG90YWxQb3NpdGlvblNpemVBZnRlcgUAAAAXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIFAAAAGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFAAAADnRvdGFsTG9uZ0FmdGVyBQAAAA90b3RhbFNob3J0QWZ0ZXIJAQAAAAt0cmFuc2ZlckZlZQAAAAEFAAAADGZlZVRvU3Rha2VycwkBAAAADXVwZGF0ZUJhbGFuY2UAAAABCQAAZAAAAAIJAQAAAAhjYmFsYW5jZQAAAAAFAAAAB19hbW91bnQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAlhZGRNYXJnaW4AAAAABAAAAApfcmF3QW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQDAwMDCQEAAAACIT0AAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkCQEAAAAKcXVvdGVBc3NldAAAAAAGCQEAAAABIQAAAAEJAQAAABNyZXF1aXJlT3BlblBvc2l0aW9uAAAAAQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIGCQEAAAABIQAAAAEJAQAAAAtpbml0aWFsaXplZAAAAAAGCQEAAAAGcGF1c2VkAAAAAAkAAAIAAAABAgAAABxJbnZhbGlkIGFkZE1hcmdpbiBwYXJhbWV0ZXJzBAAAAAlmZWVBbW91bnQJAQAAAARtdWxkAAAAAgUAAAAKX3Jhd0Ftb3VudAkBAAAAA2ZlZQAAAAAEAAAAB19hbW91bnQJAABlAAAAAgUAAAAKX3Jhd0Ftb3VudAUAAAAJZmVlQW1vdW50BAAAAA0kdDAzNTQ3MjM1NjI0CQEAAAALZ2V0UG9zaXRpb24AAAABCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAPb2xkUG9zaXRpb25TaXplCAUAAAANJHQwMzU0NzIzNTYyNAAAAAJfMQQAAAARb2xkUG9zaXRpb25NYXJnaW4IBQAAAA0kdDAzNTQ3MjM1NjI0AAAAAl8yBAAAABdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFAAAADSR0MDM1NDcyMzU2MjQAAAACXzMEAAAAFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUAAAANJHQwMzU0NzIzNTYyNAAAAAJfNAQAAAAMZmVlVG9TdGFrZXJzCQAAaQAAAAIFAAAACWZlZUFtb3VudAAAAAAAAAAAAgQAAAAOZmVlVG9JbnN1cmFuY2UJAABlAAAAAgUAAAAJZmVlQW1vdW50BQAAAAxmZWVUb1N0YWtlcnMEAAAABXN0YWtlCQAD/AAAAAQJAQAAABFxdW90ZUFzc2V0U3Rha2luZwAAAAACAAAADmxvY2tOZXV0cmlub1NQCQAETAAAAAIJAAQlAAAAAQkBAAAADnN0YWtpbmdBZGRyZXNzAAAAAAkABEwAAAACBQAAAAhBTExfRkVFUwUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACCQEAAAAKcXVvdGVBc3NldAAAAAAFAAAAB19hbW91bnQFAAAAA25pbAMJAAAAAAAAAgUAAAAFc3Rha2UFAAAABXN0YWtlBAAAABBkZXBvc2l0SW5zdXJhbmNlCQAD/AAAAAQJAQAAABBpbnN1cmFuY2VBZGRyZXNzAAAAAAIAAAAHZGVwb3NpdAUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACCQEAAAAKcXVvdGVBc3NldAAAAAAFAAAADmZlZVRvSW5zdXJhbmNlBQAAAANuaWwDCQAAAAAAAAIFAAAAEGRlcG9zaXRJbnN1cmFuY2UFAAAAEGRlcG9zaXRJbnN1cmFuY2UJAAROAAAAAgkABE4AAAACCQEAAAAOdXBkYXRlUG9zaXRpb24AAAAFCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAPb2xkUG9zaXRpb25TaXplCQAAZAAAAAIFAAAAEW9sZFBvc2l0aW9uTWFyZ2luBQAAAAdfYW1vdW50BQAAABdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUAAAAUb2xkUG9zaXRpb25Mc3RVcGRDUEYJAQAAAAt0cmFuc2ZlckZlZQAAAAEFAAAADGZlZVRvU3Rha2VycwkBAAAADXVwZGF0ZUJhbGFuY2UAAAABCQAAZAAAAAIJAQAAAAhjYmFsYW5jZQAAAAAFAAAAB19hbW91bnQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAxyZW1vdmVNYXJnaW4AAAABAAAAB19hbW91bnQDAwMDCQAAZwAAAAIAAAAAAAAAAAAFAAAAB19hbW91bnQGCQEAAAABIQAAAAEJAQAAABNyZXF1aXJlT3BlblBvc2l0aW9uAAAAAQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIGCQEAAAABIQAAAAEJAQAAAAtpbml0aWFsaXplZAAAAAAGCQEAAAAGcGF1c2VkAAAAAAkAAAIAAAABAgAAAB9JbnZhbGlkIHJlbW92ZU1hcmdpbiBwYXJhbWV0ZXJzBAAAAA0kdDAzNjU0NDM2Njk2CQEAAAALZ2V0UG9zaXRpb24AAAABCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAPb2xkUG9zaXRpb25TaXplCAUAAAANJHQwMzY1NDQzNjY5NgAAAAJfMQQAAAARb2xkUG9zaXRpb25NYXJnaW4IBQAAAA0kdDAzNjU0NDM2Njk2AAAAAl8yBAAAABdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFAAAADSR0MDM2NTQ0MzY2OTYAAAACXzMEAAAAFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUAAAANJHQwMzY1NDQzNjY5NgAAAAJfNAQAAAALbWFyZ2luRGVsdGEJAQAAAAEtAAAAAQUAAAAHX2Ftb3VudAQAAAANJHQwMzY3MzMzNjkxMgkBAAAAImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQAAAAEBQAAAA9vbGRQb3NpdGlvblNpemUFAAAAEW9sZFBvc2l0aW9uTWFyZ2luBQAAABRvbGRQb3NpdGlvbkxzdFVwZENQRgUAAAALbWFyZ2luRGVsdGEEAAAADHJlbWFpbk1hcmdpbggFAAAADSR0MDM2NzMzMzY5MTIAAAACXzEEAAAAB2JhZERlYnQIBQAAAA0kdDAzNjczMzM2OTEyAAAAAl8yAwkBAAAAAiE9AAAAAgUAAAAHYmFkRGVidAAAAAAAAAAAAAkAAAIAAAABAgAAABtJbnZhbGlkIGFkZGVkIG1hcmdpbiBhbW91bnQEAAAAB3Vuc3Rha2UJAAP8AAAABAkBAAAAEXF1b3RlQXNzZXRTdGFraW5nAAAAAAIAAAAOdW5sb2NrTmV1dHJpbm8JAARMAAAAAgUAAAAHX2Ftb3VudAkABEwAAAACCQACWAAAAAEJAQAAAApxdW90ZUFzc2V0AAAAAAUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAB3Vuc3Rha2UFAAAAB3Vuc3Rha2UJAAROAAAAAgkABE4AAAACCQEAAAAOdXBkYXRlUG9zaXRpb24AAAAFCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAPb2xkUG9zaXRpb25TaXplBQAAAAxyZW1haW5NYXJnaW4FAAAAF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCQEAAAAfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAAAAEFAAAAD29sZFBvc2l0aW9uU2l6ZQkBAAAACHdpdGhkcmF3AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAdfYW1vdW50CQEAAAANdXBkYXRlQmFsYW5jZQAAAAEJAABlAAAAAgkBAAAACGNiYWxhbmNlAAAAAAUAAAAHX2Ftb3VudAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAANY2xvc2VQb3NpdGlvbgAAAAADAwMJAQAAAAEhAAAAAQkBAAAAE3JlcXVpcmVPcGVuUG9zaXRpb24AAAABCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgYJAQAAAAEhAAAAAQkBAAAAC2luaXRpYWxpemVkAAAAAAYJAQAAAAZwYXVzZWQAAAAACQAAAgAAAAECAAAAIEludmFsaWQgY2xvc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBAAAAA0kdDAzNzY3MjM4MDU2CQEAAAAVaW50ZXJuYWxDbG9zZVBvc2l0aW9uAAAAAQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAAngxCAUAAAANJHQwMzc2NzIzODA1NgAAAAJfMQQAAAAPcG9zaXRpb25CYWREZWJ0CAUAAAANJHQwMzc2NzIzODA1NgAAAAJfMgQAAAALcmVhbGl6ZWRQbmwIBQAAAA0kdDAzNzY3MjM4MDU2AAAAAl8zBAAAAA1tYXJnaW5Ub1ZhdWx0CAUAAAANJHQwMzc2NzIzODA1NgAAAAJfNAQAAAAWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFAAAADSR0MDM3NjcyMzgwNTYAAAACXzUEAAAAFWJhc2VBc3NldFJlc2VydmVBZnRlcggFAAAADSR0MDM3NjcyMzgwNTYAAAACXzYEAAAAFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQAAAA0kdDAzNzY3MjM4MDU2AAAAAl83BAAAABdjdW11bGF0aXZlTm90aW9uYWxBZnRlcggFAAAADSR0MDM3NjcyMzgwNTYAAAACXzgEAAAAGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQAAAA0kdDAzNzY3MjM4MDU2AAAAAl85BAAAAAJ4MggFAAAADSR0MDM3NjcyMzgwNTYAAAADXzEwBAAAAA50b3RhbExvbmdBZnRlcggFAAAADSR0MDM3NjcyMzgwNTYAAAADXzExBAAAAA90b3RhbFNob3J0QWZ0ZXIIBQAAAA0kdDAzNzY3MjM4MDU2AAAAA18xMgMJAABmAAAAAgUAAAAPcG9zaXRpb25CYWREZWJ0AAAAAAAAAAAACQAAAgAAAAECAAAAJlVuYWJsZSB0byBjbG9zZSBwb3NpdGlvbiB3aXRoIGJhZCBkZWJ0BAAAAA53aXRoZHJhd0Ftb3VudAkBAAAAA2FicwAAAAEFAAAADW1hcmdpblRvVmF1bHQEAAAACmFtbUJhbGFuY2UJAABlAAAAAgkBAAAACGNiYWxhbmNlAAAAAAUAAAAOd2l0aGRyYXdBbW91bnQEAAAADSR0MDM4MjY1Mzg0MDcDCQAAZgAAAAIAAAAAAAAAAAAFAAAACmFtbUJhbGFuY2UJAAUUAAAAAgAAAAAAAAAAAAkBAAAAA2FicwAAAAEFAAAACmFtbUJhbGFuY2UJAAUUAAAAAgUAAAAKYW1tQmFsYW5jZQAAAAAAAAAAAAQAAAANYW1tTmV3QmFsYW5jZQgFAAAADSR0MDM4MjY1Mzg0MDcAAAACXzEEAAAAEGdldEZyb21JbnN1cmFuY2UIBQAAAA0kdDAzODI2NTM4NDA3AAAAAl8yBAAAAAF4AwkAAGYAAAACBQAAABBnZXRGcm9tSW5zdXJhbmNlAAAAAAAAAAAABAAAABF3aXRoZHJhd0luc3VyYW5jZQkAA/wAAAAECQEAAAAQaW5zdXJhbmNlQWRkcmVzcwAAAAACAAAACHdpdGhkcmF3CQAETAAAAAIFAAAAEGdldEZyb21JbnN1cmFuY2UFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAABF3aXRoZHJhd0luc3VyYW5jZQUAAAARd2l0aGRyYXdJbnN1cmFuY2UFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FAAAAA25pbAMJAAAAAAAAAgUAAAABeAUAAAABeAQAAAAHdW5zdGFrZQkAA/wAAAAECQEAAAARcXVvdGVBc3NldFN0YWtpbmcAAAAAAgAAAA51bmxvY2tOZXV0cmlubwkABEwAAAACCQAAZQAAAAIFAAAADndpdGhkcmF3QW1vdW50BQAAABBnZXRGcm9tSW5zdXJhbmNlCQAETAAAAAIJAAJYAAAAAQkBAAAACnF1b3RlQXNzZXQAAAAABQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAHdW5zdGFrZQUAAAAHdW5zdGFrZQkABE4AAAACCQAETgAAAAIJAAROAAAAAgkBAAAADmRlbGV0ZVBvc2l0aW9uAAAAAQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAQAAAAl1cGRhdGVBbW0AAAAHBQAAABZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBQAAABViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFAAAAFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFAAAAF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyBQAAABlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQAAAA50b3RhbExvbmdBZnRlcgUAAAAPdG90YWxTaG9ydEFmdGVyCQEAAAAId2l0aGRyYXcAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAADndpdGhkcmF3QW1vdW50CQEAAAANdXBkYXRlQmFsYW5jZQAAAAEFAAAADWFtbU5ld0JhbGFuY2UJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAlsaXF1aWRhdGUAAAABAAAAB190cmFkZXIEAAAAC21hcmdpblJhdGlvAwkBAAAAFmlzT3ZlckZsdWN0dWF0aW9uTGltaXQAAAAACQEAAAAWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgAAAAIFAAAAB190cmFkZXIFAAAAEVBOTF9PUFRJT05fT1JBQ0xFCQEAAAAWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgAAAAIFAAAAB190cmFkZXIFAAAAD1BOTF9PUFRJT05fU1BPVAMDAwMJAQAAAAEhAAAAAQkBAAAAFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8AAAADBQAAAAttYXJnaW5SYXRpbwkBAAAAFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8AAAAABwYJAQAAAAEhAAAAAQkBAAAAE3JlcXVpcmVPcGVuUG9zaXRpb24AAAABBQAAAAdfdHJhZGVyBgkBAAAAASEAAAABCQEAAAALaW5pdGlhbGl6ZWQAAAAABgkBAAAABnBhdXNlZAAAAAAJAAACAAAAAQIAAAATVW5hYmxlIHRvIGxpcXVpZGF0ZQQAAAANJHQwMzk4NDY0MDI3MwkBAAAAFWludGVybmFsQ2xvc2VQb3NpdGlvbgAAAAEFAAAAB190cmFkZXIEAAAAAngxCAUAAAANJHQwMzk4NDY0MDI3MwAAAAJfMQQAAAAHYmFkRGVidAgFAAAADSR0MDM5ODQ2NDAyNzMAAAACXzIEAAAAAngyCAUAAAANJHQwMzk4NDY0MDI3MwAAAAJfMwQAAAANbWFyZ2luVG9WYXVsdAgFAAAADSR0MDM5ODQ2NDAyNzMAAAACXzQEAAAAFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQAAAA0kdDAzOTg0NjQwMjczAAAAAl81BAAAABViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQAAAA0kdDAzOTg0NjQwMjczAAAAAl82BAAAABZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUAAAANJHQwMzk4NDY0MDI3MwAAAAJfNwQAAAAXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQAAAA0kdDAzOTg0NjQwMjczAAAAAl84BAAAABlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUAAAANJHQwMzk4NDY0MDI3MwAAAAJfOQQAAAAZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFAAAADSR0MDM5ODQ2NDAyNzMAAAADXzEwBAAAAA50b3RhbExvbmdBZnRlcggFAAAADSR0MDM5ODQ2NDAyNzMAAAADXzExBAAAAA90b3RhbFNob3J0QWZ0ZXIIBQAAAA0kdDAzOTg0NjQwMjczAAAAA18xMgQAAAASbGlxdWlkYXRpb25QZW5hbHR5CQEAAAAEbXVsZAAAAAIFAAAAGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQJAQAAABNsaXF1aWRhdGlvbkZlZVJhdGlvAAAAAAQAAAAPZmVlVG9MaXF1aWRhdG9yCQAAaQAAAAIFAAAAEmxpcXVpZGF0aW9uUGVuYWx0eQAAAAAAAAAAAgQAAAAOZmVlVG9JbnN1cmFuY2UJAABlAAAAAgUAAAASbGlxdWlkYXRpb25QZW5hbHR5BQAAAA9mZWVUb0xpcXVpZGF0b3IEAAAACmFtbUJhZERlYnQJAABlAAAAAgkBAAAACGNiYWxhbmNlAAAAAAUAAAASbGlxdWlkYXRpb25QZW5hbHR5BAAAAA0kdDA0MDY3MTQwODA2AwkAAGYAAAACAAAAAAAAAAAABQAAAAphbW1CYWREZWJ0CQAFFAAAAAIAAAAAAAAAAAAJAQAAAANhYnMAAAABBQAAAAphbW1CYWREZWJ0CQAFFAAAAAIFAAAACmFtbUJhZERlYnQAAAAAAAAAAAAEAAAADW5ld0FtbUJhbGFuY2UIBQAAAA0kdDA0MDY3MTQwODA2AAAAAl8xBAAAABF0YWtlRnJvbUluc3VyYW5jZQgFAAAADSR0MDQwNjcxNDA4MDYAAAACXzIEAAAAAXgDCQAAZgAAAAIFAAAAEXRha2VGcm9tSW5zdXJhbmNlAAAAAAAAAAAABAAAABF3aXRoZHJhd0luc3VyYW5jZQkAA/wAAAAECQEAAAAQaW5zdXJhbmNlQWRkcmVzcwAAAAACAAAACHdpdGhkcmF3CQAETAAAAAIFAAAAEXRha2VGcm9tSW5zdXJhbmNlBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAARd2l0aGRyYXdJbnN1cmFuY2UFAAAAEXdpdGhkcmF3SW5zdXJhbmNlBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQAAAANuaWwDCQAAAAAAAAIFAAAAAXgFAAAAAXgEAAAAEGRlcG9zaXRJbnN1cmFuY2UJAAP8AAAABAkBAAAAEGluc3VyYW5jZUFkZHJlc3MAAAAAAgAAAAdkZXBvc2l0BQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIJAQAAAApxdW90ZUFzc2V0AAAAAAUAAAAOZmVlVG9JbnN1cmFuY2UFAAAAA25pbAMJAAAAAAAAAgUAAAAQZGVwb3NpdEluc3VyYW5jZQUAAAAQZGVwb3NpdEluc3VyYW5jZQQAAAAHdW5zdGFrZQkAA/wAAAAECQEAAAARcXVvdGVBc3NldFN0YWtpbmcAAAAAAgAAAA51bmxvY2tOZXV0cmlubwkABEwAAAACCQAAZQAAAAIFAAAAD2ZlZVRvTGlxdWlkYXRvcgUAAAARdGFrZUZyb21JbnN1cmFuY2UJAARMAAAAAgkAAlgAAAABCQEAAAAKcXVvdGVBc3NldAAAAAAFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAd1bnN0YWtlBQAAAAd1bnN0YWtlCQAETgAAAAIJAAROAAAAAgkABE4AAAACCQEAAAAOZGVsZXRlUG9zaXRpb24AAAABBQAAAAdfdHJhZGVyCQEAAAAJdXBkYXRlQW1tAAAABwUAAAAWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUAAAAVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBQAAABZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBQAAABdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUAAAAZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUAAAAOdG90YWxMb25nQWZ0ZXIFAAAAD3RvdGFsU2hvcnRBZnRlcgkBAAAACHdpdGhkcmF3AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAA9mZWVUb0xpcXVpZGF0b3IJAQAAAA11cGRhdGVCYWxhbmNlAAAAAQUAAAAKYW1tQmFkRGVidAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAApwYXlGdW5kaW5nAAAAAAQAAAAVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEAAAAZbmV4dEZ1bmRpbmdCbG9ja1RpbWVzdGFtcAAAAAADAwMJAABmAAAAAgUAAAAVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAYJAQAAAAEhAAAAAQkBAAAAC2luaXRpYWxpemVkAAAAAAYJAQAAAAZwYXVzZWQAAAAACQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAIUludmFsaWQgZnVuZGluZyBibG9jayB0aW1lc3RhbXA6IAkAAaQAAAABCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAIAAAADIDwgCQABpAAAAAEFAAAAFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAQAAAAPdW5kZXJseWluZ1ByaWNlCQEAAAASZ2V0T3JhY2xlVHdhcFByaWNlAAAAAAQAAAANc3BvdFR3YXBQcmljZQkBAAAAEGdldFR3YXBTcG90UHJpY2UAAAAABAAAAAdwcmVtaXVtCQAAZQAAAAIFAAAADXNwb3RUd2FwUHJpY2UFAAAAD3VuZGVybHlpbmdQcmljZQQAAAANJHQwNDIxNzY0MzUxMQMDCQAAAAAAAAIJAQAAABZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAAAAAAAAAAAAAAAAAYJAAAAAAAAAgkBAAAAFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAAAAAAAAAAAAAAAAAJAAUUAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAMJAABmAAAAAgAAAAAAAAAAAAUAAAAHcHJlbWl1bQQAAAAUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQAAAARkaXZkAAAAAgkBAAAABG11bGQAAAACBQAAAAdwcmVtaXVtCQEAAAAUZnVuZGluZ1BlcmlvZERlY2ltYWwAAAAABQAAAAdPTkVfREFZBAAAABNsb25nUHJlbWl1bUZyYWN0aW9uCQEAAAAEZGl2ZAAAAAIJAQAAAARtdWxkAAAAAgUAAAAUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQAAABZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAAAAAkBAAAAFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAAAAAJAAUUAAAAAgUAAAAUc2hvcnRQcmVtaXVtRnJhY3Rpb24FAAAAE2xvbmdQcmVtaXVtRnJhY3Rpb24EAAAAE2xvbmdQcmVtaXVtRnJhY3Rpb24JAQAAAARkaXZkAAAAAgkBAAAABG11bGQAAAACBQAAAAdwcmVtaXVtCQEAAAAUZnVuZGluZ1BlcmlvZERlY2ltYWwAAAAABQAAAAdPTkVfREFZBAAAABRzaG9ydFByZW1pdW1GcmFjdGlvbgkBAAAABGRpdmQAAAACCQEAAAAEbXVsZAAAAAIFAAAAE2xvbmdQcmVtaXVtRnJhY3Rpb24JAQAAABV0b3RhbExvbmdQb3NpdGlvblNpemUAAAAACQEAAAAWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAAAAAJAAUUAAAAAgUAAAAUc2hvcnRQcmVtaXVtRnJhY3Rpb24FAAAAE2xvbmdQcmVtaXVtRnJhY3Rpb24EAAAAFHNob3J0UHJlbWl1bUZyYWN0aW9uCAUAAAANJHQwNDIxNzY0MzUxMQAAAAJfMQQAAAATbG9uZ1ByZW1pdW1GcmFjdGlvbggFAAAADSR0MDQyMTc2NDM1MTEAAAACXzIJAQAAAA11cGRhdGVGdW5kaW5nAAAABQkAAGQAAAACBQAAABVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJAQAAABRmdW5kaW5nUGVyaW9kU2Vjb25kcwAAAAAJAABkAAAAAgkBAAAAI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAAAAAUAAAATbG9uZ1ByZW1pdW1GcmFjdGlvbgkAAGQAAAACCQEAAAAkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAAAAAUAAAAUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQAAAARkaXZkAAAAAgUAAAATbG9uZ1ByZW1pdW1GcmFjdGlvbgUAAAAPdW5kZXJseWluZ1ByaWNlCQEAAAAEZGl2ZAAAAAIFAAAAFHNob3J0UHJlbWl1bUZyYWN0aW9uBQAAAA91bmRlcmx5aW5nUHJpY2UAAAABaQEAAAAFdl9nZXQAAAABAAAAB190cmFkZXIEAAAADSR0MDQzODg2NDM5MzkJAQAAABVpbnRlcm5hbENsb3NlUG9zaXRpb24AAAABBQAAAAdfdHJhZGVyBAAAAAJ4MQgFAAAADSR0MDQzODg2NDM5MzkAAAACXzEEAAAAAngyCAUAAAANJHQwNDM4ODY0MzkzOQAAAAJfMgQAAAACeDMIBQAAAA0kdDA0Mzg4NjQzOTM5AAAAAl8zBAAAAAJ4NAgFAAAADSR0MDQzODg2NDM5MzkAAAACXzQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkBAAAAAXMAAAABBQAAAAJ4MgkBAAAAAXMAAAABBQAAAAJ4MwkBAAAAAXMAAAABBQAAAAJ4NAkBAAAAAXMAAAABCQEAAAAOZ2V0TWFyZ2luUmF0aW8AAAABBQAAAAdfdHJhZGVyAAAAAWkBAAAAJ3ZpZXdfY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAAAAAEAAAAHX3RyYWRlcgQAAAANJHQwNDQwODY0NDE5NwkBAAAAC2dldFBvc2l0aW9uAAAAAQUAAAAHX3RyYWRlcgQAAAAMcG9zaXRpb25TaXplCAUAAAANJHQwNDQwODY0NDE5NwAAAAJfMQQAAAAOcG9zaXRpb25NYXJnaW4IBQAAAA0kdDA0NDA4NjQ0MTk3AAAAAl8yBAAAAANwb24IBQAAAA0kdDA0NDA4NjQ0MTk3AAAAAl8zBAAAABFwb3NpdGlvbkxzdFVwZENQRggFAAAADSR0MDQ0MDg2NDQxOTcAAAACXzQEAAAADSR0MDQ0MjAyNDQzMDMJAQAAACNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAAAAAIFAAAAB190cmFkZXIFAAAAD1BOTF9PUFRJT05fU1BPVAQAAAAQcG9zaXRpb25Ob3Rpb25hbAgFAAAADSR0MDQ0MjAyNDQzMDMAAAACXzEEAAAADXVucmVhbGl6ZWRQbmwIBQAAAA0kdDA0NDIwMjQ0MzAzAAAAAl8yBAAAAA0kdDA0NDMwODQ0NDkwCQEAAAAiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAAAAAQFAAAADHBvc2l0aW9uU2l6ZQUAAAAOcG9zaXRpb25NYXJnaW4FAAAAEXBvc2l0aW9uTHN0VXBkQ1BGBQAAAA11bnJlYWxpemVkUG5sBAAAAAxyZW1haW5NYXJnaW4IBQAAAA0kdDA0NDMwODQ0NDkwAAAAAl8xBAAAAAdiYWREZWJ0CAUAAAANJHQwNDQzMDg0NDQ5MAAAAAJfMgQAAAAOZnVuZGluZ1BheW1lbnQIBQAAAA0kdDA0NDMwODQ0NDkwAAAAAl8zCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQEAAAABcwAAAAEFAAAADHJlbWFpbk1hcmdpbgkBAAAAAXMAAAABBQAAAA5mdW5kaW5nUGF5bWVudAkBAAAAAXMAAAABCQEAAAAOZ2V0TWFyZ2luUmF0aW8AAAABBQAAAAdfdHJhZGVyAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAJAQAAAA5hZG1pblB1YmxpY0tleQAAAACJypcF", "height": 2122442, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4PSbqdqB8FD5VE8zvKWSDrLJaVYsRaF3TeZU8SobfQNc Next: 2GpCpRmJvT7g7dQpFYsjs11bN2TjSNtoNSCDPddKmANr Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_ora_key"
55
6-let b = "k_ora"
6+let b = "k_ora_block_key"
77
8-let c = "k_balance"
8+let c = "k_ora"
99
10-let d = "k_positionSize"
10+let d = "k_balance"
1111
12-let e = "k_positionMargin"
12+let e = "k_positionSize"
1313
14-let f = "k_positionOpenNotional"
14+let f = "k_positionMargin"
1515
16-let g = "k_positionFraction"
16+let g = "k_positionOpenNotional"
1717
18-let h = "k_initialized"
18+let h = "k_positionFraction"
1919
20-let i = "k_paused"
20+let i = "k_initialized"
2121
22-let j = "k_fee"
22+let j = "k_paused"
2323
24-let k = "k_fundingPeriod"
24+let k = "k_fee"
2525
26-let l = "k_initMarginRatio"
26+let l = "k_fundingPeriod"
2727
28-let m = "k_mmr"
28+let m = "k_initMarginRatio"
2929
30-let n = "k_liquidationFeeRatio"
30+let n = "k_mmr"
3131
32-let o = "k_spreadLimit"
32+let o = "k_liquidationFeeRatio"
3333
34-let p = "k_maxPriceImpact"
34+let p = "k_spreadLimit"
3535
36-let q = "k_lastDataStr"
36+let q = "k_maxPriceImpact"
3737
38-let r = "k_lastMinuteId"
38+let r = "k_lastDataStr"
3939
40-let s = "k_twapDataLastCumulativePrice"
40+let s = "k_lastMinuteId"
4141
42-let t = "k_twapDataLastPrice"
42+let t = "k_twapDataLastCumulativePrice"
4343
44-let u = "k_latestLongPremiumFraction"
44+let u = "k_twapDataLastPrice"
4545
46-let v = "k_latestShortPremiumFraction"
46+let v = "k_latestLongPremiumFraction"
4747
48-let w = "k_nextFundingBlockMinTimestamp"
48+let w = "k_latestShortPremiumFraction"
4949
50-let x = "k_longFundingRate"
50+let x = "k_nextFundingBlockMinTimestamp"
5151
52-let y = "k_shortFundingRate"
52+let y = "k_longFundingRate"
5353
54-let z = "k_qtAstR"
54+let z = "k_shortFundingRate"
5555
56-let A = "k_bsAstR"
56+let A = "k_qtAstR"
5757
58-let B = "k_totalPositionSize"
58+let B = "k_bsAstR"
5959
60-let C = "k_totalLongPositionSize"
60+let C = "k_totalPositionSize"
6161
62-let D = "k_totalShortPositionSize"
62+let D = "k_totalLongPositionSize"
6363
64-let E = "k_cumulativeNotional"
64+let E = "k_totalShortPositionSize"
6565
66-let F = "k_openInterestNotional"
66+let F = "k_cumulativeNotional"
6767
68-let G = "k_coordinatorAddress"
68+let G = "k_openInterestNotional"
6969
70-let H = "k_insurance_address"
70+let H = "k_coordinatorAddress"
7171
72-let I = "k_admin_address"
72+let I = "k_insurance_address"
7373
74-let J = "k_admin_public_key"
74+let J = "k_admin_address"
7575
76-let K = "k_quote_asset"
76+let K = "k_admin_public_key"
7777
78-let L = "k_quote_staking"
78+let L = "k_quote_asset"
7979
80-let M = "k_staking_address"
80+let M = "k_quote_staking"
8181
82-func N () = valueOrErrorMessage(addressFromString(getStringValue(this, G)), "Coordinator not set")
82+let N = "k_staking_address"
83+
84+func O () = valueOrErrorMessage(addressFromString(getStringValue(this, H)), "Coordinator not set")
8385
8486
85-func O () = addressFromString(getStringValue(N(), I))
87+func P () = addressFromString(getStringValue(O(), J))
8688
8789
88-func P () = fromBase58String(getStringValue(N(), J))
90+func Q () = fromBase58String(getStringValue(O(), K))
8991
9092
91-func Q () = fromBase58String(getStringValue(N(), K))
93+func R () = fromBase58String(getStringValue(O(), L))
9294
9395
94-func R () = valueOrErrorMessage(addressFromString(getStringValue(N(), L)), "Quote asset staking not set")
96+func S () = valueOrErrorMessage(addressFromString(getStringValue(O(), M)), "Quote asset staking not set")
9597
9698
97-func S () = valueOrErrorMessage(addressFromString(getStringValue(N(), M)), "Insurance not set")
99+func T () = valueOrErrorMessage(addressFromString(getStringValue(O(), N)), "Insurance not set")
98100
99101
100-func T () = valueOrErrorMessage(addressFromString(getStringValue(N(), H)), "Insurance not set")
102+func U () = valueOrErrorMessage(addressFromString(getStringValue(O(), I)), "Insurance not set")
101103
102104
103-let U = 1
105+let V = 1
104106
105-let V = 2
107+let W = 2
106108
107-let W = 60
109+let X = 60
108110
109-let X = 15
111+let Y = 15
110112
111-let Y = 1000
113+let Z = 15
112114
113-let Z = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
115+let aa = 1000
114116
115-let aa = (100 * Z)
117+let ab = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
116118
117-let ab = (86400 * Z)
119+let ac = (100 * ab)
118120
119-let ac = 100
121+let ad = (86400 * ab)
120122
121-let ad = 1
123+let ae = 100
122124
123-let ae = 2
125+let af = 1
124126
125-func af (ag) = (toString(ag) + ",")
127+let ag = 2
128+
129+func ah (ai) = (toString(ai) + ",")
126130
127131
128-func ah (ag,ai) = fraction(ag, Z, ai, HALFEVEN)
132+func aj (ai,ak) = fraction(ai, ab, ak, HALFEVEN)
129133
130134
131-func aj (ag,ai) = fraction(ag, ai, Z, HALFEVEN)
135+func al (ai,ak) = fraction(ai, ak, ab, HALFEVEN)
132136
133137
134-func ak (ag) = if ((ag > 0))
135- then ag
136- else -(ag)
138+func am (ai) = if ((ai > 0))
139+ then ai
140+ else -(ai)
137141
138142
139-func al (am,an) = ((am + "_") + an)
143+func an (ao,ap) = ((ao + "_") + ap)
140144
141145
142-func ao (ap) = valueOrErrorMessage(getInteger(this, ap), ("no value for " + ap))
146+func aq (ar) = valueOrErrorMessage(getInteger(this, ar), ("no value for " + ar))
143147
144148
145-func aq () = ao(c)
149+func as () = aq(d)
146150
147151
148-func ar () = ao(j)
152+func at () = aq(k)
149153
150154
151-func as () = ao(l)
155+func au () = aq(m)
152156
153157
154-func at () = ao(z)
158+func av () = aq(A)
155159
156160
157-func au () = ao(A)
161+func aw () = aq(B)
158162
159163
160-func av () = ao(B)
164+func ax () = aq(C)
161165
162166
163-func aw () = ao(E)
167+func ay () = aq(F)
164168
165169
166-func ax () = ao(F)
170+func az () = aq(G)
167171
168172
169-func ay () = ao(w)
173+func aA () = aq(x)
170174
171175
172-func az () = ao(k)
176+func aB () = aq(l)
173177
174178
175-func aA () = (az() * Z)
179+func aC () = (aB() * ab)
176180
177181
178-func aB () = (az() * Y)
182+func aD () = (aB() * aa)
179183
180184
181-func aC () = ao(m)
185+func aE () = aq(n)
182186
183187
184-func aD () = ao(n)
188+func aF () = aq(o)
185189
186190
187-func aE () = ao(o)
191+func aG () = aq(p)
188192
189193
190-func aF () = ao(p)
194+func aH () = aq(q)
191195
192196
193-func aG () = ao(u)
197+func aI () = aq(v)
194198
195199
196-func aH () = ao(v)
200+func aJ () = aq(w)
197201
198202
199-func aI () = ao(D)
203+func aK () = aq(E)
200204
201205
202-func aJ () = ao(C)
206+func aL () = aq(D)
203207
204208
205-func aK (aL,aM,aN) = {
206- let aO = (aL - aM)
207- if (if (aN)
208- then (0 > aO)
209+func aM (aN,aO,aP) = {
210+ let aQ = (aN - aO)
211+ if (if (aP)
212+ then (0 > aQ)
209213 else false)
210214 then throw("Invalid margin")
211- else if (if (!(aN))
212- then (aO >= 0)
215+ else if (if (!(aP))
216+ then (aQ >= 0)
213217 else false)
214218 then throw("Invalid margin")
215219 else true
216220 }
217221
218222
219-func aP (aQ) = if ((aQ == 0))
223+func aR (aS) = if ((aS == 0))
220224 then throw("Should not be called with _positionSize == 0")
221- else if ((aQ > 0))
222- then aG()
223- else aH()
225+ else if ((aS > 0))
226+ then aI()
227+ else aJ()
224228
225229
226-func aR (aS) = {
227- let aT = getInteger(this, al(d, aS))
228- let aU = aT
229- if ($isInstanceOf(aU, "Int"))
230+func aT (aU) = {
231+ let aV = getInteger(this, an(e, aU))
232+ let aW = aV
233+ if ($isInstanceOf(aW, "Int"))
230234 then {
231- let aV = aU
232- $Tuple4(aV, getIntegerValue(this, al(e, aS)), getIntegerValue(this, al(f, aS)), getIntegerValue(this, al(g, aS)))
235+ let aX = aW
236+ $Tuple4(aX, getIntegerValue(this, an(f, aU)), getIntegerValue(this, an(g, aU)), getIntegerValue(this, an(h, aU)))
233237 }
234238 else $Tuple4(0, 0, 0, 0)
235239 }
236240
237241
238-func aW (aS) = if ((aR(aS)._1 == 0))
242+func aY (aU) = if ((aT(aU)._1 == 0))
239243 then throw("No open position")
240244 else true
241245
242246
243-func aX () = valueOrElse(getBoolean(this, h), false)
247+func aZ () = valueOrElse(getBoolean(this, i), false)
244248
245249
246-func aY () = valueOrElse(getBoolean(this, i), false)
250+func ba () = valueOrElse(getBoolean(this, j), false)
247251
248252
249-func aZ (ba,bb,bc) = if (ba)
253+func bb (bc,bd,be) = if (bc)
250254 then {
251- let bd = (au() - bc)
252- if ((0 >= bd))
255+ let bf = (aw() - be)
256+ if ((0 >= bf))
253257 then throw("Tx lead to base asset reserve <= 0, revert")
254- else $Tuple4((at() + bb), bd, (av() + bc), (aw() + bb))
258+ else $Tuple4((av() + bd), bf, (ax() + be), (ay() + bd))
255259 }
256260 else {
257- let be = (at() - bb)
258- if ((0 >= be))
261+ let bg = (av() - bd)
262+ if ((0 >= bg))
259263 then throw("Tx lead to base quote reserve <= 0, revert")
260- else $Tuple4(be, (au() + bc), (av() - bc), (aw() - bb))
264+ else $Tuple4(bg, (aw() + be), (ax() - be), (ay() - bd))
261265 }
262266
263267
264-func bf (ba,bb) = {
265- let bg = at()
266- let bh = au()
267- let bi = ah(bg, bh)
268- let bj = aj(bb, bi)
269- let ap = aj(bg, bh)
270- let bk = if (ba)
271- then (bg + bb)
272- else (bg - bb)
273- let bl = ah(ap, bk)
274- let bm = ak((bl - bh))
275- let bn = if (ba)
276- then bm
277- else -(bm)
278- let bo = ((bj - bm) / bj)
279- let bp = aF()
280- if ((bo > bp))
281- then throw(((("Price impact " + toString(bo)) + " > max price impact ") + toString(bp)))
268+func bh (bc,bd) = {
269+ let bi = av()
270+ let bj = aw()
271+ let bk = aj(bi, bj)
272+ let bl = al(bd, bk)
273+ let ar = al(bi, bj)
274+ let bm = if (bc)
275+ then (bi + bd)
276+ else (bi - bd)
277+ let bn = aj(ar, bm)
278+ let bo = am((bn - bj))
279+ let bp = if (bc)
280+ then bo
281+ else -(bo)
282+ let bq = ((bl - bo) / bl)
283+ let br = aH()
284+ if ((bq > br))
285+ then throw(((("Price impact " + toString(bq)) + " > max price impact ") + toString(br)))
282286 else {
283- let bq = aZ(ba, bb, bm)
284- let br = bq._1
285- let bs = bq._2
286- let bt = bq._3
287- let bu = bq._4
288- $Tuple5(bn, br, bs, bt, bu)
287+ let bs = bb(bc, bd, bo)
288+ let bt = bs._1
289+ let bu = bs._2
290+ let bv = bs._3
291+ let bw = bs._4
292+ $Tuple5(bp, bt, bu, bv, bw)
289293 }
290294 }
291295
292296
293-func bv (bw,bx,by,bz) = {
294- let bA = if ((bw != 0))
297+func bx (by,bz,bA,bB) = {
298+ let bC = if ((by != 0))
295299 then {
296- let bB = aP(bw)
297- aj((bB - by), bw)
300+ let bD = aR(by)
301+ al((bD - bA), by)
298302 }
299303 else 0
300- let bC = ((bz - bA) + bx)
301- let bD = if ((0 > bC))
302- then $Tuple2(0, ak(bC))
303- else $Tuple2(ak(bC), 0)
304- let bE = bD._1
305- let bF = bD._2
306- $Tuple3(bE, bF, bA)
304+ let bE = ((bB - bC) + bz)
305+ let bF = if ((0 > bE))
306+ then $Tuple2(0, am(bE))
307+ else $Tuple2(am(bE), 0)
308+ let bG = bF._1
309+ let bH = bF._2
310+ $Tuple3(bG, bH, bC)
307311 }
308312
309313
310-func bG (ba,bc) = {
311- let bH = at()
312- let bI = au()
313- if ((bc == 0))
314+func bI (bc,be) = {
315+ let bJ = av()
316+ let bK = aw()
317+ if ((be == 0))
314318 then throw("Invalid base asset amount")
315319 else {
316- let ap = aj(bH, bI)
317- let bJ = if (ba)
318- then (bI + bc)
319- else (bI - bc)
320- let bK = ah(ap, bJ)
321- let bL = ak((bK - bH))
322- let bM = aZ(!(ba), bL, bc)
323- let br = bM._1
324- let bs = bM._2
325- let bt = bM._3
326- let bu = bM._4
327- $Tuple7(bL, br, bs, bt, bu, (aJ() - (if (ba)
328- then ak(bc)
329- else 0)), (aI() - (if (!(ba))
330- then ak(bc)
320+ let ar = al(bJ, bK)
321+ let bL = if (bc)
322+ then (bK + be)
323+ else (bK - be)
324+ let bM = aj(ar, bL)
325+ let bN = am((bM - bJ))
326+ let bO = bb(!(bc), bN, be)
327+ let bt = bO._1
328+ let bu = bO._2
329+ let bv = bO._3
330+ let bw = bO._4
331+ $Tuple7(bN, bt, bu, bv, bw, (aL() - (if (bc)
332+ then am(be)
333+ else 0)), (aK() - (if (!(bc))
334+ then am(be)
331335 else 0)))
332336 }
333337 }
334338
335339
336-func bN () = {
337- let bO = valueOrErrorMessage(addressFromString(getStringValue(this, b)), "")
338- let bP = getStringValue(this, a)
339- getIntegerValue(bO, bP)
340+func bP () = {
341+ let bQ = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
342+ let bR = getStringValue(this, a)
343+ let bS = getStringValue(this, b)
344+ let bT = getIntegerValue(bQ, bR)
345+ bT
340346 }
341347
342348
343-func bQ () = {
344- let bH = at()
345- let bI = au()
346- ah(bH, bI)
349+func bU () = {
350+ let bJ = av()
351+ let bK = aw()
352+ aj(bJ, bK)
347353 }
348354
349355
350-func bR () = {
351- let bS = bN()
352- let bT = bQ()
353- (ah(ak((bS - bT)), bS) > aE())
356+func bV () = {
357+ let bW = bP()
358+ let bX = bU()
359+ (aj(am((bW - bX)), bW) > aG())
354360 }
355361
356362
357-func bU (aS,bV) = {
358- let bW = aR(aS)
359- let aV = bW._1
360- let bX = bW._2
361- let bY = bW._3
362- let bZ = bW._4
363- let ca = ak(aV)
364- if ((ca == 0))
363+func bY (aU,bZ) = {
364+ let ca = aT(aU)
365+ let aX = ca._1
366+ let cb = ca._2
367+ let cc = ca._3
368+ let cd = ca._4
369+ let ce = am(aX)
370+ if ((ce == 0))
365371 then throw("Invalid position size")
366372 else {
367- let cb = (0 > aV)
368- let cc = if ((bV == ad))
373+ let cf = (0 > aX)
374+ let cg = if ((bZ == af))
369375 then {
370- let cd = bG(!(cb), ca)
371- let ce = cd._1
372- let cf = cd._2
373- let cg = cd._3
374- let ch = cd._4
375- ce
376+ let ch = bI(!(cf), ce)
377+ let ci = ch._1
378+ let cj = ch._2
379+ let ck = ch._3
380+ let cl = ch._4
381+ ci
376382 }
377- else (ca * bN())
378- let ci = if (cb)
379- then (bY - cc)
380- else (cc - bY)
381- $Tuple2(cc, ci)
383+ else (ce * bP())
384+ let cm = if (cf)
385+ then (cc - cg)
386+ else (cg - cc)
387+ $Tuple2(cg, cm)
382388 }
383389 }
384390
385391
386-func cj (aS,bV) = {
387- let ck = aR(aS)
388- let aV = ck._1
389- let bX = ck._2
390- let cl = ck._3
391- let bZ = ck._4
392- let cm = bU(aS, bV)
393- let cc = cm._1
394- let ci = cm._2
395- let cn = bv(aV, bX, bZ, ci)
396- let bE = cn._1
397- let bF = cn._2
398- ah((bE - bF), cc)
392+func cn (aU,bZ) = {
393+ let co = aT(aU)
394+ let aX = co._1
395+ let cb = co._2
396+ let cp = co._3
397+ let cd = co._4
398+ let cq = bY(aU, bZ)
399+ let cg = cq._1
400+ let cm = cq._2
401+ let cr = bx(aX, cb, cd, cm)
402+ let bG = cr._1
403+ let bH = cr._2
404+ aj((bG - bH), cg)
399405 }
400406
401407
402-func co (aS) = cj(aS, ad)
408+func cs (aU) = cn(aU, af)
403409
404410
405-func cp (aS) = {
406- let cq = aR(aS)
407- let aV = cq._1
408- let bX = cq._2
409- let cl = cq._3
410- let bZ = cq._4
411- let cr = bU(aS, ad)
412- let cf = cr._1
413- let ci = cr._2
414- let cs = bv(aV, bX, bZ, ci)
415- let bE = cs._1
416- let bF = cs._2
417- let ct = -(aV)
418- let cu = ci
419- let cv = -(bE)
420- let cw = bG((aV > 0), ak(aV))
421- let cx = cw._1
422- let bk = cw._2
423- let bl = cw._3
424- let cy = cw._4
425- let cz = cw._5
426- let cA = cw._6
427- let cB = cw._7
428- let cC = (ax() - cl)
429- $Tuple12(ct, bF, cu, cv, bk, bl, cy, cz, cC, cx, cA, cB)
411+func ct (aU) = {
412+ let cu = aT(aU)
413+ let aX = cu._1
414+ let cb = cu._2
415+ let cp = cu._3
416+ let cd = cu._4
417+ let cv = bY(aU, af)
418+ let cj = cv._1
419+ let cm = cv._2
420+ let cw = bx(aX, cb, cd, cm)
421+ let bG = cw._1
422+ let bH = cw._2
423+ let cx = -(aX)
424+ let cy = cm
425+ let cz = -(bG)
426+ let cA = bI((aX > 0), am(aX))
427+ let cB = cA._1
428+ let bm = cA._2
429+ let bn = cA._3
430+ let cC = cA._4
431+ let cD = cA._5
432+ let cE = cA._6
433+ let cF = cA._7
434+ let cG = (az() - cp)
435+ $Tuple12(cx, bH, cy, cz, bm, bn, cC, cD, cG, cB, cE, cF)
430436 }
431437
432438
433-func cD () = {
434- let cE = ((lastBlock.timestamp / 1000) / 60)
435- let cF = (cE - X)
436- let cG = valueOrElse(getString(this, q), "")
437- let cH = split(cG, ",")
438- func cI (cJ,cK) = if ((cF >= parseIntValue(cK)))
439- then (cJ :+ parseIntValue(cK))
440- else cJ
439+func cH () = {
440+ let cI = ((lastBlock.timestamp / 1000) / 60)
441+ let cJ = (cI - Y)
442+ let cK = valueOrElse(getString(this, r), "")
443+ let cL = split(cK, ",")
444+ func cM (cN,cO) = if ((cJ >= parseIntValue(cO)))
445+ then (cN :+ parseIntValue(cO))
446+ else cN
441447
442- let cL = {
443- let cM = cH
444- let cN = size(cM)
445- let cO = nil
446- func cP (cQ,cR) = if ((cR >= cN))
447- then cQ
448- else cI(cQ, cM[cR])
448+ let cP = {
449+ let cQ = cL
450+ let cR = size(cQ)
451+ let cS = nil
452+ func cT (cU,cV) = if ((cV >= cR))
453+ then cU
454+ else cM(cU, cQ[cV])
449455
450- func cS (cQ,cR) = if ((cR >= cN))
451- then cQ
456+ func cW (cU,cV) = if ((cV >= cR))
457+ then cU
452458 else throw("List size exceeds 20")
453459
454- cS(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
460+ cW(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
455461 }
456- let cT = if ((size(cL) > 0))
457- then max(cL)
458- else parseIntValue(cH[0])
459- let cU = valueOrElse(getInteger(this, r), 0)
460- let cV = valueOrElse(getInteger(this, ((s + "_") + toString(cU))), 0)
461- let cW = valueOrElse(getInteger(this, ((t + "_") + toString(cU))), 0)
462- let cX = (cV + ((cE - cU) * cW))
463- let cY = valueOrElse(getInteger(this, ((s + "_") + toString(cT))), 0)
464- let cZ = valueOrElse(getInteger(this, ((t + "_") + toString(cT))), 0)
465- let da = (cY + ((cF - cT) * cZ))
466- ((cX - da) / X)
462+ let cX = if ((size(cP) > 0))
463+ then max(cP)
464+ else parseIntValue(cL[0])
465+ let cY = valueOrElse(getInteger(this, s), 0)
466+ let cZ = valueOrElse(getInteger(this, ((t + "_") + toString(cY))), 0)
467+ let da = valueOrElse(getInteger(this, ((u + "_") + toString(cY))), 0)
468+ let db = (cZ + ((cI - cY) * da))
469+ let dc = valueOrElse(getInteger(this, ((t + "_") + toString(cX))), 0)
470+ let dd = valueOrElse(getInteger(this, ((u + "_") + toString(cX))), 0)
471+ let de = (dc + ((cJ - cX) * dd))
472+ ((db - de) / Y)
467473 }
468474
469475
470-func db (dc,dd,de,df,dg,dh,di) = [IntegerEntry(l, dc), IntegerEntry(m, dd), IntegerEntry(n, de), IntegerEntry(k, df), IntegerEntry(j, dg), IntegerEntry(o, dh), IntegerEntry(p, di)]
476+func df (dg,dh,di,dj,dk,dl,dm) = [IntegerEntry(m, dg), IntegerEntry(n, dh), IntegerEntry(o, di), IntegerEntry(l, dj), IntegerEntry(k, dk), IntegerEntry(p, dl), IntegerEntry(q, dm)]
471477
472478
473-func dj (dk,dl,dm,dn,do) = [IntegerEntry(w, dk), IntegerEntry(u, dl), IntegerEntry(v, dm), IntegerEntry(x, dn), IntegerEntry(y, do)]
479+func dn (do,dp,dq,dr,ds) = [IntegerEntry(x, do), IntegerEntry(v, dp), IntegerEntry(w, dq), IntegerEntry(y, dr), IntegerEntry(z, ds)]
474480
475481
476-func dp (an,dq,dr,ds,bB) = [IntegerEntry(al(d, an), dq), IntegerEntry(al(e, an), dr), IntegerEntry(al(f, an), ds), IntegerEntry(al(g, an), bB)]
482+func dt (ap,du,dv,dw,bD) = [IntegerEntry(an(e, ap), du), IntegerEntry(an(f, ap), dv), IntegerEntry(an(g, ap), dw), IntegerEntry(an(h, ap), bD)]
477483
478484
479-func dt (du) = {
480- let cE = ((lastBlock.timestamp / 1000) / 60)
481- let dv = valueOrElse(getInteger(this, r), 0)
482- if ((dv > cE))
485+func dx (dy) = {
486+ let cI = ((lastBlock.timestamp / 1000) / 60)
487+ let dz = valueOrElse(getInteger(this, s), 0)
488+ if ((dz > cI))
483489 then throw("TWAP out-of-order")
484490 else {
485- let cU = if ((dv == 0))
486- then cE
487- else dv
488- let cG = valueOrElse(getString(this, q), "")
489- let dw = split(cG, ",")
490- let cH = if ((size(dw) > X))
491- then (removeByIndex(dw, 0) :+ toString(cE))
492- else (dw :+ toString(cE))
493- let dx = valueOrElse(getInteger(this, ((s + "_") + toString(dv))), 0)
494- let dy = valueOrElse(getInteger(this, ((t + "_") + toString(dv))), du)
495- let dz = (dx + ((cE - cU) * dy))
496- func dA (cJ,dB) = ((cJ + dB) + ",")
491+ let cY = if ((dz == 0))
492+ then cI
493+ else dz
494+ let cK = valueOrElse(getString(this, r), "")
495+ let dA = split(cK, ",")
496+ let cL = if ((size(dA) > Y))
497+ then (removeByIndex(dA, 0) :+ toString(cI))
498+ else (dA :+ toString(cI))
499+ let dB = valueOrElse(getInteger(this, ((t + "_") + toString(dz))), 0)
500+ let dC = valueOrElse(getInteger(this, ((u + "_") + toString(dz))), dy)
501+ let dD = (dB + ((cI - cY) * dC))
502+ func dE (cN,dF) = ((cN + dF) + ",")
497503
498- let dC = {
499- let cM = cH
500- let cN = size(cM)
501- let cO = ""
502- func cP (cQ,cR) = if ((cR >= cN))
503- then cQ
504- else dA(cQ, cM[cR])
504+ let dG = {
505+ let cQ = cL
506+ let cR = size(cQ)
507+ let cS = ""
508+ func cT (cU,cV) = if ((cV >= cR))
509+ then cU
510+ else dE(cU, cQ[cV])
505511
506- func cS (cQ,cR) = if ((cR >= cN))
507- then cQ
512+ func cW (cU,cV) = if ((cV >= cR))
513+ then cU
508514 else throw("List size exceeds 20")
509515
510- cS(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
516+ cW(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
511517 }
512- let dD = dropRight(dC, 1)
513- let dE = if ((take(dD, 1) == ","))
514- then drop(dD, 1)
515- else dD
516-[IntegerEntry(((s + "_") + toString(cE)), dz), IntegerEntry(((t + "_") + toString(cE)), du), IntegerEntry(r, cE), StringEntry(q, dE)]
518+ let dH = dropRight(dG, 1)
519+ let dI = if ((take(dH, 1) == ","))
520+ then drop(dH, 1)
521+ else dH
522+[IntegerEntry(((t + "_") + toString(cI)), dD), IntegerEntry(((u + "_") + toString(cI)), dy), IntegerEntry(s, cI), StringEntry(r, dI)]
517523 }
518524 }
519525
520526
521-func dF (bg,bh,dG,dH,dI,dJ,dK) = if (((dJ - dK) != dG))
522- then throw(((((("Invalid AMM state data: " + toString(dJ)) + " + ") + toString(dK)) + " != ") + toString(dG)))
523- else ([IntegerEntry(z, bg), IntegerEntry(A, bh), IntegerEntry(B, dG), IntegerEntry(E, dH), IntegerEntry(F, dI), IntegerEntry(C, dJ), IntegerEntry(D, dK)] ++ dt(ah(bg, bh)))
527+func dJ (bi,bj,dK,dL,dM,dN,dO) = if (((dN - dO) != dK))
528+ then throw(((((("Invalid AMM state data: " + toString(dN)) + " + ") + toString(dO)) + " != ") + toString(dK)))
529+ else ([IntegerEntry(A, bi), IntegerEntry(B, bj), IntegerEntry(C, dK), IntegerEntry(F, dL), IntegerEntry(G, dM), IntegerEntry(D, dN), IntegerEntry(E, dO)] ++ dx(aj(bi, bj)))
524530
525531
526-func dL (an) = [DeleteEntry(al(d, an)), DeleteEntry(al(e, an)), DeleteEntry(al(f, an)), DeleteEntry(al(g, an))]
532+func dP (ap) = [DeleteEntry(an(e, ap)), DeleteEntry(an(f, ap)), DeleteEntry(an(g, ap)), DeleteEntry(an(h, ap))]
527533
528534
529-func dM (an,dN) = {
530- let dO = assetBalance(this, Q())
531- if ((dN > dO))
532- then throw(((("Unable to withdraw " + toString(dN)) + " from contract balance ") + toString(dO)))
533- else [ScriptTransfer(an, dN, Q())]
535+func dQ (ap,dR) = {
536+ let dS = assetBalance(this, R())
537+ if ((dR > dS))
538+ then throw(((("Unable to withdraw " + toString(dR)) + " from contract balance ") + toString(dS)))
539+ else [ScriptTransfer(ap, dR, R())]
534540 }
535541
536542
537-func dP (dQ) = if ((0 > dQ))
543+func dT (dU) = if ((0 > dU))
538544 then throw("Balance")
539- else [IntegerEntry(c, dQ)]
545+ else [IntegerEntry(d, dU)]
540546
541547
542-func dR (dQ) = [ScriptTransfer(S(), dQ, Q())]
548+func dV (dU) = [ScriptTransfer(T(), dU, R())]
543549
544550
545-@Callable(dQ)
546-func pause () = if ((dQ.caller != O()))
551+@Callable(dU)
552+func pause () = if ((dU.caller != P()))
547553 then throw("Invalid togglePause params")
548- else [BooleanEntry(i, true)]
554+ else [BooleanEntry(j, true)]
549555
550556
551557
552-@Callable(dQ)
553-func unpause () = if ((dQ.caller != O()))
558+@Callable(dU)
559+func unpause () = if ((dU.caller != P()))
554560 then throw("Invalid togglePause params")
555- else [BooleanEntry(i, false)]
561+ else [BooleanEntry(j, false)]
556562
557563
558564
559-@Callable(dQ)
560-func changeSettings (dc,dd,de,df,dg,dh,di) = if ((dQ.caller != O()))
565+@Callable(dU)
566+func changeSettings (dg,dh,di,dj,dk,dl,dm) = if ((dU.caller != P()))
561567 then throw("Invalid changeSettings params")
562- else db(dc, dd, de, df, dg, dh, di)
568+ else df(dg, dh, di, dj, dk, dl, dm)
563569
564570
565571
566-@Callable(dQ)
567-func initialize (bg,bh,df,dc,dd,de,dg,dS,dT,dU,dh,di) = if (if (if (if (if (if (if (if (if (if ((0 >= bg))
572+@Callable(dU)
573+func initialize (bi,bj,dj,dg,dh,di,dk,dW,dX,dY,dl,dm) = if (if (if (if (if (if (if (if (if (if ((0 >= bi))
568574 then true
569- else (0 >= bh))
575+ else (0 >= bj))
570576 then true
571- else (0 >= df))
572- then true
573- else (0 >= dc))
574- then true
575- else (0 >= dd))
576- then true
577- else (0 >= de))
577+ else (0 >= dj))
578578 then true
579579 else (0 >= dg))
580580 then true
582582 then true
583583 else (0 >= di))
584584 then true
585- else aX())
585+ else (0 >= dk))
586+ then true
587+ else (0 >= dl))
588+ then true
589+ else (0 >= dm))
590+ then true
591+ else aZ())
586592 then throw("Invalid initialize parameters")
587- else ((((dF(bg, bh, 0, 0, 0, 0, 0) ++ db(dc, dd, de, df, dg, dh, di)) ++ dj((lastBlock.timestamp + df), 0, 0, 0, 0)) ++ dP(0)) ++ [BooleanEntry(h, true), StringEntry(b, dS), StringEntry(a, dT), StringEntry(G, dU)])
593+ else ((((dJ(bi, bj, 0, 0, 0, 0, 0) ++ df(dg, dh, di, dj, dk, dl, dm)) ++ dn((lastBlock.timestamp + dj), 0, 0, 0, 0)) ++ dT(0)) ++ [BooleanEntry(i, true), StringEntry(c, dW), StringEntry(a, dX), StringEntry(H, dY)])
588594
589595
590596
591-@Callable(dQ)
592-func decreasePosition (dV,dN,dW,dX) = if (if (if (if (if (if (if (if ((dV != U))
593- then (dV != V)
597+@Callable(dU)
598+func decreasePosition (dZ,dR,ea,eb) = if (if (if (if (if (if (if (if ((dZ != V))
599+ then (dZ != W)
594600 else false)
595601 then true
596- else (0 >= dN))
602+ else (0 >= dR))
597603 then true
598- else if (((1 * Z) > dW))
604+ else if (((1 * ab) > ea))
599605 then true
600- else (dW > (3 * Z)))
606+ else (ea > (3 * ab)))
601607 then true
602- else !(aX()))
608+ else !(aZ()))
603609 then true
604- else !(aK(ah(Z, dW), as(), true)))
610+ else !(aM(aj(ab, ea), au(), true)))
605611 then true
606- else !(aW(toString(dQ.caller))))
612+ else !(aY(toString(dU.caller))))
607613 then true
608- else aY())
614+ else ba())
609615 then throw("Invalid decreasePosition parameters")
610616 else {
611- let dY = aR(toString(dQ.caller))
612- let dZ = dY._1
613- let ea = dY._2
614- let eb = dY._3
615- let ec = dY._4
616- let ed = (dZ == 0)
617- let ee = if ((dZ > 0))
618- then (dV == U)
619- else (dV == V)
620- let ef = if (!(ed))
621- then ee
617+ let ec = aT(toString(dU.caller))
618+ let ed = ec._1
619+ let ee = ec._2
620+ let ef = ec._3
621+ let eg = ec._4
622+ let eh = (ed == 0)
623+ let ei = if ((ed > 0))
624+ then (dZ == V)
625+ else (dZ == W)
626+ let ej = if (!(eh))
627+ then ei
622628 else false
623- let eg = (dV == U)
624- let eh = if (if (ed)
629+ let ek = (dZ == V)
630+ let el = if (if (eh)
625631 then true
626- else ef)
632+ else ej)
627633 then throw("Use increasePosition to open new or increase position")
628634 else {
629- let ei = aj(dN, dW)
630- let ej = bU(toString(dQ.caller), ad)
631- let ek = ej._1
632- let ci = ej._2
633- if ((ek > ei))
635+ let em = al(dR, ea)
636+ let en = bY(toString(dU.caller), af)
637+ let eo = en._1
638+ let cm = en._2
639+ if ((eo > em))
634640 then {
635- let el = bf(eg, ei)
636- let ct = el._1
637- let bk = el._2
638- let bl = el._3
639- let cy = el._4
640- let cz = el._5
641- let em = ak(ct)
642- if (if ((dX != 0))
643- then (dX > em)
641+ let ep = bh(ek, em)
642+ let cx = ep._1
643+ let bm = ep._2
644+ let bn = ep._3
645+ let cC = ep._4
646+ let cD = ep._5
647+ let eq = am(cx)
648+ if (if ((eb != 0))
649+ then (eb > eq)
644650 else false)
645- then throw(((("Too little base asset exchanged, got " + toString(em)) + " expected ") + toString(dX)))
651+ then throw(((("Too little base asset exchanged, got " + toString(eq)) + " expected ") + toString(eb)))
646652 else {
647- let cu = if ((dZ != 0))
648- then ah(aj(ci, em), dZ)
653+ let cy = if ((ed != 0))
654+ then aj(al(cm, eq), ed)
649655 else 0
650- let en = bv(dZ, ea, ec, cu)
651- let bE = en._1
652- let bF = en._2
653- let bA = en._3
654- let cx = ei
655- let eo = (ci - cu)
656- let ep = if ((dZ > 0))
657- then ((ek - cx) - eo)
658- else ((eo + ek) - cx)
659- let eq = (dZ + ct)
660- $Tuple11(eq, bE, ak(ep), aP(eq), bl, bk, cy, cz, (ax() - ei), (aJ() - (if ((eq > 0))
661- then ak(ct)
662- else 0)), (aI() - (if ((0 > eq))
663- then ak(ct)
656+ let er = bx(ed, ee, eg, cy)
657+ let bG = er._1
658+ let bH = er._2
659+ let bC = er._3
660+ let cB = em
661+ let es = (cm - cy)
662+ let et = if ((ed > 0))
663+ then ((eo - cB) - es)
664+ else ((es + eo) - cB)
665+ let eu = (ed + cx)
666+ $Tuple11(eu, bG, am(et), aR(eu), bn, bm, cC, cD, (az() - em), (aL() - (if ((eu > 0))
667+ then am(cx)
668+ else 0)), (aK() - (if ((0 > eu))
669+ then am(cx)
664670 else 0)))
665671 }
666672 }
667673 else throw("Close position first")
668674 }
669- let eq = eh._1
670- let er = eh._2
671- let es = eh._3
672- let et = eh._4
673- let bl = eh._5
674- let bk = eh._6
675- let cy = eh._7
676- let cz = eh._8
677- let cC = eh._9
678- let cA = eh._10
679- let cB = eh._11
680- (dp(toString(dQ.caller), eq, er, es, et) ++ dF(bk, bl, cy, cz, cC, cA, cB))
675+ let eu = el._1
676+ let ev = el._2
677+ let ew = el._3
678+ let ex = el._4
679+ let bn = el._5
680+ let bm = el._6
681+ let cC = el._7
682+ let cD = el._8
683+ let cG = el._9
684+ let cE = el._10
685+ let cF = el._11
686+ (dt(toString(dU.caller), eu, ev, ew, ex) ++ dJ(bm, bn, cC, cD, cG, cE, cF))
681687 }
682688
683689
684690
685-@Callable(dQ)
686-func increasePosition (dV,dW,dX) = {
687- let eu = dQ.payments[0].amount
688- if (if (if (if (if (if (if (if ((dV != U))
689- then (dV != V)
691+@Callable(dU)
692+func increasePosition (dZ,ea,eb) = {
693+ let ey = dU.payments[0].amount
694+ if (if (if (if (if (if (if (if ((dZ != V))
695+ then (dZ != W)
690696 else false)
691697 then true
692- else (0 >= eu))
698+ else (0 >= ey))
693699 then true
694- else if (((1 * Z) > dW))
700+ else if (((1 * ab) > ea))
695701 then true
696- else (dW > (3 * Z)))
702+ else (ea > (3 * ab)))
697703 then true
698- else !(aX()))
704+ else !(aZ()))
699705 then true
700- else (dQ.payments[0].assetId != Q()))
706+ else (dU.payments[0].assetId != R()))
701707 then true
702- else !(aK(ah(Z, dW), as(), true)))
708+ else !(aM(aj(ab, ea), au(), true)))
703709 then true
704- else aY())
710+ else ba())
705711 then throw("Invalid increasePosition parameters")
706712 else {
707- let ev = aj(eu, ar())
708- let dN = (eu - ev)
709- let ew = aR(toString(dQ.caller))
710- let dZ = ew._1
711- let ea = ew._2
712- let eb = ew._3
713- let ed = (dZ == 0)
714- let ee = if ((dZ > 0))
715- then (dV == U)
716- else (dV == V)
717- let ef = if (!(ed))
718- then ee
713+ let ez = al(ey, at())
714+ let dR = (ey - ez)
715+ let eA = aT(toString(dU.caller))
716+ let ed = eA._1
717+ let ee = eA._2
718+ let ef = eA._3
719+ let eh = (ed == 0)
720+ let ei = if ((ed > 0))
721+ then (dZ == V)
722+ else (dZ == W)
723+ let ej = if (!(eh))
724+ then ei
719725 else false
720- let eg = (dV == U)
721- let ex = if (if (ed)
726+ let ek = (dZ == V)
727+ let eB = if (if (eh)
722728 then true
723- else ef)
729+ else ej)
724730 then {
725- let ei = aj(dN, dW)
726- let ey = bf(eg, ei)
727- let bn = ey._1
728- let bk = ey._2
729- let bl = ey._3
730- let cy = ey._4
731- let cz = ey._5
732- if (if ((dX != 0))
733- then (dX > ak(bn))
731+ let em = al(dR, ea)
732+ let eC = bh(ek, em)
733+ let bp = eC._1
734+ let bm = eC._2
735+ let bn = eC._3
736+ let cC = eC._4
737+ let cD = eC._5
738+ if (if ((eb != 0))
739+ then (eb > am(bp))
734740 else false)
735- then throw(((("Limit error: " + toString(ak(bn))) + " < ") + toString(dX)))
741+ then throw(((("Limit error: " + toString(am(bp))) + " < ") + toString(eb)))
736742 else {
737- let eq = (dZ + bn)
738- let bZ = aP(eq)
739- let ez = ah(ei, dW)
740- let eA = bv(dZ, ea, bZ, ez)
741- let bE = eA._1
742- let cf = eA._2
743- let cg = eA._3
744- $Tuple11(eq, bE, (eb + ei), aP(eq), bl, bk, cy, cz, (ax() + ei), (aJ() + (if ((eq > 0))
745- then ak(bn)
746- else 0)), (aI() + (if ((0 > eq))
747- then ak(bn)
743+ let eu = (ed + bp)
744+ let cd = aR(eu)
745+ let eD = aj(em, ea)
746+ let eE = bx(ed, ee, cd, eD)
747+ let bG = eE._1
748+ let cj = eE._2
749+ let ck = eE._3
750+ $Tuple11(eu, bG, (ef + em), aR(eu), bn, bm, cC, cD, (az() + em), (aL() + (if ((eu > 0))
751+ then am(bp)
752+ else 0)), (aK() + (if ((0 > eu))
753+ then am(bp)
748754 else 0)))
749755 }
750756 }
751757 else {
752- let ei = aj(dN, dW)
753- let eB = bU(toString(dQ.caller), ad)
754- let ek = eB._1
755- let ci = eB._2
756- if ((ek > ei))
758+ let em = al(dR, ea)
759+ let eF = bY(toString(dU.caller), af)
760+ let eo = eF._1
761+ let cm = eF._2
762+ if ((eo > em))
757763 then throw("Use decreasePosition to decrease position size")
758764 else throw("Close position first")
759765 }
760- let eq = ex._1
761- let er = ex._2
762- let es = ex._3
763- let et = ex._4
764- let bl = ex._5
765- let bk = ex._6
766- let cy = ex._7
767- let cz = ex._8
768- let cC = ex._9
769- let cA = ex._10
770- let cB = ex._11
771- let eC = (ev / 2)
772- let eD = (ev - eC)
773- let eE = invoke(R(), "lockNeutrinoSP", [toString(S()), ac], [AttachedPayment(Q(), dN)])
774- if ((eE == eE))
766+ let eu = eB._1
767+ let ev = eB._2
768+ let ew = eB._3
769+ let ex = eB._4
770+ let bn = eB._5
771+ let bm = eB._6
772+ let cC = eB._7
773+ let cD = eB._8
774+ let cG = eB._9
775+ let cE = eB._10
776+ let cF = eB._11
777+ let eG = (ez / 2)
778+ let eH = (ez - eG)
779+ let eI = invoke(S(), "lockNeutrinoSP", [toString(T()), ae], [AttachedPayment(R(), dR)])
780+ if ((eI == eI))
775781 then {
776- let eF = invoke(T(), "deposit", nil, [AttachedPayment(Q(), eD)])
777- if ((eF == eF))
778- then (((dp(toString(dQ.caller), eq, er, es, et) ++ dF(bk, bl, cy, cz, cC, cA, cB)) ++ dR(eC)) ++ dP((aq() + dN)))
782+ let eJ = invoke(U(), "deposit", nil, [AttachedPayment(R(), eH)])
783+ if ((eJ == eJ))
784+ then (((dt(toString(dU.caller), eu, ev, ew, ex) ++ dJ(bm, bn, cC, cD, cG, cE, cF)) ++ dV(eG)) ++ dT((as() + dR)))
779785 else throw("Strict value is not equal to itself.")
780786 }
781787 else throw("Strict value is not equal to itself.")
784790
785791
786792
787-@Callable(dQ)
793+@Callable(dU)
788794 func addMargin () = {
789- let eu = dQ.payments[0].amount
790- if (if (if (if ((dQ.payments[0].assetId != Q()))
795+ let ey = dU.payments[0].amount
796+ if (if (if (if ((dU.payments[0].assetId != R()))
791797 then true
792- else !(aW(toString(dQ.caller))))
798+ else !(aY(toString(dU.caller))))
793799 then true
794- else !(aX()))
800+ else !(aZ()))
795801 then true
796- else aY())
802+ else ba())
797803 then throw("Invalid addMargin parameters")
798804 else {
799- let ev = aj(eu, ar())
800- let dN = (eu - ev)
801- let eG = aR(toString(dQ.caller))
802- let dZ = eG._1
803- let ea = eG._2
804- let eb = eG._3
805- let ec = eG._4
806- let eC = (ev / 2)
807- let eD = (ev - eC)
808- let eE = invoke(R(), "lockNeutrinoSP", [toString(S()), ac], [AttachedPayment(Q(), dN)])
809- if ((eE == eE))
805+ let ez = al(ey, at())
806+ let dR = (ey - ez)
807+ let eK = aT(toString(dU.caller))
808+ let ed = eK._1
809+ let ee = eK._2
810+ let ef = eK._3
811+ let eg = eK._4
812+ let eG = (ez / 2)
813+ let eH = (ez - eG)
814+ let eI = invoke(S(), "lockNeutrinoSP", [toString(T()), ae], [AttachedPayment(R(), dR)])
815+ if ((eI == eI))
810816 then {
811- let eF = invoke(T(), "deposit", nil, [AttachedPayment(Q(), eD)])
812- if ((eF == eF))
813- then ((dp(toString(dQ.caller), dZ, (ea + dN), eb, ec) ++ dR(eC)) ++ dP((aq() + dN)))
817+ let eJ = invoke(U(), "deposit", nil, [AttachedPayment(R(), eH)])
818+ if ((eJ == eJ))
819+ then ((dt(toString(dU.caller), ed, (ee + dR), ef, eg) ++ dV(eG)) ++ dT((as() + dR)))
814820 else throw("Strict value is not equal to itself.")
815821 }
816822 else throw("Strict value is not equal to itself.")
819825
820826
821827
822-@Callable(dQ)
823-func removeMargin (dN) = if (if (if (if ((0 >= dN))
828+@Callable(dU)
829+func removeMargin (dR) = if (if (if (if ((0 >= dR))
824830 then true
825- else !(aW(toString(dQ.caller))))
831+ else !(aY(toString(dU.caller))))
826832 then true
827- else !(aX()))
833+ else !(aZ()))
828834 then true
829- else aY())
835+ else ba())
830836 then throw("Invalid removeMargin parameters")
831837 else {
832- let eH = aR(toString(dQ.caller))
833- let dZ = eH._1
834- let ea = eH._2
835- let eb = eH._3
836- let ec = eH._4
837- let eI = -(dN)
838- let eJ = bv(dZ, ea, ec, eI)
839- let bE = eJ._1
840- let bF = eJ._2
841- if ((bF != 0))
838+ let eL = aT(toString(dU.caller))
839+ let ed = eL._1
840+ let ee = eL._2
841+ let ef = eL._3
842+ let eg = eL._4
843+ let eM = -(dR)
844+ let eN = bx(ed, ee, eg, eM)
845+ let bG = eN._1
846+ let bH = eN._2
847+ if ((bH != 0))
842848 then throw("Invalid added margin amount")
843849 else {
844- let eK = invoke(R(), "unlockNeutrino", [dN, toBase58String(Q())], nil)
845- if ((eK == eK))
846- then ((dp(toString(dQ.caller), dZ, bE, eb, aP(dZ)) ++ dM(dQ.caller, dN)) ++ dP((aq() - dN)))
850+ let eO = invoke(S(), "unlockNeutrino", [dR, toBase58String(R())], nil)
851+ if ((eO == eO))
852+ then ((dt(toString(dU.caller), ed, bG, ef, aR(ed)) ++ dQ(dU.caller, dR)) ++ dT((as() - dR)))
847853 else throw("Strict value is not equal to itself.")
848854 }
849855 }
850856
851857
852858
853-@Callable(dQ)
854-func closePosition () = if (if (if (!(aW(toString(dQ.caller))))
859+@Callable(dU)
860+func closePosition () = if (if (if (!(aY(toString(dU.caller))))
855861 then true
856- else !(aX()))
862+ else !(aZ()))
857863 then true
858- else aY())
864+ else ba())
859865 then throw("Invalid closePosition parameters")
860866 else {
861- let eL = cp(toString(dQ.caller))
862- let cf = eL._1
863- let eM = eL._2
864- let cu = eL._3
865- let cv = eL._4
866- let bk = eL._5
867- let bl = eL._6
868- let cy = eL._7
869- let cz = eL._8
870- let cC = eL._9
871- let cg = eL._10
872- let cA = eL._11
873- let cB = eL._12
874- if ((eM > 0))
867+ let eP = ct(toString(dU.caller))
868+ let cj = eP._1
869+ let eQ = eP._2
870+ let cy = eP._3
871+ let cz = eP._4
872+ let bm = eP._5
873+ let bn = eP._6
874+ let cC = eP._7
875+ let cD = eP._8
876+ let cG = eP._9
877+ let ck = eP._10
878+ let cE = eP._11
879+ let cF = eP._12
880+ if ((eQ > 0))
875881 then throw("Unable to close position with bad debt")
876882 else {
877- let eN = ak(cv)
878- let eO = (aq() - eN)
879- let eP = if ((0 > eO))
880- then $Tuple2(0, ak(eO))
881- else $Tuple2(eO, 0)
882- let eQ = eP._1
883- let eR = eP._2
884- let eS = if ((eR > 0))
883+ let eR = am(cz)
884+ let eS = (as() - eR)
885+ let eT = if ((0 > eS))
886+ then $Tuple2(0, am(eS))
887+ else $Tuple2(eS, 0)
888+ let eU = eT._1
889+ let eV = eT._2
890+ let eW = if ((eV > 0))
885891 then {
886- let eT = invoke(T(), "withdraw", [eR], nil)
887- if ((eT == eT))
892+ let eX = invoke(U(), "withdraw", [eV], nil)
893+ if ((eX == eX))
888894 then nil
889895 else throw("Strict value is not equal to itself.")
890896 }
891897 else nil
892- if ((eS == eS))
898+ if ((eW == eW))
893899 then {
894- let eK = invoke(R(), "unlockNeutrino", [(eN - eR), toBase58String(Q())], nil)
895- if ((eK == eK))
896- then (((dL(toString(dQ.caller)) ++ dF(bk, bl, cy, cz, cC, cA, cB)) ++ dM(dQ.caller, eN)) ++ dP(eQ))
900+ let eO = invoke(S(), "unlockNeutrino", [(eR - eV), toBase58String(R())], nil)
901+ if ((eO == eO))
902+ then (((dP(toString(dU.caller)) ++ dJ(bm, bn, cC, cD, cG, cE, cF)) ++ dQ(dU.caller, eR)) ++ dT(eU))
897903 else throw("Strict value is not equal to itself.")
898904 }
899905 else throw("Strict value is not equal to itself.")
902908
903909
904910
905-@Callable(dQ)
906-func liquidate (aS) = {
907- let eU = if (bR())
908- then cj(aS, ae)
909- else cj(aS, ad)
910- if (if (if (if (!(aK(eU, aC(), false)))
911+@Callable(dU)
912+func liquidate (aU) = {
913+ let eY = if (bV())
914+ then cn(aU, ag)
915+ else cn(aU, af)
916+ if (if (if (if (!(aM(eY, aE(), false)))
911917 then true
912- else !(aW(aS)))
918+ else !(aY(aU)))
913919 then true
914- else !(aX()))
920+ else !(aZ()))
915921 then true
916- else aY())
922+ else ba())
917923 then throw("Unable to liquidate")
918924 else {
919- let eV = cp(aS)
920- let cf = eV._1
921- let bF = eV._2
922- let cg = eV._3
923- let cv = eV._4
924- let bk = eV._5
925- let bl = eV._6
926- let cy = eV._7
927- let cz = eV._8
928- let cC = eV._9
929- let cx = eV._10
930- let cA = eV._11
931- let cB = eV._12
932- let eW = aj(cx, aD())
933- let eX = (eW / 2)
934- let eD = (eW - eX)
935- let eY = (aq() - eW)
936- let eZ = if ((0 > eY))
937- then $Tuple2(0, ak(eY))
938- else $Tuple2(eY, 0)
939- let fa = eZ._1
940- let fb = eZ._2
941- let eS = if ((fb > 0))
925+ let eZ = ct(aU)
926+ let cj = eZ._1
927+ let bH = eZ._2
928+ let ck = eZ._3
929+ let cz = eZ._4
930+ let bm = eZ._5
931+ let bn = eZ._6
932+ let cC = eZ._7
933+ let cD = eZ._8
934+ let cG = eZ._9
935+ let cB = eZ._10
936+ let cE = eZ._11
937+ let cF = eZ._12
938+ let fa = al(cB, aF())
939+ let fb = (fa / 2)
940+ let eH = (fa - fb)
941+ let fc = (as() - fa)
942+ let fd = if ((0 > fc))
943+ then $Tuple2(0, am(fc))
944+ else $Tuple2(fc, 0)
945+ let fe = fd._1
946+ let ff = fd._2
947+ let eW = if ((ff > 0))
942948 then {
943- let eT = invoke(T(), "withdraw", [fb], nil)
944- if ((eT == eT))
949+ let eX = invoke(U(), "withdraw", [ff], nil)
950+ if ((eX == eX))
945951 then nil
946952 else throw("Strict value is not equal to itself.")
947953 }
948954 else nil
949- if ((eS == eS))
955+ if ((eW == eW))
950956 then {
951- let eF = invoke(T(), "deposit", nil, [AttachedPayment(Q(), eD)])
952- if ((eF == eF))
957+ let eJ = invoke(U(), "deposit", nil, [AttachedPayment(R(), eH)])
958+ if ((eJ == eJ))
953959 then {
954- let eK = invoke(R(), "unlockNeutrino", [(eX - fb), toBase58String(Q())], nil)
955- if ((eK == eK))
956- then (((dL(aS) ++ dF(bk, bl, cy, cz, cC, cA, cB)) ++ dM(dQ.caller, eX)) ++ dP(eY))
960+ let eO = invoke(S(), "unlockNeutrino", [(fb - ff), toBase58String(R())], nil)
961+ if ((eO == eO))
962+ then (((dP(aU) ++ dJ(bm, bn, cC, cD, cG, cE, cF)) ++ dQ(dU.caller, fb)) ++ dT(fc))
957963 else throw("Strict value is not equal to itself.")
958964 }
959965 else throw("Strict value is not equal to itself.")
964970
965971
966972
967-@Callable(dQ)
973+@Callable(dU)
968974 func payFunding () = {
969- let fc = ay()
970- if (if (if ((fc > lastBlock.timestamp))
975+ let fg = aA()
976+ if (if (if ((fg > lastBlock.timestamp))
971977 then true
972- else !(aX()))
978+ else !(aZ()))
973979 then true
974- else aY())
975- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(fc)))
980+ else ba())
981+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(fg)))
976982 else {
977- let fd = bN()
978- let fe = cD()
979- let ff = (fe - fd)
980- let fg = if (if ((aI() == 0))
983+ let fh = bP()
984+ let fi = cH()
985+ let fj = (fi - fh)
986+ let fk = if (if ((aK() == 0))
981987 then true
982- else (aJ() == 0))
983- then $Tuple4(0, 0, 0, 0)
984- else if ((0 > ff))
988+ else (aL() == 0))
989+ then $Tuple2(0, 0)
990+ else if ((0 > fj))
985991 then {
986- let fh = ah(aj(ff, aA()), ab)
987- let fi = ah(fh, fd)
988- let fj = ah(aj(fh, aI()), aJ())
989- let fk = ah(aj(fj, aa), fd)
990- $Tuple4(fh, fj, fi, fk)
992+ let fl = aj(al(fj, aC()), ad)
993+ let fm = aj(al(fl, aK()), aL())
994+ $Tuple2(fl, fm)
991995 }
992996 else {
993- let fj = ah(aj(ff, aA()), ab)
994- let fk = ah(fj, fd)
995- let fh = ah(aj(fj, aJ()), aI())
996- let fi = ah(aj(fh, aa), fd)
997- $Tuple4(fh, fj, fi, fk)
997+ let fm = aj(al(fj, aC()), ad)
998+ let fl = aj(al(fm, aL()), aK())
999+ $Tuple2(fl, fm)
9981000 }
999- let fh = fg._1
1000- let fj = fg._2
1001- let fi = fg._3
1002- let fk = fg._4
1003- dj((fc + aB()), (aG() + fj), (aH() + fh), fk, fi)
1001+ let fl = fk._1
1002+ let fm = fk._2
1003+ dn((fg + aD()), (aI() + fm), (aJ() + fl), aj(fm, fh), aj(fl, fh))
10041004 }
10051005 }
10061006
10071007
10081008
1009-@Callable(dQ)
1010-func v_get (aS) = {
1011- let fl = cp(aS)
1012- let cf = fl._1
1013- let cg = fl._2
1014- let ch = fl._3
1015- let fm = fl._4
1016- throw((((af(cg) + af(ch)) + af(fm)) + af(co(aS))))
1009+@Callable(dU)
1010+func v_get (aU) = {
1011+ let fn = ct(aU)
1012+ let cj = fn._1
1013+ let ck = fn._2
1014+ let cl = fn._3
1015+ let fo = fn._4
1016+ throw((((ah(ck) + ah(cl)) + ah(fo)) + ah(cs(aU))))
10171017 }
10181018
10191019
10201020
1021-@Callable(dQ)
1022-func view_calcRemainMarginWithFundingPayment (aS) = {
1023- let fn = aR(aS)
1024- let aV = fn._1
1025- let bX = fn._2
1026- let cl = fn._3
1027- let bZ = fn._4
1028- let fo = bU(aS, ad)
1029- let cc = fo._1
1030- let ci = fo._2
1031- let fp = bv(aV, bX, bZ, ci)
1032- let bE = fp._1
1033- let bF = fp._2
1034- let bA = fp._3
1035- throw(((af(bE) + af(bA)) + af(co(aS))))
1021+@Callable(dU)
1022+func view_calcRemainMarginWithFundingPayment (aU) = {
1023+ let fp = aT(aU)
1024+ let aX = fp._1
1025+ let cb = fp._2
1026+ let cp = fp._3
1027+ let cd = fp._4
1028+ let fq = bY(aU, af)
1029+ let cg = fq._1
1030+ let cm = fq._2
1031+ let fr = bx(aX, cb, cd, cm)
1032+ let bG = fr._1
1033+ let bH = fr._2
1034+ let bC = fr._3
1035+ throw(((ah(bG) + ah(bC)) + ah(cs(aU))))
10361036 }
10371037
10381038
1039-@Verifier(fq)
1040-func fr () = sigVerify(fq.bodyBytes, fq.proofs[0], P())
1039+@Verifier(fs)
1040+func ft () = sigVerify(fs.bodyBytes, fs.proofs[0], Q())
10411041
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_ora_key"
55
6-let b = "k_ora"
6+let b = "k_ora_block_key"
77
8-let c = "k_balance"
8+let c = "k_ora"
99
10-let d = "k_positionSize"
10+let d = "k_balance"
1111
12-let e = "k_positionMargin"
12+let e = "k_positionSize"
1313
14-let f = "k_positionOpenNotional"
14+let f = "k_positionMargin"
1515
16-let g = "k_positionFraction"
16+let g = "k_positionOpenNotional"
1717
18-let h = "k_initialized"
18+let h = "k_positionFraction"
1919
20-let i = "k_paused"
20+let i = "k_initialized"
2121
22-let j = "k_fee"
22+let j = "k_paused"
2323
24-let k = "k_fundingPeriod"
24+let k = "k_fee"
2525
26-let l = "k_initMarginRatio"
26+let l = "k_fundingPeriod"
2727
28-let m = "k_mmr"
28+let m = "k_initMarginRatio"
2929
30-let n = "k_liquidationFeeRatio"
30+let n = "k_mmr"
3131
32-let o = "k_spreadLimit"
32+let o = "k_liquidationFeeRatio"
3333
34-let p = "k_maxPriceImpact"
34+let p = "k_spreadLimit"
3535
36-let q = "k_lastDataStr"
36+let q = "k_maxPriceImpact"
3737
38-let r = "k_lastMinuteId"
38+let r = "k_lastDataStr"
3939
40-let s = "k_twapDataLastCumulativePrice"
40+let s = "k_lastMinuteId"
4141
42-let t = "k_twapDataLastPrice"
42+let t = "k_twapDataLastCumulativePrice"
4343
44-let u = "k_latestLongPremiumFraction"
44+let u = "k_twapDataLastPrice"
4545
46-let v = "k_latestShortPremiumFraction"
46+let v = "k_latestLongPremiumFraction"
4747
48-let w = "k_nextFundingBlockMinTimestamp"
48+let w = "k_latestShortPremiumFraction"
4949
50-let x = "k_longFundingRate"
50+let x = "k_nextFundingBlockMinTimestamp"
5151
52-let y = "k_shortFundingRate"
52+let y = "k_longFundingRate"
5353
54-let z = "k_qtAstR"
54+let z = "k_shortFundingRate"
5555
56-let A = "k_bsAstR"
56+let A = "k_qtAstR"
5757
58-let B = "k_totalPositionSize"
58+let B = "k_bsAstR"
5959
60-let C = "k_totalLongPositionSize"
60+let C = "k_totalPositionSize"
6161
62-let D = "k_totalShortPositionSize"
62+let D = "k_totalLongPositionSize"
6363
64-let E = "k_cumulativeNotional"
64+let E = "k_totalShortPositionSize"
6565
66-let F = "k_openInterestNotional"
66+let F = "k_cumulativeNotional"
6767
68-let G = "k_coordinatorAddress"
68+let G = "k_openInterestNotional"
6969
70-let H = "k_insurance_address"
70+let H = "k_coordinatorAddress"
7171
72-let I = "k_admin_address"
72+let I = "k_insurance_address"
7373
74-let J = "k_admin_public_key"
74+let J = "k_admin_address"
7575
76-let K = "k_quote_asset"
76+let K = "k_admin_public_key"
7777
78-let L = "k_quote_staking"
78+let L = "k_quote_asset"
7979
80-let M = "k_staking_address"
80+let M = "k_quote_staking"
8181
82-func N () = valueOrErrorMessage(addressFromString(getStringValue(this, G)), "Coordinator not set")
82+let N = "k_staking_address"
83+
84+func O () = valueOrErrorMessage(addressFromString(getStringValue(this, H)), "Coordinator not set")
8385
8486
85-func O () = addressFromString(getStringValue(N(), I))
87+func P () = addressFromString(getStringValue(O(), J))
8688
8789
88-func P () = fromBase58String(getStringValue(N(), J))
90+func Q () = fromBase58String(getStringValue(O(), K))
8991
9092
91-func Q () = fromBase58String(getStringValue(N(), K))
93+func R () = fromBase58String(getStringValue(O(), L))
9294
9395
94-func R () = valueOrErrorMessage(addressFromString(getStringValue(N(), L)), "Quote asset staking not set")
96+func S () = valueOrErrorMessage(addressFromString(getStringValue(O(), M)), "Quote asset staking not set")
9597
9698
97-func S () = valueOrErrorMessage(addressFromString(getStringValue(N(), M)), "Insurance not set")
99+func T () = valueOrErrorMessage(addressFromString(getStringValue(O(), N)), "Insurance not set")
98100
99101
100-func T () = valueOrErrorMessage(addressFromString(getStringValue(N(), H)), "Insurance not set")
102+func U () = valueOrErrorMessage(addressFromString(getStringValue(O(), I)), "Insurance not set")
101103
102104
103-let U = 1
105+let V = 1
104106
105-let V = 2
107+let W = 2
106108
107-let W = 60
109+let X = 60
108110
109-let X = 15
111+let Y = 15
110112
111-let Y = 1000
113+let Z = 15
112114
113-let Z = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
115+let aa = 1000
114116
115-let aa = (100 * Z)
117+let ab = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
116118
117-let ab = (86400 * Z)
119+let ac = (100 * ab)
118120
119-let ac = 100
121+let ad = (86400 * ab)
120122
121-let ad = 1
123+let ae = 100
122124
123-let ae = 2
125+let af = 1
124126
125-func af (ag) = (toString(ag) + ",")
127+let ag = 2
128+
129+func ah (ai) = (toString(ai) + ",")
126130
127131
128-func ah (ag,ai) = fraction(ag, Z, ai, HALFEVEN)
132+func aj (ai,ak) = fraction(ai, ab, ak, HALFEVEN)
129133
130134
131-func aj (ag,ai) = fraction(ag, ai, Z, HALFEVEN)
135+func al (ai,ak) = fraction(ai, ak, ab, HALFEVEN)
132136
133137
134-func ak (ag) = if ((ag > 0))
135- then ag
136- else -(ag)
138+func am (ai) = if ((ai > 0))
139+ then ai
140+ else -(ai)
137141
138142
139-func al (am,an) = ((am + "_") + an)
143+func an (ao,ap) = ((ao + "_") + ap)
140144
141145
142-func ao (ap) = valueOrErrorMessage(getInteger(this, ap), ("no value for " + ap))
146+func aq (ar) = valueOrErrorMessage(getInteger(this, ar), ("no value for " + ar))
143147
144148
145-func aq () = ao(c)
149+func as () = aq(d)
146150
147151
148-func ar () = ao(j)
152+func at () = aq(k)
149153
150154
151-func as () = ao(l)
155+func au () = aq(m)
152156
153157
154-func at () = ao(z)
158+func av () = aq(A)
155159
156160
157-func au () = ao(A)
161+func aw () = aq(B)
158162
159163
160-func av () = ao(B)
164+func ax () = aq(C)
161165
162166
163-func aw () = ao(E)
167+func ay () = aq(F)
164168
165169
166-func ax () = ao(F)
170+func az () = aq(G)
167171
168172
169-func ay () = ao(w)
173+func aA () = aq(x)
170174
171175
172-func az () = ao(k)
176+func aB () = aq(l)
173177
174178
175-func aA () = (az() * Z)
179+func aC () = (aB() * ab)
176180
177181
178-func aB () = (az() * Y)
182+func aD () = (aB() * aa)
179183
180184
181-func aC () = ao(m)
185+func aE () = aq(n)
182186
183187
184-func aD () = ao(n)
188+func aF () = aq(o)
185189
186190
187-func aE () = ao(o)
191+func aG () = aq(p)
188192
189193
190-func aF () = ao(p)
194+func aH () = aq(q)
191195
192196
193-func aG () = ao(u)
197+func aI () = aq(v)
194198
195199
196-func aH () = ao(v)
200+func aJ () = aq(w)
197201
198202
199-func aI () = ao(D)
203+func aK () = aq(E)
200204
201205
202-func aJ () = ao(C)
206+func aL () = aq(D)
203207
204208
205-func aK (aL,aM,aN) = {
206- let aO = (aL - aM)
207- if (if (aN)
208- then (0 > aO)
209+func aM (aN,aO,aP) = {
210+ let aQ = (aN - aO)
211+ if (if (aP)
212+ then (0 > aQ)
209213 else false)
210214 then throw("Invalid margin")
211- else if (if (!(aN))
212- then (aO >= 0)
215+ else if (if (!(aP))
216+ then (aQ >= 0)
213217 else false)
214218 then throw("Invalid margin")
215219 else true
216220 }
217221
218222
219-func aP (aQ) = if ((aQ == 0))
223+func aR (aS) = if ((aS == 0))
220224 then throw("Should not be called with _positionSize == 0")
221- else if ((aQ > 0))
222- then aG()
223- else aH()
225+ else if ((aS > 0))
226+ then aI()
227+ else aJ()
224228
225229
226-func aR (aS) = {
227- let aT = getInteger(this, al(d, aS))
228- let aU = aT
229- if ($isInstanceOf(aU, "Int"))
230+func aT (aU) = {
231+ let aV = getInteger(this, an(e, aU))
232+ let aW = aV
233+ if ($isInstanceOf(aW, "Int"))
230234 then {
231- let aV = aU
232- $Tuple4(aV, getIntegerValue(this, al(e, aS)), getIntegerValue(this, al(f, aS)), getIntegerValue(this, al(g, aS)))
235+ let aX = aW
236+ $Tuple4(aX, getIntegerValue(this, an(f, aU)), getIntegerValue(this, an(g, aU)), getIntegerValue(this, an(h, aU)))
233237 }
234238 else $Tuple4(0, 0, 0, 0)
235239 }
236240
237241
238-func aW (aS) = if ((aR(aS)._1 == 0))
242+func aY (aU) = if ((aT(aU)._1 == 0))
239243 then throw("No open position")
240244 else true
241245
242246
243-func aX () = valueOrElse(getBoolean(this, h), false)
247+func aZ () = valueOrElse(getBoolean(this, i), false)
244248
245249
246-func aY () = valueOrElse(getBoolean(this, i), false)
250+func ba () = valueOrElse(getBoolean(this, j), false)
247251
248252
249-func aZ (ba,bb,bc) = if (ba)
253+func bb (bc,bd,be) = if (bc)
250254 then {
251- let bd = (au() - bc)
252- if ((0 >= bd))
255+ let bf = (aw() - be)
256+ if ((0 >= bf))
253257 then throw("Tx lead to base asset reserve <= 0, revert")
254- else $Tuple4((at() + bb), bd, (av() + bc), (aw() + bb))
258+ else $Tuple4((av() + bd), bf, (ax() + be), (ay() + bd))
255259 }
256260 else {
257- let be = (at() - bb)
258- if ((0 >= be))
261+ let bg = (av() - bd)
262+ if ((0 >= bg))
259263 then throw("Tx lead to base quote reserve <= 0, revert")
260- else $Tuple4(be, (au() + bc), (av() - bc), (aw() - bb))
264+ else $Tuple4(bg, (aw() + be), (ax() - be), (ay() - bd))
261265 }
262266
263267
264-func bf (ba,bb) = {
265- let bg = at()
266- let bh = au()
267- let bi = ah(bg, bh)
268- let bj = aj(bb, bi)
269- let ap = aj(bg, bh)
270- let bk = if (ba)
271- then (bg + bb)
272- else (bg - bb)
273- let bl = ah(ap, bk)
274- let bm = ak((bl - bh))
275- let bn = if (ba)
276- then bm
277- else -(bm)
278- let bo = ((bj - bm) / bj)
279- let bp = aF()
280- if ((bo > bp))
281- then throw(((("Price impact " + toString(bo)) + " > max price impact ") + toString(bp)))
268+func bh (bc,bd) = {
269+ let bi = av()
270+ let bj = aw()
271+ let bk = aj(bi, bj)
272+ let bl = al(bd, bk)
273+ let ar = al(bi, bj)
274+ let bm = if (bc)
275+ then (bi + bd)
276+ else (bi - bd)
277+ let bn = aj(ar, bm)
278+ let bo = am((bn - bj))
279+ let bp = if (bc)
280+ then bo
281+ else -(bo)
282+ let bq = ((bl - bo) / bl)
283+ let br = aH()
284+ if ((bq > br))
285+ then throw(((("Price impact " + toString(bq)) + " > max price impact ") + toString(br)))
282286 else {
283- let bq = aZ(ba, bb, bm)
284- let br = bq._1
285- let bs = bq._2
286- let bt = bq._3
287- let bu = bq._4
288- $Tuple5(bn, br, bs, bt, bu)
287+ let bs = bb(bc, bd, bo)
288+ let bt = bs._1
289+ let bu = bs._2
290+ let bv = bs._3
291+ let bw = bs._4
292+ $Tuple5(bp, bt, bu, bv, bw)
289293 }
290294 }
291295
292296
293-func bv (bw,bx,by,bz) = {
294- let bA = if ((bw != 0))
297+func bx (by,bz,bA,bB) = {
298+ let bC = if ((by != 0))
295299 then {
296- let bB = aP(bw)
297- aj((bB - by), bw)
300+ let bD = aR(by)
301+ al((bD - bA), by)
298302 }
299303 else 0
300- let bC = ((bz - bA) + bx)
301- let bD = if ((0 > bC))
302- then $Tuple2(0, ak(bC))
303- else $Tuple2(ak(bC), 0)
304- let bE = bD._1
305- let bF = bD._2
306- $Tuple3(bE, bF, bA)
304+ let bE = ((bB - bC) + bz)
305+ let bF = if ((0 > bE))
306+ then $Tuple2(0, am(bE))
307+ else $Tuple2(am(bE), 0)
308+ let bG = bF._1
309+ let bH = bF._2
310+ $Tuple3(bG, bH, bC)
307311 }
308312
309313
310-func bG (ba,bc) = {
311- let bH = at()
312- let bI = au()
313- if ((bc == 0))
314+func bI (bc,be) = {
315+ let bJ = av()
316+ let bK = aw()
317+ if ((be == 0))
314318 then throw("Invalid base asset amount")
315319 else {
316- let ap = aj(bH, bI)
317- let bJ = if (ba)
318- then (bI + bc)
319- else (bI - bc)
320- let bK = ah(ap, bJ)
321- let bL = ak((bK - bH))
322- let bM = aZ(!(ba), bL, bc)
323- let br = bM._1
324- let bs = bM._2
325- let bt = bM._3
326- let bu = bM._4
327- $Tuple7(bL, br, bs, bt, bu, (aJ() - (if (ba)
328- then ak(bc)
329- else 0)), (aI() - (if (!(ba))
330- then ak(bc)
320+ let ar = al(bJ, bK)
321+ let bL = if (bc)
322+ then (bK + be)
323+ else (bK - be)
324+ let bM = aj(ar, bL)
325+ let bN = am((bM - bJ))
326+ let bO = bb(!(bc), bN, be)
327+ let bt = bO._1
328+ let bu = bO._2
329+ let bv = bO._3
330+ let bw = bO._4
331+ $Tuple7(bN, bt, bu, bv, bw, (aL() - (if (bc)
332+ then am(be)
333+ else 0)), (aK() - (if (!(bc))
334+ then am(be)
331335 else 0)))
332336 }
333337 }
334338
335339
336-func bN () = {
337- let bO = valueOrErrorMessage(addressFromString(getStringValue(this, b)), "")
338- let bP = getStringValue(this, a)
339- getIntegerValue(bO, bP)
340+func bP () = {
341+ let bQ = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
342+ let bR = getStringValue(this, a)
343+ let bS = getStringValue(this, b)
344+ let bT = getIntegerValue(bQ, bR)
345+ bT
340346 }
341347
342348
343-func bQ () = {
344- let bH = at()
345- let bI = au()
346- ah(bH, bI)
349+func bU () = {
350+ let bJ = av()
351+ let bK = aw()
352+ aj(bJ, bK)
347353 }
348354
349355
350-func bR () = {
351- let bS = bN()
352- let bT = bQ()
353- (ah(ak((bS - bT)), bS) > aE())
356+func bV () = {
357+ let bW = bP()
358+ let bX = bU()
359+ (aj(am((bW - bX)), bW) > aG())
354360 }
355361
356362
357-func bU (aS,bV) = {
358- let bW = aR(aS)
359- let aV = bW._1
360- let bX = bW._2
361- let bY = bW._3
362- let bZ = bW._4
363- let ca = ak(aV)
364- if ((ca == 0))
363+func bY (aU,bZ) = {
364+ let ca = aT(aU)
365+ let aX = ca._1
366+ let cb = ca._2
367+ let cc = ca._3
368+ let cd = ca._4
369+ let ce = am(aX)
370+ if ((ce == 0))
365371 then throw("Invalid position size")
366372 else {
367- let cb = (0 > aV)
368- let cc = if ((bV == ad))
373+ let cf = (0 > aX)
374+ let cg = if ((bZ == af))
369375 then {
370- let cd = bG(!(cb), ca)
371- let ce = cd._1
372- let cf = cd._2
373- let cg = cd._3
374- let ch = cd._4
375- ce
376+ let ch = bI(!(cf), ce)
377+ let ci = ch._1
378+ let cj = ch._2
379+ let ck = ch._3
380+ let cl = ch._4
381+ ci
376382 }
377- else (ca * bN())
378- let ci = if (cb)
379- then (bY - cc)
380- else (cc - bY)
381- $Tuple2(cc, ci)
383+ else (ce * bP())
384+ let cm = if (cf)
385+ then (cc - cg)
386+ else (cg - cc)
387+ $Tuple2(cg, cm)
382388 }
383389 }
384390
385391
386-func cj (aS,bV) = {
387- let ck = aR(aS)
388- let aV = ck._1
389- let bX = ck._2
390- let cl = ck._3
391- let bZ = ck._4
392- let cm = bU(aS, bV)
393- let cc = cm._1
394- let ci = cm._2
395- let cn = bv(aV, bX, bZ, ci)
396- let bE = cn._1
397- let bF = cn._2
398- ah((bE - bF), cc)
392+func cn (aU,bZ) = {
393+ let co = aT(aU)
394+ let aX = co._1
395+ let cb = co._2
396+ let cp = co._3
397+ let cd = co._4
398+ let cq = bY(aU, bZ)
399+ let cg = cq._1
400+ let cm = cq._2
401+ let cr = bx(aX, cb, cd, cm)
402+ let bG = cr._1
403+ let bH = cr._2
404+ aj((bG - bH), cg)
399405 }
400406
401407
402-func co (aS) = cj(aS, ad)
408+func cs (aU) = cn(aU, af)
403409
404410
405-func cp (aS) = {
406- let cq = aR(aS)
407- let aV = cq._1
408- let bX = cq._2
409- let cl = cq._3
410- let bZ = cq._4
411- let cr = bU(aS, ad)
412- let cf = cr._1
413- let ci = cr._2
414- let cs = bv(aV, bX, bZ, ci)
415- let bE = cs._1
416- let bF = cs._2
417- let ct = -(aV)
418- let cu = ci
419- let cv = -(bE)
420- let cw = bG((aV > 0), ak(aV))
421- let cx = cw._1
422- let bk = cw._2
423- let bl = cw._3
424- let cy = cw._4
425- let cz = cw._5
426- let cA = cw._6
427- let cB = cw._7
428- let cC = (ax() - cl)
429- $Tuple12(ct, bF, cu, cv, bk, bl, cy, cz, cC, cx, cA, cB)
411+func ct (aU) = {
412+ let cu = aT(aU)
413+ let aX = cu._1
414+ let cb = cu._2
415+ let cp = cu._3
416+ let cd = cu._4
417+ let cv = bY(aU, af)
418+ let cj = cv._1
419+ let cm = cv._2
420+ let cw = bx(aX, cb, cd, cm)
421+ let bG = cw._1
422+ let bH = cw._2
423+ let cx = -(aX)
424+ let cy = cm
425+ let cz = -(bG)
426+ let cA = bI((aX > 0), am(aX))
427+ let cB = cA._1
428+ let bm = cA._2
429+ let bn = cA._3
430+ let cC = cA._4
431+ let cD = cA._5
432+ let cE = cA._6
433+ let cF = cA._7
434+ let cG = (az() - cp)
435+ $Tuple12(cx, bH, cy, cz, bm, bn, cC, cD, cG, cB, cE, cF)
430436 }
431437
432438
433-func cD () = {
434- let cE = ((lastBlock.timestamp / 1000) / 60)
435- let cF = (cE - X)
436- let cG = valueOrElse(getString(this, q), "")
437- let cH = split(cG, ",")
438- func cI (cJ,cK) = if ((cF >= parseIntValue(cK)))
439- then (cJ :+ parseIntValue(cK))
440- else cJ
439+func cH () = {
440+ let cI = ((lastBlock.timestamp / 1000) / 60)
441+ let cJ = (cI - Y)
442+ let cK = valueOrElse(getString(this, r), "")
443+ let cL = split(cK, ",")
444+ func cM (cN,cO) = if ((cJ >= parseIntValue(cO)))
445+ then (cN :+ parseIntValue(cO))
446+ else cN
441447
442- let cL = {
443- let cM = cH
444- let cN = size(cM)
445- let cO = nil
446- func cP (cQ,cR) = if ((cR >= cN))
447- then cQ
448- else cI(cQ, cM[cR])
448+ let cP = {
449+ let cQ = cL
450+ let cR = size(cQ)
451+ let cS = nil
452+ func cT (cU,cV) = if ((cV >= cR))
453+ then cU
454+ else cM(cU, cQ[cV])
449455
450- func cS (cQ,cR) = if ((cR >= cN))
451- then cQ
456+ func cW (cU,cV) = if ((cV >= cR))
457+ then cU
452458 else throw("List size exceeds 20")
453459
454- cS(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
460+ cW(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
455461 }
456- let cT = if ((size(cL) > 0))
457- then max(cL)
458- else parseIntValue(cH[0])
459- let cU = valueOrElse(getInteger(this, r), 0)
460- let cV = valueOrElse(getInteger(this, ((s + "_") + toString(cU))), 0)
461- let cW = valueOrElse(getInteger(this, ((t + "_") + toString(cU))), 0)
462- let cX = (cV + ((cE - cU) * cW))
463- let cY = valueOrElse(getInteger(this, ((s + "_") + toString(cT))), 0)
464- let cZ = valueOrElse(getInteger(this, ((t + "_") + toString(cT))), 0)
465- let da = (cY + ((cF - cT) * cZ))
466- ((cX - da) / X)
462+ let cX = if ((size(cP) > 0))
463+ then max(cP)
464+ else parseIntValue(cL[0])
465+ let cY = valueOrElse(getInteger(this, s), 0)
466+ let cZ = valueOrElse(getInteger(this, ((t + "_") + toString(cY))), 0)
467+ let da = valueOrElse(getInteger(this, ((u + "_") + toString(cY))), 0)
468+ let db = (cZ + ((cI - cY) * da))
469+ let dc = valueOrElse(getInteger(this, ((t + "_") + toString(cX))), 0)
470+ let dd = valueOrElse(getInteger(this, ((u + "_") + toString(cX))), 0)
471+ let de = (dc + ((cJ - cX) * dd))
472+ ((db - de) / Y)
467473 }
468474
469475
470-func db (dc,dd,de,df,dg,dh,di) = [IntegerEntry(l, dc), IntegerEntry(m, dd), IntegerEntry(n, de), IntegerEntry(k, df), IntegerEntry(j, dg), IntegerEntry(o, dh), IntegerEntry(p, di)]
476+func df (dg,dh,di,dj,dk,dl,dm) = [IntegerEntry(m, dg), IntegerEntry(n, dh), IntegerEntry(o, di), IntegerEntry(l, dj), IntegerEntry(k, dk), IntegerEntry(p, dl), IntegerEntry(q, dm)]
471477
472478
473-func dj (dk,dl,dm,dn,do) = [IntegerEntry(w, dk), IntegerEntry(u, dl), IntegerEntry(v, dm), IntegerEntry(x, dn), IntegerEntry(y, do)]
479+func dn (do,dp,dq,dr,ds) = [IntegerEntry(x, do), IntegerEntry(v, dp), IntegerEntry(w, dq), IntegerEntry(y, dr), IntegerEntry(z, ds)]
474480
475481
476-func dp (an,dq,dr,ds,bB) = [IntegerEntry(al(d, an), dq), IntegerEntry(al(e, an), dr), IntegerEntry(al(f, an), ds), IntegerEntry(al(g, an), bB)]
482+func dt (ap,du,dv,dw,bD) = [IntegerEntry(an(e, ap), du), IntegerEntry(an(f, ap), dv), IntegerEntry(an(g, ap), dw), IntegerEntry(an(h, ap), bD)]
477483
478484
479-func dt (du) = {
480- let cE = ((lastBlock.timestamp / 1000) / 60)
481- let dv = valueOrElse(getInteger(this, r), 0)
482- if ((dv > cE))
485+func dx (dy) = {
486+ let cI = ((lastBlock.timestamp / 1000) / 60)
487+ let dz = valueOrElse(getInteger(this, s), 0)
488+ if ((dz > cI))
483489 then throw("TWAP out-of-order")
484490 else {
485- let cU = if ((dv == 0))
486- then cE
487- else dv
488- let cG = valueOrElse(getString(this, q), "")
489- let dw = split(cG, ",")
490- let cH = if ((size(dw) > X))
491- then (removeByIndex(dw, 0) :+ toString(cE))
492- else (dw :+ toString(cE))
493- let dx = valueOrElse(getInteger(this, ((s + "_") + toString(dv))), 0)
494- let dy = valueOrElse(getInteger(this, ((t + "_") + toString(dv))), du)
495- let dz = (dx + ((cE - cU) * dy))
496- func dA (cJ,dB) = ((cJ + dB) + ",")
491+ let cY = if ((dz == 0))
492+ then cI
493+ else dz
494+ let cK = valueOrElse(getString(this, r), "")
495+ let dA = split(cK, ",")
496+ let cL = if ((size(dA) > Y))
497+ then (removeByIndex(dA, 0) :+ toString(cI))
498+ else (dA :+ toString(cI))
499+ let dB = valueOrElse(getInteger(this, ((t + "_") + toString(dz))), 0)
500+ let dC = valueOrElse(getInteger(this, ((u + "_") + toString(dz))), dy)
501+ let dD = (dB + ((cI - cY) * dC))
502+ func dE (cN,dF) = ((cN + dF) + ",")
497503
498- let dC = {
499- let cM = cH
500- let cN = size(cM)
501- let cO = ""
502- func cP (cQ,cR) = if ((cR >= cN))
503- then cQ
504- else dA(cQ, cM[cR])
504+ let dG = {
505+ let cQ = cL
506+ let cR = size(cQ)
507+ let cS = ""
508+ func cT (cU,cV) = if ((cV >= cR))
509+ then cU
510+ else dE(cU, cQ[cV])
505511
506- func cS (cQ,cR) = if ((cR >= cN))
507- then cQ
512+ func cW (cU,cV) = if ((cV >= cR))
513+ then cU
508514 else throw("List size exceeds 20")
509515
510- cS(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
516+ cW(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
511517 }
512- let dD = dropRight(dC, 1)
513- let dE = if ((take(dD, 1) == ","))
514- then drop(dD, 1)
515- else dD
516-[IntegerEntry(((s + "_") + toString(cE)), dz), IntegerEntry(((t + "_") + toString(cE)), du), IntegerEntry(r, cE), StringEntry(q, dE)]
518+ let dH = dropRight(dG, 1)
519+ let dI = if ((take(dH, 1) == ","))
520+ then drop(dH, 1)
521+ else dH
522+[IntegerEntry(((t + "_") + toString(cI)), dD), IntegerEntry(((u + "_") + toString(cI)), dy), IntegerEntry(s, cI), StringEntry(r, dI)]
517523 }
518524 }
519525
520526
521-func dF (bg,bh,dG,dH,dI,dJ,dK) = if (((dJ - dK) != dG))
522- then throw(((((("Invalid AMM state data: " + toString(dJ)) + " + ") + toString(dK)) + " != ") + toString(dG)))
523- else ([IntegerEntry(z, bg), IntegerEntry(A, bh), IntegerEntry(B, dG), IntegerEntry(E, dH), IntegerEntry(F, dI), IntegerEntry(C, dJ), IntegerEntry(D, dK)] ++ dt(ah(bg, bh)))
527+func dJ (bi,bj,dK,dL,dM,dN,dO) = if (((dN - dO) != dK))
528+ then throw(((((("Invalid AMM state data: " + toString(dN)) + " + ") + toString(dO)) + " != ") + toString(dK)))
529+ else ([IntegerEntry(A, bi), IntegerEntry(B, bj), IntegerEntry(C, dK), IntegerEntry(F, dL), IntegerEntry(G, dM), IntegerEntry(D, dN), IntegerEntry(E, dO)] ++ dx(aj(bi, bj)))
524530
525531
526-func dL (an) = [DeleteEntry(al(d, an)), DeleteEntry(al(e, an)), DeleteEntry(al(f, an)), DeleteEntry(al(g, an))]
532+func dP (ap) = [DeleteEntry(an(e, ap)), DeleteEntry(an(f, ap)), DeleteEntry(an(g, ap)), DeleteEntry(an(h, ap))]
527533
528534
529-func dM (an,dN) = {
530- let dO = assetBalance(this, Q())
531- if ((dN > dO))
532- then throw(((("Unable to withdraw " + toString(dN)) + " from contract balance ") + toString(dO)))
533- else [ScriptTransfer(an, dN, Q())]
535+func dQ (ap,dR) = {
536+ let dS = assetBalance(this, R())
537+ if ((dR > dS))
538+ then throw(((("Unable to withdraw " + toString(dR)) + " from contract balance ") + toString(dS)))
539+ else [ScriptTransfer(ap, dR, R())]
534540 }
535541
536542
537-func dP (dQ) = if ((0 > dQ))
543+func dT (dU) = if ((0 > dU))
538544 then throw("Balance")
539- else [IntegerEntry(c, dQ)]
545+ else [IntegerEntry(d, dU)]
540546
541547
542-func dR (dQ) = [ScriptTransfer(S(), dQ, Q())]
548+func dV (dU) = [ScriptTransfer(T(), dU, R())]
543549
544550
545-@Callable(dQ)
546-func pause () = if ((dQ.caller != O()))
551+@Callable(dU)
552+func pause () = if ((dU.caller != P()))
547553 then throw("Invalid togglePause params")
548- else [BooleanEntry(i, true)]
554+ else [BooleanEntry(j, true)]
549555
550556
551557
552-@Callable(dQ)
553-func unpause () = if ((dQ.caller != O()))
558+@Callable(dU)
559+func unpause () = if ((dU.caller != P()))
554560 then throw("Invalid togglePause params")
555- else [BooleanEntry(i, false)]
561+ else [BooleanEntry(j, false)]
556562
557563
558564
559-@Callable(dQ)
560-func changeSettings (dc,dd,de,df,dg,dh,di) = if ((dQ.caller != O()))
565+@Callable(dU)
566+func changeSettings (dg,dh,di,dj,dk,dl,dm) = if ((dU.caller != P()))
561567 then throw("Invalid changeSettings params")
562- else db(dc, dd, de, df, dg, dh, di)
568+ else df(dg, dh, di, dj, dk, dl, dm)
563569
564570
565571
566-@Callable(dQ)
567-func initialize (bg,bh,df,dc,dd,de,dg,dS,dT,dU,dh,di) = if (if (if (if (if (if (if (if (if (if ((0 >= bg))
572+@Callable(dU)
573+func initialize (bi,bj,dj,dg,dh,di,dk,dW,dX,dY,dl,dm) = if (if (if (if (if (if (if (if (if (if ((0 >= bi))
568574 then true
569- else (0 >= bh))
575+ else (0 >= bj))
570576 then true
571- else (0 >= df))
572- then true
573- else (0 >= dc))
574- then true
575- else (0 >= dd))
576- then true
577- else (0 >= de))
577+ else (0 >= dj))
578578 then true
579579 else (0 >= dg))
580580 then true
581581 else (0 >= dh))
582582 then true
583583 else (0 >= di))
584584 then true
585- else aX())
585+ else (0 >= dk))
586+ then true
587+ else (0 >= dl))
588+ then true
589+ else (0 >= dm))
590+ then true
591+ else aZ())
586592 then throw("Invalid initialize parameters")
587- else ((((dF(bg, bh, 0, 0, 0, 0, 0) ++ db(dc, dd, de, df, dg, dh, di)) ++ dj((lastBlock.timestamp + df), 0, 0, 0, 0)) ++ dP(0)) ++ [BooleanEntry(h, true), StringEntry(b, dS), StringEntry(a, dT), StringEntry(G, dU)])
593+ else ((((dJ(bi, bj, 0, 0, 0, 0, 0) ++ df(dg, dh, di, dj, dk, dl, dm)) ++ dn((lastBlock.timestamp + dj), 0, 0, 0, 0)) ++ dT(0)) ++ [BooleanEntry(i, true), StringEntry(c, dW), StringEntry(a, dX), StringEntry(H, dY)])
588594
589595
590596
591-@Callable(dQ)
592-func decreasePosition (dV,dN,dW,dX) = if (if (if (if (if (if (if (if ((dV != U))
593- then (dV != V)
597+@Callable(dU)
598+func decreasePosition (dZ,dR,ea,eb) = if (if (if (if (if (if (if (if ((dZ != V))
599+ then (dZ != W)
594600 else false)
595601 then true
596- else (0 >= dN))
602+ else (0 >= dR))
597603 then true
598- else if (((1 * Z) > dW))
604+ else if (((1 * ab) > ea))
599605 then true
600- else (dW > (3 * Z)))
606+ else (ea > (3 * ab)))
601607 then true
602- else !(aX()))
608+ else !(aZ()))
603609 then true
604- else !(aK(ah(Z, dW), as(), true)))
610+ else !(aM(aj(ab, ea), au(), true)))
605611 then true
606- else !(aW(toString(dQ.caller))))
612+ else !(aY(toString(dU.caller))))
607613 then true
608- else aY())
614+ else ba())
609615 then throw("Invalid decreasePosition parameters")
610616 else {
611- let dY = aR(toString(dQ.caller))
612- let dZ = dY._1
613- let ea = dY._2
614- let eb = dY._3
615- let ec = dY._4
616- let ed = (dZ == 0)
617- let ee = if ((dZ > 0))
618- then (dV == U)
619- else (dV == V)
620- let ef = if (!(ed))
621- then ee
617+ let ec = aT(toString(dU.caller))
618+ let ed = ec._1
619+ let ee = ec._2
620+ let ef = ec._3
621+ let eg = ec._4
622+ let eh = (ed == 0)
623+ let ei = if ((ed > 0))
624+ then (dZ == V)
625+ else (dZ == W)
626+ let ej = if (!(eh))
627+ then ei
622628 else false
623- let eg = (dV == U)
624- let eh = if (if (ed)
629+ let ek = (dZ == V)
630+ let el = if (if (eh)
625631 then true
626- else ef)
632+ else ej)
627633 then throw("Use increasePosition to open new or increase position")
628634 else {
629- let ei = aj(dN, dW)
630- let ej = bU(toString(dQ.caller), ad)
631- let ek = ej._1
632- let ci = ej._2
633- if ((ek > ei))
635+ let em = al(dR, ea)
636+ let en = bY(toString(dU.caller), af)
637+ let eo = en._1
638+ let cm = en._2
639+ if ((eo > em))
634640 then {
635- let el = bf(eg, ei)
636- let ct = el._1
637- let bk = el._2
638- let bl = el._3
639- let cy = el._4
640- let cz = el._5
641- let em = ak(ct)
642- if (if ((dX != 0))
643- then (dX > em)
641+ let ep = bh(ek, em)
642+ let cx = ep._1
643+ let bm = ep._2
644+ let bn = ep._3
645+ let cC = ep._4
646+ let cD = ep._5
647+ let eq = am(cx)
648+ if (if ((eb != 0))
649+ then (eb > eq)
644650 else false)
645- then throw(((("Too little base asset exchanged, got " + toString(em)) + " expected ") + toString(dX)))
651+ then throw(((("Too little base asset exchanged, got " + toString(eq)) + " expected ") + toString(eb)))
646652 else {
647- let cu = if ((dZ != 0))
648- then ah(aj(ci, em), dZ)
653+ let cy = if ((ed != 0))
654+ then aj(al(cm, eq), ed)
649655 else 0
650- let en = bv(dZ, ea, ec, cu)
651- let bE = en._1
652- let bF = en._2
653- let bA = en._3
654- let cx = ei
655- let eo = (ci - cu)
656- let ep = if ((dZ > 0))
657- then ((ek - cx) - eo)
658- else ((eo + ek) - cx)
659- let eq = (dZ + ct)
660- $Tuple11(eq, bE, ak(ep), aP(eq), bl, bk, cy, cz, (ax() - ei), (aJ() - (if ((eq > 0))
661- then ak(ct)
662- else 0)), (aI() - (if ((0 > eq))
663- then ak(ct)
656+ let er = bx(ed, ee, eg, cy)
657+ let bG = er._1
658+ let bH = er._2
659+ let bC = er._3
660+ let cB = em
661+ let es = (cm - cy)
662+ let et = if ((ed > 0))
663+ then ((eo - cB) - es)
664+ else ((es + eo) - cB)
665+ let eu = (ed + cx)
666+ $Tuple11(eu, bG, am(et), aR(eu), bn, bm, cC, cD, (az() - em), (aL() - (if ((eu > 0))
667+ then am(cx)
668+ else 0)), (aK() - (if ((0 > eu))
669+ then am(cx)
664670 else 0)))
665671 }
666672 }
667673 else throw("Close position first")
668674 }
669- let eq = eh._1
670- let er = eh._2
671- let es = eh._3
672- let et = eh._4
673- let bl = eh._5
674- let bk = eh._6
675- let cy = eh._7
676- let cz = eh._8
677- let cC = eh._9
678- let cA = eh._10
679- let cB = eh._11
680- (dp(toString(dQ.caller), eq, er, es, et) ++ dF(bk, bl, cy, cz, cC, cA, cB))
675+ let eu = el._1
676+ let ev = el._2
677+ let ew = el._3
678+ let ex = el._4
679+ let bn = el._5
680+ let bm = el._6
681+ let cC = el._7
682+ let cD = el._8
683+ let cG = el._9
684+ let cE = el._10
685+ let cF = el._11
686+ (dt(toString(dU.caller), eu, ev, ew, ex) ++ dJ(bm, bn, cC, cD, cG, cE, cF))
681687 }
682688
683689
684690
685-@Callable(dQ)
686-func increasePosition (dV,dW,dX) = {
687- let eu = dQ.payments[0].amount
688- if (if (if (if (if (if (if (if ((dV != U))
689- then (dV != V)
691+@Callable(dU)
692+func increasePosition (dZ,ea,eb) = {
693+ let ey = dU.payments[0].amount
694+ if (if (if (if (if (if (if (if ((dZ != V))
695+ then (dZ != W)
690696 else false)
691697 then true
692- else (0 >= eu))
698+ else (0 >= ey))
693699 then true
694- else if (((1 * Z) > dW))
700+ else if (((1 * ab) > ea))
695701 then true
696- else (dW > (3 * Z)))
702+ else (ea > (3 * ab)))
697703 then true
698- else !(aX()))
704+ else !(aZ()))
699705 then true
700- else (dQ.payments[0].assetId != Q()))
706+ else (dU.payments[0].assetId != R()))
701707 then true
702- else !(aK(ah(Z, dW), as(), true)))
708+ else !(aM(aj(ab, ea), au(), true)))
703709 then true
704- else aY())
710+ else ba())
705711 then throw("Invalid increasePosition parameters")
706712 else {
707- let ev = aj(eu, ar())
708- let dN = (eu - ev)
709- let ew = aR(toString(dQ.caller))
710- let dZ = ew._1
711- let ea = ew._2
712- let eb = ew._3
713- let ed = (dZ == 0)
714- let ee = if ((dZ > 0))
715- then (dV == U)
716- else (dV == V)
717- let ef = if (!(ed))
718- then ee
713+ let ez = al(ey, at())
714+ let dR = (ey - ez)
715+ let eA = aT(toString(dU.caller))
716+ let ed = eA._1
717+ let ee = eA._2
718+ let ef = eA._3
719+ let eh = (ed == 0)
720+ let ei = if ((ed > 0))
721+ then (dZ == V)
722+ else (dZ == W)
723+ let ej = if (!(eh))
724+ then ei
719725 else false
720- let eg = (dV == U)
721- let ex = if (if (ed)
726+ let ek = (dZ == V)
727+ let eB = if (if (eh)
722728 then true
723- else ef)
729+ else ej)
724730 then {
725- let ei = aj(dN, dW)
726- let ey = bf(eg, ei)
727- let bn = ey._1
728- let bk = ey._2
729- let bl = ey._3
730- let cy = ey._4
731- let cz = ey._5
732- if (if ((dX != 0))
733- then (dX > ak(bn))
731+ let em = al(dR, ea)
732+ let eC = bh(ek, em)
733+ let bp = eC._1
734+ let bm = eC._2
735+ let bn = eC._3
736+ let cC = eC._4
737+ let cD = eC._5
738+ if (if ((eb != 0))
739+ then (eb > am(bp))
734740 else false)
735- then throw(((("Limit error: " + toString(ak(bn))) + " < ") + toString(dX)))
741+ then throw(((("Limit error: " + toString(am(bp))) + " < ") + toString(eb)))
736742 else {
737- let eq = (dZ + bn)
738- let bZ = aP(eq)
739- let ez = ah(ei, dW)
740- let eA = bv(dZ, ea, bZ, ez)
741- let bE = eA._1
742- let cf = eA._2
743- let cg = eA._3
744- $Tuple11(eq, bE, (eb + ei), aP(eq), bl, bk, cy, cz, (ax() + ei), (aJ() + (if ((eq > 0))
745- then ak(bn)
746- else 0)), (aI() + (if ((0 > eq))
747- then ak(bn)
743+ let eu = (ed + bp)
744+ let cd = aR(eu)
745+ let eD = aj(em, ea)
746+ let eE = bx(ed, ee, cd, eD)
747+ let bG = eE._1
748+ let cj = eE._2
749+ let ck = eE._3
750+ $Tuple11(eu, bG, (ef + em), aR(eu), bn, bm, cC, cD, (az() + em), (aL() + (if ((eu > 0))
751+ then am(bp)
752+ else 0)), (aK() + (if ((0 > eu))
753+ then am(bp)
748754 else 0)))
749755 }
750756 }
751757 else {
752- let ei = aj(dN, dW)
753- let eB = bU(toString(dQ.caller), ad)
754- let ek = eB._1
755- let ci = eB._2
756- if ((ek > ei))
758+ let em = al(dR, ea)
759+ let eF = bY(toString(dU.caller), af)
760+ let eo = eF._1
761+ let cm = eF._2
762+ if ((eo > em))
757763 then throw("Use decreasePosition to decrease position size")
758764 else throw("Close position first")
759765 }
760- let eq = ex._1
761- let er = ex._2
762- let es = ex._3
763- let et = ex._4
764- let bl = ex._5
765- let bk = ex._6
766- let cy = ex._7
767- let cz = ex._8
768- let cC = ex._9
769- let cA = ex._10
770- let cB = ex._11
771- let eC = (ev / 2)
772- let eD = (ev - eC)
773- let eE = invoke(R(), "lockNeutrinoSP", [toString(S()), ac], [AttachedPayment(Q(), dN)])
774- if ((eE == eE))
766+ let eu = eB._1
767+ let ev = eB._2
768+ let ew = eB._3
769+ let ex = eB._4
770+ let bn = eB._5
771+ let bm = eB._6
772+ let cC = eB._7
773+ let cD = eB._8
774+ let cG = eB._9
775+ let cE = eB._10
776+ let cF = eB._11
777+ let eG = (ez / 2)
778+ let eH = (ez - eG)
779+ let eI = invoke(S(), "lockNeutrinoSP", [toString(T()), ae], [AttachedPayment(R(), dR)])
780+ if ((eI == eI))
775781 then {
776- let eF = invoke(T(), "deposit", nil, [AttachedPayment(Q(), eD)])
777- if ((eF == eF))
778- then (((dp(toString(dQ.caller), eq, er, es, et) ++ dF(bk, bl, cy, cz, cC, cA, cB)) ++ dR(eC)) ++ dP((aq() + dN)))
782+ let eJ = invoke(U(), "deposit", nil, [AttachedPayment(R(), eH)])
783+ if ((eJ == eJ))
784+ then (((dt(toString(dU.caller), eu, ev, ew, ex) ++ dJ(bm, bn, cC, cD, cG, cE, cF)) ++ dV(eG)) ++ dT((as() + dR)))
779785 else throw("Strict value is not equal to itself.")
780786 }
781787 else throw("Strict value is not equal to itself.")
782788 }
783789 }
784790
785791
786792
787-@Callable(dQ)
793+@Callable(dU)
788794 func addMargin () = {
789- let eu = dQ.payments[0].amount
790- if (if (if (if ((dQ.payments[0].assetId != Q()))
795+ let ey = dU.payments[0].amount
796+ if (if (if (if ((dU.payments[0].assetId != R()))
791797 then true
792- else !(aW(toString(dQ.caller))))
798+ else !(aY(toString(dU.caller))))
793799 then true
794- else !(aX()))
800+ else !(aZ()))
795801 then true
796- else aY())
802+ else ba())
797803 then throw("Invalid addMargin parameters")
798804 else {
799- let ev = aj(eu, ar())
800- let dN = (eu - ev)
801- let eG = aR(toString(dQ.caller))
802- let dZ = eG._1
803- let ea = eG._2
804- let eb = eG._3
805- let ec = eG._4
806- let eC = (ev / 2)
807- let eD = (ev - eC)
808- let eE = invoke(R(), "lockNeutrinoSP", [toString(S()), ac], [AttachedPayment(Q(), dN)])
809- if ((eE == eE))
805+ let ez = al(ey, at())
806+ let dR = (ey - ez)
807+ let eK = aT(toString(dU.caller))
808+ let ed = eK._1
809+ let ee = eK._2
810+ let ef = eK._3
811+ let eg = eK._4
812+ let eG = (ez / 2)
813+ let eH = (ez - eG)
814+ let eI = invoke(S(), "lockNeutrinoSP", [toString(T()), ae], [AttachedPayment(R(), dR)])
815+ if ((eI == eI))
810816 then {
811- let eF = invoke(T(), "deposit", nil, [AttachedPayment(Q(), eD)])
812- if ((eF == eF))
813- then ((dp(toString(dQ.caller), dZ, (ea + dN), eb, ec) ++ dR(eC)) ++ dP((aq() + dN)))
817+ let eJ = invoke(U(), "deposit", nil, [AttachedPayment(R(), eH)])
818+ if ((eJ == eJ))
819+ then ((dt(toString(dU.caller), ed, (ee + dR), ef, eg) ++ dV(eG)) ++ dT((as() + dR)))
814820 else throw("Strict value is not equal to itself.")
815821 }
816822 else throw("Strict value is not equal to itself.")
817823 }
818824 }
819825
820826
821827
822-@Callable(dQ)
823-func removeMargin (dN) = if (if (if (if ((0 >= dN))
828+@Callable(dU)
829+func removeMargin (dR) = if (if (if (if ((0 >= dR))
824830 then true
825- else !(aW(toString(dQ.caller))))
831+ else !(aY(toString(dU.caller))))
826832 then true
827- else !(aX()))
833+ else !(aZ()))
828834 then true
829- else aY())
835+ else ba())
830836 then throw("Invalid removeMargin parameters")
831837 else {
832- let eH = aR(toString(dQ.caller))
833- let dZ = eH._1
834- let ea = eH._2
835- let eb = eH._3
836- let ec = eH._4
837- let eI = -(dN)
838- let eJ = bv(dZ, ea, ec, eI)
839- let bE = eJ._1
840- let bF = eJ._2
841- if ((bF != 0))
838+ let eL = aT(toString(dU.caller))
839+ let ed = eL._1
840+ let ee = eL._2
841+ let ef = eL._3
842+ let eg = eL._4
843+ let eM = -(dR)
844+ let eN = bx(ed, ee, eg, eM)
845+ let bG = eN._1
846+ let bH = eN._2
847+ if ((bH != 0))
842848 then throw("Invalid added margin amount")
843849 else {
844- let eK = invoke(R(), "unlockNeutrino", [dN, toBase58String(Q())], nil)
845- if ((eK == eK))
846- then ((dp(toString(dQ.caller), dZ, bE, eb, aP(dZ)) ++ dM(dQ.caller, dN)) ++ dP((aq() - dN)))
850+ let eO = invoke(S(), "unlockNeutrino", [dR, toBase58String(R())], nil)
851+ if ((eO == eO))
852+ then ((dt(toString(dU.caller), ed, bG, ef, aR(ed)) ++ dQ(dU.caller, dR)) ++ dT((as() - dR)))
847853 else throw("Strict value is not equal to itself.")
848854 }
849855 }
850856
851857
852858
853-@Callable(dQ)
854-func closePosition () = if (if (if (!(aW(toString(dQ.caller))))
859+@Callable(dU)
860+func closePosition () = if (if (if (!(aY(toString(dU.caller))))
855861 then true
856- else !(aX()))
862+ else !(aZ()))
857863 then true
858- else aY())
864+ else ba())
859865 then throw("Invalid closePosition parameters")
860866 else {
861- let eL = cp(toString(dQ.caller))
862- let cf = eL._1
863- let eM = eL._2
864- let cu = eL._3
865- let cv = eL._4
866- let bk = eL._5
867- let bl = eL._6
868- let cy = eL._7
869- let cz = eL._8
870- let cC = eL._9
871- let cg = eL._10
872- let cA = eL._11
873- let cB = eL._12
874- if ((eM > 0))
867+ let eP = ct(toString(dU.caller))
868+ let cj = eP._1
869+ let eQ = eP._2
870+ let cy = eP._3
871+ let cz = eP._4
872+ let bm = eP._5
873+ let bn = eP._6
874+ let cC = eP._7
875+ let cD = eP._8
876+ let cG = eP._9
877+ let ck = eP._10
878+ let cE = eP._11
879+ let cF = eP._12
880+ if ((eQ > 0))
875881 then throw("Unable to close position with bad debt")
876882 else {
877- let eN = ak(cv)
878- let eO = (aq() - eN)
879- let eP = if ((0 > eO))
880- then $Tuple2(0, ak(eO))
881- else $Tuple2(eO, 0)
882- let eQ = eP._1
883- let eR = eP._2
884- let eS = if ((eR > 0))
883+ let eR = am(cz)
884+ let eS = (as() - eR)
885+ let eT = if ((0 > eS))
886+ then $Tuple2(0, am(eS))
887+ else $Tuple2(eS, 0)
888+ let eU = eT._1
889+ let eV = eT._2
890+ let eW = if ((eV > 0))
885891 then {
886- let eT = invoke(T(), "withdraw", [eR], nil)
887- if ((eT == eT))
892+ let eX = invoke(U(), "withdraw", [eV], nil)
893+ if ((eX == eX))
888894 then nil
889895 else throw("Strict value is not equal to itself.")
890896 }
891897 else nil
892- if ((eS == eS))
898+ if ((eW == eW))
893899 then {
894- let eK = invoke(R(), "unlockNeutrino", [(eN - eR), toBase58String(Q())], nil)
895- if ((eK == eK))
896- then (((dL(toString(dQ.caller)) ++ dF(bk, bl, cy, cz, cC, cA, cB)) ++ dM(dQ.caller, eN)) ++ dP(eQ))
900+ let eO = invoke(S(), "unlockNeutrino", [(eR - eV), toBase58String(R())], nil)
901+ if ((eO == eO))
902+ then (((dP(toString(dU.caller)) ++ dJ(bm, bn, cC, cD, cG, cE, cF)) ++ dQ(dU.caller, eR)) ++ dT(eU))
897903 else throw("Strict value is not equal to itself.")
898904 }
899905 else throw("Strict value is not equal to itself.")
900906 }
901907 }
902908
903909
904910
905-@Callable(dQ)
906-func liquidate (aS) = {
907- let eU = if (bR())
908- then cj(aS, ae)
909- else cj(aS, ad)
910- if (if (if (if (!(aK(eU, aC(), false)))
911+@Callable(dU)
912+func liquidate (aU) = {
913+ let eY = if (bV())
914+ then cn(aU, ag)
915+ else cn(aU, af)
916+ if (if (if (if (!(aM(eY, aE(), false)))
911917 then true
912- else !(aW(aS)))
918+ else !(aY(aU)))
913919 then true
914- else !(aX()))
920+ else !(aZ()))
915921 then true
916- else aY())
922+ else ba())
917923 then throw("Unable to liquidate")
918924 else {
919- let eV = cp(aS)
920- let cf = eV._1
921- let bF = eV._2
922- let cg = eV._3
923- let cv = eV._4
924- let bk = eV._5
925- let bl = eV._6
926- let cy = eV._7
927- let cz = eV._8
928- let cC = eV._9
929- let cx = eV._10
930- let cA = eV._11
931- let cB = eV._12
932- let eW = aj(cx, aD())
933- let eX = (eW / 2)
934- let eD = (eW - eX)
935- let eY = (aq() - eW)
936- let eZ = if ((0 > eY))
937- then $Tuple2(0, ak(eY))
938- else $Tuple2(eY, 0)
939- let fa = eZ._1
940- let fb = eZ._2
941- let eS = if ((fb > 0))
925+ let eZ = ct(aU)
926+ let cj = eZ._1
927+ let bH = eZ._2
928+ let ck = eZ._3
929+ let cz = eZ._4
930+ let bm = eZ._5
931+ let bn = eZ._6
932+ let cC = eZ._7
933+ let cD = eZ._8
934+ let cG = eZ._9
935+ let cB = eZ._10
936+ let cE = eZ._11
937+ let cF = eZ._12
938+ let fa = al(cB, aF())
939+ let fb = (fa / 2)
940+ let eH = (fa - fb)
941+ let fc = (as() - fa)
942+ let fd = if ((0 > fc))
943+ then $Tuple2(0, am(fc))
944+ else $Tuple2(fc, 0)
945+ let fe = fd._1
946+ let ff = fd._2
947+ let eW = if ((ff > 0))
942948 then {
943- let eT = invoke(T(), "withdraw", [fb], nil)
944- if ((eT == eT))
949+ let eX = invoke(U(), "withdraw", [ff], nil)
950+ if ((eX == eX))
945951 then nil
946952 else throw("Strict value is not equal to itself.")
947953 }
948954 else nil
949- if ((eS == eS))
955+ if ((eW == eW))
950956 then {
951- let eF = invoke(T(), "deposit", nil, [AttachedPayment(Q(), eD)])
952- if ((eF == eF))
957+ let eJ = invoke(U(), "deposit", nil, [AttachedPayment(R(), eH)])
958+ if ((eJ == eJ))
953959 then {
954- let eK = invoke(R(), "unlockNeutrino", [(eX - fb), toBase58String(Q())], nil)
955- if ((eK == eK))
956- then (((dL(aS) ++ dF(bk, bl, cy, cz, cC, cA, cB)) ++ dM(dQ.caller, eX)) ++ dP(eY))
960+ let eO = invoke(S(), "unlockNeutrino", [(fb - ff), toBase58String(R())], nil)
961+ if ((eO == eO))
962+ then (((dP(aU) ++ dJ(bm, bn, cC, cD, cG, cE, cF)) ++ dQ(dU.caller, fb)) ++ dT(fc))
957963 else throw("Strict value is not equal to itself.")
958964 }
959965 else throw("Strict value is not equal to itself.")
960966 }
961967 else throw("Strict value is not equal to itself.")
962968 }
963969 }
964970
965971
966972
967-@Callable(dQ)
973+@Callable(dU)
968974 func payFunding () = {
969- let fc = ay()
970- if (if (if ((fc > lastBlock.timestamp))
975+ let fg = aA()
976+ if (if (if ((fg > lastBlock.timestamp))
971977 then true
972- else !(aX()))
978+ else !(aZ()))
973979 then true
974- else aY())
975- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(fc)))
980+ else ba())
981+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(fg)))
976982 else {
977- let fd = bN()
978- let fe = cD()
979- let ff = (fe - fd)
980- let fg = if (if ((aI() == 0))
983+ let fh = bP()
984+ let fi = cH()
985+ let fj = (fi - fh)
986+ let fk = if (if ((aK() == 0))
981987 then true
982- else (aJ() == 0))
983- then $Tuple4(0, 0, 0, 0)
984- else if ((0 > ff))
988+ else (aL() == 0))
989+ then $Tuple2(0, 0)
990+ else if ((0 > fj))
985991 then {
986- let fh = ah(aj(ff, aA()), ab)
987- let fi = ah(fh, fd)
988- let fj = ah(aj(fh, aI()), aJ())
989- let fk = ah(aj(fj, aa), fd)
990- $Tuple4(fh, fj, fi, fk)
992+ let fl = aj(al(fj, aC()), ad)
993+ let fm = aj(al(fl, aK()), aL())
994+ $Tuple2(fl, fm)
991995 }
992996 else {
993- let fj = ah(aj(ff, aA()), ab)
994- let fk = ah(fj, fd)
995- let fh = ah(aj(fj, aJ()), aI())
996- let fi = ah(aj(fh, aa), fd)
997- $Tuple4(fh, fj, fi, fk)
997+ let fm = aj(al(fj, aC()), ad)
998+ let fl = aj(al(fm, aL()), aK())
999+ $Tuple2(fl, fm)
9981000 }
999- let fh = fg._1
1000- let fj = fg._2
1001- let fi = fg._3
1002- let fk = fg._4
1003- dj((fc + aB()), (aG() + fj), (aH() + fh), fk, fi)
1001+ let fl = fk._1
1002+ let fm = fk._2
1003+ dn((fg + aD()), (aI() + fm), (aJ() + fl), aj(fm, fh), aj(fl, fh))
10041004 }
10051005 }
10061006
10071007
10081008
1009-@Callable(dQ)
1010-func v_get (aS) = {
1011- let fl = cp(aS)
1012- let cf = fl._1
1013- let cg = fl._2
1014- let ch = fl._3
1015- let fm = fl._4
1016- throw((((af(cg) + af(ch)) + af(fm)) + af(co(aS))))
1009+@Callable(dU)
1010+func v_get (aU) = {
1011+ let fn = ct(aU)
1012+ let cj = fn._1
1013+ let ck = fn._2
1014+ let cl = fn._3
1015+ let fo = fn._4
1016+ throw((((ah(ck) + ah(cl)) + ah(fo)) + ah(cs(aU))))
10171017 }
10181018
10191019
10201020
1021-@Callable(dQ)
1022-func view_calcRemainMarginWithFundingPayment (aS) = {
1023- let fn = aR(aS)
1024- let aV = fn._1
1025- let bX = fn._2
1026- let cl = fn._3
1027- let bZ = fn._4
1028- let fo = bU(aS, ad)
1029- let cc = fo._1
1030- let ci = fo._2
1031- let fp = bv(aV, bX, bZ, ci)
1032- let bE = fp._1
1033- let bF = fp._2
1034- let bA = fp._3
1035- throw(((af(bE) + af(bA)) + af(co(aS))))
1021+@Callable(dU)
1022+func view_calcRemainMarginWithFundingPayment (aU) = {
1023+ let fp = aT(aU)
1024+ let aX = fp._1
1025+ let cb = fp._2
1026+ let cp = fp._3
1027+ let cd = fp._4
1028+ let fq = bY(aU, af)
1029+ let cg = fq._1
1030+ let cm = fq._2
1031+ let fr = bx(aX, cb, cd, cm)
1032+ let bG = fr._1
1033+ let bH = fr._2
1034+ let bC = fr._3
1035+ throw(((ah(bG) + ah(bC)) + ah(cs(aU))))
10361036 }
10371037
10381038
1039-@Verifier(fq)
1040-func fr () = sigVerify(fq.bodyBytes, fq.proofs[0], P())
1039+@Verifier(fs)
1040+func ft () = sigVerify(fs.bodyBytes, fs.proofs[0], Q())
10411041

github/deemru/w8io/026f985 
388.17 ms