tx · 5ZRYXQTdiyFXSxtvpq1MceAw1Eqf2z6Kd6BWHJB7ZHz1

3MuzRcW6fRnqCC76KgKznZP68qsWB1J6shn:  -0.07500000 Waves

2023.03.23 21:43 [2503016] smart account 3MuzRcW6fRnqCC76KgKznZP68qsWB1J6shn > SELF 0.00000000 Waves

{ "type": 13, "id": "5ZRYXQTdiyFXSxtvpq1MceAw1Eqf2z6Kd6BWHJB7ZHz1", "fee": 7500000, "feeAssetId": null, "timestamp": 1679597094707, "version": 2, "chainId": 84, "sender": "3MuzRcW6fRnqCC76KgKznZP68qsWB1J6shn", "senderPublicKey": "EjNbd48ENcnJ4wjBkASdYJHavM8QHrAbFDbJ46ffyUcU", "proofs": [ "EfV4EujsCerMDq5161o1ph4oHwwBb6y3hRoDLzw4guUii9Lp8CgPKrYc5ESmGxooewniC65K8N1NfwQyfR2nnGo" ], "script": "base64:BgKAAQgCEgASABIAEgASAwoBARIDCgEBEhAKDgEBAQEBAQEBAQEBAQEBEhUKEwEBAQEBAQEICAgBAQEBAQEBAQESBgoEAQEBCBIDCgEBEgQKAgEBEgYKBAEBAQQSBAoCCAESABIAEgASAwoBCBIECgIIARIDCgEBEgASABIAEgQKAggIrwEADGtfYmFzZU9yYWNsZQIMa19iYXNlT3JhY2xlAA1rX3F1b3RlT3JhY2xlAg1rX3F1b3RlT3JhY2xlAAlrX2JhbGFuY2UCCWtfYmFsYW5jZQAKa19zZXF1ZW5jZQIKa19zZXF1ZW5jZQAOa19wb3NpdGlvblNpemUCDmtfcG9zaXRpb25TaXplABBrX3Bvc2l0aW9uTWFyZ2luAhBrX3Bvc2l0aW9uTWFyZ2luABZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAhZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAC5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhJrX3Bvc2l0aW9uRnJhY3Rpb24AEmtfcG9zaXRpb25TZXF1ZW5jZQISa19wb3NpdGlvblNlcXVlbmNlAA1rX3Bvc2l0aW9uRmVlAg1rX3Bvc2l0aW9uRmVlAB5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXACE2tfcG9zaXRpb25UaW1lc3RhbXAADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQACGtfcGF1c2VkAghrX3BhdXNlZAALa19jbG9zZU9ubHkCC2tfY2xvc2VPbmx5AAVrX2ZlZQIFa19mZWUADWtfcm9sbG92ZXJGZWUCDmtfcm9sbG92ZXJfZmVlAA9rX2Z1bmRpbmdQZXJpb2QCD2tfZnVuZGluZ1BlcmlvZAARa19pbml0TWFyZ2luUmF0aW8CEWtfaW5pdE1hcmdpblJhdGlvABhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8CBWtfbW1yABVrX2xpcXVpZGF0aW9uRmVlUmF0aW8CFWtfbGlxdWlkYXRpb25GZWVSYXRpbwAZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwIWa19wYXJ0TGlxdWlkYXRpb25SYXRpbwANa19zcHJlYWRMaW1pdAINa19zcHJlYWRMaW1pdAAQa19tYXhQcmljZUltcGFjdAIQa19tYXhQcmljZUltcGFjdAAQa19tYXhQcmljZVNwcmVhZAIQa19tYXhQcmljZVNwcmVhZAARa19tYXhPcGVuTm90aW9uYWwCEWtfbWF4T3Blbk5vdGlvbmFsABVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQCFWtfZmVlVG9TdGFrZXJzUGVyY2VudAAQa19tYXhPcmFjbGVEZWxheQIQa19tYXhPcmFjbGVEZWxheQANa19mdW5kaW5nTW9kZQINa19mdW5kaW5nTW9kZQAla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgIba19sYXRlc3RMb25nUHJlbWl1bUZyYWN0aW9uACZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgIca19sYXRlc3RTaG9ydFByZW1pdW1GcmFjdGlvbgASa19uZXh0RnVuZGluZ0Jsb2NrAh5rX25leHRGdW5kaW5nQmxvY2tNaW5UaW1lc3RhbXAAEWtfbG9uZ0Z1bmRpbmdSYXRlAhFrX2xvbmdGdW5kaW5nUmF0ZQASa19zaG9ydEZ1bmRpbmdSYXRlAhJrX3Nob3J0RnVuZGluZ1JhdGUAE2tfcXVvdGVBc3NldFJlc2VydmUCCGtfcXRBc3RSABJrX2Jhc2VBc3NldFJlc2VydmUCCGtfYnNBc3RSABJrX3F1b3RlQXNzZXRXZWlnaHQCCGtfcXRBc3RXABFrX2Jhc2VBc3NldFdlaWdodAIIa19ic0FzdFcAE2tfdG90YWxQb3NpdGlvblNpemUCE2tfdG90YWxQb3NpdGlvblNpemUAF2tfdG90YWxMb25nUG9zaXRpb25TaXplAhdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAYa190b3RhbFNob3J0UG9zaXRpb25TaXplAhhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUAFmtfb3BlbkludGVyZXN0Tm90aW9uYWwCFmtfb3BlbkludGVyZXN0Tm90aW9uYWwAE2tfb3BlbkludGVyZXN0U2hvcnQCE2tfb3BlbkludGVyZXN0U2hvcnQAEmtfb3BlbkludGVyZXN0TG9uZwISa19vcGVuSW50ZXJlc3RMb25nAAhrX2xhc3RUeAIIa19sYXN0VHgAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwAPa192YXVsdF9hZGRyZXNzAg9rX3ZhdWx0X2FkZHJlc3MAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzAA1rX3F1b3RlX2Fzc2V0Ag1rX3F1b3RlX2Fzc2V0ABFrX3N0YWtpbmdfYWRkcmVzcwIRa19zdGFraW5nX2FkZHJlc3MAD2tfbWluZXJfYWRkcmVzcwIPa19taW5lcl9hZGRyZXNzABBrX29yZGVyc19hZGRyZXNzAhBrX29yZGVyc19hZGRyZXNzABJrX3JlZmVycmFsX2FkZHJlc3MCEmtfcmVmZXJyYWxfYWRkcmVzcwAVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhVrX25mdF9tYW5hZ2VyX2FkZHJlc3MBDnRvQ29tcG9zaXRlS2V5AgRfa2V5CF9hZGRyZXNzCQCsAgIJAKwCAgUEX2tleQIBXwUIX2FkZHJlc3MBC2Nvb3JkaW5hdG9yAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAhNDb29yZGluYXRvciBub3Qgc2V0AQxhZG1pbkFkZHJlc3MACQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfYWRtaW5fYWRkcmVzcwEKcXVvdGVBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUNa19xdW90ZV9hc3NldAEOc3Rha2luZ0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAURa19zdGFraW5nX2FkZHJlc3MCD1N0YWtpbmcgbm90IHNldAEMdmF1bHRBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfdmF1bHRfYWRkcmVzcwINVmF1bHQgbm90IHNldAEMbWluZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfbWluZXJfYWRkcmVzcwINTWluZXIgbm90IHNldAENb3JkZXJzQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRBrX29yZGVyc19hZGRyZXNzAg5PcmRlcnMgbm90IHNldAEPcmVmZXJyYWxBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfcmVmZXJyYWxfYWRkcmVzcwIQUmVmZXJyYWwgbm90IHNldAERbmZ0TWFuYWdlckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhNORlQgTWFuYWdlciBub3Qgc2V0AA1rX3Rva2VuX3BhcmFtAg1rX3Rva2VuX3BhcmFtAAxrX3Rva2VuX3R5cGUCDGtfdG9rZW5fdHlwZQAYRkVFX1JFRFVDVElPTl9UT0tFTl9UWVBFAg1mZWVfcmVkdWN0aW9uAAhESVJfTE9ORwABAAlESVJfU0hPUlQAAgAHU0VDT05EUwDoBwAPREVDSU1BTF9OVU1CRVJTAAYADERFQ0lNQUxfVU5JVAkAaAIAAQkAaAIJAGgCCQBoAgkAaAIJAGgCAAoACgAKAAoACgAKAA9NSU5VVEVTX0lOX1lFQVIJAGgCAKCKIAUMREVDSU1BTF9VTklUAAdPTkVfREFZCQBoAgCAowUFDERFQ0lNQUxfVU5JVAAPUE5MX09QVElPTl9TUE9UAAEAEVBOTF9PUFRJT05fT1JBQ0xFAAIAEkZVTkRJTkdfQVNZTU1FVFJJQwABABFGVU5ESU5HX1NZTU1FVFJJQwACAQFzAQJfeAkArAICCQCkAwEFAl94AgEsAQRkaXZkAgJfeAJfeQkAbgQFAl94BQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEEbXVsZAICX3gCX3kJAG4EBQJfeAUCX3kFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BBWJkaXZkAgJfeAJfeQkAvQIEBQJfeAkAtgIBBQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEFYm11bGQCAl94Al95CQC9AgQFAl94BQJfeQkAtgIBBQxERUNJTUFMX1VOSVQFCEhBTEZFVkVOAQNhYnMBAl94AwkAZgIFAl94AAAFAl94CQEBLQEFAl94AQR2bWF4AgJfeAJfeQMJAGcCBQJfeAUCX3kFAl94BQJfeQEDaW50AQFrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUBawkArAICAg1ubyB2YWx1ZSBmb3IgBQFrAQVpbnRPcgIBawNkZWYJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBawUDZGVmAQRzdHJBAghfYWRkcmVzcwRfa2V5BAN2YWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhfYWRkcmVzcwUEX2tleQkArAICAhFObyB2YWx1ZSBmb3Iga2V5IAUEX2tleQUDdmFsAQRpbnRBAghfYWRkcmVzcwRfa2V5BAN2YWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhfYWRkcmVzcwUEX2tleQkArAICAhFObyB2YWx1ZSBmb3Iga2V5IAUEX2tleQUDdmFsAQhjYmFsYW5jZQAJAQNpbnQBBQlrX2JhbGFuY2UBA2ZlZQAJAQNpbnQBBQVrX2ZlZQEPcm9sbG92ZXJGZWVSYXRlAAkBA2ludAEFDWtfcm9sbG92ZXJGZWUBD2luaXRNYXJnaW5SYXRpbwAJAQNpbnQBBRFrX2luaXRNYXJnaW5SYXRpbwEGcXRBc3RSAAkBA2ludAEFE2tfcXVvdGVBc3NldFJlc2VydmUBBmJzQXN0UgAJAQNpbnQBBRJrX2Jhc2VBc3NldFJlc2VydmUBBnF0QXN0VwAJAQVpbnRPcgIFEmtfcXVvdGVBc3NldFdlaWdodAUMREVDSU1BTF9VTklUAQZic0FzdFcACQEFaW50T3ICBRFrX2Jhc2VBc3NldFdlaWdodAUMREVDSU1BTF9VTklUARF0b3RhbFBvc2l0aW9uU2l6ZQAJAQNpbnQBBRNrX3RvdGFsUG9zaXRpb25TaXplARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAJAQNpbnQBBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsARFvcGVuSW50ZXJlc3RTaG9ydAAJAQNpbnQBBRNrX29wZW5JbnRlcmVzdFNob3J0ARBvcGVuSW50ZXJlc3RMb25nAAkBA2ludAEFEmtfb3BlbkludGVyZXN0TG9uZwEZbmV4dEZ1bmRpbmdCbG9ja1RpbWVzdGFtcAAJAQNpbnQBBRJrX25leHRGdW5kaW5nQmxvY2sBEGZ1bmRpbmdQZXJpb2RSYXcACQEDaW50AQUPa19mdW5kaW5nUGVyaW9kARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFDERFQ0lNQUxfVU5JVAEUZnVuZGluZ1BlcmlvZFNlY29uZHMACQBoAgkBEGZ1bmRpbmdQZXJpb2RSYXcABQdTRUNPTkRTARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAkBA2ludAEFGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwETbGlxdWlkYXRpb25GZWVSYXRpbwAJAQNpbnQBBRVrX2xpcXVpZGF0aW9uRmVlUmF0aW8BF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAkBA2ludAEFGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8BC3NwcmVhZExpbWl0AAkBA2ludAEFDWtfc3ByZWFkTGltaXQBDm1heFByaWNlSW1wYWN0AAkBA2ludAEFEGtfbWF4UHJpY2VJbXBhY3QBDm1heFByaWNlU3ByZWFkAAkBA2ludAEFEGtfbWF4UHJpY2VTcHJlYWQBD21heE9wZW5Ob3Rpb25hbAAJAQNpbnQBBRFrX21heE9wZW5Ob3Rpb25hbAEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBA2ludAEFJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkBA2ludAEFGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBA2ludAEFF2tfdG90YWxMb25nUG9zaXRpb25TaXplAQxsYXN0U2VxdWVuY2UACQEFaW50T3ICBQprX3NlcXVlbmNlAAABE2ZlZVRvU3Rha2Vyc1BlcmNlbnQACQEDaW50AQUVa19mZWVUb1N0YWtlcnNQZXJjZW50AQ5tYXhPcmFjbGVEZWxheQAJAQNpbnQBBRBrX21heE9yYWNsZURlbGF5AQtmdW5kaW5nTW9kZQAJAQVpbnRPcgIFDWtfZnVuZGluZ01vZGUFEkZVTkRJTkdfQVNZTU1FVFJJQwENbGFzdFRpbWVzdGFtcAAIBQlsYXN0QmxvY2sJdGltZXN0YW1wAQ9nZXRBY3R1YWxDYWxsZXIBAWkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgkBDW9yZGVyc0FkZHJlc3MAAghrX3NlbmRlcgkApQgBCAUBaQZjYWxsZXIBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DDF9tYXJnaW5SYXRpbxBfYmFzZU1hcmdpblJhdGlvFF9sYXJnZXJUaGFuT3JFcXVhbFRvBBRyZW1haW5pbmdNYXJnaW5SYXRpbwkAZQIFDF9tYXJnaW5SYXRpbwUQX2Jhc2VNYXJnaW5SYXRpbwMDBRRfbGFyZ2VyVGhhbk9yRXF1YWxUbwkAZgIAAAUUcmVtYWluaW5nTWFyZ2luUmF0aW8HCQACAQkArAICCQCsAgIJAKwCAgIQSW52YWxpZCBtYXJnaW46IAkApAMBBQxfbWFyZ2luUmF0aW8CAyA8IAkApAMBBRBfYmFzZU1hcmdpblJhdGlvAwMJAQEhAQUUX2xhcmdlclRoYW5PckVxdWFsVG8JAGcCBRRyZW1haW5pbmdNYXJnaW5SYXRpbwAABwkAAgEJAKwCAgkArAICCQCsAgICEEludmFsaWQgbWFyZ2luOiAJAKQDAQUMX21hcmdpblJhdGlvAgMgPiAJAKQDAQUQX2Jhc2VNYXJnaW5SYXRpbwYBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BDV9wb3NpdGlvblNpemUDCQAAAgUNX3Bvc2l0aW9uU2l6ZQAACQACAQIsU2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBfcG9zaXRpb25TaXplID09IDADCQBmAgUNX3Bvc2l0aW9uU2l6ZQAACQEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAELZ2V0UG9zaXRpb24CB190cmFkZXIKX2RpcmVjdGlvbgQLcG9zaXRpb25LZXkJAKwCAgkArAICBQdfdHJhZGVyAgFfCQCkAwEFCl9kaXJlY3Rpb24ED3Bvc2l0aW9uU2l6ZU9wdAkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQULcG9zaXRpb25LZXkEByRtYXRjaDAFD3Bvc2l0aW9uU2l6ZU9wdAMJAAECBQckbWF0Y2gwAgNJbnQEDHBvc2l0aW9uU2l6ZQUHJG1hdGNoMAkAlwoFBQxwb3NpdGlvblNpemUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FC3Bvc2l0aW9uS2V5CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQtwb3NpdGlvbktleQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgULcG9zaXRpb25LZXkJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAULcG9zaXRpb25LZXkJAJcKBQAAAAAAAAAAAAABDGdldERpcmVjdGlvbgENX3Bvc2l0aW9uU2l6ZQMJAGYCAAAFDV9wb3NpdGlvblNpemUFCURJUl9TSE9SVAUIRElSX0xPTkcBDmdldFBvc2l0aW9uRmVlAQdfdHJhZGVyBA5wb3NpdGlvbkZlZU9wdAkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQdfdHJhZGVyBAckbWF0Y2gwBQ5wb3NpdGlvbkZlZU9wdAMJAAECBQckbWF0Y2gwAgNJbnQEC3Bvc2l0aW9uRmVlBQckbWF0Y2gwBQtwb3NpdGlvbkZlZQkBA2ZlZQABE3JlcXVpcmVPcGVuUG9zaXRpb24CB190cmFkZXIKX2RpcmVjdGlvbgMJAAACCAkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgJfMQAACQACAQIQTm8gb3BlbiBwb3NpdGlvbgYBDWdldE9yYWNsZURhdGEBA2tleQQNb3JhY2xlRGF0YVN0cgkAnQgCBQR0aGlzBQNrZXkDAwkBCWlzRGVmaW5lZAEFDW9yYWNsZURhdGFTdHIJAQIhPQIJAQV2YWx1ZQEFDW9yYWNsZURhdGFTdHICAAcECm9yYWNsZURhdGEJALUJAgkBBXZhbHVlAQUNb3JhY2xlRGF0YVN0cgIBLAQNb3JhY2xlQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUKb3JhY2xlRGF0YQAACQCsAgICG0ludmFsaWQgb3JhY2xlIGFkZHJlc3MgaW46IAkBBXZhbHVlAQUNb3JhY2xlRGF0YVN0cgQIcHJpY2VLZXkJAJEDAgUKb3JhY2xlRGF0YQABBAhibG9ja0tleQkAkQMCBQpvcmFjbGVEYXRhAAIEB29wZW5LZXkJAJEDAgUKb3JhY2xlRGF0YQADCQCWCgQFDW9yYWNsZUFkZHJlc3MFCHByaWNlS2V5BQhibG9ja0tleQUHb3BlbktleQUEdW5pdAELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHAQZwYXVzZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFCGtfcGF1c2VkBwEJY2xvc2VPbmx5AAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQtrX2Nsb3NlT25seQcBDXVwZGF0ZVJlc2VydmUDBl9pc0FkZBFfcXVvdGVBc3NldEFtb3VudBBfYmFzZUFzc2V0QW1vdW50AwUGX2lzQWRkBAduZXdCYXNlCQBlAgkBBmJzQXN0UgAFEF9iYXNlQXNzZXRBbW91bnQDCQBnAgAABQduZXdCYXNlCQACAQIqVHggbGVhZCB0byBiYXNlIGFzc2V0IHJlc2VydmUgPD0gMCwgcmV2ZXJ0CQCVCgMJAGQCCQEGcXRBc3RSAAURX3F1b3RlQXNzZXRBbW91bnQFB25ld0Jhc2UJAGQCCQERdG90YWxQb3NpdGlvblNpemUABRBfYmFzZUFzc2V0QW1vdW50BAhuZXdRdW90ZQkAZQIJAQZxdEFzdFIABRFfcXVvdGVBc3NldEFtb3VudAMJAGcCAAAFCG5ld1F1b3RlCQACAQIqVHggbGVhZCB0byBiYXNlIHF1b3RlIHJlc2VydmUgPD0gMCwgcmV2ZXJ0CQCVCgMFCG5ld1F1b3RlCQBkAgkBBmJzQXN0UgAFEF9iYXNlQXNzZXRBbW91bnQJAGUCCQERdG90YWxQb3NpdGlvblNpemUABRBfYmFzZUFzc2V0QW1vdW50AQ1jYWxjSW52YXJpYW50AgdfcXRBc3RSB19ic0FzdFIEB2JxdEFzdFIJALYCAQUHX3F0QXN0UgQHYmJzQXN0UgkAtgIBBQdfYnNBc3RSCQEFYm11bGQCBQdicXRBc3RSBQdiYnNBc3RSAQlzd2FwSW5wdXQCBl9pc0FkZBFfcXVvdGVBc3NldEFtb3VudAQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEGHF1b3RlQXNzZXRBbW91bnRBZGp1c3RlZAkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUHX3F0QXN0VwQBawkBDWNhbGNJbnZhcmlhbnQCBQdfcXRBc3RSBQdfYnNBc3RSBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyAwUGX2lzQWRkCQBkAgUHX3F0QXN0UgUYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkCQBlAgUHX3F0QXN0UgUYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAKADAQkBBWJkaXZkAgUBawkAtgIBBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBBhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQNhYnMBCQBlAgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBQdfYnNBc3RSBBVhbW91bnRCYXNlQXNzZXRCb3VnaHQDBQZfaXNBZGQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBAS0BBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEDSR0MDE1NTA1MTU2NzUJAQ11cGRhdGVSZXNlcnZlAwUGX2lzQWRkBRhxdW90ZUFzc2V0QW1vdW50QWRqdXN0ZWQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxNTUwNTE1Njc1Al8xBBZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTU1MDUxNTY3NQJfMgQXdG90YWxQb3NpdGlvblNpemVBZnRlcjEIBQ0kdDAxNTUwNTE1Njc1Al8zBAtwcmljZUJlZm9yZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLbWFya2V0UHJpY2UJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQJcHJpY2VEaWZmCQEDYWJzAQkAZQIFC3ByaWNlQmVmb3JlBQttYXJrZXRQcmljZQQLcHJpY2VJbXBhY3QJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgULcHJpY2VCZWZvcmUJAGQCBQtwcmljZUJlZm9yZQUJcHJpY2VEaWZmBBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QAAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg1QcmljZSBpbXBhY3QgCQCkAwEFC3ByaWNlSW1wYWN0AhQgPiBtYXggcHJpY2UgaW1wYWN0IAkApAMBBRNtYXhQcmljZUltcGFjdFZhbHVlAhUgYmVmb3JlIHF1b3RlIGFzc2V0OiAJAKQDAQUHX3F0QXN0UgIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQUHX2JzQXN0UgIhIHF1b3RlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEV9xdW90ZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDiBtYXJrZXRQcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCWCgQFFWFtb3VudEJhc2VBc3NldEJvdWdodAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxAQ9jYWxjUm9sbG92ZXJGZWUCEl9vbGRQb3NpdGlvbk1hcmdpbiBfb2xkUG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAQPcG9zaXRpb25NaW51dGVzCQBoAgkAaQIJAGkCCQBlAgkBDWxhc3RUaW1lc3RhbXAABSBfb2xkUG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcADoBwA8BQxERUNJTUFMX1VOSVQEC3JvbGxvdmVyRmVlCQEEZGl2ZAIJAQRtdWxkAgkBBG11bGQCBRJfb2xkUG9zaXRpb25NYXJnaW4FD3Bvc2l0aW9uTWludXRlcwkBD3JvbGxvdmVyRmVlUmF0ZQAFD01JTlVURVNfSU5fWUVBUgULcm9sbG92ZXJGZWUBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUQX29sZFBvc2l0aW9uU2l6ZRJfb2xkUG9zaXRpb25NYXJnaW4lX29sZFBvc2l0aW9uQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbiBfb2xkUG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAxfbWFyZ2luRGVsdGEEDmZ1bmRpbmdQYXltZW50AwkBAiE9AgUQX29sZFBvc2l0aW9uU2l6ZQAABCBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBRBfb2xkUG9zaXRpb25TaXplCQEEbXVsZAIJAGUCBSBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUlX29sZFBvc2l0aW9uQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUQX29sZFBvc2l0aW9uU2l6ZQAABAtyb2xsb3ZlckZlZQkBD2NhbGNSb2xsb3ZlckZlZQIFEl9vbGRQb3NpdGlvbk1hcmdpbgUgX29sZFBvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAEDHNpZ25lZE1hcmdpbgkAZAIJAGUCCQBlAgUMX21hcmdpbkRlbHRhBQtyb2xsb3ZlckZlZQUOZnVuZGluZ1BheW1lbnQFEl9vbGRQb3NpdGlvbk1hcmdpbgQNJHQwMTgzNDIxODQ2OQMJAGYCAAAFDHNpZ25lZE1hcmdpbgkAlAoCAAAJAQNhYnMBBQxzaWduZWRNYXJnaW4JAJQKAgkBA2FicwEFDHNpZ25lZE1hcmdpbgAABAxyZW1haW5NYXJnaW4IBQ0kdDAxODM0MjE4NDY5Al8xBAdiYWREZWJ0CAUNJHQwMTgzNDIxODQ2OQJfMgkAlgoEBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFDmZ1bmRpbmdQYXltZW50BQtyb2xsb3ZlckZlZQEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QSX3F1b3RlQXNzZXRSZXNlcnZlEV9xdW90ZUFzc2V0V2VpZ2h0EV9iYXNlQXNzZXRSZXNlcnZlEF9iYXNlQXNzZXRXZWlnaHQEC3ByaWNlQmVmb3JlCQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAMJAAACBRBfYmFzZUFzc2V0QW1vdW50AAAJAAIBAhlJbnZhbGlkIGJhc2UgYXNzZXQgYW1vdW50BAFrCQENY2FsY0ludmFyaWFudAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX2Jhc2VBc3NldFJlc2VydmUEGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgMFBl9pc0FkZAkAZAIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0QW1vdW50CQBlAgURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRBbW91bnQED3F1b3RlQXNzZXRBZnRlcgkAoAMBCQEFYmRpdmQCBQFrCQC2AgEFGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgQPcXVvdGVBc3NldERlbHRhCQEDYWJzAQkAZQIFD3F1b3RlQXNzZXRBZnRlcgUSX3F1b3RlQXNzZXRSZXNlcnZlBA5xdW90ZUFzc2V0U29sZAkBBG11bGQCBQ9xdW90ZUFzc2V0RGVsdGEFEV9xdW90ZUFzc2V0V2VpZ2h0BBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QABA0kdDAxOTczMTE5ODkzCQENdXBkYXRlUmVzZXJ2ZQMJAQEhAQUGX2lzQWRkBQ9xdW90ZUFzc2V0RGVsdGEFEF9iYXNlQXNzZXRBbW91bnQEF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTk3MzExOTg5MwJfMQQWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE5NzMxMTk4OTMCXzIEF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUNJHQwMTk3MzExOTg5MwJfMwQLbWFya2V0UHJpY2UJAQRkaXZkAgUOcXVvdGVBc3NldFNvbGQFEF9iYXNlQXNzZXRBbW91bnQECXByaWNlRGlmZgkBA2FicwEJAGUCBQtwcmljZUJlZm9yZQULbWFya2V0UHJpY2UEC3ByaWNlSW1wYWN0CQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIFC3ByaWNlQmVmb3JlCQBkAgULcHJpY2VCZWZvcmUFCXByaWNlRGlmZgMDCQBmAgULcHJpY2VJbXBhY3QFE21heFByaWNlSW1wYWN0VmFsdWUFFF9jaGVja01heFByaWNlSW1wYWN0BwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINUHJpY2UgaW1wYWN0IAkApAMBBQtwcmljZUltcGFjdAIUID4gbWF4IHByaWNlIGltcGFjdCAJAKQDAQUTbWF4UHJpY2VJbXBhY3RWYWx1ZQIVIGJlZm9yZSBxdW90ZSBhc3NldDogCQCkAwEFEl9xdW90ZUFzc2V0UmVzZXJ2ZQIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQURX2Jhc2VBc3NldFJlc2VydmUCICBiYXNlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEF9iYXNlQXNzZXRBbW91bnQCDyBwcmljZSBiZWZvcmU6IAkApAMBBQtwcmljZUJlZm9yZQIPIG1hcmtldCBwcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCZCgcFDnF1b3RlQXNzZXRTb2xkBRdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQUWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQUXdG90YWxQb3NpdGlvblNpemVBZnRlcjEJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAQEhAQUGX2lzQWRkCQEDYWJzAQUQX2Jhc2VBc3NldEFtb3VudAAABQtwcmljZUltcGFjdAEKc3dhcE91dHB1dAMGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBwUGX2lzQWRkBRBfYmFzZUFzc2V0QW1vdW50BRRfY2hlY2tNYXhQcmljZUltcGFjdAkBBnF0QXN0UgAJAQZxdEFzdFcACQEGYnNBc3RSAAkBBmJzQXN0VwABE2dldE9yYWNsZVByaWNlVmFsdWUDBm9yYWNsZQhwcmljZUtleQhibG9ja0tleQQJbGFzdFZhbHVlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUGb3JhY2xlBQhwcmljZUtleQkArAICCQCsAgIJAKwCAgIiQ2FuIG5vdCBnZXQgb3JhY2xlIHByaWNlLiBPcmFjbGU6IAkApQgBBQZvcmFjbGUCBiBrZXk6IAUIcHJpY2VLZXkDCQECIT0CBQhibG9ja0tleQIABAxjdXJyZW50QmxvY2sIBQlsYXN0QmxvY2sGaGVpZ2h0BA9sYXN0T3JhY2xlQmxvY2sJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFCGJsb2NrS2V5CQCsAgIJAKwCAgkArAICAiJDYW4gbm90IGdldCBvcmFjbGUgYmxvY2suIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQhibG9ja0tleQMJAGYCCQBlAgUMY3VycmVudEJsb2NrBQ9sYXN0T3JhY2xlQmxvY2sJAQ5tYXhPcmFjbGVEZWxheQAJAAIBCQCsAgIJAKwCAgkArAICAiZPcmFjbGUgc3RhbGUgZGF0YS4gTGFzdCBvcmFjbGUgYmxvY2s6IAkApAMBBQ9sYXN0T3JhY2xlQmxvY2sCECBjdXJyZW50IGJsb2NrOiAJAKQDAQUMY3VycmVudEJsb2NrBQlsYXN0VmFsdWUFCWxhc3RWYWx1ZQEOZ2V0T3JhY2xlUHJpY2UABApiYXNlT3JhY2xlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQ1nZXRPcmFjbGVEYXRhAQUMa19iYXNlT3JhY2xlAhlObyBiYXNlIGFzc2V0IG9yYWNsZSBkYXRhBA9iYXNlT3JhY2xlUHJpY2UJARNnZXRPcmFjbGVQcmljZVZhbHVlAwgFCmJhc2VPcmFjbGUCXzEIBQpiYXNlT3JhY2xlAl8yCAUKYmFzZU9yYWNsZQJfMwQLcXVvdGVPcmFjbGUJAQ1nZXRPcmFjbGVEYXRhAQUNa19xdW90ZU9yYWNsZQQQcXVvdGVPcmFjbGVQcmljZQMJAQlpc0RlZmluZWQBBQtxdW90ZU9yYWNsZQQMcXVvdGVPcmFjbGVWCQEFdmFsdWUBBQtxdW90ZU9yYWNsZQkBE2dldE9yYWNsZVByaWNlVmFsdWUDCAUMcXVvdGVPcmFjbGVWAl8xCAUMcXVvdGVPcmFjbGVWAl8yCAUMcXVvdGVPcmFjbGVWAl8zBQxERUNJTUFMX1VOSVQJAQRkaXZkAgUPYmFzZU9yYWNsZVByaWNlBRBxdW90ZU9yYWNsZVByaWNlAQ5pc01hcmtldENsb3NlZAAECmJhc2VPcmFjbGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBDWdldE9yYWNsZURhdGEBBQxrX2Jhc2VPcmFjbGUCGU5vIGJhc2UgYXNzZXQgb3JhY2xlIGRhdGEEBm9yYWNsZQgFCmJhc2VPcmFjbGUCXzEEB29wZW5LZXkIBQpiYXNlT3JhY2xlAl80AwkBAiE9AgUHb3BlbktleQIABAZpc09wZW4JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmwgCBQZvcmFjbGUFB29wZW5LZXkJAKwCAgkArAICCQCsAgICK0NhbiBub3QgZ2V0IG9yYWNsZSBpcyBvcGVuL2Nsb3NlZC4gT3JhY2xlOiAJAKUIAQUGb3JhY2xlAgYga2V5OiAFB29wZW5LZXkJAQEhAQUGaXNPcGVuBwEMYWJzUHJpY2VEaWZmBQxfb3JhY2xlUHJpY2USX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlB19xdEFzdFcHX2JzQXN0VwQKcHJpY2VBZnRlcgkBBGRpdmQCCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0VwQMYXZlcmFnZVByaWNlCQEEZGl2ZAIJAGQCBQxfb3JhY2xlUHJpY2UFCnByaWNlQWZ0ZXIJAGgCAAIFDERFQ0lNQUxfVU5JVAQMYWJzUHJpY2VEaWZmCQEEZGl2ZAIJAQNhYnMBCQBlAgUMX29yYWNsZVByaWNlBQpwcmljZUFmdGVyBQxhdmVyYWdlUHJpY2UFDGFic1ByaWNlRGlmZgEZcmVxdWlyZU5vdE92ZXJTcHJlYWRMaW1pdAISX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlBAtvcmFjbGVQcmljZQkBDmdldE9yYWNsZVByaWNlAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABBJhYnNQcmljZURpZmZCZWZvcmUJAQxhYnNQcmljZURpZmYFBQtvcmFjbGVQcmljZQkBBnF0QXN0UgAJAQZic0FzdFIABQdfcXRBc3RXBQdfYnNBc3RXBBFhYnNQcmljZURpZmZBZnRlcgkBDGFic1ByaWNlRGlmZgUFC29yYWNsZVByaWNlBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBQdfcXRBc3RXBQdfYnNBc3RXAwMJAGYCBRFhYnNQcmljZURpZmZBZnRlcgkBDm1heFByaWNlU3ByZWFkAAkAZgIFEWFic1ByaWNlRGlmZkFmdGVyBRJhYnNQcmljZURpZmZCZWZvcmUHCQACAQkArAICCQCsAgIJAKwCAgINUHJpY2Ugc3ByZWFkIAkApAMBBRFhYnNQcmljZURpZmZBZnRlcgIUID4gbWF4IHByaWNlIHNwcmVhZCAJAKQDAQkBDm1heFByaWNlU3ByZWFkAAYBHXJlcXVpcmVOb3RPdmVyTWF4T3Blbk5vdGlvbmFsAhFfbG9uZ09wZW5Ob3Rpb25hbBJfc2hvcnRPcGVuTm90aW9uYWwEEF9tYXhPcGVuTm90aW9uYWwJAQ9tYXhPcGVuTm90aW9uYWwAAwkAZgIFEV9sb25nT3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQACAQkArAICCQCsAgIJAKwCAgITTG9uZyBvcGVuIG5vdGlvbmFsIAkApAMBBRFfbG9uZ09wZW5Ob3Rpb25hbAIVID4gbWF4IG9wZW4gbm90aW9uYWwgCQCkAwEFEF9tYXhPcGVuTm90aW9uYWwDCQBmAgUSX3Nob3J0T3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQACAQkArAICCQCsAgIJAKwCAgIUU2hvcnQgb3BlbiBub3Rpb25hbCAJAKQDAQUSX3Nob3J0T3Blbk5vdGlvbmFsAhUgPiBtYXggb3BlbiBub3Rpb25hbCAJAKQDAQUQX21heE9wZW5Ob3Rpb25hbAYBDGdldFNwb3RQcmljZQAEEl9xdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0UgAEEV9iYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcACQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBQdfcXRBc3RXCQEEbXVsZAIFEV9iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RXARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQLb3JhY2xlUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDGN1cnJlbnRQcmljZQkBDGdldFNwb3RQcmljZQAJAGYCCQEEZGl2ZAIJAQNhYnMBCQBlAgULb3JhY2xlUHJpY2UFDGN1cnJlbnRQcmljZQULb3JhY2xlUHJpY2UJAQtzcHJlYWRMaW1pdAABH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwGDV9wb3NpdGlvblNpemUHX29wdGlvbhJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAQPcG9zaXRpb25TaXplQWJzCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAMJAAACBQdfb3B0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEE291dFBvc2l0aW9uTm90aW9uYWwICQEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcJAQEhAQUHaXNTaG9ydAUPcG9zaXRpb25TaXplQWJzBwUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRXZWlnaHQCXzEFE291dFBvc2l0aW9uTm90aW9uYWwJAQRtdWxkAgUPcG9zaXRpb25TaXplQWJzCQEOZ2V0T3JhY2xlUHJpY2UABRBwb3NpdGlvbk5vdGlvbmFsAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBw1fcG9zaXRpb25TaXplFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbBJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAdfb3B0aW9uAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECFUludmFsaWQgcG9zaXRpb24gc2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAkBH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwGBQ1fcG9zaXRpb25TaXplBQdfb3B0aW9uBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0BRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAQNdW5yZWFsaXplZFBubAMFB2lzU2hvcnQJAGUCBRVfcG9zaXRpb25PcGVuTm90aW9uYWwFEHBvc2l0aW9uTm90aW9uYWwJAGUCBRBwb3NpdGlvbk5vdGlvbmFsBRVfcG9zaXRpb25PcGVuTm90aW9uYWwJAJQKAgUQcG9zaXRpb25Ob3Rpb25hbAUNdW5yZWFsaXplZFBubAEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwDB190cmFkZXIKX2RpcmVjdGlvbgdfb3B0aW9uBA0kdDAyNzc4ODI3OTI4CQELZ2V0UG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uBAxwb3NpdGlvblNpemUIBQ0kdDAyNzc4ODI3OTI4Al8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDI3Nzg4Mjc5MjgCXzIEFHBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMjc3ODgyNzkyOAJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAyNzc4ODI3OTI4Al80CQErZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmxCeVZhbHVlcwcFDHBvc2l0aW9uU2l6ZQUUcG9zaXRpb25PcGVuTm90aW9uYWwJAQZxdEFzdFIACQEGcXRBc3RXAAkBBmJzQXN0UgAJAQZic0FzdFcABQdfb3B0aW9uAQ9jYWxjTWFyZ2luUmF0aW8DDV9yZW1haW5NYXJnaW4IX2JhZERlYnQRX3Bvc2l0aW9uTm90aW9uYWwJAQRkaXZkAgkAZQIFDV9yZW1haW5NYXJnaW4FCF9iYWREZWJ0BRFfcG9zaXRpb25Ob3Rpb25hbAEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgMHX3RyYWRlcgpfZGlyZWN0aW9uB19vcHRpb24EDSR0MDI4NDYwMjg2MTMJAQtnZXRQb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24EDHBvc2l0aW9uU2l6ZQgFDSR0MDI4NDYwMjg2MTMCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMjg0NjAyODYxMwJfMgQDcG9uCAUNJHQwMjg0NjAyODYxMwJfMwQWcG9zaXRpb25MYXN0VXBkYXRlZENQRggFDSR0MDI4NDYwMjg2MTMCXzQEEXBvc2l0aW9uVGltZXN0YW1wCAUNJHQwMjg0NjAyODYxMwJfNQQNJHQwMjg2MTkyODcyNAkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAwUHX3RyYWRlcgUKX2RpcmVjdGlvbgUHX29wdGlvbgQQcG9zaXRpb25Ob3Rpb25hbAgFDSR0MDI4NjE5Mjg3MjQCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDAyODYxOTI4NzI0Al8yBA0kdDAyODcyOTI4OTQxCQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgUWcG9zaXRpb25MYXN0VXBkYXRlZENQRgURcG9zaXRpb25UaW1lc3RhbXAFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDI4NzI5Mjg5NDECXzEEB2JhZERlYnQIBQ0kdDAyODcyOTI4OTQxAl8yCQEPY2FsY01hcmdpblJhdGlvAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BRBwb3NpdGlvbk5vdGlvbmFsAQ5nZXRNYXJnaW5SYXRpbwIHX3RyYWRlcgpfZGlyZWN0aW9uCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgMFB190cmFkZXIFCl9kaXJlY3Rpb24FD1BOTF9PUFRJT05fU1BPVAEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgdfdHJhZGVyDV9wb3NpdGlvblNpemUEDG1heGltdW1SYXRpbwkBBHZtYXgCCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIJAQ5nZXRNYXJnaW5SYXRpbwIFB190cmFkZXIJAQxnZXREaXJlY3Rpb24BBQ1fcG9zaXRpb25TaXplCQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAEGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQUMbWF4aW11bVJhdGlvBApzd2FwUmVzdWx0CQEKc3dhcE91dHB1dAMJAGYCBQ1fcG9zaXRpb25TaXplAAAFGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQcEHG1heEV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQpzd2FwUmVzdWx0Al8xBAtwcmljZUltcGFjdAgFCnN3YXBSZXN1bHQCXzcDCQBmAgkBDm1heFByaWNlSW1wYWN0AAULcHJpY2VJbXBhY3QFGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uCAdfdHJhZGVyCl9kaXJlY3Rpb24FX3NpemUEX2ZlZRRfbWluUXVvdGVBc3NldEFtb3VudAxfYWRkVG9NYXJnaW4UX2NoZWNrTWF4UHJpY2VJbXBhY3QKX2xpcXVpZGF0ZQQNJHQwMzAxMDQzMDI3MgkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgQPb2xkUG9zaXRpb25TaXplCAUNJHQwMzAxMDQzMDI3MgJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDAzMDEwNDMwMjcyAl8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDMwMTA0MzAyNzICXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMzAxMDQzMDI3MgJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDAzMDEwNDMwMjcyAl81BA5pc0xvbmdQb3NpdGlvbgkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABBJhYnNPbGRQb3NpdGlvblNpemUJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUDAwkAZwIFEmFic09sZFBvc2l0aW9uU2l6ZQUFX3NpemUJAGYCBQVfc2l6ZQAABwQOaXNQYXJ0aWFsQ2xvc2UJAGYCBRJhYnNPbGRQb3NpdGlvblNpemUFBV9zaXplBA0kdDAzMDU2NDMxMDE1CQEKc3dhcE91dHB1dAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAUFX3NpemUFFF9jaGVja01heFByaWNlSW1wYWN0BBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUNJHQwMzA1NjQzMTAxNQJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDMwNTY0MzEwMTUCXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDMwNTY0MzEwMTUCXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDAzMDU2NDMxMDE1Al80BBVleGNoYW5nZWRQb3NpdGlvblNpemUDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAQEtAQUFX3NpemUFBV9zaXplBA0kdDAzMTIzMDMxNDU0CQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwDBQdfdHJhZGVyBQpfZGlyZWN0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDAzMTIzMDMxNDU0Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwMzEyMzAzMTQ1NAJfMgQNcmVhbGl6ZWRSYXRpbwkBBGRpdmQCCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBRJhYnNPbGRQb3NpdGlvblNpemUEC3JlYWxpemVkUG5sCQEEbXVsZAIFDXVucmVhbGl6ZWRQbmwFDXJlYWxpemVkUmF0aW8EDSR0MDMxNzk1MzIwNDEJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUUb2xkUG9zaXRpb25UaW1lc3RhbXAFDXVucmVhbGl6ZWRQbmwEEnJlbWFpbk1hcmdpbkJlZm9yZQgFDSR0MDMxNzk1MzIwNDECXzEEAngxCAUNJHQwMzE3OTUzMjA0MQJfMgQCeDIIBQ0kdDAzMTc5NTMyMDQxAl8zBAtyb2xsb3ZlckZlZQgFDSR0MDMxNzk1MzIwNDECXzQED3Bvc2l0aW9uQmFkRGVidAgJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUUb2xkUG9zaXRpb25UaW1lc3RhbXAFC3JlYWxpemVkUG5sAl8yBBByZWFsaXplZENsb3NlRmVlCQEEbXVsZAIJAQRtdWxkAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUNcmVhbGl6ZWRSYXRpbwUEX2ZlZQQSdW5yZWFsaXplZFBubEFmdGVyCQBlAgUNdW5yZWFsaXplZFBubAULcmVhbGl6ZWRQbmwEEnJlbWFpbk9wZW5Ob3Rpb25hbAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAGUCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQBkAgUSdW5yZWFsaXplZFBubEFmdGVyBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQQNJHQwMzM0NDczMzgzMwMJAAACBQ9uZXdQb3NpdGlvblNpemUAAAkAlAoCAAAAAAkAlAoCCQEDYWJzAQUScmVtYWluT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAzMzQ0NzMzODMzAl8xBBRuZXdQb3NpdGlvbkxzdFVwZENQRggFDSR0MDMzNDQ3MzM4MzMCXzIEEW9wZW5Ob3Rpb25hbERlbHRhCQBlAgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBAttYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24DBQdfdHJhZGVyBQpfZGlyZWN0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAQRtdWxkAgkAZAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFC21hcmdpblJhdGlvBRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQEEbXVsZAIJAGUCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUSdW5yZWFsaXplZFBubEFmdGVyBQttYXJnaW5SYXRpbwUSdW5yZWFsaXplZFBubEFmdGVyBBFtYXJnaW5Ub1RyYWRlclJhdwkAZQIJAGUCBRJyZW1haW5NYXJnaW5CZWZvcmUJAGQCBR5uZXdQb3NpdGlvbk1hcmdpbldpdGhTYW1lUmF0aW8FEnVucmVhbGl6ZWRQbmxBZnRlcgUQcmVhbGl6ZWRDbG9zZUZlZQQObWFyZ2luVG9UcmFkZXIDCQBmAgAABRFtYXJnaW5Ub1RyYWRlclJhdwMFCl9saXF1aWRhdGUAAAkAAgECN0ludmFsaWQgaW50ZXJuYWxDbG9zZVBvc2l0aW9uIHBhcmFtczogdW5hYmxlIHRvIHBheSBmZWUFEW1hcmdpblRvVHJhZGVyUmF3BBFuZXdQb3NpdGlvbk1hcmdpbgMFDF9hZGRUb01hcmdpbgkAZAIFHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwUObWFyZ2luVG9UcmFkZXIFHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwMDCQECIT0CBRRfbWluUXVvdGVBc3NldEFtb3VudAAACQBmAgUUX21pblF1b3RlQXNzZXRBbW91bnQFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQHCQACAQkArAICCQCsAgIJAKwCAgINTGltaXQgZXJyb3I6IAkApAMBBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50AgMgPCAJAKQDAQUUX21pblF1b3RlQXNzZXRBbW91bnQJAKMKEQUPbmV3UG9zaXRpb25TaXplBRFuZXdQb3NpdGlvbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGBQ9wb3NpdGlvbkJhZERlYnQFC3JlYWxpemVkUG5sAwMFDF9hZGRUb01hcmdpbgUOaXNQYXJ0aWFsQ2xvc2UHAAAFDm1hcmdpblRvVHJhZGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABRFvcGVuTm90aW9uYWxEZWx0YQkAZQIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwUOaXNMb25nUG9zaXRpb24JAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAQEhAQUOaXNMb25nUG9zaXRpb24JAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARBvcGVuSW50ZXJlc3RMb25nAAMFDmlzTG9uZ1Bvc2l0aW9uBRFvcGVuTm90aW9uYWxEZWx0YQAACQBlAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAQEhAQUOaXNMb25nUG9zaXRpb24FEW9wZW5Ob3Rpb25hbERlbHRhAAAJAGQCBRByZWFsaXplZENsb3NlRmVlBQtyb2xsb3ZlckZlZQUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAkAAgEJAKwCAgkArAICCQCsAgICPUludmFsaWQgaW50ZXJuYWxDbG9zZVBvc2l0aW9uIHBhcmFtczogaW52YWxpZCBwb3NpdGlvbiBzaXplOiAJAKQDAQUFX3NpemUCBiBtYXg6IAkApAMBBRJhYnNPbGRQb3NpdGlvblNpemUBE2dldFRlcm1pbmFsQW1tU3RhdGUABA1fcG9zaXRpb25TaXplCQERdG90YWxQb3NpdGlvblNpemUAAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAlAoCCQEGcXRBc3RSAAkBBmJzQXN0UgAECWRpcmVjdGlvbgkAZgIFDV9wb3NpdGlvblNpemUAAAQNJHQwMzcwODAzNzI1OQkBCnN3YXBPdXRwdXQDBQlkaXJlY3Rpb24JAQNhYnMBBQ1fcG9zaXRpb25TaXplBwQVY3VycmVudE5ldE1hcmtldFZhbHVlCAUNJHQwMzcwODAzNzI1OQJfMQQZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQgFDSR0MDM3MDgwMzcyNTkCXzIEGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQgFDSR0MDM3MDgwMzcyNTkCXzMJAJQKAgUZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQUYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlARNnZXRRdW90ZUFzc2V0V2VpZ2h0BBBiYXNlQXNzZXRSZXNlcnZlEXRvdGFsUG9zaXRpb25TaXplEXF1b3RlQXNzZXRSZXNlcnZlC3RhcmdldFByaWNlBAFiCQC2AgEFEGJhc2VBc3NldFJlc2VydmUEAnN6CQC2AgEFEXRvdGFsUG9zaXRpb25TaXplBAFxCQC2AgEFEXF1b3RlQXNzZXRSZXNlcnZlBAFwCQC2AgEFC3RhcmdldFByaWNlBAFrCQEFYm11bGQCBQFxBQFiBARuZXdCCQC3AgIFAWIFAnN6BARuZXdRCQEFYmRpdmQCBQFrBQRuZXdCBAF6CQEFYmRpdmQCBQRuZXdRBQRuZXdCBAZyZXN1bHQJAQViZGl2ZAIFAXAFAXoJAKADAQUGcmVzdWx0ARRnZXRTeW5jVGVybWluYWxQcmljZQMOX3Rlcm1pbmFsUHJpY2UHX3F0QXN0UgdfYnNBc3RSBA1fcG9zaXRpb25TaXplCQERdG90YWxQb3NpdGlvblNpemUAAwkAAAIFDV9wb3NpdGlvblNpemUAAAQJbmV3UXRBc3RXCQEEZGl2ZAIJAQRtdWxkAgUOX3Rlcm1pbmFsUHJpY2UFB19ic0FzdFIFB19xdEFzdFIJAJUKAwUJbmV3UXRBc3RXBQxERUNJTUFMX1VOSVQAAAQJZGlyZWN0aW9uCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABBVjdXJyZW50TmV0TWFya2V0VmFsdWUICQEKc3dhcE91dHB1dAMFCWRpcmVjdGlvbgkBA2FicwEFDV9wb3NpdGlvblNpemUHAl8xBAluZXdRdEFzdFcJARNnZXRRdW90ZUFzc2V0V2VpZ2h0BAUHX2JzQXN0UgUNX3Bvc2l0aW9uU2l6ZQUHX3F0QXN0UgUOX3Rlcm1pbmFsUHJpY2UECW5ld0JzQXN0VwUMREVDSU1BTF9VTklUBA1tYXJnaW5Ub1ZhdWx0CAkBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMHBQ1fcG9zaXRpb25TaXplBRVjdXJyZW50TmV0TWFya2V0VmFsdWUFB19xdEFzdFIFCW5ld1F0QXN0VwUHX2JzQXN0UgUJbmV3QnNBc3RXBQ9QTkxfT1BUSU9OX1NQT1QCXzIJAJUKAwUJbmV3UXRBc3RXBQluZXdCc0FzdFcFDW1hcmdpblRvVmF1bHQBCmdldEZ1bmRpbmcABA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAECXNwb3RQcmljZQkBDGdldFNwb3RQcmljZQAEB3ByZW1pdW0JAGUCBQlzcG90UHJpY2UFD3VuZGVybHlpbmdQcmljZQMDAwkAAAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAAABgkAAAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAAAGCQEOaXNNYXJrZXRDbG9zZWQACQCVCgMAAAAAAAADCQBmAgAABQdwcmVtaXVtBBRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFB3ByZW1pdW0JARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAFB09ORV9EQVkDCQAAAgkBC2Z1bmRpbmdNb2RlAAUSRlVORElOR19BU1lNTUVUUklDBBNsb25nUHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJAJUKAwUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FE2xvbmdQcmVtaXVtRnJhY3Rpb24AAAQZc2hvcnRUb3RhbFByZW1pdW1GcmFjdGlvbgkBA2FicwEJAQRtdWxkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAQYbG9uZ1RvdGFsUHJlbWl1bUZyYWN0aW9uCQEDYWJzAQkBBG11bGQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAEDnByZW1pdW1Ub1ZhdWx0CQBlAgUZc2hvcnRUb3RhbFByZW1pdW1GcmFjdGlvbgUYbG9uZ1RvdGFsUHJlbWl1bUZyYWN0aW9uCQCVCgMFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUOcHJlbWl1bVRvVmF1bHQEE2xvbmdQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBQdwcmVtaXVtCQEUZnVuZGluZ1BlcmlvZERlY2ltYWwABQdPTkVfREFZAwkAAAIJAQtmdW5kaW5nTW9kZQAFEkZVTkRJTkdfQVNZTU1FVFJJQwQUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBRNsb25nUHJlbWl1bUZyYWN0aW9uCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQCVCgMFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uAAAEGGxvbmdUb3RhbFByZW1pdW1GcmFjdGlvbgkBA2FicwEJAQRtdWxkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAEGXNob3J0VG90YWxQcmVtaXVtRnJhY3Rpb24JAQNhYnMBCQEEbXVsZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24JARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAQOcHJlbWl1bVRvVmF1bHQJAGUCBRhsb25nVG90YWxQcmVtaXVtRnJhY3Rpb24FGXNob3J0VG90YWxQcmVtaXVtRnJhY3Rpb24JAJUKAwUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUOcHJlbWl1bVRvVmF1bHQBDmdldEFkanVzdGVkRmVlAgtfYXJ0aWZhY3RJZBBfYmFzZUZlZURpc2NvdW50BApiYXNlRmVlUmF3CQEDZmVlAAQHYmFzZUZlZQkBBG11bGQCBQpiYXNlRmVlUmF3BRBfYmFzZUZlZURpc2NvdW50BA0kdDA0MTgzNDQyMzI5AwkBAiE9AgULX2FydGlmYWN0SWQCAAQMYXJ0aWZhY3RLaW5kCQEEc3RyQQIJARFuZnRNYW5hZ2VyQWRkcmVzcwAJAQ50b0NvbXBvc2l0ZUtleQIFDGtfdG9rZW5fdHlwZQULX2FydGlmYWN0SWQDCQAAAgUMYXJ0aWZhY3RLaW5kBRhGRUVfUkVEVUNUSU9OX1RPS0VOX1RZUEUECXJlZHVjdGlvbgkBBGludEECCQERbmZ0TWFuYWdlckFkZHJlc3MACQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Rva2VuX3BhcmFtBQtfYXJ0aWZhY3RJZAQLYWRqdXN0ZWRGZWUJAQRtdWxkAgUHYmFzZUZlZQUJcmVkdWN0aW9uCQCUCgIFC2FkanVzdGVkRmVlBgkAAgECGUludmFsaWQgYXR0YWNoZWQgYXJ0aWZhY3QJAJQKAgUHYmFzZUZlZQcEC2FkanVzdGVkRmVlCAUNJHQwNDE4MzQ0MjMyOQJfMQQMYnVybkFydGlmYWN0CAUNJHQwNDE4MzQ0MjMyOQJfMgkAlAoCBQthZGp1c3RlZEZlZQUMYnVybkFydGlmYWN0ARhnZXRGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCB190cmFkZXILX2FydGlmYWN0SWQEEGRvR2V0RmVlRGlzY291bnQJAPwHBAkBDG1pbmVyQWRkcmVzcwACEmNvbXB1dGVGZWVEaXNjb3VudAkAzAgCBQdfdHJhZGVyBQNuaWwFA25pbAMJAAACBRBkb0dldEZlZURpc2NvdW50BRBkb0dldEZlZURpc2NvdW50BAtmZWVEaXNjb3VudAQHJG1hdGNoMAUQZG9HZXRGZWVEaXNjb3VudAMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAiFJbnZhbGlkIGNvbXB1dGVGZWVEaXNjb3VudCByZXN1bHQEDSR0MDQyNjc1NDI3NDkJAQ5nZXRBZGp1c3RlZEZlZQIFC19hcnRpZmFjdElkBQtmZWVEaXNjb3VudAQLYWRqdXN0ZWRGZWUIBQ0kdDA0MjY3NTQyNzQ5Al8xBAxidXJuQXJ0aWZhY3QIBQ0kdDA0MjY3NTQyNzQ5Al8yCQCUCgIFC2FkanVzdGVkRmVlBQxidXJuQXJ0aWZhY3QJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDWdldEFydGlmYWN0SWQBAWkECmFydGlmYWN0SWQDCQBmAgkAkAMBCAUBaQhwYXltZW50cwABCQDYBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkAhJJbnZhbGlkIGFydGlmYWN0SWQCAAUKYXJ0aWZhY3RJZAENZGlzdHJpYnV0ZUZlZQEKX2ZlZUFtb3VudAQMZmVlVG9TdGFrZXJzCQEEbXVsZAIFCl9mZWVBbW91bnQJARNmZWVUb1N0YWtlcnNQZXJjZW50AAQKZmVlVG9WYXVsdAkAZQIFCl9mZWVBbW91bnQFDGZlZVRvU3Rha2VycwkAlAoCBQxmZWVUb1N0YWtlcnMFCmZlZVRvVmF1bHQBDnVwZGF0ZVNldHRpbmdzDhBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8OX2Z1bmRpbmdQZXJpb2QEX2ZlZQxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQQX21heE9wZW5Ob3Rpb25hbBRfZmVlVG9TdGFrZXJzUGVyY2VudA9fbWF4T3JhY2xlRGVsYXkMX3JvbGxvdmVyRmVlDF9mdW5kaW5nTW9kZQkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19pbml0TWFyZ2luUmF0aW8FEF9pbml0TWFyZ2luUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwUEX21tcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa19saXF1aWRhdGlvbkZlZVJhdGlvBRRfbGlxdWlkYXRpb25GZWVSYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa19mdW5kaW5nUGVyaW9kBQ5fZnVuZGluZ1BlcmlvZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFa19mZWUFBF9mZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfc3ByZWFkTGltaXQFDF9zcHJlYWRMaW1pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhQcmljZUltcGFjdAUPX21heFByaWNlSW1wYWN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4UHJpY2VTcHJlYWQFD19tYXhQcmljZVNwcmVhZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19tYXhPcGVuTm90aW9uYWwFEF9tYXhPcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFFWtfZmVlVG9TdGFrZXJzUGVyY2VudAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4T3JhY2xlRGVsYXkFFF9mZWVUb1N0YWtlcnNQZXJjZW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rX3JvbGxvdmVyRmVlBQxfcm9sbG92ZXJGZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfZnVuZGluZ01vZGUFDF9mdW5kaW5nTW9kZQUDbmlsAQ11cGRhdGVGdW5kaW5nBRFfbmV4dEZ1bmRpbmdCbG9jayRfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24lX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbhBfbG9uZ0Z1bmRpbmdSYXRlEV9zaG9ydEZ1bmRpbmdSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX25leHRGdW5kaW5nQmxvY2sFEV9uZXh0RnVuZGluZ0Jsb2NrCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSRfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2xvbmdGdW5kaW5nUmF0ZQUQX2xvbmdGdW5kaW5nUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19zaG9ydEZ1bmRpbmdSYXRlBRFfc2hvcnRGdW5kaW5nUmF0ZQUDbmlsAR9pbmNyZW1lbnRQb3NpdGlvblNlcXVlbmNlTnVtYmVyAw5faXNOZXdQb3NpdGlvbgdfdHJhZGVyCl9kaXJlY3Rpb24EC3Bvc2l0aW9uS2V5CQCsAgIJAKwCAgUHX3RyYWRlcgIBXwkApAMBBQpfZGlyZWN0aW9uAwUOX2lzTmV3UG9zaXRpb24ED2N1cnJlbnRTZXF1ZW5jZQkBDGxhc3RTZXF1ZW5jZQAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEmtfcG9zaXRpb25TZXF1ZW5jZQULcG9zaXRpb25LZXkJAGQCBQ9jdXJyZW50U2VxdWVuY2UAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa19zZXF1ZW5jZQkAZAIFD2N1cnJlbnRTZXF1ZW5jZQABBQNuaWwFA25pbAERdXBkYXRlUG9zaXRpb25GZWUEDl9pc05ld1Bvc2l0aW9uB190cmFkZXIKX2RpcmVjdGlvbgRfZmVlBAtwb3NpdGlvbktleQkArAICCQCsAgIFB190cmFkZXICAV8JAKQDAQUKX2RpcmVjdGlvbgMFDl9pc05ld1Bvc2l0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQtwb3NpdGlvbktleQUEX2ZlZQUDbmlsBQNuaWwBDnVwZGF0ZVBvc2l0aW9uBgdfdHJhZGVyBV9zaXplB19tYXJnaW4NX29wZW5Ob3Rpb25hbCBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbhBfbGF0ZXN0VGltZXN0YW1wBAlkaXJlY3Rpb24JAQxnZXREaXJlY3Rpb24BBQVfc2l6ZQQLcG9zaXRpb25LZXkJAKwCAgkArAICBQdfdHJhZGVyAgFfCQCkAwEFCWRpcmVjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFC3Bvc2l0aW9uS2V5BQVfc2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgULcG9zaXRpb25LZXkFB19tYXJnaW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFC3Bvc2l0aW9uS2V5BQ1fb3Blbk5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQtwb3NpdGlvbktleQUgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAULcG9zaXRpb25LZXkFEF9sYXRlc3RUaW1lc3RhbXAFA25pbAERdXBkYXRlQW1tUmVzZXJ2ZXMCB19xdEFzdFIHX2JzQXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa19xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RSBQNuaWwBEHVwZGF0ZUFtbVdlaWdodHMCB19xdEFzdFcHX2JzQXN0VwkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19xdW90ZUFzc2V0V2VpZ2h0BQdfcXRBc3RXCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2Jhc2VBc3NldFdlaWdodAUHX2JzQXN0VwUDbmlsAQl1cGRhdGVBbW0IB19xdEFzdFIHX2JzQXN0UhdfdG90YWxQb3NpdGlvblNpemVBZnRlchVfb3BlbkludGVyZXN0Tm90aW9uYWwWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZRZfdG90YWxMb25nT3Blbk5vdGlvbmFsF190b3RhbFNob3J0T3Blbk5vdGlvbmFsBAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwADCQECIT0CCQBlAgUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGEludmFsaWQgQU1NIHN0YXRlIGRhdGE6IAkApAMBBRZfdG90YWxMb25nUG9zaXRpb25TaXplAgQgKyAgCQCkAwEFF190b3RhbFNob3J0UG9zaXRpb25TaXplAgQgIT0gCQCkAwEFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFB19xdEFzdFIFB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfdG90YWxQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsBRVfb3BlbkludGVyZXN0Tm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFF2tfdG90YWxMb25nUG9zaXRpb25TaXplBRZfdG90YWxMb25nUG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX29wZW5JbnRlcmVzdExvbmcFFl90b3RhbExvbmdPcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfb3BlbkludGVyZXN0U2hvcnQFF190b3RhbFNob3J0T3Blbk5vdGlvbmFsBQNuaWwBDmRlbGV0ZVBvc2l0aW9uAgdfdHJhZGVyCl9kaXJlY3Rpb24EC3Bvc2l0aW9uS2V5CQCsAgIJAKwCAgUHX3RyYWRlcgIBXwkApAMBBQpfZGlyZWN0aW9uCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQtwb3NpdGlvbktleQkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQtwb3NpdGlvbktleQkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQtwb3NpdGlvbktleQkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQtwb3NpdGlvbktleQkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQtwb3NpdGlvbktleQkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBR5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAFC3Bvc2l0aW9uS2V5BQNuaWwBCHdpdGhkcmF3AghfYWRkcmVzcwdfYW1vdW50BAdiYWxhbmNlCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAGYCBQdfYW1vdW50BQdiYWxhbmNlCQACAQkArAICCQCsAgIJAKwCAgITVW5hYmxlIHRvIHdpdGhkcmF3IAkApAMBBQdfYW1vdW50AhcgZnJvbSBjb250cmFjdCBiYWxhbmNlIAkApAMBBQdiYWxhbmNlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCF9hZGRyZXNzBQdfYW1vdW50CQEKcXVvdGVBc3NldAAFA25pbAENdXBkYXRlQmFsYW5jZQEBaQMJAGYCAAAFAWkJAAIBAgdCYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrX2JhbGFuY2UFAWkFA25pbAELdHJhbnNmZXJGZWUBAWkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBDnN0YWtpbmdBZGRyZXNzAAUBaQkBCnF1b3RlQXNzZXQABQNuaWwBDmRvQnVybkFydGlmYWN0Ag1fYnVybkFydGlmYWN0AWkDBQ1fYnVybkFydGlmYWN0CQDMCAIJAQRCdXJuAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQCEEludmFsaWQgYXJ0aWZhY3QAAQUDbmlsBQNuaWwXAWkBBXBhdXNlAAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhRJbnZhbGlkIHBhdXNlIHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIa19wYXVzZWQGBQNuaWwBaQEHdW5wYXVzZQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIWSW52YWxpZCB1bnBhdXNlIHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIa19wYXVzZWQHBQNuaWwBaQEMc2V0Q2xvc2VPbmx5AAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhtJbnZhbGlkIHNldENsb3NlT25seSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFC2tfY2xvc2VPbmx5BgUDbmlsAWkBDnVuc2V0Q2xvc2VPbmx5AAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAh1JbnZhbGlkIHVuc2V0Q2xvc2VPbmx5IHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgULa19jbG9zZU9ubHkHBQNuaWwBaQEMYWRkTGlxdWlkaXR5ARFfcXVvdGVBc3NldEFtb3VudAMDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MABgkAZwIAAAURX3F1b3RlQXNzZXRBbW91bnQJAAIBAhtJbnZhbGlkIGFkZExpcXVpZGl0eSBwYXJhbXMEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABAVwcmljZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLcXRBc3RSQWZ0ZXIJAGQCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQUYmFzZUFzc2V0QW1vdW50VG9BZGQJAGUCCQEEZGl2ZAIJAQRtdWxkAgULcXRBc3RSQWZ0ZXIFB19xdEFzdFcFBXByaWNlBQdfYnNBc3RSBAtic0FzdFJBZnRlcgkAZAIFB19ic0FzdFIFFGJhc2VBc3NldEFtb3VudFRvQWRkBA0kdDA1MTAwNDUxMTU1CQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDCQEOZ2V0T3JhY2xlUHJpY2UABQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIEE25ld1F1b3RlQXNzZXRXZWlnaHQIBQ0kdDA1MTAwNDUxMTU1Al8xBBJuZXdCYXNlQXNzZXRXZWlnaHQIBQ0kdDA1MTAwNDUxMTU1Al8yBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNTEwMDQ1MTE1NQJfMwQNZG9FeGNoYW5nZVBuTAMJAQIhPQIFDW1hcmdpblRvVmF1bHQAAAQNZG9FeGNoYW5nZVBuTAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIFDW1hcmdpblRvVmF1bHQFA25pbAUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwJAM4IAgkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyCQEQdXBkYXRlQW1tV2VpZ2h0cwIFE25ld1F1b3RlQXNzZXRXZWlnaHQFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ9yZW1vdmVMaXF1aWRpdHkBEV9xdW90ZUFzc2V0QW1vdW50AwMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAGCQBnAgURX3F1b3RlQXNzZXRBbW91bnQAAAkAAgECHkludmFsaWQgcmVtb3ZlTGlxdWlkaXR5IHBhcmFtcwQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEBXByaWNlCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUHX3F0QXN0VwkBBG11bGQCBQdfYnNBc3RSBQdfYnNBc3RXBAtxdEFzdFJBZnRlcgkAZQIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50BBdiYXNlQXNzZXRBbW91bnRUb1JlbW92ZQkBA2FicwEJAGUCCQEEZGl2ZAIJAQRtdWxkAgULcXRBc3RSQWZ0ZXIFB19xdEFzdFcFBXByaWNlBQdfYnNBc3RSBAtic0FzdFJBZnRlcgkAZQIFB19ic0FzdFIFF2Jhc2VBc3NldEFtb3VudFRvUmVtb3ZlBA0kdDA1MjI1MTUyNDAyCQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDCQEOZ2V0T3JhY2xlUHJpY2UABQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIEE25ld1F1b3RlQXNzZXRXZWlnaHQIBQ0kdDA1MjI1MTUyNDAyAl8xBBJuZXdCYXNlQXNzZXRXZWlnaHQIBQ0kdDA1MjI1MTUyNDAyAl8yBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNTIyNTE1MjQwMgJfMwQNZG9FeGNoYW5nZVBuTAMJAQIhPQIFDW1hcmdpblRvVmF1bHQAAAQNZG9FeGNoYW5nZVBuTAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIFDW1hcmdpblRvVmF1bHQFA25pbAUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwJAM4IAgkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyCQEQdXBkYXRlQW1tV2VpZ2h0cwIFE25ld1F1b3RlQXNzZXRXZWlnaHQFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jaGFuZ2VTZXR0aW5ncw4QX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5DF9yb2xsb3ZlckZlZQxfZnVuZGluZ01vZGUDAwMDAwMDAwMDAwMDAwMDAwkAZwIAAAUOX2Z1bmRpbmdQZXJpb2QGCQBnAgAABRBfaW5pdE1hcmdpblJhdGlvBgkAZwIAAAUEX21tcgYJAGcCAAAFFF9saXF1aWRhdGlvbkZlZVJhdGlvBgkAZwIAAAUEX2ZlZQYJAGcCAAAFDF9zcHJlYWRMaW1pdAYJAGcCAAAFD19tYXhQcmljZUltcGFjdAYJAGcCAAAFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwYJAGcCAAAFD19tYXhQcmljZVNwcmVhZAYJAGcCAAAFEF9tYXhPcGVuTm90aW9uYWwGCQBnAgAABRRfZmVlVG9TdGFrZXJzUGVyY2VudAYJAGYCBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUMREVDSU1BTF9VTklUBgkAZwIAAAUPX21heE9yYWNsZURlbGF5BgkAZwIAAAUMX3JvbGxvdmVyRmVlBgMJAQIhPQIFDF9mdW5kaW5nTW9kZQURRlVORElOR19TWU1NRVRSSUMJAQIhPQIFDF9mdW5kaW5nTW9kZQUSRlVORElOR19BU1lNTUVUUklDBwYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAh1JbnZhbGlkIGNoYW5nZVNldHRpbmdzIHBhcmFtcwkBDnVwZGF0ZVNldHRpbmdzDgUQX2luaXRNYXJnaW5SYXRpbwUEX21tcgUUX2xpcXVpZGF0aW9uRmVlUmF0aW8FDl9mdW5kaW5nUGVyaW9kBQRfZmVlBQxfc3ByZWFkTGltaXQFD19tYXhQcmljZUltcGFjdAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBQ9fbWF4UHJpY2VTcHJlYWQFEF9tYXhPcGVuTm90aW9uYWwFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQ9fbWF4T3JhY2xlRGVsYXkFDF9yb2xsb3ZlckZlZQUMX2Z1bmRpbmdNb2RlAWkBCmluaXRpYWxpemUTB19xdEFzdFIHX2JzQXN0Ug5fZnVuZGluZ1BlcmlvZBBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8EX2ZlZQ9fYmFzZU9yYWNsZURhdGEQX3F1b3RlT3JhY2xlRGF0YQxfY29vcmRpbmF0b3IMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5DF9yb2xsb3ZlckZlZQxfZnVuZGluZ01vZGUDAwMDAwMDAwMDAwMDAwMDAwMDCQBnAgAABQdfcXRBc3RSBgkAZwIAAAUHX2JzQXN0UgYJAGcCAAAFDl9mdW5kaW5nUGVyaW9kBgkAZwIAAAUQX2luaXRNYXJnaW5SYXRpbwYJAGcCAAAFBF9tbXIGCQBnAgAABRRfbGlxdWlkYXRpb25GZWVSYXRpbwYJAGcCAAAFBF9mZWUGCQBnAgAABQxfc3ByZWFkTGltaXQGCQBnAgAABQ9fbWF4UHJpY2VJbXBhY3QGCQBnAgAABRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8GCQBnAgAABQ9fbWF4UHJpY2VTcHJlYWQGCQBnAgAABRBfbWF4T3Blbk5vdGlvbmFsBgkAZwIAAAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQGCQBmAgUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFDERFQ0lNQUxfVU5JVAYJAGcCAAAFD19tYXhPcmFjbGVEZWxheQYJAGcCAAAFDF9yb2xsb3ZlckZlZQYDCQECIT0CBQxfZnVuZGluZ01vZGUFEUZVTkRJTkdfU1lNTUVUUklDCQECIT0CBQxfZnVuZGluZ01vZGUFEkZVTkRJTkdfQVNZTU1FVFJJQwcGCQELaW5pdGlhbGl6ZWQABgkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIdSW52YWxpZCBpbml0aWFsaXplIHBhcmFtZXRlcnMJAM4IAgkAzggCCQDOCAIJAM4IAgkBCXVwZGF0ZUFtbQgFB19xdEFzdFIFB19ic0FzdFIAAAAAAAAAAAAAAAAJAQ51cGRhdGVTZXR0aW5ncw4FEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUPX21heFByaWNlU3ByZWFkBRBfbWF4T3Blbk5vdGlvbmFsBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUPX21heE9yYWNsZURlbGF5BQxfcm9sbG92ZXJGZWUFDF9mdW5kaW5nTW9kZQkBDXVwZGF0ZUZ1bmRpbmcFCQBkAgkBDWxhc3RUaW1lc3RhbXAABQ5fZnVuZGluZ1BlcmlvZAAAAAAAAAAACQENdXBkYXRlQmFsYW5jZQEAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYJAMwIAgkBC1N0cmluZ0VudHJ5AgUMa19iYXNlT3JhY2xlBQ9fYmFzZU9yYWNsZURhdGEJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa19xdW90ZU9yYWNsZQUQX3F1b3RlT3JhY2xlRGF0YQkAzAgCCQELU3RyaW5nRW50cnkCBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwkApQgBCQERQGV4dHJOYXRpdmUoMTA2MikBBQxfY29vcmRpbmF0b3IFA25pbAFpARBpbmNyZWFzZVBvc2l0aW9uBApfZGlyZWN0aW9uCV9sZXZlcmFnZRNfbWluQmFzZUFzc2V0QW1vdW50CF9yZWZMaW5rBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEEGVuc3VyZUNhbGxlZE9uY2UJAPwHBAUEdGhpcwIQZW5zdXJlQ2FsbGVkT25jZQUDbmlsBQNuaWwDCQAAAgUQZW5zdXJlQ2FsbGVkT25jZQUQZW5zdXJlQ2FsbGVkT25jZQQHX3RyYWRlcgkBD2dldEFjdHVhbENhbGxlcgEFAWkECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAMDAwMDAwMDAwkBAiE9AgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAQIhPQIFCl9kaXJlY3Rpb24FCURJUl9TSE9SVAcGCQBnAgAABQpfcmF3QW1vdW50BgkBASEBCQELaW5pdGlhbGl6ZWQABgkBASEBBQxpc1F1b3RlQXNzZXQGCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwkBBGRpdmQCBQxERUNJTUFMX1VOSVQFCV9sZXZlcmFnZQkBD2luaXRNYXJnaW5SYXRpbwAGBgkBBnBhdXNlZAAGCQEJY2xvc2VPbmx5AAYJAQ5pc01hcmtldENsb3NlZAAJAAIBAiNJbnZhbGlkIGluY3JlYXNlUG9zaXRpb24gcGFyYW1ldGVycwQNJHQwNTg0NzI1ODYyMQkBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIFB190cmFkZXIJAQ1nZXRBcnRpZmFjdElkAQUBaQQLYWRqdXN0ZWRGZWUIBQ0kdDA1ODQ3MjU4NjIxAl8xBAxidXJuQXJ0aWZhY3QIBQ0kdDA1ODQ3MjU4NjIxAl8yBAdfYW1vdW50CQEEZGl2ZAIFCl9yYXdBbW91bnQJAGQCCQEEbXVsZAIFC2FkanVzdGVkRmVlBQlfbGV2ZXJhZ2UFDERFQ0lNQUxfVU5JVAQTZGlzdHJpYnV0ZUZlZUFtb3VudAkAZQIFCl9yYXdBbW91bnQFB19hbW91bnQEDnJlZmVycmVyRmVlQW55CQD8BwQJAQ9yZWZlcnJhbEFkZHJlc3MAAhVhY2NlcHRQYXltZW50V2l0aExpbmsJAMwIAgUHX3RyYWRlcgkAzAgCBQhfcmVmTGluawUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFA25pbAMJAAACBQ5yZWZlcnJlckZlZUFueQUOcmVmZXJyZXJGZWVBbnkEC3JlZmVycmVyRmVlBAckbWF0Y2gwBQ5yZWZlcnJlckZlZUFueQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAhNJbnZhbGlkIHJlZmVycmVyRmVlBAlmZWVBbW91bnQJAGUCBRNkaXN0cmlidXRlRmVlQW1vdW50BQtyZWZlcnJlckZlZQQNJHQwNTkxMTc1OTI5NwkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNTkxMTc1OTI5NwJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA1OTExNzU5Mjk3Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDU5MTE3NTkyOTcCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNTkxMTc1OTI5NwJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA1OTExNzU5Mjk3Al81BA1pc05ld1Bvc2l0aW9uCQAAAgUPb2xkUG9zaXRpb25TaXplAAAED2lzU2FtZURpcmVjdGlvbgMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HCQAAAgUKX2RpcmVjdGlvbgUJRElSX1NIT1JUBA5leHBhbmRFeGlzdGluZwMJAQEhAQUNaXNOZXdQb3NpdGlvbgUPaXNTYW1lRGlyZWN0aW9uBwQFaXNBZGQJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwQNJHQwNTk1ODY2MjcxOQMDBQ1pc05ld1Bvc2l0aW9uBgUOZXhwYW5kRXhpc3RpbmcEDG9wZW5Ob3Rpb25hbAkBBG11bGQCBQdfYW1vdW50BQlfbGV2ZXJhZ2UEDSR0MDYwMDk1NjAyNjgJAQlzd2FwSW5wdXQCBQVpc0FkZAUMb3Blbk5vdGlvbmFsBBVhbW91bnRCYXNlQXNzZXRCb3VnaHQIBQ0kdDA2MDA5NTYwMjY4Al8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjAwOTU2MDI2OAJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjAwOTU2MDI2OAJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDYwMDk1NjAyNjgCXzQDAwkBAiE9AgUTX21pbkJhc2VBc3NldEFtb3VudAAACQBmAgUTX21pbkJhc2VBc3NldEFtb3VudAkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAcJAAIBCQCsAgIJAKwCAgkArAICAg1MaW1pdCBlcnJvcjogCQCkAwEJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQCAyA8IAkApAMBBRNfbWluQmFzZUFzc2V0QW1vdW50BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWFtb3VudEJhc2VBc3NldEJvdWdodAQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIJAGQCCQEQb3BlbkludGVyZXN0TG9uZwADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAFDG9wZW5Ob3Rpb25hbAAABBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAGQCCQERb3BlbkludGVyZXN0U2hvcnQAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplBQxvcGVuTm90aW9uYWwAAAQNJHQwNjA4MTQ2MTA4OQkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBRRvbGRQb3NpdGlvblRpbWVzdGFtcAUHX2Ftb3VudAQMcmVtYWluTWFyZ2luCAUNJHQwNjA4MTQ2MTA4OQJfMQQCeDEIBQ0kdDA2MDgxNDYxMDg5Al8yBAJ4MggFDSR0MDYwODE0NjEwODkCXzMEC3JvbGxvdmVyRmVlCAUNJHQwNjA4MTQ2MTA4OQJfNAMJAQEhAQkBGXJlcXVpcmVOb3RPdmVyU3ByZWFkTGltaXQCBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAAIBAhVPdmVyIG1heCBzcHJlYWQgbGltaXQDCQEBIQEJAR1yZXF1aXJlTm90T3Zlck1heE9wZW5Ob3Rpb25hbAIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAAIBAhZPdmVyIG1heCBvcGVuIG5vdGlvbmFsCQCgCg4FD25ld1Bvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luCQBkAgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUJAQ1sYXN0VGltZXN0YW1wAAUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQBkAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUMb3Blbk5vdGlvbmFsCQBkAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQAAAkAZAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAAABRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyBQtyb2xsb3ZlckZlZQQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwNjI0MDc2MjUzNQkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAwkApQgBCAUBaQZjYWxsZXIFCl9kaXJlY3Rpb24FD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDYyNDA3NjI1MzUCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA2MjQwNzYyNTM1Al8yAwkAZgIFE29sZFBvc2l0aW9uTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAkAAgECLlVzZSBkZWNyZWFzZVBvc2l0aW9uIHRvIGRlY3JlYXNlIHBvc2l0aW9uIHNpemUJAAIBAhRDbG9zZSBwb3NpdGlvbiBmaXJzdAQPbmV3UG9zaXRpb25TaXplCAUNJHQwNTk1ODY2MjcxOQJfMQQXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4IBQ0kdDA1OTU4NjYyNzE5Al8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDU5NTg2NjI3MTkCXzMEFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCAUNJHQwNTk1ODY2MjcxOQJfNAQUbmV3UG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA1OTU4NjYyNzE5Al81BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1OTU4NjYyNzE5Al82BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTk1ODY2MjcxOQJfNwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDU5NTg2NjI3MTkCXzgEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA1OTU4NjYyNzE5Al85BA50b3RhbExvbmdBZnRlcggFDSR0MDU5NTg2NjI3MTkDXzEwBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA1OTU4NjYyNzE5A18xMQQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA1OTU4NjYyNzE5A18xMgQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNTk1ODY2MjcxOQNfMTMEC3JvbGxvdmVyRmVlCAUNJHQwNTk1ODY2MjcxOQNfMTQEDSR0MDYyNzI1NjI3OTYJAQ1kaXN0cmlidXRlRmVlAQkAZAIFCWZlZUFtb3VudAULcm9sbG92ZXJGZWUEDGZlZVRvU3Rha2VycwgFDSR0MDYyNzI1NjI3OTYCXzEECmZlZVRvVmF1bHQIBQ0kdDA2MjcyNTYyNzk2Al8yBAVzdGFrZQMJAGcCBQdfYW1vdW50BQtyb2xsb3ZlckZlZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIJYWRkTG9ja2VkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAkAZQIFB19hbW91bnQFC3JvbGxvdmVyRmVlBQNuaWwJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIJAGUCBQtyb2xsb3ZlckZlZQUHX2Ftb3VudAUDbmlsBQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBAxkZXBvc2l0VmF1bHQJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUMZGVwb3NpdFZhdWx0BQxkZXBvc2l0VmF1bHQECW5vdGlmeUZlZQkA/AcECQEMbWluZXJBZGRyZXNzAAIKbm90aWZ5RmVlcwkAzAgCBQdfdHJhZGVyCQDMCAIFCWZlZUFtb3VudAUDbmlsBQNuaWwDCQAAAgUJbm90aWZ5RmVlBQlub3RpZnlGZWUEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQUXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxhdGVzdENQRgUUbmV3UG9zaXRpb25UaW1lc3RhbXAJAR9pbmNyZW1lbnRQb3NpdGlvblNlcXVlbmNlTnVtYmVyAwUNaXNOZXdQb3NpdGlvbgUHX3RyYWRlcgUKX2RpcmVjdGlvbgkBEXVwZGF0ZVBvc2l0aW9uRmVlBAUNaXNOZXdQb3NpdGlvbgUHX3RyYWRlcgUKX2RpcmVjdGlvbgULYWRqdXN0ZWRGZWUJAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkBDXVwZGF0ZUJhbGFuY2UBCQBlAgkAZAIJAQhjYmFsYW5jZQAFB19hbW91bnQFC3JvbGxvdmVyRmVlCQEOZG9CdXJuQXJ0aWZhY3QCBQxidXJuQXJ0aWZhY3QFAWkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJYWRkTWFyZ2luAQpfZGlyZWN0aW9uBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEEGVuc3VyZUNhbGxlZE9uY2UJAPwHBAUEdGhpcwIQZW5zdXJlQ2FsbGVkT25jZQUDbmlsBQNuaWwDCQAAAgUQZW5zdXJlQ2FsbGVkT25jZQUQZW5zdXJlQ2FsbGVkT25jZQQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIEB19hbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAMDAwMDCQEBIQEFDGlzUXVvdGVBc3NldAYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24CCQClCAEIBQFpBmNhbGxlcgUKX2RpcmVjdGlvbgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECHEludmFsaWQgYWRkTWFyZ2luIHBhcmFtZXRlcnMEDSR0MDY1MDQzNjUyMjMJAQtnZXRQb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24ED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDY1MDQzNjUyMjMCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNjUwNDM2NTIyMwJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2NTA0MzY1MjIzAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDY1MDQzNjUyMjMCXzQEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAUNJHQwNjUwNDM2NTIyMwJfNQQFc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACCWFkZExvY2tlZAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFB19hbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEC3JvbGxvdmVyRmVlCQEPY2FsY1JvbGxvdmVyRmVlAgURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uVGltZXN0YW1wBBZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzAwkAZgIFC3JvbGxvdmVyRmVlAAAEDSR0MDY1NTA4NjU1NjcJAQ1kaXN0cmlidXRlRmVlAQULcm9sbG92ZXJGZWUEDGZlZVRvU3Rha2VycwgFDSR0MDY1NTA4NjU1NjcCXzEECmZlZVRvVmF1bHQIBQ0kdDA2NTUwODY1NTY3Al8yBAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBQxmZWVUb1N0YWtlcnMFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEC2xvY2tCYWREZWJ0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgkBAS0BBQpmZWVUb1ZhdWx0BQNuaWwFA25pbAMJAAACBQtsb2NrQmFkRGVidAULbG9ja0JhZERlYnQJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUJAGQCCQBlAgURb2xkUG9zaXRpb25NYXJnaW4FC3JvbGxvdmVyRmVlBQdfYW1vdW50BRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUb2xkUG9zaXRpb25Mc3RVcGRDUEYJAQ1sYXN0VGltZXN0YW1wAAkBDXVwZGF0ZUJhbGFuY2UBCQBlAgkAZAIJAQhjYmFsYW5jZQAFB19hbW91bnQFC3JvbGxvdmVyRmVlBRZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDHJlbW92ZU1hcmdpbgIHX2Ftb3VudApfZGlyZWN0aW9uBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEEGVuc3VyZUNhbGxlZE9uY2UJAPwHBAUEdGhpcwIQZW5zdXJlQ2FsbGVkT25jZQUDbmlsBQNuaWwDCQAAAgUQZW5zdXJlQ2FsbGVkT25jZQUQZW5zdXJlQ2FsbGVkT25jZQQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIDAwMDAwkAZwIAAAUHX2Ftb3VudAYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIfSW52YWxpZCByZW1vdmVNYXJnaW4gcGFyYW1ldGVycwQNJHQwNjY5NzE2NzE1MQkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNjY5NzE2NzE1MQJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA2Njk3MTY3MTUxAl8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDY2OTcxNjcxNTECXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjY5NzE2NzE1MQJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA2Njk3MTY3MTUxAl81BA0kdDA2NzE1NzY3NDA2CQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFFG9sZFBvc2l0aW9uVGltZXN0YW1wCQEBLQEFB19hbW91bnQEDHJlbWFpbk1hcmdpbggFDSR0MDY3MTU3Njc0MDYCXzEEB2JhZERlYnQIBQ0kdDA2NzE1NzY3NDA2Al8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDY3MTU3Njc0MDYCXzMEC3JvbGxvdmVyRmVlCAUNJHQwNjcxNTc2NzQwNgJfNAMJAQIhPQIFB2JhZERlYnQAAAkAAgECHUludmFsaWQgcmVtb3ZlZCBtYXJnaW4gYW1vdW50BAttYXJnaW5SYXRpbwkBD2NhbGNNYXJnaW5SYXRpbwMFDHJlbWFpbk1hcmdpbgUHYmFkRGVidAUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwDCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwULbWFyZ2luUmF0aW8JAQ9pbml0TWFyZ2luUmF0aW8ABgkAAgEJAKwCAgkArAICCQCsAgICGVRvbyBtdWNoIG1hcmdpbiByZW1vdmVkOiAJAKQDAQULbWFyZ2luUmF0aW8CAyA8IAkApAMBCQEPaW5pdE1hcmdpblJhdGlvAAQNJHQwNjc3OTI2Nzg1MQkBDWRpc3RyaWJ1dGVGZWUBBQtyb2xsb3ZlckZlZQQMZmVlVG9TdGFrZXJzCAUNJHQwNjc3OTI2Nzg1MQJfMQQKZmVlVG9WYXVsdAgFDSR0MDY3NzkyNjc4NTECXzIEFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMDCQBmAgULcm9sbG92ZXJGZWUAAAQLbG9ja0JhZERlYnQJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCCQEBLQEFCmZlZVRvVmF1bHQFA25pbAUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwQHdW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgkAZAIFB19hbW91bnQFDGZlZVRvU3Rha2VycwUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBgUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4FF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD29sZFBvc2l0aW9uU2l6ZQkBDWxhc3RUaW1lc3RhbXAACQEId2l0aGRyYXcCCAUBaQZjYWxsZXIFB19hbW91bnQJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAGUCCQEIY2JhbGFuY2UABQdfYW1vdW50BQtyb2xsb3ZlckZlZQUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1jbG9zZVBvc2l0aW9uBAVfc2l6ZQpfZGlyZWN0aW9uFF9taW5RdW90ZUFzc2V0QW1vdW50DF9hZGRUb01hcmdpbgQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBBlbnN1cmVDYWxsZWRPbmNlCQD8BwQFBHRoaXMCEGVuc3VyZUNhbGxlZE9uY2UFA25pbAUDbmlsAwkAAAIFEGVuc3VyZUNhbGxlZE9uY2UFEGVuc3VyZUNhbGxlZE9uY2UEB190cmFkZXIJAQ9nZXRBY3R1YWxDYWxsZXIBBQFpBA5fdHJhZGVyQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFB190cmFkZXICDkludmFsaWQgY2FsbGVyBAtwb3NpdGlvbkZlZQkBDmdldFBvc2l0aW9uRmVlAQUHX3RyYWRlcgMDAwMDAwkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24GCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAGcCAAAFBV9zaXplBgkAZgIAAAUUX21pblF1b3RlQXNzZXRBbW91bnQGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIgSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnMEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgJfNQQNJHQwNzAwNjc3MDY3MAkBFWludGVybmFsQ2xvc2VQb3NpdGlvbggFB190cmFkZXIFCl9kaXJlY3Rpb24FBV9zaXplBQtwb3NpdGlvbkZlZQUUX21pblF1b3RlQXNzZXRBbW91bnQFDF9hZGRUb01hcmdpbgYGBA9uZXdQb3NpdGlvblNpemUIBQ0kdDA3MDA2NzcwNjcwAl8xBBFuZXdQb3NpdGlvbk1hcmdpbggFDSR0MDcwMDY3NzA2NzACXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNzAwNjc3MDY3MAJfMwQUbmV3UG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA3MDA2NzcwNjcwAl80BA9wb3NpdGlvbkJhZERlYnQIBQ0kdDA3MDA2NzcwNjcwAl81BAtyZWFsaXplZFBubAgFDSR0MDcwMDY3NzA2NzACXzYEDm1hcmdpblRvVHJhZGVyCAUNJHQwNzAwNjc3MDY3MAJfNwQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDcwMDY3NzA2NzACXzgEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDcwMDY3NzA2NzACXzkEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA3MDA2NzcwNjcwA18xMAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDcwMDY3NzA2NzADXzExBA50b3RhbExvbmdBZnRlcggFDSR0MDcwMDY3NzA2NzADXzEyBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA3MDA2NzcwNjcwA18xMwQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3MDA2NzcwNjcwA18xNAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzAwNjc3MDY3MANfMTUEC3JlYWxpemVkRmVlCAUNJHQwNzAwNjc3MDY3MANfMTYDCQBmAgUPcG9zaXRpb25CYWREZWJ0AAAJAAIBAipJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVyczogYmFkIGRlYnQDCQBnAgUUb2xkUG9zaXRpb25UaW1lc3RhbXAJAQ1sYXN0VGltZXN0YW1wAAkAAgECU0ludmFsaWQgY2xvc2VQb3NpdGlvbiBwYXJhbWV0ZXJzOiB3YWl0IGF0IGxlYXN0IDEgYmxvY2sgYmVmb3JlIGNsb3NpbmcgdGhlIHBvc2l0aW9uBA5pc1BhcnRpYWxDbG9zZQkBAiE9AgUPbmV3UG9zaXRpb25TaXplAAAEDndpdGhkcmF3QW1vdW50CQBkAgUObWFyZ2luVG9UcmFkZXIFC3JlYWxpemVkRmVlBAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUOd2l0aGRyYXdBbW91bnQEDWFtbU5ld0JhbGFuY2UDCQBmAgAABQphbW1CYWxhbmNlAAAFCmFtbUJhbGFuY2UEB3Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIFDndpdGhkcmF3QW1vdW50BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBA5yZWZlcnJlckZlZUFueQkA/AcECQEPcmVmZXJyYWxBZGRyZXNzAAINYWNjZXB0UGF5bWVudAkAzAgCBQdfdHJhZGVyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAULcmVhbGl6ZWRGZWUFA25pbAMJAAACBQ5yZWZlcnJlckZlZUFueQUOcmVmZXJyZXJGZWVBbnkEC3JlZmVycmVyRmVlBAckbWF0Y2gwBQ5yZWZlcnJlckZlZUFueQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAhNJbnZhbGlkIHJlZmVycmVyRmVlBA0kdDA3MTY0MjcxNzE1CQENZGlzdHJpYnV0ZUZlZQEJAGUCBQtyZWFsaXplZEZlZQULcmVmZXJyZXJGZWUEDGZlZVRvU3Rha2VycwgFDSR0MDcxNjQyNzE3MTUCXzEECmZlZVRvVmF1bHQIBQ0kdDA3MTY0MjcxNzE1Al8yBAxkZXBvc2l0VmF1bHQJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUMZGVwb3NpdFZhdWx0BQxkZXBvc2l0VmF1bHQECW5vdGlmeUZlZQkA/AcECQEMbWluZXJBZGRyZXNzAAIKbm90aWZ5RmVlcwkAzAgCBQdfdHJhZGVyCQDMCAIFC3JlYWxpemVkRmVlBQNuaWwFA25pbAMJAAACBQlub3RpZnlGZWUFCW5vdGlmeUZlZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkAzggCAwUOaXNQYXJ0aWFsQ2xvc2UJAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgkBDWxhc3RUaW1lc3RhbXAACQEOZGVsZXRlUG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyAwkAZgIFDm1hcmdpblRvVHJhZGVyAAAJAQh3aXRoZHJhdwIFDl90cmFkZXJBZGRyZXNzBQ5tYXJnaW5Ub1RyYWRlcgUDbmlsCQENdXBkYXRlQmFsYW5jZQEFDWFtbU5ld0JhbGFuY2UJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlsaXF1aWRhdGUCB190cmFkZXIKX2RpcmVjdGlvbgQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBA9zcG90TWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAwUHX3RyYWRlcgUKX2RpcmVjdGlvbgUPUE5MX09QVElPTl9TUE9UBBZsaXF1aWRhdGlvbk1hcmdpblJhdGlvAwkBFmlzT3ZlckZsdWN0dWF0aW9uTGltaXQABBFvcmFjbGVNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24DBQdfdHJhZGVyBQpfZGlyZWN0aW9uBRFQTkxfT1BUSU9OX09SQUNMRQkBBHZtYXgCBQ9zcG90TWFyZ2luUmF0aW8FEW9yYWNsZU1hcmdpblJhdGlvBQ9zcG90TWFyZ2luUmF0aW8DAwMDAwkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMFFmxpcXVpZGF0aW9uTWFyZ2luUmF0aW8JARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAcGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECE1VuYWJsZSB0byBsaXF1aWRhdGUEFGlzUGFydGlhbExpcXVpZGF0aW9uAwMJAGYCBQ9zcG90TWFyZ2luUmF0aW8JARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkAZgIJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAAAAcJAGYCBQxERUNJTUFMX1VOSVQJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAHBA9vbGRQb3NpdGlvblNpemUICQELZ2V0UG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uAl8xBA9wb3NpdGlvblNpemVBYnMJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUEDSR0MDc0MjEzNzQ1MzYDBRRpc1BhcnRpYWxMaXF1aWRhdGlvbgQPbGlxdWlkYXRpb25TaXplCQEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplBBBsaXF1aWRhdGlvblJhdGlvCQEEZGl2ZAIJAQNhYnMBBQ9saXF1aWRhdGlvblNpemUFD3Bvc2l0aW9uU2l6ZUFicwkAlAoCBRBsaXF1aWRhdGlvblJhdGlvCQEDYWJzAQUPbGlxdWlkYXRpb25TaXplCQCUCgIAAAUPcG9zaXRpb25TaXplQWJzBBBsaXF1aWRhdGlvblJhdGlvCAUNJHQwNzQyMTM3NDUzNgJfMQQPbGlxdWlkYXRpb25TaXplCAUNJHQwNzQyMTM3NDUzNgJfMgQNJHQwNzQ1NDI3NTE5OAkBFWludGVybmFsQ2xvc2VQb3NpdGlvbggFB190cmFkZXIFCl9kaXJlY3Rpb24DBRRpc1BhcnRpYWxMaXF1aWRhdGlvbgUPbGlxdWlkYXRpb25TaXplBQ9wb3NpdGlvblNpemVBYnMJARNsaXF1aWRhdGlvbkZlZVJhdGlvAAAABgcGBA9uZXdQb3NpdGlvblNpemUIBQ0kdDA3NDU0Mjc1MTk4Al8xBBFuZXdQb3NpdGlvbk1hcmdpbggFDSR0MDc0NTQyNzUxOTgCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNzQ1NDI3NTE5OAJfMwQUbmV3UG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA3NDU0Mjc1MTk4Al80BA9wb3NpdGlvbkJhZERlYnQIBQ0kdDA3NDU0Mjc1MTk4Al81BAtyZWFsaXplZFBubAgFDSR0MDc0NTQyNzUxOTgCXzYEDm1hcmdpblRvVHJhZGVyCAUNJHQwNzQ1NDI3NTE5OAJfNwQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDc0NTQyNzUxOTgCXzgEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDc0NTQyNzUxOTgCXzkEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA3NDU0Mjc1MTk4A18xMAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDc0NTQyNzUxOTgDXzExBA50b3RhbExvbmdBZnRlcggFDSR0MDc0NTQyNzUxOTgDXzEyBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA3NDU0Mjc1MTk4A18xMwQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3NDU0Mjc1MTk4A18xNAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzQ1NDI3NTE5OANfMTUEEmxpcXVpZGF0aW9uUGVuYWx0eQgFDSR0MDc0NTQyNzUxOTgDXzE2BA9mZWVUb0xpcXVpZGF0b3IJAGkCBRJsaXF1aWRhdGlvblBlbmFsdHkAAgQKZmVlVG9WYXVsdAkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQUPZmVlVG9MaXF1aWRhdG9yBAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUSbGlxdWlkYXRpb25QZW5hbHR5BA1uZXdBbW1CYWxhbmNlAwkAZgIAAAUKYW1tQmFsYW5jZQAABQphbW1CYWxhbmNlBAtsb2NrQmFkRGVidAMJAGYCBQ9wb3NpdGlvbkJhZERlYnQAAAQLbG9ja0JhZERlYnQJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCCQBkAgUPcG9zaXRpb25CYWREZWJ0BRJsaXF1aWRhdGlvblBlbmFsdHkFA25pbAUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgULbG9ja0JhZERlYnQFC2xvY2tCYWREZWJ0BAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBRJsaXF1aWRhdGlvblBlbmFsdHkFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgMFFGlzUGFydGlhbExpcXVpZGF0aW9uCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAQ1sYXN0VGltZXN0YW1wAAkBDmRlbGV0ZVBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQ9mZWVUb0xpcXVpZGF0b3IJAQ11cGRhdGVCYWxhbmNlAQUNbmV3QW1tQmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpwYXlGdW5kaW5nAAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAMDAwkAZgIFFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBDWxhc3RUaW1lc3RhbXAABgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBCQCsAgIJAKwCAgkArAICAiFJbnZhbGlkIGZ1bmRpbmcgYmxvY2sgdGltZXN0YW1wOiAJAKQDAQkBDWxhc3RUaW1lc3RhbXAAAgMgPCAJAKQDAQUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wBA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDSR0MDc3MzIzNzc0MDEJAQpnZXRGdW5kaW5nAAQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA3NzMyMzc3NDAxAl8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwNzczMjM3NzQwMQJfMgQOcHJlbWl1bVRvVmF1bHQIBQ0kdDA3NzMyMzc3NDAxAl8zBBNkb1BheUZ1bmRpbmdUb1ZhdWx0AwkAZgIFDnByZW1pdW1Ub1ZhdWx0AAAEE2RvUGF5RnVuZGluZ1RvVmF1bHQJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCCQEBLQEFDnByZW1pdW1Ub1ZhdWx0BQNuaWwFA25pbAMJAAACBRNkb1BheUZ1bmRpbmdUb1ZhdWx0BRNkb1BheUZ1bmRpbmdUb1ZhdWx0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRNkb1BheUZ1bmRpbmdUb1ZhdWx0BRNkb1BheUZ1bmRpbmdUb1ZhdWx0CQENdXBkYXRlRnVuZGluZwUJAGQCBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGQCCQEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRNsb25nUHJlbWl1bUZyYWN0aW9uCQBkAgkBJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkBBGRpdmQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUABAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEDSR0MDc4NDU0Nzg4MjAJARRnZXRTeW5jVGVybWluYWxQcmljZQMJAQ5nZXRPcmFjbGVQcmljZQAFB19xdEFzdFIFB19ic0FzdFIEE25ld1F1b3RlQXNzZXRXZWlnaHQIBQ0kdDA3ODQ1NDc4ODIwAl8xBBJuZXdCYXNlQXNzZXRXZWlnaHQIBQ0kdDA3ODQ1NDc4ODIwAl8yBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNzg0NTQ3ODgyMAJfMwQQbWFyZ2luVG9WYXVsdEFkagMDCQBmAgAABQ1tYXJnaW5Ub1ZhdWx0CQBmAgkBA2FicwEFDW1hcmdpblRvVmF1bHQJAQhjYmFsYW5jZQAHCQEBLQEJAQhjYmFsYW5jZQAFDW1hcmdpblRvVmF1bHQEDWRvRXhjaGFuZ2VQbkwDCQECIT0CBRBtYXJnaW5Ub1ZhdWx0QWRqAAAEDWRvRXhjaGFuZ2VQbkwJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCBRBtYXJnaW5Ub1ZhdWx0QWRqBQNuaWwFA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MCQDOCAIJAQ11cGRhdGVCYWxhbmNlAQkAZAIJAQhjYmFsYW5jZQAFEG1hcmdpblRvVmF1bHRBZGoJARB1cGRhdGVBbW1XZWlnaHRzAgUTbmV3UXVvdGVBc3NldFdlaWdodAUSbmV3QmFzZUFzc2V0V2VpZ2h0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEGVuc3VyZUNhbGxlZE9uY2UAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIiSW52YWxpZCBzYXZlQ3VycmVudFR4SWQgcGFyYW1ldGVycwQEdHhJZAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUIa19sYXN0VHgCAAMJAQIhPQIFBmxhc3RUeAUEdHhJZAkAzAgCCQELU3RyaW5nRW50cnkCBQhrX2xhc3RUeAUEdHhJZAUDbmlsCQACAQIpQ2FuIG5vdCBjYWxsIHZBTU0gbWV0aG9kcyB0d2ljZSBpbiBvbmUgdHgBaQEPbWlncmF0ZVBvc2l0aW9uAQdfdHJhZGVyBA9wb3NpdGlvblNpemVPcHQJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFB190cmFkZXIDCQEJaXNEZWZpbmVkAQUPcG9zaXRpb25TaXplT3B0BAVwU2l6ZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFB190cmFkZXIEB3BNYXJnaW4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FB190cmFkZXIECXBOb3Rpb25hbAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUHX3RyYWRlcgQJcEZyYWN0aW9uCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQdfdHJhZGVyBApwVGltZXN0YW1wCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBR5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAFB190cmFkZXIEBHBGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFDWtfcG9zaXRpb25GZWUFB190cmFkZXIECXBTZXF1ZW5jZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUSa19wb3NpdGlvblNlcXVlbmNlBQdfdHJhZGVyBApwRGlyZWN0aW9uCQEMZ2V0RGlyZWN0aW9uAQUFcFNpemUEC3Bvc2l0aW9uS2V5CQCsAgIJAKwCAgUHX3RyYWRlcgIBXwkApAMBBQpwRGlyZWN0aW9uCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQdfdHJhZGVyCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FB190cmFkZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUHX3RyYWRlcgkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQdfdHJhZGVyCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAUHX3RyYWRlcgkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQdfdHJhZGVyCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFEmtfcG9zaXRpb25TZXF1ZW5jZQUHX3RyYWRlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFC3Bvc2l0aW9uS2V5BQVwU2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgULcG9zaXRpb25LZXkFB3BNYXJnaW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFC3Bvc2l0aW9uS2V5BQlwTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FC3Bvc2l0aW9uS2V5BQlwRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAULcG9zaXRpb25LZXkFCnBUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDWtfcG9zaXRpb25GZWUFC3Bvc2l0aW9uS2V5BQRwRmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRJrX3Bvc2l0aW9uU2VxdWVuY2UFC3Bvc2l0aW9uS2V5BQlwU2VxdWVuY2UFA25pbAkAAgEJAKwCAgIXTm90aGluZyB0byBtaWdyYXRlIGZvciAFB190cmFkZXIBaQEndmlld19jYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50AgdfdHJhZGVyCl9kaXJlY3Rpb24EBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQNJHQwODI0MzI4MjU2OAkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgQMcG9zaXRpb25TaXplCAUNJHQwODI0MzI4MjU2OAJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDA4MjQzMjgyNTY4Al8yBANwb24IBQ0kdDA4MjQzMjgyNTY4Al8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDgyNDMyODI1NjgCXzQEEXBvc2l0aW9uVGltZXN0YW1wCAUNJHQwODI0MzI4MjU2OAJfNQQNJHQwODI1NzE4MjY4NAkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAwUHX3RyYWRlcgUKX2RpcmVjdGlvbgUPUE5MX09QVElPTl9TUE9UBBBwb3NpdGlvbk5vdGlvbmFsCAUNJHQwODI1NzE4MjY4NAJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDgyNTcxODI2ODQCXzIEDSR0MDgyNjg3ODI5MTEJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQxwb3NpdGlvblNpemUFDnBvc2l0aW9uTWFyZ2luBRFwb3NpdGlvbkxzdFVwZENQRgURcG9zaXRpb25UaW1lc3RhbXAFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDgyNjg3ODI5MTECXzEEB2JhZERlYnQIBQ0kdDA4MjY4NzgyOTExAl8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDgyNjg3ODI5MTECXzMEC3JvbGxvdmVyRmVlCAUNJHQwODI2ODc4MjkxMQJfNAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAQFzAQUMcmVtYWluTWFyZ2luCQEBcwEFDmZ1bmRpbmdQYXltZW50CQEBcwEJAQ5nZXRNYXJnaW5SYXRpbwIFB190cmFkZXIFCl9kaXJlY3Rpb24JAQFzAQUNdW5yZWFsaXplZFBubAkBAXMBBQdiYWREZWJ0CQEBcwEFEHBvc2l0aW9uTm90aW9uYWwJAQFzAQULcm9sbG92ZXJGZWUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEVdmlld19nZXRQZWdBZGp1c3RDb3N0AQZfcHJpY2UEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQGcmVzdWx0CQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDBQZfcHJpY2UFB19xdEFzdFIFB19ic0FzdFIJAAIBCQCkAwEIBQZyZXN1bHQCXzMBaQEYdmlld19nZXRUZXJtaW5hbEFtbVByaWNlAAQNJHQwODM2NDY4MzcyNwkBE2dldFRlcm1pbmFsQW1tU3RhdGUABBl0ZXJtaW5hbFF1b3RlQXNzZXRSZXNlcnZlCAUNJHQwODM2NDY4MzcyNwJfMQQYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlCAUNJHQwODM2NDY4MzcyNwJfMgQFcHJpY2UJAQRkaXZkAgkBBG11bGQCBRl0ZXJtaW5hbFF1b3RlQXNzZXRSZXNlcnZlCQEGcXRBc3RXAAkBBG11bGQCBRh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUJAQZic0FzdFcACQACAQkApAMBBQVwcmljZQFpAQ92aWV3X2dldEZ1bmRpbmcABARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMED3VuZGVybHlpbmdQcmljZQkBDmdldE9yYWNsZVByaWNlAAQNJHQwODQyODY4NDM2NAkBCmdldEZ1bmRpbmcABBRzaG9ydFByZW1pdW1GcmFjdGlvbggFDSR0MDg0Mjg2ODQzNjQCXzEEE2xvbmdQcmVtaXVtRnJhY3Rpb24IBQ0kdDA4NDI4Njg0MzY0Al8yBA5wcmVtaXVtVG9WYXVsdAgFDSR0MDg0Mjg2ODQzNjQCXzMEC2xvbmdGdW5kaW5nCQEEZGl2ZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQQMc2hvcnRGdW5kaW5nCQEEZGl2ZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAQFzAQULbG9uZ0Z1bmRpbmcJAQFzAQUMc2hvcnRGdW5kaW5nCQEBcwEJAQxnZXRTcG90UHJpY2UACQEBcwEJAQ5nZXRPcmFjbGVQcmljZQAJAQFzAQUOcHJlbWl1bVRvVmF1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQY29tcHV0ZVNwb3RQcmljZQAEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQGcmVzdWx0CQEMZ2V0U3BvdFByaWNlAAkAlAoCBQNuaWwFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAR9jb21wdXRlRmVlRm9yVHJhZGVyV2l0aEFydGlmYWN0AgdfdHJhZGVyC19hcnRpZmFjdElkBAZyZXN1bHQJARhnZXRGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCBQdfdHJhZGVyBQtfYXJ0aWZhY3RJZAkAlAoCBQNuaWwFBnJlc3VsdAECdHgBBnZlcmlmeQAEDmNvb3JkaW5hdG9yU3RyCQCdCAIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAwkBCWlzRGVmaW5lZAEFDmNvb3JkaW5hdG9yU3RyBAVhZG1pbgkAnQgCCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQ5jb29yZGluYXRvclN0cgUPa19hZG1pbl9hZGRyZXNzAwkBCWlzRGVmaW5lZAEFBWFkbWluCQELdmFsdWVPckVsc2UCCQCbCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBWFkbWluCQCsAgIJAKwCAgkArAICAgdzdGF0dXNfCQClCAEFBHRoaXMCAV8JANgEAQgFAnR4AmlkBwkAAgECLnVuYWJsZSB0byB2ZXJpZnk6IGFkbWluIG5vdCBzZXQgaW4gY29vcmRpbmF0b3IJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXlIarCB", "height": 2503016, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 78SWcrSAJ4UJ9c5HLKYZGZu9CB7ShxdWBqDWi8jSjvHq Next: BpiEY6rsMhGhvFnGbbw8BCEqCrA2XNzgrgP5VdCGbZE3 Diff:
OldNewDifferences
1919
2020 let i = "k_positionSequence"
2121
22-let j = "k_positionAsset"
22+let j = "k_positionFee"
2323
24-let k = "k_positionFee"
24+let k = "k_positionTimestamp"
2525
26-let l = "k_positionTimestamp"
26+let l = "k_initialized"
2727
28-let m = "k_initialized"
28+let m = "k_paused"
2929
30-let n = "k_paused"
30+let n = "k_closeOnly"
3131
32-let o = "k_closeOnly"
32+let o = "k_fee"
3333
34-let p = "k_fee"
34+let p = "k_rollover_fee"
3535
36-let q = "k_rollover_fee"
36+let q = "k_fundingPeriod"
3737
38-let r = "k_fundingPeriod"
38+let r = "k_initMarginRatio"
3939
40-let s = "k_initMarginRatio"
40+let s = "k_mmr"
4141
42-let t = "k_mmr"
42+let t = "k_liquidationFeeRatio"
4343
44-let u = "k_liquidationFeeRatio"
44+let u = "k_partLiquidationRatio"
4545
46-let v = "k_partLiquidationRatio"
46+let v = "k_spreadLimit"
4747
48-let w = "k_spreadLimit"
48+let w = "k_maxPriceImpact"
4949
50-let x = "k_maxPriceImpact"
50+let x = "k_maxPriceSpread"
5151
52-let y = "k_maxPriceSpread"
52+let y = "k_maxOpenNotional"
5353
54-let z = "k_maxOpenNotional"
54+let z = "k_feeToStakersPercent"
5555
56-let A = "k_feeToStakersPercent"
56+let A = "k_maxOracleDelay"
5757
58-let B = "k_maxOracleDelay"
58+let B = "k_fundingMode"
5959
60-let C = "k_fundingMode"
60+let C = "k_latestLongPremiumFraction"
6161
62-let D = "k_latestLongPremiumFraction"
62+let D = "k_latestShortPremiumFraction"
6363
64-let E = "k_latestShortPremiumFraction"
64+let E = "k_nextFundingBlockMinTimestamp"
6565
66-let F = "k_nextFundingBlockMinTimestamp"
66+let F = "k_longFundingRate"
6767
68-let G = "k_longFundingRate"
68+let G = "k_shortFundingRate"
6969
70-let H = "k_shortFundingRate"
70+let H = "k_qtAstR"
7171
72-let I = "k_qtAstR"
72+let I = "k_bsAstR"
7373
74-let J = "k_bsAstR"
74+let J = "k_qtAstW"
7575
76-let K = "k_qtAstW"
76+let K = "k_bsAstW"
7777
78-let L = "k_bsAstW"
78+let L = "k_totalPositionSize"
7979
80-let M = "k_totalPositionSize"
80+let M = "k_totalLongPositionSize"
8181
82-let N = "k_totalLongPositionSize"
82+let N = "k_totalShortPositionSize"
8383
84-let O = "k_totalShortPositionSize"
84+let O = "k_openInterestNotional"
8585
86-let P = "k_openInterestNotional"
86+let P = "k_openInterestShort"
8787
88-let Q = "k_openInterestShort"
88+let Q = "k_openInterestLong"
8989
90-let R = "k_openInterestLong"
90+let R = "k_lastTx"
9191
92-let S = "k_lastTx"
92+let S = "k_coordinatorAddress"
9393
94-let T = "k_coordinatorAddress"
94+let T = "k_vault_address"
9595
96-let U = "k_vault_address"
96+let U = "k_admin_address"
9797
98-let V = "k_admin_address"
98+let V = "k_quote_asset"
9999
100-let W = "k_quote_asset"
100+let W = "k_staking_address"
101101
102-let X = "k_quote_staking"
102+let X = "k_miner_address"
103103
104-let Y = "k_staking_address"
104+let Y = "k_orders_address"
105105
106-let Z = "k_miner_address"
106+let Z = "k_referral_address"
107107
108-let aa = "k_orders_address"
108+let aa = "k_nft_manager_address"
109109
110-let ab = "k_referral_address"
111-
112-let ac = "k_exchange_address"
113-
114-let ad = "k_nft_manager_address"
115-
116-func ae (af,ag) = ((af + "_") + ag)
110+func ab (ac,ad) = ((ac + "_") + ad)
117111
118112
119-func ah () = valueOrErrorMessage(addressFromString(getStringValue(this, T)), "Coordinator not set")
113+func ae () = valueOrErrorMessage(addressFromString(getStringValue(this, S)), "Coordinator not set")
120114
121115
122-func ai () = addressFromString(getStringValue(ah(), V))
116+func af () = addressFromString(getStringValue(ae(), U))
123117
124118
125-func aj () = fromBase58String(getStringValue(ah(), W))
119+func ag () = fromBase58String(getStringValue(ae(), V))
126120
127121
128-func ak () = valueOrErrorMessage(addressFromString(getStringValue(ah(), X)), "Quote asset staking not set")
122+func ah () = valueOrErrorMessage(addressFromString(getStringValue(ae(), W)), "Staking not set")
129123
130124
131-func al () = valueOrErrorMessage(addressFromString(getStringValue(ah(), Y)), "Staking not set")
125+func ai () = valueOrErrorMessage(addressFromString(getStringValue(ae(), T)), "Vault not set")
132126
133127
134-func am () = valueOrErrorMessage(addressFromString(getStringValue(ah(), U)), "Vault not set")
128+func aj () = valueOrErrorMessage(addressFromString(getStringValue(ae(), X)), "Miner not set")
135129
136130
137-func an () = valueOrErrorMessage(addressFromString(getStringValue(ah(), Z)), "Miner not set")
131+func ak () = valueOrErrorMessage(addressFromString(getStringValue(ae(), Y)), "Orders not set")
138132
139133
140-func ao () = valueOrErrorMessage(addressFromString(getStringValue(ah(), aa)), "Orders not set")
134+func al () = valueOrErrorMessage(addressFromString(getStringValue(ae(), Z)), "Referral not set")
141135
142136
143-func ap () = valueOrErrorMessage(addressFromString(getStringValue(ah(), ab)), "Referral not set")
137+func am () = valueOrErrorMessage(addressFromString(getStringValue(ae(), aa)), "NFT Manager not set")
144138
145139
146-func aq () = valueOrErrorMessage(addressFromString(getStringValue(ah(), ad)), "NFT Manager not set")
140+let an = "k_token_param"
141+
142+let ao = "k_token_type"
143+
144+let ap = "fee_reduction"
145+
146+let aq = 1
147+
148+let ar = 2
149+
150+let as = 1000
151+
152+let at = 6
153+
154+let au = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
155+
156+let av = (525600 * au)
157+
158+let aw = (86400 * au)
159+
160+let ax = 1
161+
162+let ay = 2
163+
164+let az = 1
165+
166+let aA = 2
167+
168+func aB (aC) = (toString(aC) + ",")
147169
148170
149-let ar = "k_token_param"
150-
151-let as = "k_token_type"
152-
153-let at = "fee_reduction"
154-
155-let au = 1
156-
157-let av = 2
158-
159-let aw = 15
160-
161-let ax = 1000
162-
163-let ay = 6
164-
165-let az = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
166-
167-let aA = (525600 * az)
168-
169-let aB = (86400 * az)
170-
171-let aC = 1
172-
173-let aD = 2
174-
175-let aE = 1
176-
177-let aF = 2
178-
179-func aG (aH) = (toString(aH) + ",")
171+func aD (aC,aE) = fraction(aC, au, aE, HALFEVEN)
180172
181173
182-func aI (aH,aJ) = fraction(aH, az, aJ, HALFEVEN)
174+func aF (aC,aE) = fraction(aC, aE, au, HALFEVEN)
183175
184176
185-func aK (aH,aJ) = fraction(aH, aJ, az, HALFEVEN)
177+func aG (aC,aE) = fraction(aC, toBigInt(au), aE, HALFEVEN)
186178
187179
188-func aL (aH,aJ) = fraction(aH, toBigInt(az), aJ, HALFEVEN)
180+func aH (aC,aE) = fraction(aC, aE, toBigInt(au), HALFEVEN)
189181
190182
191-func aM (aH,aJ) = fraction(aH, aJ, toBigInt(az), HALFEVEN)
183+func aI (aC) = if ((aC > 0))
184+ then aC
185+ else -(aC)
192186
193187
194-func aN (aH) = if ((aH > 0))
195- then aH
196- else -(aH)
188+func aJ (aC,aE) = if ((aC >= aE))
189+ then aC
190+ else aE
197191
198192
199-func aO (aH,aJ) = if ((aH >= aJ))
200- then aH
201- else aJ
193+func aK (aL) = valueOrErrorMessage(getInteger(this, aL), ("no value for " + aL))
202194
203195
204-func aP (aQ) = if ((size(aQ) == 0))
205- then ""
206- else makeString(aQ, ",")
196+func aM (aL,aN) = valueOrElse(getInteger(this, aL), aN)
207197
208198
209-func aR (aS) = if ((aS == ""))
210- then nil
211- else split(aS, ",")
212-
213-
214-func aT (aQ,aU,aV) = if ((size(aQ) > aU))
215- then (removeByIndex(aQ, 0) :+ aV)
216- else (aQ :+ aV)
217-
218-
219-func aW (aX) = valueOrErrorMessage(getInteger(this, aX), ("no value for " + aX))
220-
221-
222-func aY (aX,aZ) = valueOrElse(getInteger(this, aX), aZ)
223-
224-
225-func ba (ag,af) = {
226- let bb = valueOrErrorMessage(getString(ag, af), ("No value for key " + af))
227- bb
199+func aO (ad,ac) = {
200+ let aP = valueOrErrorMessage(getString(ad, ac), ("No value for key " + ac))
201+ aP
228202 }
229203
230204
231-func bc (ag,af) = {
232- let bb = valueOrErrorMessage(getInteger(ag, af), ("No value for key " + af))
233- bb
205+func aQ (ad,ac) = {
206+ let aP = valueOrErrorMessage(getInteger(ad, ac), ("No value for key " + ac))
207+ aP
234208 }
235209
236210
237-func bd () = aW(c)
211+func aR () = aK(c)
238212
239213
240-func be () = aW(p)
214+func aS () = aK(o)
241215
242216
243-func bf () = aW(q)
217+func aT () = aK(p)
244218
245219
246-func bg () = aW(s)
220+func aU () = aK(r)
247221
248222
249-func bh () = aW(I)
223+func aV () = aK(H)
250224
251225
252-func bi () = aW(J)
226+func aW () = aK(I)
253227
254228
255-func bj () = aY(K, az)
229+func aX () = aM(J, au)
256230
257231
258-func bk () = aY(L, az)
232+func aY () = aM(K, au)
259233
260234
261-func bl () = aW(M)
235+func aZ () = aK(L)
262236
263237
264-func bm () = aW(P)
238+func ba () = aK(O)
265239
266240
267-func bn () = aW(Q)
241+func bb () = aK(P)
268242
269243
270-func bo () = aW(R)
244+func bc () = aK(Q)
271245
272246
273-func bp () = aW(F)
247+func bd () = aK(E)
274248
275249
276-func bq () = aW(r)
250+func be () = aK(q)
277251
278252
279-func br () = (bq() * az)
253+func bf () = (be() * au)
280254
281255
282-func bs () = (bq() * ax)
256+func bg () = (be() * as)
283257
284258
285-func bt () = aW(t)
259+func bh () = aK(s)
286260
287261
288-func bu () = aW(u)
262+func bi () = aK(t)
289263
290264
291-func bv () = aW(v)
265+func bj () = aK(u)
292266
293267
294-func bw () = aW(w)
268+func bk () = aK(v)
295269
296270
297-func bx () = aW(x)
271+func bl () = aK(w)
298272
299273
300-func by () = aW(y)
274+func bm () = aK(x)
301275
302276
303-func bz () = aW(z)
277+func bn () = aK(y)
304278
305279
306-func bA () = aW(D)
280+func bo () = aK(C)
307281
308282
309-func bB () = aW(E)
283+func bp () = aK(D)
310284
311285
312-func bC () = aW(O)
286+func bq () = aK(N)
313287
314288
315-func bD () = aW(N)
289+func br () = aK(M)
316290
317291
318-func bE () = aY(d, 0)
292+func bs () = aM(d, 0)
319293
320294
321-func bF () = aW(A)
295+func bt () = aK(z)
322296
323297
324-func bG () = aW(B)
298+func bu () = aK(A)
325299
326300
327-func bH () = aY(C, aE)
301+func bv () = aM(B, az)
328302
329303
330-func bI () = lastBlock.timestamp
304+func bw () = lastBlock.timestamp
331305
332306
333-func bJ (bK) = valueOrElse(getString(ao(), "k_sender"), toString(bK.caller))
307+func bx (by) = valueOrElse(getString(ak(), "k_sender"), toString(by.caller))
334308
335309
336-func bL (bM,bN,bO) = {
337- let bP = (bM - bN)
338- if (if (bO)
339- then (0 > bP)
310+func bz (bA,bB,bC) = {
311+ let bD = (bA - bB)
312+ if (if (bC)
313+ then (0 > bD)
340314 else false)
341- then throw(((("Invalid margin: " + toString(bM)) + " < ") + toString(bN)))
342- else if (if (!(bO))
343- then (bP >= 0)
315+ then throw(((("Invalid margin: " + toString(bA)) + " < ") + toString(bB)))
316+ else if (if (!(bC))
317+ then (bD >= 0)
344318 else false)
345- then throw(((("Invalid margin: " + toString(bM)) + " > ") + toString(bN)))
319+ then throw(((("Invalid margin: " + toString(bA)) + " > ") + toString(bB)))
346320 else true
347321 }
348322
349323
350-func bQ (bR) = if ((bR == 0))
324+func bE (bF) = if ((bF == 0))
351325 then throw("Should not be called with _positionSize == 0")
352- else if ((bR > 0))
353- then bA()
354- else bB()
326+ else if ((bF > 0))
327+ then bo()
328+ else bp()
355329
356330
357-func bS (bT) = {
358- let bU = getInteger(this, ae(e, bT))
359- let bV = bU
360- if ($isInstanceOf(bV, "Int"))
331+func bG (bH,bI) = {
332+ let bJ = ((bH + "_") + toString(bI))
333+ let bK = getInteger(this, ab(e, bJ))
334+ let bL = bK
335+ if ($isInstanceOf(bL, "Int"))
361336 then {
362- let bW = bV
363- $Tuple5(bW, getIntegerValue(this, ae(f, bT)), getIntegerValue(this, ae(g, bT)), getIntegerValue(this, ae(h, bT)), getIntegerValue(this, ae(l, bT)))
337+ let bM = bL
338+ $Tuple5(bM, getIntegerValue(this, ab(f, bJ)), getIntegerValue(this, ab(g, bJ)), getIntegerValue(this, ab(h, bJ)), getIntegerValue(this, ab(k, bJ)))
364339 }
365340 else $Tuple5(0, 0, 0, 0, 0)
366341 }
367342
368343
369-func bX (bT) = {
370- let bY = getString(this, ae(j, bT))
371- let bV = bY
372- if ($isInstanceOf(bV, "String"))
344+func bN (bF) = if ((0 > bF))
345+ then ar
346+ else aq
347+
348+
349+func bO (bH) = {
350+ let bP = getInteger(this, ab(j, bH))
351+ let bL = bP
352+ if ($isInstanceOf(bL, "Int"))
373353 then {
374- let bZ = bV
375- bZ
354+ let bQ = bL
355+ bQ
376356 }
377- else toBase58String(aj())
357+ else aS()
378358 }
379359
380360
381-func ca (bT) = {
382- let cb = getInteger(this, ae(k, bT))
383- let bV = cb
384- if ($isInstanceOf(bV, "Int"))
385- then {
386- let cc = bV
387- cc
388- }
389- else be()
390- }
391-
392-
393-func cd (bT) = if ((bS(bT)._1 == 0))
361+func bR (bH,bI) = if ((bG(bH, bI)._1 == 0))
394362 then throw("No open position")
395363 else true
396364
397365
398-func ce (cf) = {
399- let cg = getString(this, cf)
400- if (if (isDefined(cg))
401- then (value(cg) != "")
366+func bS (bT) = {
367+ let bU = getString(this, bT)
368+ if (if (isDefined(bU))
369+ then (value(bU) != "")
402370 else false)
403371 then {
404- let ch = split(value(cg), ",")
405- let ci = valueOrErrorMessage(addressFromString(ch[0]), ("Invalid oracle address in: " + value(cg)))
406- let cj = ch[1]
407- let ck = ch[2]
408- let cl = ch[3]
409- $Tuple4(ci, cj, ck, cl)
372+ let bV = split(value(bU), ",")
373+ let bW = valueOrErrorMessage(addressFromString(bV[0]), ("Invalid oracle address in: " + value(bU)))
374+ let bX = bV[1]
375+ let bY = bV[2]
376+ let bZ = bV[3]
377+ $Tuple4(bW, bX, bY, bZ)
410378 }
411379 else unit
412380 }
413381
414382
415-func cm () = valueOrElse(getBoolean(this, m), false)
383+func ca () = valueOrElse(getBoolean(this, l), false)
416384
417385
418-func cn () = valueOrElse(getBoolean(this, n), false)
386+func cb () = valueOrElse(getBoolean(this, m), false)
419387
420388
421-func co () = valueOrElse(getBoolean(this, o), false)
389+func cc () = valueOrElse(getBoolean(this, n), false)
422390
423391
424-func cp (cq,cr,cs) = if (cq)
392+func cd (ce,cf,cg) = if (ce)
425393 then {
426- let ct = (bi() - cs)
427- if ((0 >= ct))
394+ let ch = (aW() - cg)
395+ if ((0 >= ch))
428396 then throw("Tx lead to base asset reserve <= 0, revert")
429- else $Tuple3((bh() + cr), ct, (bl() + cs))
397+ else $Tuple3((aV() + cf), ch, (aZ() + cg))
430398 }
431399 else {
432- let cu = (bh() - cr)
433- if ((0 >= cu))
400+ let ci = (aV() - cf)
401+ if ((0 >= ci))
434402 then throw("Tx lead to base quote reserve <= 0, revert")
435- else $Tuple3(cu, (bi() + cs), (bl() - cs))
403+ else $Tuple3(ci, (aW() + cg), (aZ() - cg))
436404 }
437405
438406
439-func cv (cw,cx) = {
440- let cy = toBigInt(cw)
441- let cz = toBigInt(cx)
442- aM(cy, cz)
407+func cj (ck,cl) = {
408+ let cm = toBigInt(ck)
409+ let cn = toBigInt(cl)
410+ aH(cm, cn)
443411 }
444412
445413
446-func cA (cq,cr) = {
447- let cw = bh()
448- let cx = bi()
449- let cB = bj()
450- let cC = bk()
451- let cD = aI(cr, cB)
452- let aX = cv(cw, cx)
453- let cE = if (cq)
454- then (cw + cD)
455- else (cw - cD)
456- let cF = toInt(aL(aX, toBigInt(cE)))
457- let cG = aN((cF - cx))
458- let cH = if (cq)
459- then cG
460- else -(cG)
461- let cI = cp(cq, cD, cG)
462- let cJ = cI._1
463- let cK = cI._2
464- let cL = cI._3
465- let cM = aI(aK(cw, cB), aK(cx, cC))
466- let cN = aI(cr, cG)
467- let cO = aN((cM - cN))
468- let cP = (az - aI(cM, (cM + cO)))
469- let cQ = bx()
470- if ((cP > cQ))
471- then throw(((((((((((((("Price impact " + toString(cP)) + " > max price impact ") + toString(cQ)) + " before quote asset: ") + toString(cw)) + " before base asset: ") + toString(cx)) + " quote asset amount to exchange: ") + toString(cr)) + " price before: ") + toString(cM)) + " marketPrice: ") + toString(cN)))
472- else $Tuple4(cH, cJ, cK, cL)
414+func co (ce,cf) = {
415+ let ck = aV()
416+ let cl = aW()
417+ let cp = aX()
418+ let cq = aY()
419+ let cr = aD(cf, cp)
420+ let aL = cj(ck, cl)
421+ let cs = if (ce)
422+ then (ck + cr)
423+ else (ck - cr)
424+ let ct = toInt(aG(aL, toBigInt(cs)))
425+ let cu = aI((ct - cl))
426+ let cv = if (ce)
427+ then cu
428+ else -(cu)
429+ let cw = cd(ce, cr, cu)
430+ let cx = cw._1
431+ let cy = cw._2
432+ let cz = cw._3
433+ let cA = aD(aF(ck, cp), aF(cl, cq))
434+ let cB = aD(cf, cu)
435+ let cC = aI((cA - cB))
436+ let cD = (au - aD(cA, (cA + cC)))
437+ let cE = bl()
438+ if ((cD > cE))
439+ then throw(((((((((((((("Price impact " + toString(cD)) + " > max price impact ") + toString(cE)) + " before quote asset: ") + toString(ck)) + " before base asset: ") + toString(cl)) + " quote asset amount to exchange: ") + toString(cf)) + " price before: ") + toString(cA)) + " marketPrice: ") + toString(cB)))
440+ else $Tuple4(cv, cx, cy, cz)
473441 }
474442
475443
476-func cR (cS,cT) = {
477- let cU = ((((bI() - cT) / 1000) / 60) * az)
478- let cV = aI(aK(aK(cS, cU), bf()), aA)
479- cV
444+func cF (cG,cH) = {
445+ let cI = ((((bw() - cH) / 1000) / 60) * au)
446+ let cJ = aD(aF(aF(cG, cI), aT()), av)
447+ cJ
480448 }
481449
482450
483-func cW (cX,cS,cY,cT,cZ) = {
484- let da = if ((cX != 0))
451+func cK (cL,cG,cM,cH,cN) = {
452+ let cO = if ((cL != 0))
485453 then {
486- let db = bQ(cX)
487- aK((db - cY), cX)
454+ let cP = bE(cL)
455+ aF((cP - cM), cL)
488456 }
489457 else 0
490- let cV = cR(cS, cT)
491- let dc = (((cZ - cV) - da) + cS)
492- let dd = if ((0 > dc))
493- then $Tuple2(0, aN(dc))
494- else $Tuple2(aN(dc), 0)
495- let de = dd._1
496- let df = dd._2
497- $Tuple4(de, df, da, cV)
458+ let cJ = cF(cG, cH)
459+ let cQ = (((cN - cJ) - cO) + cG)
460+ let cR = if ((0 > cQ))
461+ then $Tuple2(0, aI(cQ))
462+ else $Tuple2(aI(cQ), 0)
463+ let cS = cR._1
464+ let cT = cR._2
465+ $Tuple4(cS, cT, cO, cJ)
498466 }
499467
500468
501-func dg (cq,cs,dh,di,dj,dk,dl) = {
502- let cM = aI(aK(di, dj), aK(dk, dl))
503- if ((cs == 0))
469+func cU (ce,cg,cV,cW,cX,cY,cZ) = {
470+ let cA = aD(aF(cW, cX), aF(cY, cZ))
471+ if ((cg == 0))
504472 then throw("Invalid base asset amount")
505473 else {
506- let aX = cv(di, dk)
507- let dm = if (cq)
508- then (dk + cs)
509- else (dk - cs)
510- let dn = toInt(aL(aX, toBigInt(dm)))
511- let do = aN((dn - di))
512- let dp = aK(do, dj)
513- let cQ = bx()
514- let dq = cp(!(cq), do, cs)
515- let cJ = dq._1
516- let cK = dq._2
517- let cL = dq._3
518- let cN = aI(dp, cs)
519- let cO = aN((cM - cN))
520- let cP = (az - aI(cM, (cM + cO)))
521- if (if ((cP > cQ))
522- then dh
474+ let aL = cj(cW, cY)
475+ let da = if (ce)
476+ then (cY + cg)
477+ else (cY - cg)
478+ let db = toInt(aG(aL, toBigInt(da)))
479+ let dc = aI((db - cW))
480+ let dd = aF(dc, cX)
481+ let cE = bl()
482+ let de = cd(!(ce), dc, cg)
483+ let cx = de._1
484+ let cy = de._2
485+ let cz = de._3
486+ let cB = aD(dd, cg)
487+ let cC = aI((cA - cB))
488+ let cD = (au - aD(cA, (cA + cC)))
489+ if (if ((cD > cE))
490+ then cV
523491 else false)
524- then throw(((((((((((((("Price impact " + toString(cP)) + " > max price impact ") + toString(cQ)) + " before quote asset: ") + toString(di)) + " before base asset: ") + toString(dk)) + " base asset amount to exchange: ") + toString(cs)) + " price before: ") + toString(cM)) + " market price: ") + toString(cN)))
525- else $Tuple7(dp, cJ, cK, cL, (bD() - (if (cq)
526- then aN(cs)
527- else 0)), (bC() - (if (!(cq))
528- then aN(cs)
529- else 0)), cP)
492+ then throw(((((((((((((("Price impact " + toString(cD)) + " > max price impact ") + toString(cE)) + " before quote asset: ") + toString(cW)) + " before base asset: ") + toString(cY)) + " base asset amount to exchange: ") + toString(cg)) + " price before: ") + toString(cA)) + " market price: ") + toString(cB)))
493+ else $Tuple7(dd, cx, cy, cz, (br() - (if (ce)
494+ then aI(cg)
495+ else 0)), (bq() - (if (!(ce))
496+ then aI(cg)
497+ else 0)), cD)
530498 }
531499 }
532500
533501
534-func dr (cq,cs,dh) = dg(cq, cs, dh, bh(), bj(), bi(), bk())
502+func df (ce,cg,cV) = cU(ce, cg, cV, aV(), aX(), aW(), aY())
535503
536504
537-func ds (dt,cj,ck) = {
538- let du = valueOrErrorMessage(getInteger(dt, cj), ((("Can not get oracle price. Oracle: " + toString(dt)) + " key: ") + cj))
539- if ((ck != ""))
505+func dg (dh,bX,bY) = {
506+ let di = valueOrErrorMessage(getInteger(dh, bX), ((("Can not get oracle price. Oracle: " + toString(dh)) + " key: ") + bX))
507+ if ((bY != ""))
540508 then {
541- let dv = lastBlock.height
542- let dw = valueOrErrorMessage(getInteger(dt, ck), ((("Can not get oracle block. Oracle: " + toString(dt)) + " key: ") + ck))
543- if (((dv - dw) > bG()))
544- then throw(((("Oracle stale data. Last oracle block: " + toString(dw)) + " current block: ") + toString(dv)))
545- else du
509+ let dj = lastBlock.height
510+ let dk = valueOrErrorMessage(getInteger(dh, bY), ((("Can not get oracle block. Oracle: " + toString(dh)) + " key: ") + bY))
511+ if (((dj - dk) > bu()))
512+ then throw(((("Oracle stale data. Last oracle block: " + toString(dk)) + " current block: ") + toString(dj)))
513+ else di
546514 }
547- else du
515+ else di
548516 }
549517
550518
551-func dx () = {
552- let dy = valueOrErrorMessage(ce(a), "No base asset oracle data")
553- let dz = ds(dy._1, dy._2, dy._3)
554- let dA = ce(b)
555- let dB = if (isDefined(dA))
519+func dl () = {
520+ let dm = valueOrErrorMessage(bS(a), "No base asset oracle data")
521+ let dn = dg(dm._1, dm._2, dm._3)
522+ let do = bS(b)
523+ let dp = if (isDefined(do))
556524 then {
557- let dC = value(dA)
558- ds(dC._1, dC._2, dC._3)
525+ let dq = value(do)
526+ dg(dq._1, dq._2, dq._3)
559527 }
560- else az
561- aI(dz, dB)
528+ else au
529+ aD(dn, dp)
562530 }
563531
564532
565-func dD () = {
566- let dy = valueOrErrorMessage(ce(a), "No base asset oracle data")
567- let dt = dy._1
568- let cl = dy._4
569- if ((cl != ""))
533+func dr () = {
534+ let dm = valueOrErrorMessage(bS(a), "No base asset oracle data")
535+ let dh = dm._1
536+ let bZ = dm._4
537+ if ((bZ != ""))
570538 then {
571- let dE = valueOrErrorMessage(getBoolean(dt, cl), ((("Can not get oracle is open/closed. Oracle: " + toString(dt)) + " key: ") + cl))
572- !(dE)
539+ let ds = valueOrErrorMessage(getBoolean(dh, bZ), ((("Can not get oracle is open/closed. Oracle: " + toString(dh)) + " key: ") + bZ))
540+ !(ds)
573541 }
574542 else false
575543 }
576544
577545
578-func dF (dG,di,dk,cB,cC) = {
579- let dH = aI(aK(di, cB), aK(dk, cC))
580- let dI = aI((dG + dH), (2 * az))
581- let dF = aI(aN((dG - dH)), dI)
582- dF
546+func dt (du,cW,cY,cp,cq) = {
547+ let dv = aD(aF(cW, cp), aF(cY, cq))
548+ let dw = aD((du + dv), (2 * au))
549+ let dt = aD(aI((du - dv)), dw)
550+ dt
583551 }
584552
585553
586-func dJ (di,dk) = {
587- let dK = dx()
588- let cB = bj()
589- let cC = bk()
590- let dL = dF(dK, bh(), bi(), cB, cC)
591- let dM = dF(dK, di, dk, cB, cC)
592- if (if ((dM > by()))
593- then (dM > dL)
554+func dx (cW,cY) = {
555+ let dy = dl()
556+ let cp = aX()
557+ let cq = aY()
558+ let dz = dt(dy, aV(), aW(), cp, cq)
559+ let dA = dt(dy, cW, cY, cp, cq)
560+ if (if ((dA > bm()))
561+ then (dA > dz)
594562 else false)
595- then throw(((("Price spread " + toString(dM)) + " > max price spread ") + toString(by())))
563+ then throw(((("Price spread " + toString(dA)) + " > max price spread ") + toString(bm())))
596564 else true
597565 }
598566
599567
600-func dN (dO,dP) = {
601- let dQ = bz()
602- if ((dO > dQ))
603- then throw(((("Long open notional " + toString(dO)) + " > max open notional ") + toString(dQ)))
604- else if ((dP > dQ))
605- then throw(((("Short open notional " + toString(dP)) + " > max open notional ") + toString(dQ)))
568+func dB (dC,dD) = {
569+ let dE = bn()
570+ if ((dC > dE))
571+ then throw(((("Long open notional " + toString(dC)) + " > max open notional ") + toString(dE)))
572+ else if ((dD > dE))
573+ then throw(((("Short open notional " + toString(dD)) + " > max open notional ") + toString(dE)))
606574 else true
607575 }
608576
609577
610-func dR () = {
611- let di = bh()
612- let dk = bi()
613- let cB = bj()
614- let cC = bk()
615- aI(aK(di, cB), aK(dk, cC))
578+func dF () = {
579+ let cW = aV()
580+ let cY = aW()
581+ let cp = aX()
582+ let cq = aY()
583+ aD(aF(cW, cp), aF(cY, cq))
616584 }
617585
618586
619-func dS () = {
620- let dK = dx()
621- let dT = dR()
622- (aI(aN((dK - dT)), dK) > bw())
587+func dG () = {
588+ let dy = dl()
589+ let dH = dF()
590+ (aD(aI((dy - dH)), dy) > bk())
623591 }
624592
625593
626-func dU (bR,dV,di,dj,dk,dl) = {
627- let dW = aN(bR)
628- let dX = (0 > bR)
629- let dY = if ((dV == aC))
594+func dI (bF,dJ,cW,cX,cY,cZ) = {
595+ let dK = aI(bF)
596+ let dL = (0 > bF)
597+ let dM = if ((dJ == ax))
630598 then {
631- let dZ = dg(!(dX), dW, false, di, dj, dk, dl)._1
632- dZ
599+ let dN = cU(!(dL), dK, false, cW, cX, cY, cZ)._1
600+ dN
633601 }
634- else aK(dW, dx())
635- dY
602+ else aF(dK, dl())
603+ dM
636604 }
637605
638606
639-func ea (bR,eb,di,dj,dk,dl,dV) = if ((bR == 0))
607+func dO (bF,dP,cW,cX,cY,cZ,dJ) = if ((bF == 0))
640608 then throw("Invalid position size")
641609 else {
642- let dX = (0 > bR)
643- let dY = dU(bR, dV, di, dj, dk, dl)
644- let ec = if (dX)
645- then (eb - dY)
646- else (dY - eb)
647- $Tuple2(dY, ec)
610+ let dL = (0 > bF)
611+ let dM = dI(bF, dJ, cW, cX, cY, cZ)
612+ let dQ = if (dL)
613+ then (dP - dM)
614+ else (dM - dP)
615+ $Tuple2(dM, dQ)
648616 }
649617
650618
651-func ed (bT,dV) = {
652- let ee = bS(bT)
653- let bW = ee._1
654- let ef = ee._2
655- let eg = ee._3
656- let eh = ee._4
657- ea(bW, eg, bh(), bj(), bi(), bk(), dV)
619+func dR (bH,bI,dJ) = {
620+ let dS = bG(bH, bI)
621+ let bM = dS._1
622+ let dT = dS._2
623+ let dU = dS._3
624+ let dV = dS._4
625+ dO(bM, dU, aV(), aX(), aW(), aY(), dJ)
658626 }
659627
660628
661-func ei (ej,ek,el) = aI((ej - ek), el)
629+func dW (dX,dY,dZ) = aD((dX - dY), dZ)
662630
663631
664-func em (bT,dV) = {
665- let en = bS(bT)
666- let bW = en._1
667- let ef = en._2
668- let eo = en._3
669- let ep = en._4
670- let eq = en._5
671- let er = ed(bT, dV)
672- let dY = er._1
673- let ec = er._2
674- let es = cW(bW, ef, ep, eq, ec)
675- let de = es._1
676- let df = es._2
677- ei(de, df, dY)
632+func ea (bH,bI,dJ) = {
633+ let eb = bG(bH, bI)
634+ let bM = eb._1
635+ let dT = eb._2
636+ let ec = eb._3
637+ let ed = eb._4
638+ let ee = eb._5
639+ let ef = dR(bH, bI, dJ)
640+ let dM = ef._1
641+ let dQ = ef._2
642+ let eg = cK(bM, dT, ed, ee, dQ)
643+ let cS = eg._1
644+ let cT = eg._2
645+ dW(cS, cT, dM)
678646 }
679647
680648
681-func et (bT) = em(bT, aC)
649+func eh (bH,bI) = ea(bH, bI, ax)
682650
683651
684-func eu (bT,bR) = {
685- let ev = aO(bv(), (az - aI(et(bT), bt())))
686- let ew = aK(aN(bR), ev)
687- let ex = dr((bR > 0), ew, false)
688- let ey = ex._1
689- let cP = ex._7
690- if ((bx() > cP))
691- then ew
692- else aK(aN(bR), bv())
652+func ei (bH,bF) = {
653+ let ej = aJ(bj(), (au - aD(eh(bH, bN(bF)), bh())))
654+ let ek = aF(aI(bF), ej)
655+ let el = df((bF > 0), ek, false)
656+ let em = el._1
657+ let cD = el._7
658+ if ((bl() > cD))
659+ then ek
660+ else aF(aI(bF), bj())
693661 }
694662
695663
696-func ez (bT,eA,eB,eC,eD,dh,eE) = {
697- let eF = bS(bT)
698- let eG = eF._1
699- let eH = eF._2
700- let eI = eF._3
701- let eJ = eF._4
702- let eK = eF._5
703- let eL = (eG > 0)
704- let eM = aN(eG)
705- if (if ((eM >= eA))
706- then (eA > 0)
664+func en (bH,bI,eo,ep,eq,er,cV,es) = {
665+ let et = bG(bH, bI)
666+ let eu = et._1
667+ let ev = et._2
668+ let ew = et._3
669+ let ex = et._4
670+ let ey = et._5
671+ let ez = (eu > 0)
672+ let eA = aI(eu)
673+ if (if ((eA >= eo))
674+ then (eo > 0)
707675 else false)
708676 then {
709- let eN = (eM > eA)
710- let eO = dr((eG > 0), eA, dh)
711- let eP = eO._1
712- let cE = eO._2
713- let cF = eO._3
714- let eQ = eO._4
715- let eR = if ((eG > 0))
716- then -(eA)
717- else eA
718- let eS = ed(bT, aC)
719- let eT = eS._1
720- let ec = eS._2
721- let eU = aI(aN(eR), eM)
722- let eV = aK(ec, eU)
723- let eW = cW(eG, eH, eJ, eK, ec)
724- let eX = eW._1
725- let eY = eW._2
726- let eZ = eW._3
727- let cV = eW._4
728- let fa = cW(eG, eH, eJ, eK, eV)._2
729- let fb = aK(aK(eT, eU), eB)
730- let fc = (ec - eV)
731- let fd = if ((eG > 0))
732- then ((eT - eP) - fc)
733- else ((fc + eT) - eP)
734- let fe = (eG + eR)
735- let ff = if ((fe == 0))
677+ let eB = (eA > eo)
678+ let eC = df((eu > 0), eo, cV)
679+ let eD = eC._1
680+ let cs = eC._2
681+ let ct = eC._3
682+ let eE = eC._4
683+ let eF = if ((eu > 0))
684+ then -(eo)
685+ else eo
686+ let eG = dR(bH, bI, ax)
687+ let eH = eG._1
688+ let dQ = eG._2
689+ let eI = aD(aI(eF), eA)
690+ let eJ = aF(dQ, eI)
691+ let eK = cK(eu, ev, ex, ey, dQ)
692+ let eL = eK._1
693+ let eM = eK._2
694+ let eN = eK._3
695+ let cJ = eK._4
696+ let eO = cK(eu, ev, ex, ey, eJ)._2
697+ let eP = aF(aF(eH, eI), ep)
698+ let eQ = (dQ - eJ)
699+ let eR = if ((eu > 0))
700+ then ((eH - eD) - eQ)
701+ else ((eQ + eH) - eD)
702+ let eS = (eu + eF)
703+ let eT = if ((eS == 0))
736704 then $Tuple2(0, 0)
737- else $Tuple2(aN(fd), bQ(fe))
738- let fg = ff._1
739- let fh = ff._2
740- let fi = (eI - fg)
741- let fj = em(bT, aC)
742- let fk = if ((eG > 0))
743- then (aK((fg + fc), fj) - fc)
744- else (aK((fg - fc), fj) - fc)
745- let fl = ((eX - (fk + fc)) - fb)
746- let fm = if ((0 > fl))
747- then if (eE)
705+ else $Tuple2(aI(eR), bE(eS))
706+ let eU = eT._1
707+ let eV = eT._2
708+ let eW = (ew - eU)
709+ let eX = ea(bH, bI, ax)
710+ let eY = if ((eu > 0))
711+ then (aF((eU + eQ), eX) - eQ)
712+ else (aF((eU - eQ), eX) - eQ)
713+ let eZ = ((eL - (eY + eQ)) - eP)
714+ let fa = if ((0 > eZ))
715+ then if (es)
748716 then 0
749717 else throw("Invalid internalClosePosition params: unable to pay fee")
750- else fl
751- let fn = if (eD)
752- then (fk + fm)
753- else fk
754- if (if ((eC != 0))
755- then (eC > eP)
718+ else eZ
719+ let fb = if (er)
720+ then (eY + fa)
721+ else eY
722+ if (if ((eq != 0))
723+ then (eq > eD)
756724 else false)
757- then throw(((("Limit error: " + toString(eP)) + " < ") + toString(eC)))
758- else $Tuple17(fe, fn, fg, fh, fa, eV, if (if (eD)
759- then eN
725+ then throw(((("Limit error: " + toString(eD)) + " < ") + toString(eq)))
726+ else $Tuple17(eS, fb, eU, eV, eO, eJ, if (if (er)
727+ then eB
760728 else false)
761729 then 0
762- else fm, cE, cF, eQ, (bm() - fi), (bD() - (if (eL)
763- then aN(eR)
764- else 0)), (bC() - (if (!(eL))
765- then aN(eR)
766- else 0)), (bo() - (if (eL)
767- then fi
768- else 0)), (bn() - (if (!(eL))
769- then fi
770- else 0)), (fb + cV), eP)
730+ else fa, cs, ct, eE, (ba() - eW), (br() - (if (ez)
731+ then aI(eF)
732+ else 0)), (bq() - (if (!(ez))
733+ then aI(eF)
734+ else 0)), (bc() - (if (ez)
735+ then eW
736+ else 0)), (bb() - (if (!(ez))
737+ then eW
738+ else 0)), (eP + cJ), eD)
771739 }
772- else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eA)) + " max: ") + toString(eM)))
740+ else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eo)) + " max: ") + toString(eA)))
773741 }
774742
775743
776-func fo () = {
777- let bR = bl()
778- if ((bR == 0))
779- then $Tuple2(bh(), bi())
744+func fc () = {
745+ let bF = aZ()
746+ if ((bF == 0))
747+ then $Tuple2(aV(), aW())
780748 else {
781- let fp = (bR > 0)
782- let fq = dr(fp, aN(bR), false)
783- let fr = fq._1
784- let fs = fq._2
785- let ft = fq._3
786- $Tuple2(fs, ft)
749+ let fd = (bF > 0)
750+ let fe = df(fd, aI(bF), false)
751+ let ff = fe._1
752+ let fg = fe._2
753+ let fh = fe._3
754+ $Tuple2(fg, fh)
787755 }
788756 }
789757
790758
791-func fu (fv,bl,fw,fx) = {
792- let fy = toBigInt(fv)
793- let fz = toBigInt(bl)
794- let fA = toBigInt(fw)
795- let fB = toBigInt(fx)
796- let aX = aM(fA, fy)
797- let fC = (fy + fz)
798- let fD = aL(aX, fC)
799- let fE = aL(fD, fC)
800- let fF = aL(fB, fE)
801- toInt(fF)
759+func fi (fj,aZ,fk,fl) = {
760+ let fm = toBigInt(fj)
761+ let fn = toBigInt(aZ)
762+ let fo = toBigInt(fk)
763+ let fp = toBigInt(fl)
764+ let aL = aH(fo, fm)
765+ let fq = (fm + fn)
766+ let fr = aG(aL, fq)
767+ let fs = aG(fr, fq)
768+ let ft = aG(fp, fs)
769+ toInt(ft)
802770 }
803771
804772
805-func fG (fH,cw,cx) = {
806- let bR = bl()
807- if ((bR == 0))
773+func fu (fv,ck,cl) = {
774+ let bF = aZ()
775+ if ((bF == 0))
808776 then {
809- let fI = aI(aK(fH, cx), cw)
810- $Tuple3(fI, az, 0)
777+ let fw = aD(aF(fv, cl), ck)
778+ $Tuple3(fw, au, 0)
811779 }
812780 else {
813- let fp = (bR > 0)
814- let fr = dr(fp, aN(bR), false)._1
815- let fI = fu(cx, bR, cw, fH)
816- let fJ = az
817- let fK = ea(bR, fr, cw, fI, cx, fJ, aC)._2
818- $Tuple3(fI, fJ, fK)
781+ let fd = (bF > 0)
782+ let ff = df(fd, aI(bF), false)._1
783+ let fw = fi(cl, bF, ck, fv)
784+ let fx = au
785+ let fy = dO(bF, ff, ck, fw, cl, fx, ax)._2
786+ $Tuple3(fw, fx, fy)
819787 }
820788 }
821789
822790
823-func fL () = {
824- let fM = dx()
825- let fN = dR()
826- let fO = (fN - fM)
827- if (if (if ((bC() == 0))
791+func fz () = {
792+ let fA = dl()
793+ let fB = dF()
794+ let fC = (fB - fA)
795+ if (if (if ((bq() == 0))
828796 then true
829- else (bD() == 0))
797+ else (br() == 0))
830798 then true
831- else dD())
799+ else dr())
832800 then $Tuple3(0, 0, 0)
833- else if ((0 > fO))
801+ else if ((0 > fC))
834802 then {
835- let fP = aI(aK(fO, br()), aB)
836- if ((bH() == aE))
803+ let fD = aD(aF(fC, bf()), aw)
804+ if ((bv() == az))
837805 then {
838- let fQ = aI(aK(fP, bC()), bD())
839- $Tuple3(fP, fQ, 0)
806+ let fE = aD(aF(fD, bq()), br())
807+ $Tuple3(fD, fE, 0)
840808 }
841809 else {
842- let fR = aN(aK(fP, bC()))
843- let fS = aN(aK(fP, bD()))
844- let fT = (fR - fS)
845- $Tuple3(fP, fP, fT)
810+ let fF = aI(aF(fD, bq()))
811+ let fG = aI(aF(fD, br()))
812+ let fH = (fF - fG)
813+ $Tuple3(fD, fD, fH)
846814 }
847815 }
848816 else {
849- let fQ = aI(aK(fO, br()), aB)
850- if ((bH() == aE))
817+ let fE = aD(aF(fC, bf()), aw)
818+ if ((bv() == az))
851819 then {
852- let fP = aI(aK(fQ, bD()), bC())
853- $Tuple3(fP, fQ, 0)
820+ let fD = aD(aF(fE, br()), bq())
821+ $Tuple3(fD, fE, 0)
854822 }
855823 else {
856- let fS = aN(aK(fQ, bD()))
857- let fR = aN(aK(fQ, bC()))
858- let fT = (fS - fR)
859- $Tuple3(fQ, fQ, fT)
824+ let fG = aI(aF(fE, br()))
825+ let fF = aI(aF(fE, bq()))
826+ let fH = (fG - fF)
827+ $Tuple3(fE, fE, fH)
860828 }
861829 }
862830 }
863831
864832
865-func fU (fV,fW) = {
866- let fX = be()
867- let fY = aK(fX, fW)
868- let fZ = if ((fV != ""))
833+func fI (fJ,fK) = {
834+ let fL = aS()
835+ let fM = aF(fL, fK)
836+ let fN = if ((fJ != ""))
869837 then {
870- let ga = ba(aq(), ae(as, fV))
871- if ((ga == at))
838+ let fO = aO(am(), ab(ao, fJ))
839+ if ((fO == ap))
872840 then {
873- let gb = bc(aq(), ae(ar, fV))
874- let gc = aK(fY, gb)
875- $Tuple2(gc, true)
841+ let fP = aQ(am(), ab(an, fJ))
842+ let fQ = aF(fM, fP)
843+ $Tuple2(fQ, true)
876844 }
877845 else throw("Invalid attached artifact")
878846 }
879- else $Tuple2(fY, false)
880- let gc = fZ._1
881- let gd = fZ._2
882- $Tuple2(gc, gd)
847+ else $Tuple2(fM, false)
848+ let fQ = fN._1
849+ let fR = fN._2
850+ $Tuple2(fQ, fR)
883851 }
884852
885853
886-func ge (bT,gf) = {
887- let eG = bS(bT)._1
888- if ((eG == 0))
889- then true
890- else (bX(bT) == gf)
891- }
892-
893-
894-func gg (bT,gf) = (bX(bT) == gf)
895-
896-
897-func gh (bT,fV) = {
898- let gi = invoke(an(), "computeFeeDiscount", [bT], nil)
899- if ((gi == gi))
854+func fS (bH,fJ) = {
855+ let fT = invoke(aj(), "computeFeeDiscount", [bH], nil)
856+ if ((fT == fT))
900857 then {
901- let gj = {
902- let bV = gi
903- if ($isInstanceOf(bV, "Int"))
858+ let fU = {
859+ let bL = fT
860+ if ($isInstanceOf(bL, "Int"))
904861 then {
905- let gk = bV
906- gk
862+ let fV = bL
863+ fV
907864 }
908865 else throw("Invalid computeFeeDiscount result")
909866 }
910- let gl = fU(fV, gj)
911- let gc = gl._1
912- let gd = gl._2
913- $Tuple2(gc, gd)
867+ let fW = fI(fJ, fU)
868+ let fQ = fW._1
869+ let fR = fW._2
870+ $Tuple2(fQ, fR)
914871 }
915872 else throw("Strict value is not equal to itself.")
916873 }
917874
918875
919-func gm (bK) = {
920- let gn = if ((size(bK.payments) > 1))
921- then toBase58String(valueOrErrorMessage(bK.payments[1].assetId, "Invalid artifactId"))
876+func fX (by) = {
877+ let fY = if ((size(by.payments) > 1))
878+ then toBase58String(valueOrErrorMessage(by.payments[1].assetId, "Invalid artifactId"))
922879 else ""
923- gn
880+ fY
924881 }
925882
926883
927-func go (gp) = {
928- let gq = aK(gp, bF())
929- let gr = (gp - gq)
930- $Tuple2(gq, gr)
884+func fZ (ga) = {
885+ let gb = aF(ga, bt())
886+ let gc = (ga - gb)
887+ $Tuple2(gb, gc)
931888 }
932889
933890
934-func gs (gt,gu,gv,gw,eB,gx,gy,gz,gA,dQ,gB,gC,gD,gE) = [IntegerEntry(s, gt), IntegerEntry(t, gu), IntegerEntry(u, gv), IntegerEntry(r, gw), IntegerEntry(p, eB), IntegerEntry(w, gx), IntegerEntry(x, gy), IntegerEntry(v, gz), IntegerEntry(y, gA), IntegerEntry(z, dQ), IntegerEntry(A, gB), IntegerEntry(B, gB), IntegerEntry(q, gD), IntegerEntry(C, gE)]
891+func gd (ge,gf,gg,gh,ep,gi,gj,gk,gl,dE,gm,gn,go,gp) = [IntegerEntry(r, ge), IntegerEntry(s, gf), IntegerEntry(t, gg), IntegerEntry(q, gh), IntegerEntry(o, ep), IntegerEntry(v, gi), IntegerEntry(w, gj), IntegerEntry(u, gk), IntegerEntry(x, gl), IntegerEntry(y, dE), IntegerEntry(z, gm), IntegerEntry(A, gm), IntegerEntry(p, go), IntegerEntry(B, gp)]
935892
936893
937-func gF (gG,gH,gI,gJ,gK) = [IntegerEntry(F, gG), IntegerEntry(D, gH), IntegerEntry(E, gI), IntegerEntry(G, gJ), IntegerEntry(H, gK)]
894+func gq (gr,gs,gt,gu,gv) = [IntegerEntry(E, gr), IntegerEntry(C, gs), IntegerEntry(D, gt), IntegerEntry(F, gu), IntegerEntry(G, gv)]
938895
939896
940-func gL (gM,ag) = if (gM)
941- then {
942- let gN = bE()
943-[IntegerEntry(ae(i, ag), (gN + 1)), IntegerEntry(d, (gN + 1))]
944- }
897+func gw (gx,bH,bI) = {
898+ let bJ = ((bH + "_") + toString(bI))
899+ if (gx)
900+ then {
901+ let gy = bs()
902+[IntegerEntry(ab(i, bJ), (gy + 1)), IntegerEntry(d, (gy + 1))]
903+ }
904+ else nil
905+ }
906+
907+
908+func gz (gx,bH,bI,ep) = {
909+ let bJ = ((bH + "_") + toString(bI))
910+ if (gx)
911+ then [IntegerEntry(ab(j, bJ), ep)]
912+ else nil
913+ }
914+
915+
916+func gA (bH,eo,gB,gC,cP,gD) = {
917+ let fd = bN(eo)
918+ let bJ = ((bH + "_") + toString(fd))
919+[IntegerEntry(ab(e, bJ), eo), IntegerEntry(ab(f, bJ), gB), IntegerEntry(ab(g, bJ), gC), IntegerEntry(ab(h, bJ), cP), IntegerEntry(ab(k, bJ), gD)]
920+ }
921+
922+
923+func gE (ck,cl) = [IntegerEntry(H, ck), IntegerEntry(I, cl)]
924+
925+
926+func gF (cp,cq) = [IntegerEntry(J, cp), IntegerEntry(K, cq)]
927+
928+
929+func gG (ck,cl,gH,gI,gJ,gK,gL,gM) = {
930+ let cp = aX()
931+ let cq = aY()
932+ if (((gJ - gK) != gH))
933+ then throw(((((("Invalid AMM state data: " + toString(gJ)) + " + ") + toString(gK)) + " != ") + toString(gH)))
934+ else (gE(ck, cl) ++ [IntegerEntry(L, gH), IntegerEntry(O, gI), IntegerEntry(M, gJ), IntegerEntry(N, gK), IntegerEntry(Q, gL), IntegerEntry(P, gM)])
935+ }
936+
937+
938+func gN (bH,bI) = {
939+ let bJ = ((bH + "_") + toString(bI))
940+[DeleteEntry(ab(e, bJ)), DeleteEntry(ab(f, bJ)), DeleteEntry(ab(g, bJ)), DeleteEntry(ab(h, bJ)), DeleteEntry(ab(j, bJ)), DeleteEntry(ab(k, bJ))]
941+ }
942+
943+
944+func gO (ad,gP) = {
945+ let gQ = assetBalance(this, ag())
946+ if ((gP > gQ))
947+ then throw(((("Unable to withdraw " + toString(gP)) + " from contract balance ") + toString(gQ)))
948+ else [ScriptTransfer(ad, gP, ag())]
949+ }
950+
951+
952+func gR (by) = if ((0 > by))
953+ then throw("Balance")
954+ else [IntegerEntry(c, by)]
955+
956+
957+func gS (by) = [ScriptTransfer(ah(), by, ag())]
958+
959+
960+func gT (gU,by) = if (gU)
961+ then [Burn(valueOrErrorMessage(by.payments[1].assetId, "Invalid artifact"), 1)]
945962 else nil
946963
947964
948-func gO (gM,ag,eB) = if (gM)
949- then [IntegerEntry(ae(k, ag), eB)]
950- else nil
965+@Callable(by)
966+func pause () = if ((by.caller != af()))
967+ then throw("Invalid pause params")
968+ else [BooleanEntry(m, true)]
951969
952970
953-func gP (ag,eA,gQ,gR,db,gS) = [IntegerEntry(ae(e, ag), eA), IntegerEntry(ae(f, ag), gQ), IntegerEntry(ae(g, ag), gR), IntegerEntry(ae(h, ag), db), IntegerEntry(ae(l, ag), gS)]
971+
972+@Callable(by)
973+func unpause () = if ((by.caller != af()))
974+ then throw("Invalid unpause params")
975+ else [BooleanEntry(m, false)]
954976
955977
956-func gT (cw,cx) = [IntegerEntry(I, cw), IntegerEntry(J, cx)]
957978
958-
959-func gU (cB,cC) = [IntegerEntry(K, cB), IntegerEntry(L, cC)]
960-
961-
962-func gV (cw,cx,gW,gX,gY,gZ,ha,hb) = {
963- let cB = bj()
964- let cC = bk()
965- if (((gY - gZ) != gW))
966- then throw(((((("Invalid AMM state data: " + toString(gY)) + " + ") + toString(gZ)) + " != ") + toString(gW)))
967- else (gT(cw, cx) ++ [IntegerEntry(M, gW), IntegerEntry(P, gX), IntegerEntry(N, gY), IntegerEntry(O, gZ), IntegerEntry(R, ha), IntegerEntry(Q, hb)])
968- }
969-
970-
971-func hc (ag) = [DeleteEntry(ae(e, ag)), DeleteEntry(ae(f, ag)), DeleteEntry(ae(g, ag)), DeleteEntry(ae(h, ag)), DeleteEntry(ae(j, ag)), DeleteEntry(ae(k, ag)), DeleteEntry(ae(l, ag))]
972-
973-
974-func hd (ag,he) = {
975- let hf = assetBalance(this, aj())
976- if ((he > hf))
977- then throw(((("Unable to withdraw " + toString(he)) + " from contract balance ") + toString(hf)))
978- else [ScriptTransfer(ag, he, aj())]
979- }
980-
981-
982-func hg (bK) = if ((0 > bK))
983- then throw("Balance")
984- else [IntegerEntry(c, bK)]
985-
986-
987-func hh (bK) = [ScriptTransfer(al(), bK, aj())]
988-
989-
990-func hi (hj,bK) = if (hj)
991- then [Burn(valueOrErrorMessage(bK.payments[1].assetId, "Invalid artifact"), 1)]
992- else nil
993-
994-
995-@Callable(bK)
996-func pause () = if ((bK.caller != ai()))
997- then throw("Invalid pause params")
979+@Callable(by)
980+func setCloseOnly () = if ((by.caller != af()))
981+ then throw("Invalid setCloseOnly params")
998982 else [BooleanEntry(n, true)]
999983
1000984
1001985
1002-@Callable(bK)
1003-func unpause () = if ((bK.caller != ai()))
1004- then throw("Invalid unpause params")
986+@Callable(by)
987+func unsetCloseOnly () = if ((by.caller != af()))
988+ then throw("Invalid unsetCloseOnly params")
1005989 else [BooleanEntry(n, false)]
1006990
1007991
1008992
1009-@Callable(bK)
1010-func setCloseOnly () = if ((bK.caller != ai()))
1011- then throw("Invalid setCloseOnly params")
1012- else [BooleanEntry(o, true)]
1013-
1014-
1015-
1016-@Callable(bK)
1017-func unsetCloseOnly () = if ((bK.caller != ai()))
1018- then throw("Invalid unsetCloseOnly params")
1019- else [BooleanEntry(o, false)]
1020-
1021-
1022-
1023-@Callable(bK)
1024-func addLiquidity (cr) = if (if ((bK.caller != ai()))
993+@Callable(by)
994+func addLiquidity (cf) = if (if ((by.caller != af()))
1025995 then true
1026- else (0 >= cr))
996+ else (0 >= cf))
1027997 then throw("Invalid addLiquidity params")
1028998 else {
1029- let cw = bh()
1030- let cx = bi()
1031- let cB = bj()
1032- let cC = bk()
1033- let hk = aI(aK(cw, cB), aK(cx, cC))
1034- let hl = (cw + cr)
1035- let hm = (aI(aK(hl, cB), hk) - cx)
1036- let hn = (cx + hm)
1037- let ho = fG(dx(), hl, hn)
1038- let hp = ho._1
1039- let hq = ho._2
1040- let fK = ho._3
1041- let hr = if ((fK != 0))
999+ let ck = aV()
1000+ let cl = aW()
1001+ let cp = aX()
1002+ let cq = aY()
1003+ let gV = aD(aF(ck, cp), aF(cl, cq))
1004+ let gW = (ck + cf)
1005+ let gX = (aD(aF(gW, cp), gV) - cl)
1006+ let gY = (cl + gX)
1007+ let gZ = fu(dl(), gW, gY)
1008+ let ha = gZ._1
1009+ let hb = gZ._2
1010+ let fy = gZ._3
1011+ let hc = if ((fy != 0))
10421012 then {
1043- let hr = invoke(am(), "exchangeFreeAndLocked", [fK], nil)
1044- if ((hr == hr))
1013+ let hc = invoke(ai(), "exchangeFreeAndLocked", [fy], nil)
1014+ if ((hc == hc))
10451015 then nil
10461016 else throw("Strict value is not equal to itself.")
10471017 }
10481018 else nil
1049- if ((hr == hr))
1050- then (gT(hl, hn) ++ gU(hp, hq))
1019+ if ((hc == hc))
1020+ then (gE(gW, gY) ++ gF(ha, hb))
10511021 else throw("Strict value is not equal to itself.")
10521022 }
10531023
10541024
10551025
1056-@Callable(bK)
1057-func removeLiquidity (cr) = if (if ((bK.caller != ai()))
1026+@Callable(by)
1027+func removeLiquidity (cf) = if (if ((by.caller != af()))
10581028 then true
1059- else (cr >= 0))
1029+ else (cf >= 0))
10601030 then throw("Invalid removeLiquidity params")
10611031 else {
1062- let cw = bh()
1063- let cx = bi()
1064- let cB = bj()
1065- let cC = bk()
1066- let hk = aI(aK(cw, cB), aK(cx, cC))
1067- let hl = (cw - cr)
1068- let hs = aN((aI(aK(hl, cB), hk) - cx))
1069- let hn = (cx - hs)
1070- let ht = fG(dx(), hl, hn)
1071- let hp = ht._1
1072- let hq = ht._2
1073- let fK = ht._3
1074- let hr = if ((fK != 0))
1032+ let ck = aV()
1033+ let cl = aW()
1034+ let cp = aX()
1035+ let cq = aY()
1036+ let gV = aD(aF(ck, cp), aF(cl, cq))
1037+ let gW = (ck - cf)
1038+ let hd = aI((aD(aF(gW, cp), gV) - cl))
1039+ let gY = (cl - hd)
1040+ let he = fu(dl(), gW, gY)
1041+ let ha = he._1
1042+ let hb = he._2
1043+ let fy = he._3
1044+ let hc = if ((fy != 0))
10751045 then {
1076- let hr = invoke(am(), "exchangeFreeAndLocked", [fK], nil)
1077- if ((hr == hr))
1046+ let hc = invoke(ai(), "exchangeFreeAndLocked", [fy], nil)
1047+ if ((hc == hc))
10781048 then nil
10791049 else throw("Strict value is not equal to itself.")
10801050 }
10811051 else nil
1082- if ((hr == hr))
1083- then (gT(hl, hn) ++ gU(hp, hq))
1052+ if ((hc == hc))
1053+ then (gE(gW, gY) ++ gF(ha, hb))
10841054 else throw("Strict value is not equal to itself.")
10851055 }
10861056
10871057
10881058
1089-@Callable(bK)
1090-func changeSettings (gt,gu,gv,gw,eB,gx,gy,gz,gA,dQ,gB,gC,gD,gE) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= gw))
1059+@Callable(by)
1060+func changeSettings (ge,gf,gg,gh,ep,gi,gj,gk,gl,dE,gm,gn,go,gp) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= gh))
10911061 then true
1092- else (0 >= gt))
1062+ else (0 >= ge))
10931063 then true
1094- else (0 >= gu))
1064+ else (0 >= gf))
10951065 then true
1096- else (0 >= gv))
1066+ else (0 >= gg))
10971067 then true
1098- else (0 >= eB))
1068+ else (0 >= ep))
10991069 then true
1100- else (0 >= gx))
1070+ else (0 >= gi))
11011071 then true
1102- else (0 >= gy))
1072+ else (0 >= gj))
11031073 then true
1104- else (0 >= gz))
1074+ else (0 >= gk))
11051075 then true
1106- else (0 >= gA))
1076+ else (0 >= gl))
11071077 then true
1108- else (0 >= dQ))
1078+ else (0 >= dE))
11091079 then true
1110- else (0 >= gB))
1080+ else (0 >= gm))
11111081 then true
1112- else (gB > az))
1082+ else (gm > au))
11131083 then true
1114- else (0 >= gC))
1084+ else (0 >= gn))
11151085 then true
1116- else (0 >= gD))
1086+ else (0 >= go))
11171087 then true
1118- else if ((gE != aF))
1119- then (gE != aE)
1088+ else if ((gp != aA))
1089+ then (gp != az)
11201090 else false)
11211091 then true
1122- else !(cm()))
1092+ else !(ca()))
11231093 then true
1124- else (bK.caller != ai()))
1094+ else (by.caller != af()))
11251095 then throw("Invalid changeSettings params")
1126- else gs(gt, gu, gv, gw, eB, gx, gy, gz, gA, dQ, gB, gC, gD, gE)
1096+ else gd(ge, gf, gg, gh, ep, gi, gj, gk, gl, dE, gm, gn, go, gp)
11271097
11281098
11291099
1130-@Callable(bK)
1131-func initialize (cw,cx,gw,gt,gu,gv,eB,hu,hv,hw,gx,gy,gz,gA,dQ,gB,gC,gD,gE) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cw))
1100+@Callable(by)
1101+func initialize (ck,cl,gh,ge,gf,gg,ep,hf,hg,hh,gi,gj,gk,gl,dE,gm,gn,go,gp) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= ck))
11321102 then true
1133- else (0 >= cx))
1103+ else (0 >= cl))
11341104 then true
1135- else (0 >= gw))
1105+ else (0 >= gh))
11361106 then true
1137- else (0 >= gt))
1107+ else (0 >= ge))
11381108 then true
1139- else (0 >= gu))
1109+ else (0 >= gf))
11401110 then true
1141- else (0 >= gv))
1111+ else (0 >= gg))
11421112 then true
1143- else (0 >= eB))
1113+ else (0 >= ep))
11441114 then true
1145- else (0 >= gx))
1115+ else (0 >= gi))
11461116 then true
1147- else (0 >= gy))
1117+ else (0 >= gj))
11481118 then true
1149- else (0 >= gz))
1119+ else (0 >= gk))
11501120 then true
1151- else (0 >= gA))
1121+ else (0 >= gl))
11521122 then true
1153- else (0 >= dQ))
1123+ else (0 >= dE))
11541124 then true
1155- else (0 >= gB))
1125+ else (0 >= gm))
11561126 then true
1157- else (gB > az))
1127+ else (gm > au))
11581128 then true
1159- else (0 >= gC))
1129+ else (0 >= gn))
11601130 then true
1161- else (0 >= gD))
1131+ else (0 >= go))
11621132 then true
1163- else if ((gE != aF))
1164- then (gE != aE)
1133+ else if ((gp != aA))
1134+ then (gp != az)
11651135 else false)
11661136 then true
1167- else cm())
1137+ else ca())
11681138 then true
1169- else (bK.caller != this))
1139+ else (by.caller != this))
11701140 then throw("Invalid initialize parameters")
1171- else ((((gV(cw, cx, 0, 0, 0, 0, 0, 0) ++ gs(gt, gu, gv, gw, eB, gx, gy, gz, gA, dQ, gB, gC, gD, gE)) ++ gF((bI() + gw), 0, 0, 0, 0)) ++ hg(0)) ++ [BooleanEntry(m, true), StringEntry(a, hu), StringEntry(b, hv), StringEntry(T, toString(addressFromStringValue(hw)))])
1141+ else ((((gG(ck, cl, 0, 0, 0, 0, 0, 0) ++ gd(ge, gf, gg, gh, ep, gi, gj, gk, gl, dE, gm, gn, go, gp)) ++ gq((bw() + gh), 0, 0, 0, 0)) ++ gR(0)) ++ [BooleanEntry(l, true), StringEntry(a, hf), StringEntry(b, hg), StringEntry(S, toString(addressFromStringValue(hh)))])
11721142
11731143
11741144
1175-@Callable(bK)
1176-func increasePosition (hx,hy,hz,hA) = {
1177- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1178- if ((hB == hB))
1145+@Callable(by)
1146+func increasePosition (bI,hi,hj,hk) = {
1147+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1148+ if ((hl == hl))
11791149 then {
1180- let hC = invoke(this, "ensureCalledOnce", nil, nil)
1181- if ((hC == hC))
1150+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1151+ if ((hm == hm))
11821152 then {
1183- let bT = bJ(bK)
1184- let hD = bK.payments[0].amount
1185- let gf = bK.payments[0].assetId
1186- let hE = toBase58String(value(gf))
1187- let hF = (gf == aj())
1188- if (if (if (if (if (if (if (if (if (if ((hx != au))
1189- then (hx != av)
1153+ let bH = bx(by)
1154+ let hn = by.payments[0].amount
1155+ let ho = by.payments[0].assetId
1156+ let hp = toBase58String(value(ho))
1157+ let hq = (ho == ag())
1158+ if (if (if (if (if (if (if (if (if ((bI != aq))
1159+ then (bI != ar)
11901160 else false)
11911161 then true
1192- else (0 >= hD))
1162+ else (0 >= hn))
11931163 then true
1194- else !(cm()))
1164+ else !(ca()))
11951165 then true
1196- else !(hF))
1166+ else !(hq))
11971167 then true
1198- else !(ge(bT, hE)))
1168+ else !(bz(aD(au, hi), aU(), true)))
11991169 then true
1200- else !(bL(aI(az, hy), bg(), true)))
1170+ else cb())
12011171 then true
1202- else cn())
1172+ else cc())
12031173 then true
1204- else co())
1205- then true
1206- else dD())
1174+ else dr())
12071175 then throw("Invalid increasePosition parameters")
12081176 else {
1209- let hG = gh(bT, gm(bK))
1210- let gc = hG._1
1211- let gd = hG._2
1212- let he = aI(hD, (aK(gc, hy) + az))
1213- let hH = (hD - he)
1214- let hI = invoke(ap(), "acceptPaymentWithLink", [bT, hA], [AttachedPayment(aj(), hH)])
1215- if ((hI == hI))
1177+ let hr = fS(bH, fX(by))
1178+ let fQ = hr._1
1179+ let fR = hr._2
1180+ let gP = aD(hn, (aF(fQ, hi) + au))
1181+ let hs = (hn - gP)
1182+ let ht = invoke(al(), "acceptPaymentWithLink", [bH, hk], [AttachedPayment(ag(), hs)])
1183+ if ((ht == ht))
12161184 then {
1217- let hJ = {
1218- let bV = hI
1219- if ($isInstanceOf(bV, "Int"))
1185+ let hu = {
1186+ let bL = ht
1187+ if ($isInstanceOf(bL, "Int"))
12201188 then {
1221- let gk = bV
1222- gk
1189+ let fV = bL
1190+ fV
12231191 }
12241192 else throw("Invalid referrerFee")
12251193 }
1226- let hK = (hH - hJ)
1227- let hL = bS(bT)
1228- let eG = hL._1
1229- let eH = hL._2
1230- let eI = hL._3
1231- let eJ = hL._4
1232- let eK = hL._5
1233- let hM = (eG == 0)
1234- let hN = if ((eG > 0))
1235- then (hx == au)
1236- else (hx == av)
1237- let hO = if (!(hM))
1238- then hN
1194+ let hv = (hs - hu)
1195+ let hw = bG(bH, bI)
1196+ let eu = hw._1
1197+ let ev = hw._2
1198+ let ew = hw._3
1199+ let ex = hw._4
1200+ let ey = hw._5
1201+ let hx = (eu == 0)
1202+ let hy = if ((eu > 0))
1203+ then (bI == aq)
1204+ else (bI == ar)
1205+ let hz = if (!(hx))
1206+ then hy
12391207 else false
1240- let hP = (hx == au)
1241- let hQ = if (if (hM)
1208+ let hA = (bI == aq)
1209+ let hB = if (if (hx)
12421210 then true
1243- else hO)
1211+ else hz)
12441212 then {
1245- let hR = aK(he, hy)
1246- let hS = cA(hP, hR)
1247- let cH = hS._1
1248- let cE = hS._2
1249- let cF = hS._3
1250- let eQ = hS._4
1251- if (if ((hz != 0))
1252- then (hz > aN(cH))
1213+ let hC = aF(gP, hi)
1214+ let hD = co(hA, hC)
1215+ let cv = hD._1
1216+ let cs = hD._2
1217+ let ct = hD._3
1218+ let eE = hD._4
1219+ if (if ((hj != 0))
1220+ then (hj > aI(cv))
12531221 else false)
1254- then throw(((("Limit error: " + toString(aN(cH))) + " < ") + toString(hz)))
1222+ then throw(((("Limit error: " + toString(aI(cv))) + " < ") + toString(hj)))
12551223 else {
1256- let fe = (eG + cH)
1257- let hT = (bo() + (if ((fe > 0))
1258- then hR
1224+ let eS = (eu + cv)
1225+ let hE = (bc() + (if ((eS > 0))
1226+ then hC
12591227 else 0))
1260- let hU = (bn() + (if ((0 > fe))
1261- then hR
1228+ let hF = (bb() + (if ((0 > eS))
1229+ then hC
12621230 else 0))
1263- let hV = cW(eG, eH, eJ, eK, he)
1264- let de = hV._1
1265- let eY = hV._2
1266- let eZ = hV._3
1267- let cV = hV._4
1268- if (!(dJ(cE, cF)))
1231+ let hG = cK(eu, ev, ex, ey, gP)
1232+ let cS = hG._1
1233+ let eM = hG._2
1234+ let eN = hG._3
1235+ let cJ = hG._4
1236+ if (!(dx(cs, ct)))
12691237 then throw("Over max spread limit")
1270- else if (!(dN(hT, hU)))
1238+ else if (!(dB(hE, hF)))
12711239 then throw("Over max open notional")
1272- else $Tuple14(fe, de, (eI + hR), bQ(fe), bI(), cF, cE, eQ, (bm() + hR), (bD() + (if ((fe > 0))
1273- then aN(cH)
1274- else 0)), (bC() + (if ((0 > fe))
1275- then aN(cH)
1276- else 0)), hT, hU, cV)
1240+ else $Tuple14(eS, cS, (ew + hC), bE(eS), bw(), ct, cs, eE, (ba() + hC), (br() + (if ((eS > 0))
1241+ then aI(cv)
1242+ else 0)), (bq() + (if ((0 > eS))
1243+ then aI(cv)
1244+ else 0)), hE, hF, cJ)
12771245 }
12781246 }
12791247 else {
1280- let hR = aK(he, hy)
1281- let hW = ed(toString(bK.caller), aC)
1282- let eT = hW._1
1283- let ec = hW._2
1284- if ((eT > hR))
1248+ let hC = aF(gP, hi)
1249+ let hH = dR(toString(by.caller), bI, ax)
1250+ let eH = hH._1
1251+ let dQ = hH._2
1252+ if ((eH > hC))
12851253 then throw("Use decreasePosition to decrease position size")
12861254 else throw("Close position first")
12871255 }
1288- let fe = hQ._1
1289- let hX = hQ._2
1290- let fg = hQ._3
1291- let hY = hQ._4
1292- let hZ = hQ._5
1293- let cF = hQ._6
1294- let cE = hQ._7
1295- let eQ = hQ._8
1296- let ia = hQ._9
1297- let ib = hQ._10
1298- let ic = hQ._11
1299- let hT = hQ._12
1300- let hU = hQ._13
1301- let cV = hQ._14
1302- let id = go((hK + cV))
1303- let gq = id._1
1304- let gr = id._2
1305- let ie = if ((he >= cV))
1306- then invoke(am(), "addLocked", nil, [AttachedPayment(aj(), (he - cV))])
1307- else invoke(am(), "withdrawLocked", [(cV - he)], nil)
1308- if ((ie == ie))
1256+ let eS = hB._1
1257+ let hI = hB._2
1258+ let eU = hB._3
1259+ let hJ = hB._4
1260+ let hK = hB._5
1261+ let ct = hB._6
1262+ let cs = hB._7
1263+ let eE = hB._8
1264+ let hL = hB._9
1265+ let hM = hB._10
1266+ let hN = hB._11
1267+ let hE = hB._12
1268+ let hF = hB._13
1269+ let cJ = hB._14
1270+ let hO = fZ((hv + cJ))
1271+ let gb = hO._1
1272+ let gc = hO._2
1273+ let hP = if ((gP >= cJ))
1274+ then invoke(ai(), "addLocked", nil, [AttachedPayment(ag(), (gP - cJ))])
1275+ else invoke(ai(), "withdrawLocked", [(cJ - gP)], nil)
1276+ if ((hP == hP))
13091277 then {
1310- let if = invoke(am(), "addFree", nil, [AttachedPayment(aj(), gr)])
1311- if ((if == if))
1278+ let hQ = invoke(ai(), "addFree", nil, [AttachedPayment(ag(), gc)])
1279+ if ((hQ == hQ))
13121280 then {
1313- let ig = invoke(an(), "notifyFees", [bT, hK], nil)
1314- if ((ig == ig))
1281+ let hR = invoke(aj(), "notifyFees", [bH, hv], nil)
1282+ if ((hR == hR))
13151283 then {
1316- let ih = invoke(an(), "notifyNotional", [bT, fg], nil)
1317- if ((ih == ih))
1318- then ((((((gP(bT, fe, hX, fg, hY, hZ) ++ gL(hM, bT)) ++ gO(hM, bT, gc)) ++ gV(cE, cF, eQ, ia, ib, ic, hT, hU)) ++ hh(gq)) ++ hg(((bd() + he) - cV))) ++ hi(gd, bK))
1284+ let hS = invoke(aj(), "notifyNotional", [bH, eU], nil)
1285+ if ((hS == hS))
1286+ then ((((((gA(bH, eS, hI, eU, hJ, hK) ++ gw(hx, bH, bI)) ++ gz(hx, bH, bI, fQ)) ++ gG(cs, ct, eE, hL, hM, hN, hE, hF)) ++ gS(gb)) ++ gR(((aR() + gP) - cJ))) ++ gT(fR, by))
13191287 else throw("Strict value is not equal to itself.")
13201288 }
13211289 else throw("Strict value is not equal to itself.")
13341302
13351303
13361304
1337-@Callable(bK)
1338-func addMargin () = {
1339- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1340- if ((hB == hB))
1305+@Callable(by)
1306+func addMargin (bI) = {
1307+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1308+ if ((hl == hl))
13411309 then {
1342- let hC = invoke(this, "ensureCalledOnce", nil, nil)
1343- if ((hC == hC))
1310+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1311+ if ((hm == hm))
13441312 then {
1345- let bT = toString(bK.caller)
1346- let he = bK.payments[0].amount
1347- let gf = bK.payments[0].assetId
1348- let hE = toBase58String(value(gf))
1349- let hF = (gf == aj())
1350- if (if (if (if (if (if (if (!(hF))
1313+ let bH = toString(by.caller)
1314+ let gP = by.payments[0].amount
1315+ let ho = by.payments[0].assetId
1316+ let hp = toBase58String(value(ho))
1317+ let hq = (ho == ag())
1318+ if (if (if (if (if (!(hq))
13511319 then true
1352- else !(cd(toString(bK.caller))))
1320+ else !(bR(toString(by.caller), bI)))
13531321 then true
1354- else !(gg(bT, hE)))
1322+ else !(ca()))
13551323 then true
1356- else !(cm()))
1324+ else cb())
13571325 then true
1358- else cn())
1359- then true
1360- else co())
1361- then true
1362- else dD())
1326+ else dr())
13631327 then throw("Invalid addMargin parameters")
13641328 else {
1365- let ii = bS(bT)
1366- let eG = ii._1
1367- let eH = ii._2
1368- let eI = ii._3
1369- let eJ = ii._4
1370- let eK = ii._5
1371- let ie = invoke(am(), "addLocked", nil, [AttachedPayment(aj(), he)])
1372- if ((ie == ie))
1329+ let hT = bG(bH, bI)
1330+ let eu = hT._1
1331+ let ev = hT._2
1332+ let ew = hT._3
1333+ let ex = hT._4
1334+ let ey = hT._5
1335+ let hP = invoke(ai(), "addLocked", nil, [AttachedPayment(ag(), gP)])
1336+ if ((hP == hP))
13731337 then {
1374- let cV = cR(eH, eK)
1375- let ij = if ((cV > 0))
1338+ let cJ = cF(ev, ey)
1339+ let hU = if ((cJ > 0))
13761340 then {
1377- let ik = go(cV)
1378- let gq = ik._1
1379- let gr = ik._2
1380- let il = invoke(am(), "withdrawLocked", [gq], nil)
1381- if ((il == il))
1341+ let hV = fZ(cJ)
1342+ let gb = hV._1
1343+ let gc = hV._2
1344+ let hW = invoke(ai(), "withdrawLocked", [gb], nil)
1345+ if ((hW == hW))
13821346 then {
1383- let im = invoke(am(), "exchangeFreeAndLocked", [-(gr)], nil)
1384- if ((im == im))
1385- then hh(gq)
1347+ let hX = invoke(ai(), "exchangeFreeAndLocked", [-(gc)], nil)
1348+ if ((hX == hX))
1349+ then gS(gb)
13861350 else throw("Strict value is not equal to itself.")
13871351 }
13881352 else throw("Strict value is not equal to itself.")
13891353 }
13901354 else nil
1391- if ((ij == ij))
1392- then ((gP(bT, eG, ((eH - cV) + he), eI, eJ, bI()) ++ hg(((bd() + he) - cV))) ++ ij)
1355+ if ((hU == hU))
1356+ then ((gA(bH, eu, ((ev - cJ) + gP), ew, ex, bw()) ++ gR(((aR() + gP) - cJ))) ++ hU)
13931357 else throw("Strict value is not equal to itself.")
13941358 }
13951359 else throw("Strict value is not equal to itself.")
14021366
14031367
14041368
1405-@Callable(bK)
1406-func removeMargin (he) = {
1407- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1408- if ((hB == hB))
1369+@Callable(by)
1370+func removeMargin (gP,bI) = {
1371+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1372+ if ((hl == hl))
14091373 then {
1410- let hC = invoke(this, "ensureCalledOnce", nil, nil)
1411- if ((hC == hC))
1374+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1375+ if ((hm == hm))
14121376 then {
1413- let bT = toString(bK.caller)
1414- if (if (if (if (if ((0 >= he))
1377+ let bH = toString(by.caller)
1378+ if (if (if (if (if ((0 >= gP))
14151379 then true
1416- else !(cd(bT)))
1380+ else !(bR(bH, bI)))
14171381 then true
1418- else !(cm()))
1382+ else !(ca()))
14191383 then true
1420- else cn())
1384+ else cb())
14211385 then true
1422- else dD())
1386+ else dr())
14231387 then throw("Invalid removeMargin parameters")
14241388 else {
1425- let in = bS(bT)
1426- let eG = in._1
1427- let eH = in._2
1428- let eI = in._3
1429- let eJ = in._4
1430- let eK = in._5
1431- let io = cW(eG, eH, eJ, eK, -(he))
1432- let de = io._1
1433- let df = io._2
1434- let da = io._3
1435- let cV = io._4
1436- if ((df != 0))
1389+ let hY = bG(bH, bI)
1390+ let eu = hY._1
1391+ let ev = hY._2
1392+ let ew = hY._3
1393+ let ex = hY._4
1394+ let ey = hY._5
1395+ let hZ = cK(eu, ev, ex, ey, -(gP))
1396+ let cS = hZ._1
1397+ let cT = hZ._2
1398+ let cO = hZ._3
1399+ let cJ = hZ._4
1400+ if ((cT != 0))
14371401 then throw("Invalid removed margin amount")
14381402 else {
1439- let fj = ei(de, df, eI)
1440- if (!(bL(fj, bg(), true)))
1441- then throw(((("Too much margin removed: " + toString(fj)) + " < ") + toString(bg())))
1403+ let eX = dW(cS, cT, ew)
1404+ if (!(bz(eX, aU(), true)))
1405+ then throw(((("Too much margin removed: " + toString(eX)) + " < ") + toString(aU())))
14421406 else {
1443- let ip = go(cV)
1444- let gq = ip._1
1445- let gr = ip._2
1446- let ij = if ((cV > 0))
1407+ let ia = fZ(cJ)
1408+ let gb = ia._1
1409+ let gc = ia._2
1410+ let hU = if ((cJ > 0))
14471411 then {
1448- let im = invoke(am(), "exchangeFreeAndLocked", [-(gr)], nil)
1449- if ((im == im))
1450- then hh(gq)
1412+ let hX = invoke(ai(), "exchangeFreeAndLocked", [-(gc)], nil)
1413+ if ((hX == hX))
1414+ then gS(gb)
14511415 else throw("Strict value is not equal to itself.")
14521416 }
14531417 else nil
1454- if ((ij == ij))
1418+ if ((hU == hU))
14551419 then {
1456- let il = invoke(am(), "withdrawLocked", [(he + gq)], nil)
1457- if ((il == il))
1458- then (((gP(bT, eG, de, eI, bQ(eG), bI()) ++ hd(bK.caller, he)) ++ hg(((bd() - he) - cV))) ++ ij)
1420+ let hW = invoke(ai(), "withdrawLocked", [(gP + gb)], nil)
1421+ if ((hW == hW))
1422+ then (((gA(bH, eu, cS, ew, bE(eu), bw()) ++ gO(by.caller, gP)) ++ gR(((aR() - gP) - cJ))) ++ hU)
14591423 else throw("Strict value is not equal to itself.")
14601424 }
14611425 else throw("Strict value is not equal to itself.")
14701434
14711435
14721436
1473-@Callable(bK)
1474-func closePosition (eA,eC,eD) = {
1475- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1476- if ((hB == hB))
1437+@Callable(by)
1438+func closePosition (eo,bI,eq,er) = {
1439+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1440+ if ((hl == hl))
14771441 then {
1478- let hC = invoke(this, "ensureCalledOnce", nil, nil)
1479- if ((hC == hC))
1442+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1443+ if ((hm == hm))
14801444 then {
1481- let bT = bJ(bK)
1482- let iq = valueOrErrorMessage(addressFromString(bT), "Invalid caller")
1483- let cc = ca(bT)
1484- if (if (if (if (if (if (!(cd(bT)))
1445+ let bH = bx(by)
1446+ let ib = valueOrErrorMessage(addressFromString(bH), "Invalid caller")
1447+ let bQ = bO(bH)
1448+ if (if (if (if (if (if (!(bR(bH, bI)))
14851449 then true
1486- else !(cm()))
1450+ else !(ca()))
14871451 then true
1488- else cn())
1452+ else cb())
14891453 then true
1490- else (0 >= eA))
1454+ else (0 >= eo))
14911455 then true
1492- else (0 > eC))
1456+ else (0 > eq))
14931457 then true
1494- else dD())
1458+ else dr())
14951459 then throw("Invalid closePosition parameters")
14961460 else {
1497- let eK = bS(bT)._5
1498- let ir = ez(bT, eA, cc, eC, eD, true, true)
1499- let fe = ir._1
1500- let fn = ir._2
1501- let fg = ir._3
1502- let fh = ir._4
1503- let fa = ir._5
1504- let eV = ir._6
1505- let fm = ir._7
1506- let cE = ir._8
1507- let cF = ir._9
1508- let eQ = ir._10
1509- let ia = ir._11
1510- let ib = ir._12
1511- let ic = ir._13
1512- let hT = ir._14
1513- let hU = ir._15
1514- let is = ir._16
1515- if ((fa > 0))
1461+ let ey = bG(bH, bI)._5
1462+ let ic = en(bH, bI, eo, bQ, eq, er, true, true)
1463+ let eS = ic._1
1464+ let fb = ic._2
1465+ let eU = ic._3
1466+ let eV = ic._4
1467+ let eO = ic._5
1468+ let eJ = ic._6
1469+ let fa = ic._7
1470+ let cs = ic._8
1471+ let ct = ic._9
1472+ let eE = ic._10
1473+ let hL = ic._11
1474+ let hM = ic._12
1475+ let hN = ic._13
1476+ let hE = ic._14
1477+ let hF = ic._15
1478+ let id = ic._16
1479+ if ((eO > 0))
15161480 then throw("Invalid closePosition parameters: bad debt")
1517- else if ((eK >= bI()))
1481+ else if ((ey >= bw()))
15181482 then throw("Invalid closePosition parameters: wait at least 1 block before closing the position")
15191483 else {
1520- let eN = (fe != 0)
1521- let it = (fm + is)
1522- let iu = (bd() - it)
1523- let iv = if ((0 > iu))
1484+ let eB = (eS != 0)
1485+ let ie = (fa + id)
1486+ let if = (aR() - ie)
1487+ let ig = if ((0 > if))
15241488 then 0
1525- else iu
1526- let il = invoke(am(), "withdrawLocked", [it], nil)
1527- if ((il == il))
1489+ else if
1490+ let hW = invoke(ai(), "withdrawLocked", [ie], nil)
1491+ if ((hW == hW))
15281492 then {
1529- let iw = go(is)
1530- let gq = iw._1
1531- let gr = iw._2
1532- let if = invoke(am(), "addFree", nil, [AttachedPayment(aj(), gr)])
1533- if ((if == if))
1493+ let ht = invoke(al(), "acceptPayment", [bH], [AttachedPayment(ag(), id)])
1494+ if ((ht == ht))
15341495 then {
1535- let ig = invoke(an(), "notifyFees", [bT, is], nil)
1536- if ((ig == ig))
1496+ let hu = {
1497+ let bL = ht
1498+ if ($isInstanceOf(bL, "Int"))
1499+ then {
1500+ let fV = bL
1501+ fV
1502+ }
1503+ else throw("Invalid referrerFee")
1504+ }
1505+ let ih = fZ((id - hu))
1506+ let gb = ih._1
1507+ let gc = ih._2
1508+ let hQ = invoke(ai(), "addFree", nil, [AttachedPayment(ag(), gc)])
1509+ if ((hQ == hQ))
15371510 then {
1538- let ih = invoke(an(), "notifyNotional", [bT, fg], nil)
1539- if ((ih == ih))
1540- then (((((if (eN)
1541- then gP(bT, fe, fn, fg, fh, bI())
1542- else hc(bT)) ++ gV(cE, cF, eQ, ia, ib, ic, hT, hU)) ++ (if ((fm > 0))
1543- then hd(iq, fm)
1544- else nil)) ++ hg(iv)) ++ hh(gq))
1511+ let hR = invoke(aj(), "notifyFees", [bH, id], nil)
1512+ if ((hR == hR))
1513+ then {
1514+ let hS = invoke(aj(), "notifyNotional", [bH, eU], nil)
1515+ if ((hS == hS))
1516+ then (((((if (eB)
1517+ then gA(bH, eS, fb, eU, eV, bw())
1518+ else gN(bH, bI)) ++ gG(cs, ct, eE, hL, hM, hN, hE, hF)) ++ (if ((fa > 0))
1519+ then gO(ib, fa)
1520+ else nil)) ++ gR(ig)) ++ gS(gb))
1521+ else throw("Strict value is not equal to itself.")
1522+ }
15451523 else throw("Strict value is not equal to itself.")
15461524 }
15471525 else throw("Strict value is not equal to itself.")
15591537
15601538
15611539
1562-@Callable(bK)
1563-func liquidate (bT) = {
1564- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1565- if ((hB == hB))
1540+@Callable(by)
1541+func liquidate (bH,bI) = {
1542+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1543+ if ((hl == hl))
15661544 then {
1567- let ix = em(bT, aC)
1568- let iy = if (dS())
1545+ let ii = ea(bH, bI, ax)
1546+ let ij = if (dG())
15691547 then {
1570- let iz = em(bT, aD)
1571- aO(ix, iz)
1548+ let ik = ea(bH, bI, ay)
1549+ aJ(ii, ik)
15721550 }
1573- else ix
1574- if (if (if (if (if (!(bL(iy, bt(), false)))
1551+ else ii
1552+ if (if (if (if (if (!(bz(ij, bh(), false)))
15751553 then true
1576- else !(cd(bT)))
1554+ else !(bR(bH, bI)))
15771555 then true
1578- else !(cm()))
1556+ else !(ca()))
15791557 then true
1580- else cn())
1558+ else cb())
15811559 then true
1582- else dD())
1560+ else dr())
15831561 then throw("Unable to liquidate")
15841562 else {
1585- let iA = if (if ((ix > bu()))
1586- then (bv() > 0)
1563+ let il = if (if ((ii > bi()))
1564+ then (bj() > 0)
15871565 else false)
1588- then (az > bv())
1566+ then (au > bj())
15891567 else false
1590- let eG = bS(bT)._1
1591- let dW = aN(eG)
1592- let iB = if (iA)
1568+ let eu = bG(bH, bI)._1
1569+ let dK = aI(eu)
1570+ let im = if (il)
15931571 then {
1594- let iC = eu(bT, eG)
1595- let iD = aI(aN(iC), dW)
1596- $Tuple2(iD, aN(iC))
1572+ let in = ei(bH, eu)
1573+ let io = aD(aI(in), dK)
1574+ $Tuple2(io, aI(in))
15971575 }
1598- else $Tuple2(0, dW)
1599- let iD = iB._1
1600- let iC = iB._2
1601- let iE = ez(bT, if (iA)
1602- then iC
1603- else dW, bu(), 0, true, false, true)
1604- let fe = iE._1
1605- let fn = iE._2
1606- let fg = iE._3
1607- let fh = iE._4
1608- let fa = iE._5
1609- let eV = iE._6
1610- let fm = iE._7
1611- let cE = iE._8
1612- let cF = iE._9
1613- let eQ = iE._10
1614- let ia = iE._11
1615- let ib = iE._12
1616- let ic = iE._13
1617- let hT = iE._14
1618- let hU = iE._15
1619- let iF = iE._16
1620- let iG = (iF / 2)
1621- let gr = (iF - iG)
1622- let iu = (bd() - iF)
1623- let iH = if ((0 > iu))
1576+ else $Tuple2(0, dK)
1577+ let io = im._1
1578+ let in = im._2
1579+ let ip = en(bH, bI, if (il)
1580+ then in
1581+ else dK, bi(), 0, true, false, true)
1582+ let eS = ip._1
1583+ let fb = ip._2
1584+ let eU = ip._3
1585+ let eV = ip._4
1586+ let eO = ip._5
1587+ let eJ = ip._6
1588+ let fa = ip._7
1589+ let cs = ip._8
1590+ let ct = ip._9
1591+ let eE = ip._10
1592+ let hL = ip._11
1593+ let hM = ip._12
1594+ let hN = ip._13
1595+ let hE = ip._14
1596+ let hF = ip._15
1597+ let iq = ip._16
1598+ let ir = (iq / 2)
1599+ let gc = (iq - ir)
1600+ let if = (aR() - iq)
1601+ let is = if ((0 > if))
16241602 then 0
1625- else iu
1626- let im = if ((fa > 0))
1603+ else if
1604+ let hX = if ((eO > 0))
16271605 then {
1628- let im = invoke(am(), "exchangeFreeAndLocked", [(fa + iF)], nil)
1629- if ((im == im))
1606+ let hX = invoke(ai(), "exchangeFreeAndLocked", [(eO + iq)], nil)
1607+ if ((hX == hX))
16301608 then nil
16311609 else throw("Strict value is not equal to itself.")
16321610 }
16331611 else nil
1634- if ((im == im))
1612+ if ((hX == hX))
16351613 then {
1636- let il = invoke(am(), "withdrawLocked", [iF], nil)
1637- if ((il == il))
1614+ let hW = invoke(ai(), "withdrawLocked", [iq], nil)
1615+ if ((hW == hW))
16381616 then {
1639- let iI = invoke(am(), "addFree", nil, [AttachedPayment(aj(), gr)])
1640- if ((iI == iI))
1617+ let it = invoke(ai(), "addFree", nil, [AttachedPayment(ag(), gc)])
1618+ if ((it == it))
16411619 then {
1642- let ih = invoke(an(), "notifyNotional", [bT, fg], nil)
1643- if ((ih == ih))
1644- then ((((if (iA)
1645- then gP(bT, fe, fn, fg, fh, bI())
1646- else hc(bT)) ++ gV(cE, cF, eQ, ia, ib, ic, hT, hU)) ++ hd(bK.caller, iG)) ++ hg(iH))
1620+ let hS = invoke(aj(), "notifyNotional", [bH, eU], nil)
1621+ if ((hS == hS))
1622+ then ((((if (il)
1623+ then gA(bH, eS, fb, eU, eV, bw())
1624+ else gN(bH, bI)) ++ gG(cs, ct, eE, hL, hM, hN, hE, hF)) ++ gO(by.caller, ir)) ++ gR(is))
16471625 else throw("Strict value is not equal to itself.")
16481626 }
16491627 else throw("Strict value is not equal to itself.")
16581636
16591637
16601638
1661-@Callable(bK)
1639+@Callable(by)
16621640 func payFunding () = {
1663- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1664- if ((hB == hB))
1641+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1642+ if ((hl == hl))
16651643 then {
1666- let iJ = bp()
1667- if (if (if ((iJ > bI()))
1644+ let iu = bd()
1645+ if (if (if ((iu > bw()))
16681646 then true
1669- else !(cm()))
1647+ else !(ca()))
16701648 then true
1671- else cn())
1672- then throw(((("Invalid funding block timestamp: " + toString(bI())) + " < ") + toString(iJ)))
1649+ else cb())
1650+ then throw(((("Invalid funding block timestamp: " + toString(bw())) + " < ") + toString(iu)))
16731651 else {
1674- let fM = dx()
1675- let iK = fL()
1676- let fP = iK._1
1677- let fQ = iK._2
1678- let fT = iK._3
1679- let iL = if ((fT > 0))
1652+ let fA = dl()
1653+ let iv = fz()
1654+ let fD = iv._1
1655+ let fE = iv._2
1656+ let fH = iv._3
1657+ let iw = if ((fH > 0))
16801658 then {
1681- let iL = invoke(am(), "exchangeFreeAndLocked", [-(fT)], nil)
1682- if ((iL == iL))
1659+ let iw = invoke(ai(), "exchangeFreeAndLocked", [-(fH)], nil)
1660+ if ((iw == iw))
16831661 then nil
16841662 else throw("Strict value is not equal to itself.")
16851663 }
16861664 else nil
1687- if ((iL == iL))
1688- then gF((iJ + bs()), (bA() + fQ), (bB() + fP), aI(fQ, fM), aI(fP, fM))
1665+ if ((iw == iw))
1666+ then gq((iu + bg()), (bo() + fE), (bp() + fD), aD(fE, fA), aD(fD, fA))
16891667 else throw("Strict value is not equal to itself.")
16901668 }
16911669 }
16941672
16951673
16961674
1697-@Callable(bK)
1675+@Callable(by)
16981676 func syncTerminalPriceToOracle () = {
1699- let cw = bh()
1700- let cx = bi()
1701- let iM = fG(dx(), cw, cx)
1702- let hp = iM._1
1703- let hq = iM._2
1704- let fK = iM._3
1705- let iN = if (if ((0 > fK))
1706- then (aN(fK) > bd())
1677+ let ck = aV()
1678+ let cl = aW()
1679+ let ix = fu(dl(), ck, cl)
1680+ let ha = ix._1
1681+ let hb = ix._2
1682+ let fy = ix._3
1683+ let iy = if (if ((0 > fy))
1684+ then (aI(fy) > aR())
17071685 else false)
1708- then -(bd())
1709- else fK
1710- let hr = if ((iN != 0))
1686+ then -(aR())
1687+ else fy
1688+ let hc = if ((iy != 0))
17111689 then {
1712- let hr = invoke(am(), "exchangeFreeAndLocked", [iN], nil)
1713- if ((hr == hr))
1690+ let hc = invoke(ai(), "exchangeFreeAndLocked", [iy], nil)
1691+ if ((hc == hc))
17141692 then nil
17151693 else throw("Strict value is not equal to itself.")
17161694 }
17171695 else nil
1718- if ((hr == hr))
1719- then (hg((bd() + iN)) ++ gU(hp, hq))
1696+ if ((hc == hc))
1697+ then (gR((aR() + iy)) ++ gF(ha, hb))
17201698 else throw("Strict value is not equal to itself.")
17211699 }
17221700
17231701
17241702
1725-@Callable(bK)
1726-func ensureCalledOnce () = if ((bK.caller != this))
1703+@Callable(by)
1704+func ensureCalledOnce () = if ((by.caller != this))
17271705 then throw("Invalid saveCurrentTxId parameters")
17281706 else {
1729- let iO = valueOrElse(getString(this, S), "")
1730- if ((iO != toBase58String(bK.transactionId)))
1731- then [StringEntry(S, iO)]
1707+ let iz = toBase58String(by.transactionId)
1708+ let iA = valueOrElse(getString(this, R), "")
1709+ if ((iA != iz))
1710+ then [StringEntry(R, iz)]
17321711 else throw("Can not call vAMM methods twice in one tx")
17331712 }
17341713
17351714
17361715
1737-@Callable(bK)
1738-func view_calcRemainMarginWithFundingPayment (bT) = {
1739- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1740- if ((hB == hB))
1716+@Callable(by)
1717+func migratePosition (bH) = {
1718+ let bK = getInteger(this, ab(e, bH))
1719+ if (isDefined(bK))
17411720 then {
1742- let iP = bS(bT)
1743- let bW = iP._1
1744- let ef = iP._2
1745- let eo = iP._3
1746- let eh = iP._4
1747- let eq = iP._5
1748- let iQ = ed(bT, aC)
1749- let dY = iQ._1
1750- let ec = iQ._2
1751- let iR = cW(bW, ef, eh, eq, ec)
1752- let de = iR._1
1753- let df = iR._2
1754- let da = iR._3
1755- let cV = iR._4
1756- throw(((((((aG(de) + aG(da)) + aG(et(bT))) + aG(ec)) + aG(df)) + aG(dY)) + aG(cV)))
1721+ let iB = getIntegerValue(this, ab(e, bH))
1722+ let iC = getIntegerValue(this, ab(f, bH))
1723+ let iD = getIntegerValue(this, ab(g, bH))
1724+ let iE = getIntegerValue(this, ab(h, bH))
1725+ let iF = getIntegerValue(this, ab(k, bH))
1726+ let iG = getIntegerValue(this, ab(j, bH))
1727+ let iH = getIntegerValue(this, ab(i, bH))
1728+ let iI = bN(iB)
1729+ let bJ = ((bH + "_") + toString(iI))
1730+[DeleteEntry(ab(e, bH)), DeleteEntry(ab(f, bH)), DeleteEntry(ab(g, bH)), DeleteEntry(ab(h, bH)), DeleteEntry(ab(k, bH)), DeleteEntry(ab(j, bH)), DeleteEntry(ab(i, bH)), IntegerEntry(ab(e, bJ), iB), IntegerEntry(ab(f, bJ), iC), IntegerEntry(ab(g, bJ), iD), IntegerEntry(ab(h, bJ), iE), IntegerEntry(ab(k, bJ), iF), IntegerEntry(ab(j, bJ), iG), IntegerEntry(ab(i, bJ), iH)]
1731+ }
1732+ else throw(("Nothing to migrate for " + bH))
1733+ }
1734+
1735+
1736+
1737+@Callable(by)
1738+func view_calcRemainMarginWithFundingPayment (bH,bI) = {
1739+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1740+ if ((hl == hl))
1741+ then {
1742+ let iJ = bG(bH, bI)
1743+ let bM = iJ._1
1744+ let dT = iJ._2
1745+ let ec = iJ._3
1746+ let dV = iJ._4
1747+ let ee = iJ._5
1748+ let iK = dR(bH, bI, ax)
1749+ let dM = iK._1
1750+ let dQ = iK._2
1751+ let iL = cK(bM, dT, dV, ee, dQ)
1752+ let cS = iL._1
1753+ let cT = iL._2
1754+ let cO = iL._3
1755+ let cJ = iL._4
1756+ throw(((((((aB(cS) + aB(cO)) + aB(eh(bH, bI))) + aB(dQ)) + aB(cT)) + aB(dM)) + aB(cJ)))
17571757 }
17581758 else throw("Strict value is not equal to itself.")
17591759 }
17601760
17611761
17621762
1763-@Callable(bK)
1764-func view_getPegAdjustCost (iS) = {
1765- let cw = bh()
1766- let cx = bi()
1767- let fF = fG(iS, cw, cx)
1768- throw(toString(fF._3))
1763+@Callable(by)
1764+func view_getPegAdjustCost (iM) = {
1765+ let ck = aV()
1766+ let cl = aW()
1767+ let ft = fu(iM, ck, cl)
1768+ throw(toString(ft._3))
17691769 }
17701770
17711771
17721772
1773-@Callable(bK)
1773+@Callable(by)
17741774 func view_getTerminalAmmPrice () = {
1775- let iT = fo()
1776- let fs = iT._1
1777- let ft = iT._2
1778- let hk = aI(aK(fs, bj()), aK(ft, bk()))
1779- throw(toString(hk))
1775+ let iN = fc()
1776+ let fg = iN._1
1777+ let fh = iN._2
1778+ let gV = aD(aF(fg, aX()), aF(fh, aY()))
1779+ throw(toString(gV))
17801780 }
17811781
17821782
17831783
1784-@Callable(bK)
1784+@Callable(by)
17851785 func view_getFunding () = {
1786- let fM = dx()
1787- let iU = fL()
1788- let fP = iU._1
1789- let fQ = iU._2
1790- let fT = iU._3
1791- let iV = aI(fQ, fM)
1792- let iW = aI(fP, fM)
1793- throw(((((aG(iV) + aG(iW)) + aG(dR())) + aG(dx())) + aG(fT)))
1794- }
1795-
1796-
1797-
1798-@Callable(bK)
1799-func computeSpotPrice () = {
1800- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1801- if ((hB == hB))
1786+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1787+ if ((hl == hl))
18021788 then {
1803- let fF = dR()
1804- $Tuple2(nil, fF)
1789+ let fA = dl()
1790+ let iO = fz()
1791+ let fD = iO._1
1792+ let fE = iO._2
1793+ let fH = iO._3
1794+ let iP = aD(fE, fA)
1795+ let iQ = aD(fD, fA)
1796+ throw(((((aB(iP) + aB(iQ)) + aB(dF())) + aB(dl())) + aB(fH)))
18051797 }
18061798 else throw("Strict value is not equal to itself.")
18071799 }
18081800
18091801
18101802
1811-@Callable(bK)
1812-func computeFeeForTraderWithArtifact (bT,fV) = {
1813- let fF = gh(bT, fV)
1814- $Tuple2(nil, fF)
1803+@Callable(by)
1804+func computeSpotPrice () = {
1805+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1806+ if ((hl == hl))
1807+ then {
1808+ let ft = dF()
1809+ $Tuple2(nil, ft)
1810+ }
1811+ else throw("Strict value is not equal to itself.")
18151812 }
18161813
18171814
1818-@Verifier(iX)
1819-func iY () = {
1820- let iZ = getString(this, T)
1821- if (isDefined(iZ))
1815+
1816+@Callable(by)
1817+func computeFeeForTraderWithArtifact (bH,fJ) = {
1818+ let ft = fS(bH, fJ)
1819+ $Tuple2(nil, ft)
1820+ }
1821+
1822+
1823+@Verifier(iR)
1824+func iS () = {
1825+ let iT = getString(this, S)
1826+ if (isDefined(iT))
18221827 then {
1823- let ja = getString(addressFromStringValue(value(iZ)), V)
1824- if (isDefined(ja))
1825- then valueOrElse(getBoolean(addressFromStringValue(value(ja)), ((("status_" + toString(this)) + "_") + toBase58String(iX.id))), false)
1828+ let iU = getString(addressFromStringValue(value(iT)), U)
1829+ if (isDefined(iU))
1830+ then valueOrElse(getBoolean(addressFromStringValue(value(iU)), ((("status_" + toString(this)) + "_") + toBase58String(iR.id))), false)
18261831 else throw("unable to verify: admin not set in coordinator")
18271832 }
1828- else sigVerify(iX.bodyBytes, iX.proofs[0], iX.senderPublicKey)
1833+ else sigVerify(iR.bodyBytes, iR.proofs[0], iR.senderPublicKey)
18291834 }
18301835
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_baseOracle"
55
66 let b = "k_quoteOracle"
77
88 let c = "k_balance"
99
1010 let d = "k_sequence"
1111
1212 let e = "k_positionSize"
1313
1414 let f = "k_positionMargin"
1515
1616 let g = "k_positionOpenNotional"
1717
1818 let h = "k_positionFraction"
1919
2020 let i = "k_positionSequence"
2121
22-let j = "k_positionAsset"
22+let j = "k_positionFee"
2323
24-let k = "k_positionFee"
24+let k = "k_positionTimestamp"
2525
26-let l = "k_positionTimestamp"
26+let l = "k_initialized"
2727
28-let m = "k_initialized"
28+let m = "k_paused"
2929
30-let n = "k_paused"
30+let n = "k_closeOnly"
3131
32-let o = "k_closeOnly"
32+let o = "k_fee"
3333
34-let p = "k_fee"
34+let p = "k_rollover_fee"
3535
36-let q = "k_rollover_fee"
36+let q = "k_fundingPeriod"
3737
38-let r = "k_fundingPeriod"
38+let r = "k_initMarginRatio"
3939
40-let s = "k_initMarginRatio"
40+let s = "k_mmr"
4141
42-let t = "k_mmr"
42+let t = "k_liquidationFeeRatio"
4343
44-let u = "k_liquidationFeeRatio"
44+let u = "k_partLiquidationRatio"
4545
46-let v = "k_partLiquidationRatio"
46+let v = "k_spreadLimit"
4747
48-let w = "k_spreadLimit"
48+let w = "k_maxPriceImpact"
4949
50-let x = "k_maxPriceImpact"
50+let x = "k_maxPriceSpread"
5151
52-let y = "k_maxPriceSpread"
52+let y = "k_maxOpenNotional"
5353
54-let z = "k_maxOpenNotional"
54+let z = "k_feeToStakersPercent"
5555
56-let A = "k_feeToStakersPercent"
56+let A = "k_maxOracleDelay"
5757
58-let B = "k_maxOracleDelay"
58+let B = "k_fundingMode"
5959
60-let C = "k_fundingMode"
60+let C = "k_latestLongPremiumFraction"
6161
62-let D = "k_latestLongPremiumFraction"
62+let D = "k_latestShortPremiumFraction"
6363
64-let E = "k_latestShortPremiumFraction"
64+let E = "k_nextFundingBlockMinTimestamp"
6565
66-let F = "k_nextFundingBlockMinTimestamp"
66+let F = "k_longFundingRate"
6767
68-let G = "k_longFundingRate"
68+let G = "k_shortFundingRate"
6969
70-let H = "k_shortFundingRate"
70+let H = "k_qtAstR"
7171
72-let I = "k_qtAstR"
72+let I = "k_bsAstR"
7373
74-let J = "k_bsAstR"
74+let J = "k_qtAstW"
7575
76-let K = "k_qtAstW"
76+let K = "k_bsAstW"
7777
78-let L = "k_bsAstW"
78+let L = "k_totalPositionSize"
7979
80-let M = "k_totalPositionSize"
80+let M = "k_totalLongPositionSize"
8181
82-let N = "k_totalLongPositionSize"
82+let N = "k_totalShortPositionSize"
8383
84-let O = "k_totalShortPositionSize"
84+let O = "k_openInterestNotional"
8585
86-let P = "k_openInterestNotional"
86+let P = "k_openInterestShort"
8787
88-let Q = "k_openInterestShort"
88+let Q = "k_openInterestLong"
8989
90-let R = "k_openInterestLong"
90+let R = "k_lastTx"
9191
92-let S = "k_lastTx"
92+let S = "k_coordinatorAddress"
9393
94-let T = "k_coordinatorAddress"
94+let T = "k_vault_address"
9595
96-let U = "k_vault_address"
96+let U = "k_admin_address"
9797
98-let V = "k_admin_address"
98+let V = "k_quote_asset"
9999
100-let W = "k_quote_asset"
100+let W = "k_staking_address"
101101
102-let X = "k_quote_staking"
102+let X = "k_miner_address"
103103
104-let Y = "k_staking_address"
104+let Y = "k_orders_address"
105105
106-let Z = "k_miner_address"
106+let Z = "k_referral_address"
107107
108-let aa = "k_orders_address"
108+let aa = "k_nft_manager_address"
109109
110-let ab = "k_referral_address"
111-
112-let ac = "k_exchange_address"
113-
114-let ad = "k_nft_manager_address"
115-
116-func ae (af,ag) = ((af + "_") + ag)
110+func ab (ac,ad) = ((ac + "_") + ad)
117111
118112
119-func ah () = valueOrErrorMessage(addressFromString(getStringValue(this, T)), "Coordinator not set")
113+func ae () = valueOrErrorMessage(addressFromString(getStringValue(this, S)), "Coordinator not set")
120114
121115
122-func ai () = addressFromString(getStringValue(ah(), V))
116+func af () = addressFromString(getStringValue(ae(), U))
123117
124118
125-func aj () = fromBase58String(getStringValue(ah(), W))
119+func ag () = fromBase58String(getStringValue(ae(), V))
126120
127121
128-func ak () = valueOrErrorMessage(addressFromString(getStringValue(ah(), X)), "Quote asset staking not set")
122+func ah () = valueOrErrorMessage(addressFromString(getStringValue(ae(), W)), "Staking not set")
129123
130124
131-func al () = valueOrErrorMessage(addressFromString(getStringValue(ah(), Y)), "Staking not set")
125+func ai () = valueOrErrorMessage(addressFromString(getStringValue(ae(), T)), "Vault not set")
132126
133127
134-func am () = valueOrErrorMessage(addressFromString(getStringValue(ah(), U)), "Vault not set")
128+func aj () = valueOrErrorMessage(addressFromString(getStringValue(ae(), X)), "Miner not set")
135129
136130
137-func an () = valueOrErrorMessage(addressFromString(getStringValue(ah(), Z)), "Miner not set")
131+func ak () = valueOrErrorMessage(addressFromString(getStringValue(ae(), Y)), "Orders not set")
138132
139133
140-func ao () = valueOrErrorMessage(addressFromString(getStringValue(ah(), aa)), "Orders not set")
134+func al () = valueOrErrorMessage(addressFromString(getStringValue(ae(), Z)), "Referral not set")
141135
142136
143-func ap () = valueOrErrorMessage(addressFromString(getStringValue(ah(), ab)), "Referral not set")
137+func am () = valueOrErrorMessage(addressFromString(getStringValue(ae(), aa)), "NFT Manager not set")
144138
145139
146-func aq () = valueOrErrorMessage(addressFromString(getStringValue(ah(), ad)), "NFT Manager not set")
140+let an = "k_token_param"
141+
142+let ao = "k_token_type"
143+
144+let ap = "fee_reduction"
145+
146+let aq = 1
147+
148+let ar = 2
149+
150+let as = 1000
151+
152+let at = 6
153+
154+let au = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
155+
156+let av = (525600 * au)
157+
158+let aw = (86400 * au)
159+
160+let ax = 1
161+
162+let ay = 2
163+
164+let az = 1
165+
166+let aA = 2
167+
168+func aB (aC) = (toString(aC) + ",")
147169
148170
149-let ar = "k_token_param"
150-
151-let as = "k_token_type"
152-
153-let at = "fee_reduction"
154-
155-let au = 1
156-
157-let av = 2
158-
159-let aw = 15
160-
161-let ax = 1000
162-
163-let ay = 6
164-
165-let az = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
166-
167-let aA = (525600 * az)
168-
169-let aB = (86400 * az)
170-
171-let aC = 1
172-
173-let aD = 2
174-
175-let aE = 1
176-
177-let aF = 2
178-
179-func aG (aH) = (toString(aH) + ",")
171+func aD (aC,aE) = fraction(aC, au, aE, HALFEVEN)
180172
181173
182-func aI (aH,aJ) = fraction(aH, az, aJ, HALFEVEN)
174+func aF (aC,aE) = fraction(aC, aE, au, HALFEVEN)
183175
184176
185-func aK (aH,aJ) = fraction(aH, aJ, az, HALFEVEN)
177+func aG (aC,aE) = fraction(aC, toBigInt(au), aE, HALFEVEN)
186178
187179
188-func aL (aH,aJ) = fraction(aH, toBigInt(az), aJ, HALFEVEN)
180+func aH (aC,aE) = fraction(aC, aE, toBigInt(au), HALFEVEN)
189181
190182
191-func aM (aH,aJ) = fraction(aH, aJ, toBigInt(az), HALFEVEN)
183+func aI (aC) = if ((aC > 0))
184+ then aC
185+ else -(aC)
192186
193187
194-func aN (aH) = if ((aH > 0))
195- then aH
196- else -(aH)
188+func aJ (aC,aE) = if ((aC >= aE))
189+ then aC
190+ else aE
197191
198192
199-func aO (aH,aJ) = if ((aH >= aJ))
200- then aH
201- else aJ
193+func aK (aL) = valueOrErrorMessage(getInteger(this, aL), ("no value for " + aL))
202194
203195
204-func aP (aQ) = if ((size(aQ) == 0))
205- then ""
206- else makeString(aQ, ",")
196+func aM (aL,aN) = valueOrElse(getInteger(this, aL), aN)
207197
208198
209-func aR (aS) = if ((aS == ""))
210- then nil
211- else split(aS, ",")
212-
213-
214-func aT (aQ,aU,aV) = if ((size(aQ) > aU))
215- then (removeByIndex(aQ, 0) :+ aV)
216- else (aQ :+ aV)
217-
218-
219-func aW (aX) = valueOrErrorMessage(getInteger(this, aX), ("no value for " + aX))
220-
221-
222-func aY (aX,aZ) = valueOrElse(getInteger(this, aX), aZ)
223-
224-
225-func ba (ag,af) = {
226- let bb = valueOrErrorMessage(getString(ag, af), ("No value for key " + af))
227- bb
199+func aO (ad,ac) = {
200+ let aP = valueOrErrorMessage(getString(ad, ac), ("No value for key " + ac))
201+ aP
228202 }
229203
230204
231-func bc (ag,af) = {
232- let bb = valueOrErrorMessage(getInteger(ag, af), ("No value for key " + af))
233- bb
205+func aQ (ad,ac) = {
206+ let aP = valueOrErrorMessage(getInteger(ad, ac), ("No value for key " + ac))
207+ aP
234208 }
235209
236210
237-func bd () = aW(c)
211+func aR () = aK(c)
238212
239213
240-func be () = aW(p)
214+func aS () = aK(o)
241215
242216
243-func bf () = aW(q)
217+func aT () = aK(p)
244218
245219
246-func bg () = aW(s)
220+func aU () = aK(r)
247221
248222
249-func bh () = aW(I)
223+func aV () = aK(H)
250224
251225
252-func bi () = aW(J)
226+func aW () = aK(I)
253227
254228
255-func bj () = aY(K, az)
229+func aX () = aM(J, au)
256230
257231
258-func bk () = aY(L, az)
232+func aY () = aM(K, au)
259233
260234
261-func bl () = aW(M)
235+func aZ () = aK(L)
262236
263237
264-func bm () = aW(P)
238+func ba () = aK(O)
265239
266240
267-func bn () = aW(Q)
241+func bb () = aK(P)
268242
269243
270-func bo () = aW(R)
244+func bc () = aK(Q)
271245
272246
273-func bp () = aW(F)
247+func bd () = aK(E)
274248
275249
276-func bq () = aW(r)
250+func be () = aK(q)
277251
278252
279-func br () = (bq() * az)
253+func bf () = (be() * au)
280254
281255
282-func bs () = (bq() * ax)
256+func bg () = (be() * as)
283257
284258
285-func bt () = aW(t)
259+func bh () = aK(s)
286260
287261
288-func bu () = aW(u)
262+func bi () = aK(t)
289263
290264
291-func bv () = aW(v)
265+func bj () = aK(u)
292266
293267
294-func bw () = aW(w)
268+func bk () = aK(v)
295269
296270
297-func bx () = aW(x)
271+func bl () = aK(w)
298272
299273
300-func by () = aW(y)
274+func bm () = aK(x)
301275
302276
303-func bz () = aW(z)
277+func bn () = aK(y)
304278
305279
306-func bA () = aW(D)
280+func bo () = aK(C)
307281
308282
309-func bB () = aW(E)
283+func bp () = aK(D)
310284
311285
312-func bC () = aW(O)
286+func bq () = aK(N)
313287
314288
315-func bD () = aW(N)
289+func br () = aK(M)
316290
317291
318-func bE () = aY(d, 0)
292+func bs () = aM(d, 0)
319293
320294
321-func bF () = aW(A)
295+func bt () = aK(z)
322296
323297
324-func bG () = aW(B)
298+func bu () = aK(A)
325299
326300
327-func bH () = aY(C, aE)
301+func bv () = aM(B, az)
328302
329303
330-func bI () = lastBlock.timestamp
304+func bw () = lastBlock.timestamp
331305
332306
333-func bJ (bK) = valueOrElse(getString(ao(), "k_sender"), toString(bK.caller))
307+func bx (by) = valueOrElse(getString(ak(), "k_sender"), toString(by.caller))
334308
335309
336-func bL (bM,bN,bO) = {
337- let bP = (bM - bN)
338- if (if (bO)
339- then (0 > bP)
310+func bz (bA,bB,bC) = {
311+ let bD = (bA - bB)
312+ if (if (bC)
313+ then (0 > bD)
340314 else false)
341- then throw(((("Invalid margin: " + toString(bM)) + " < ") + toString(bN)))
342- else if (if (!(bO))
343- then (bP >= 0)
315+ then throw(((("Invalid margin: " + toString(bA)) + " < ") + toString(bB)))
316+ else if (if (!(bC))
317+ then (bD >= 0)
344318 else false)
345- then throw(((("Invalid margin: " + toString(bM)) + " > ") + toString(bN)))
319+ then throw(((("Invalid margin: " + toString(bA)) + " > ") + toString(bB)))
346320 else true
347321 }
348322
349323
350-func bQ (bR) = if ((bR == 0))
324+func bE (bF) = if ((bF == 0))
351325 then throw("Should not be called with _positionSize == 0")
352- else if ((bR > 0))
353- then bA()
354- else bB()
326+ else if ((bF > 0))
327+ then bo()
328+ else bp()
355329
356330
357-func bS (bT) = {
358- let bU = getInteger(this, ae(e, bT))
359- let bV = bU
360- if ($isInstanceOf(bV, "Int"))
331+func bG (bH,bI) = {
332+ let bJ = ((bH + "_") + toString(bI))
333+ let bK = getInteger(this, ab(e, bJ))
334+ let bL = bK
335+ if ($isInstanceOf(bL, "Int"))
361336 then {
362- let bW = bV
363- $Tuple5(bW, getIntegerValue(this, ae(f, bT)), getIntegerValue(this, ae(g, bT)), getIntegerValue(this, ae(h, bT)), getIntegerValue(this, ae(l, bT)))
337+ let bM = bL
338+ $Tuple5(bM, getIntegerValue(this, ab(f, bJ)), getIntegerValue(this, ab(g, bJ)), getIntegerValue(this, ab(h, bJ)), getIntegerValue(this, ab(k, bJ)))
364339 }
365340 else $Tuple5(0, 0, 0, 0, 0)
366341 }
367342
368343
369-func bX (bT) = {
370- let bY = getString(this, ae(j, bT))
371- let bV = bY
372- if ($isInstanceOf(bV, "String"))
344+func bN (bF) = if ((0 > bF))
345+ then ar
346+ else aq
347+
348+
349+func bO (bH) = {
350+ let bP = getInteger(this, ab(j, bH))
351+ let bL = bP
352+ if ($isInstanceOf(bL, "Int"))
373353 then {
374- let bZ = bV
375- bZ
354+ let bQ = bL
355+ bQ
376356 }
377- else toBase58String(aj())
357+ else aS()
378358 }
379359
380360
381-func ca (bT) = {
382- let cb = getInteger(this, ae(k, bT))
383- let bV = cb
384- if ($isInstanceOf(bV, "Int"))
385- then {
386- let cc = bV
387- cc
388- }
389- else be()
390- }
391-
392-
393-func cd (bT) = if ((bS(bT)._1 == 0))
361+func bR (bH,bI) = if ((bG(bH, bI)._1 == 0))
394362 then throw("No open position")
395363 else true
396364
397365
398-func ce (cf) = {
399- let cg = getString(this, cf)
400- if (if (isDefined(cg))
401- then (value(cg) != "")
366+func bS (bT) = {
367+ let bU = getString(this, bT)
368+ if (if (isDefined(bU))
369+ then (value(bU) != "")
402370 else false)
403371 then {
404- let ch = split(value(cg), ",")
405- let ci = valueOrErrorMessage(addressFromString(ch[0]), ("Invalid oracle address in: " + value(cg)))
406- let cj = ch[1]
407- let ck = ch[2]
408- let cl = ch[3]
409- $Tuple4(ci, cj, ck, cl)
372+ let bV = split(value(bU), ",")
373+ let bW = valueOrErrorMessage(addressFromString(bV[0]), ("Invalid oracle address in: " + value(bU)))
374+ let bX = bV[1]
375+ let bY = bV[2]
376+ let bZ = bV[3]
377+ $Tuple4(bW, bX, bY, bZ)
410378 }
411379 else unit
412380 }
413381
414382
415-func cm () = valueOrElse(getBoolean(this, m), false)
383+func ca () = valueOrElse(getBoolean(this, l), false)
416384
417385
418-func cn () = valueOrElse(getBoolean(this, n), false)
386+func cb () = valueOrElse(getBoolean(this, m), false)
419387
420388
421-func co () = valueOrElse(getBoolean(this, o), false)
389+func cc () = valueOrElse(getBoolean(this, n), false)
422390
423391
424-func cp (cq,cr,cs) = if (cq)
392+func cd (ce,cf,cg) = if (ce)
425393 then {
426- let ct = (bi() - cs)
427- if ((0 >= ct))
394+ let ch = (aW() - cg)
395+ if ((0 >= ch))
428396 then throw("Tx lead to base asset reserve <= 0, revert")
429- else $Tuple3((bh() + cr), ct, (bl() + cs))
397+ else $Tuple3((aV() + cf), ch, (aZ() + cg))
430398 }
431399 else {
432- let cu = (bh() - cr)
433- if ((0 >= cu))
400+ let ci = (aV() - cf)
401+ if ((0 >= ci))
434402 then throw("Tx lead to base quote reserve <= 0, revert")
435- else $Tuple3(cu, (bi() + cs), (bl() - cs))
403+ else $Tuple3(ci, (aW() + cg), (aZ() - cg))
436404 }
437405
438406
439-func cv (cw,cx) = {
440- let cy = toBigInt(cw)
441- let cz = toBigInt(cx)
442- aM(cy, cz)
407+func cj (ck,cl) = {
408+ let cm = toBigInt(ck)
409+ let cn = toBigInt(cl)
410+ aH(cm, cn)
443411 }
444412
445413
446-func cA (cq,cr) = {
447- let cw = bh()
448- let cx = bi()
449- let cB = bj()
450- let cC = bk()
451- let cD = aI(cr, cB)
452- let aX = cv(cw, cx)
453- let cE = if (cq)
454- then (cw + cD)
455- else (cw - cD)
456- let cF = toInt(aL(aX, toBigInt(cE)))
457- let cG = aN((cF - cx))
458- let cH = if (cq)
459- then cG
460- else -(cG)
461- let cI = cp(cq, cD, cG)
462- let cJ = cI._1
463- let cK = cI._2
464- let cL = cI._3
465- let cM = aI(aK(cw, cB), aK(cx, cC))
466- let cN = aI(cr, cG)
467- let cO = aN((cM - cN))
468- let cP = (az - aI(cM, (cM + cO)))
469- let cQ = bx()
470- if ((cP > cQ))
471- then throw(((((((((((((("Price impact " + toString(cP)) + " > max price impact ") + toString(cQ)) + " before quote asset: ") + toString(cw)) + " before base asset: ") + toString(cx)) + " quote asset amount to exchange: ") + toString(cr)) + " price before: ") + toString(cM)) + " marketPrice: ") + toString(cN)))
472- else $Tuple4(cH, cJ, cK, cL)
414+func co (ce,cf) = {
415+ let ck = aV()
416+ let cl = aW()
417+ let cp = aX()
418+ let cq = aY()
419+ let cr = aD(cf, cp)
420+ let aL = cj(ck, cl)
421+ let cs = if (ce)
422+ then (ck + cr)
423+ else (ck - cr)
424+ let ct = toInt(aG(aL, toBigInt(cs)))
425+ let cu = aI((ct - cl))
426+ let cv = if (ce)
427+ then cu
428+ else -(cu)
429+ let cw = cd(ce, cr, cu)
430+ let cx = cw._1
431+ let cy = cw._2
432+ let cz = cw._3
433+ let cA = aD(aF(ck, cp), aF(cl, cq))
434+ let cB = aD(cf, cu)
435+ let cC = aI((cA - cB))
436+ let cD = (au - aD(cA, (cA + cC)))
437+ let cE = bl()
438+ if ((cD > cE))
439+ then throw(((((((((((((("Price impact " + toString(cD)) + " > max price impact ") + toString(cE)) + " before quote asset: ") + toString(ck)) + " before base asset: ") + toString(cl)) + " quote asset amount to exchange: ") + toString(cf)) + " price before: ") + toString(cA)) + " marketPrice: ") + toString(cB)))
440+ else $Tuple4(cv, cx, cy, cz)
473441 }
474442
475443
476-func cR (cS,cT) = {
477- let cU = ((((bI() - cT) / 1000) / 60) * az)
478- let cV = aI(aK(aK(cS, cU), bf()), aA)
479- cV
444+func cF (cG,cH) = {
445+ let cI = ((((bw() - cH) / 1000) / 60) * au)
446+ let cJ = aD(aF(aF(cG, cI), aT()), av)
447+ cJ
480448 }
481449
482450
483-func cW (cX,cS,cY,cT,cZ) = {
484- let da = if ((cX != 0))
451+func cK (cL,cG,cM,cH,cN) = {
452+ let cO = if ((cL != 0))
485453 then {
486- let db = bQ(cX)
487- aK((db - cY), cX)
454+ let cP = bE(cL)
455+ aF((cP - cM), cL)
488456 }
489457 else 0
490- let cV = cR(cS, cT)
491- let dc = (((cZ - cV) - da) + cS)
492- let dd = if ((0 > dc))
493- then $Tuple2(0, aN(dc))
494- else $Tuple2(aN(dc), 0)
495- let de = dd._1
496- let df = dd._2
497- $Tuple4(de, df, da, cV)
458+ let cJ = cF(cG, cH)
459+ let cQ = (((cN - cJ) - cO) + cG)
460+ let cR = if ((0 > cQ))
461+ then $Tuple2(0, aI(cQ))
462+ else $Tuple2(aI(cQ), 0)
463+ let cS = cR._1
464+ let cT = cR._2
465+ $Tuple4(cS, cT, cO, cJ)
498466 }
499467
500468
501-func dg (cq,cs,dh,di,dj,dk,dl) = {
502- let cM = aI(aK(di, dj), aK(dk, dl))
503- if ((cs == 0))
469+func cU (ce,cg,cV,cW,cX,cY,cZ) = {
470+ let cA = aD(aF(cW, cX), aF(cY, cZ))
471+ if ((cg == 0))
504472 then throw("Invalid base asset amount")
505473 else {
506- let aX = cv(di, dk)
507- let dm = if (cq)
508- then (dk + cs)
509- else (dk - cs)
510- let dn = toInt(aL(aX, toBigInt(dm)))
511- let do = aN((dn - di))
512- let dp = aK(do, dj)
513- let cQ = bx()
514- let dq = cp(!(cq), do, cs)
515- let cJ = dq._1
516- let cK = dq._2
517- let cL = dq._3
518- let cN = aI(dp, cs)
519- let cO = aN((cM - cN))
520- let cP = (az - aI(cM, (cM + cO)))
521- if (if ((cP > cQ))
522- then dh
474+ let aL = cj(cW, cY)
475+ let da = if (ce)
476+ then (cY + cg)
477+ else (cY - cg)
478+ let db = toInt(aG(aL, toBigInt(da)))
479+ let dc = aI((db - cW))
480+ let dd = aF(dc, cX)
481+ let cE = bl()
482+ let de = cd(!(ce), dc, cg)
483+ let cx = de._1
484+ let cy = de._2
485+ let cz = de._3
486+ let cB = aD(dd, cg)
487+ let cC = aI((cA - cB))
488+ let cD = (au - aD(cA, (cA + cC)))
489+ if (if ((cD > cE))
490+ then cV
523491 else false)
524- then throw(((((((((((((("Price impact " + toString(cP)) + " > max price impact ") + toString(cQ)) + " before quote asset: ") + toString(di)) + " before base asset: ") + toString(dk)) + " base asset amount to exchange: ") + toString(cs)) + " price before: ") + toString(cM)) + " market price: ") + toString(cN)))
525- else $Tuple7(dp, cJ, cK, cL, (bD() - (if (cq)
526- then aN(cs)
527- else 0)), (bC() - (if (!(cq))
528- then aN(cs)
529- else 0)), cP)
492+ then throw(((((((((((((("Price impact " + toString(cD)) + " > max price impact ") + toString(cE)) + " before quote asset: ") + toString(cW)) + " before base asset: ") + toString(cY)) + " base asset amount to exchange: ") + toString(cg)) + " price before: ") + toString(cA)) + " market price: ") + toString(cB)))
493+ else $Tuple7(dd, cx, cy, cz, (br() - (if (ce)
494+ then aI(cg)
495+ else 0)), (bq() - (if (!(ce))
496+ then aI(cg)
497+ else 0)), cD)
530498 }
531499 }
532500
533501
534-func dr (cq,cs,dh) = dg(cq, cs, dh, bh(), bj(), bi(), bk())
502+func df (ce,cg,cV) = cU(ce, cg, cV, aV(), aX(), aW(), aY())
535503
536504
537-func ds (dt,cj,ck) = {
538- let du = valueOrErrorMessage(getInteger(dt, cj), ((("Can not get oracle price. Oracle: " + toString(dt)) + " key: ") + cj))
539- if ((ck != ""))
505+func dg (dh,bX,bY) = {
506+ let di = valueOrErrorMessage(getInteger(dh, bX), ((("Can not get oracle price. Oracle: " + toString(dh)) + " key: ") + bX))
507+ if ((bY != ""))
540508 then {
541- let dv = lastBlock.height
542- let dw = valueOrErrorMessage(getInteger(dt, ck), ((("Can not get oracle block. Oracle: " + toString(dt)) + " key: ") + ck))
543- if (((dv - dw) > bG()))
544- then throw(((("Oracle stale data. Last oracle block: " + toString(dw)) + " current block: ") + toString(dv)))
545- else du
509+ let dj = lastBlock.height
510+ let dk = valueOrErrorMessage(getInteger(dh, bY), ((("Can not get oracle block. Oracle: " + toString(dh)) + " key: ") + bY))
511+ if (((dj - dk) > bu()))
512+ then throw(((("Oracle stale data. Last oracle block: " + toString(dk)) + " current block: ") + toString(dj)))
513+ else di
546514 }
547- else du
515+ else di
548516 }
549517
550518
551-func dx () = {
552- let dy = valueOrErrorMessage(ce(a), "No base asset oracle data")
553- let dz = ds(dy._1, dy._2, dy._3)
554- let dA = ce(b)
555- let dB = if (isDefined(dA))
519+func dl () = {
520+ let dm = valueOrErrorMessage(bS(a), "No base asset oracle data")
521+ let dn = dg(dm._1, dm._2, dm._3)
522+ let do = bS(b)
523+ let dp = if (isDefined(do))
556524 then {
557- let dC = value(dA)
558- ds(dC._1, dC._2, dC._3)
525+ let dq = value(do)
526+ dg(dq._1, dq._2, dq._3)
559527 }
560- else az
561- aI(dz, dB)
528+ else au
529+ aD(dn, dp)
562530 }
563531
564532
565-func dD () = {
566- let dy = valueOrErrorMessage(ce(a), "No base asset oracle data")
567- let dt = dy._1
568- let cl = dy._4
569- if ((cl != ""))
533+func dr () = {
534+ let dm = valueOrErrorMessage(bS(a), "No base asset oracle data")
535+ let dh = dm._1
536+ let bZ = dm._4
537+ if ((bZ != ""))
570538 then {
571- let dE = valueOrErrorMessage(getBoolean(dt, cl), ((("Can not get oracle is open/closed. Oracle: " + toString(dt)) + " key: ") + cl))
572- !(dE)
539+ let ds = valueOrErrorMessage(getBoolean(dh, bZ), ((("Can not get oracle is open/closed. Oracle: " + toString(dh)) + " key: ") + bZ))
540+ !(ds)
573541 }
574542 else false
575543 }
576544
577545
578-func dF (dG,di,dk,cB,cC) = {
579- let dH = aI(aK(di, cB), aK(dk, cC))
580- let dI = aI((dG + dH), (2 * az))
581- let dF = aI(aN((dG - dH)), dI)
582- dF
546+func dt (du,cW,cY,cp,cq) = {
547+ let dv = aD(aF(cW, cp), aF(cY, cq))
548+ let dw = aD((du + dv), (2 * au))
549+ let dt = aD(aI((du - dv)), dw)
550+ dt
583551 }
584552
585553
586-func dJ (di,dk) = {
587- let dK = dx()
588- let cB = bj()
589- let cC = bk()
590- let dL = dF(dK, bh(), bi(), cB, cC)
591- let dM = dF(dK, di, dk, cB, cC)
592- if (if ((dM > by()))
593- then (dM > dL)
554+func dx (cW,cY) = {
555+ let dy = dl()
556+ let cp = aX()
557+ let cq = aY()
558+ let dz = dt(dy, aV(), aW(), cp, cq)
559+ let dA = dt(dy, cW, cY, cp, cq)
560+ if (if ((dA > bm()))
561+ then (dA > dz)
594562 else false)
595- then throw(((("Price spread " + toString(dM)) + " > max price spread ") + toString(by())))
563+ then throw(((("Price spread " + toString(dA)) + " > max price spread ") + toString(bm())))
596564 else true
597565 }
598566
599567
600-func dN (dO,dP) = {
601- let dQ = bz()
602- if ((dO > dQ))
603- then throw(((("Long open notional " + toString(dO)) + " > max open notional ") + toString(dQ)))
604- else if ((dP > dQ))
605- then throw(((("Short open notional " + toString(dP)) + " > max open notional ") + toString(dQ)))
568+func dB (dC,dD) = {
569+ let dE = bn()
570+ if ((dC > dE))
571+ then throw(((("Long open notional " + toString(dC)) + " > max open notional ") + toString(dE)))
572+ else if ((dD > dE))
573+ then throw(((("Short open notional " + toString(dD)) + " > max open notional ") + toString(dE)))
606574 else true
607575 }
608576
609577
610-func dR () = {
611- let di = bh()
612- let dk = bi()
613- let cB = bj()
614- let cC = bk()
615- aI(aK(di, cB), aK(dk, cC))
578+func dF () = {
579+ let cW = aV()
580+ let cY = aW()
581+ let cp = aX()
582+ let cq = aY()
583+ aD(aF(cW, cp), aF(cY, cq))
616584 }
617585
618586
619-func dS () = {
620- let dK = dx()
621- let dT = dR()
622- (aI(aN((dK - dT)), dK) > bw())
587+func dG () = {
588+ let dy = dl()
589+ let dH = dF()
590+ (aD(aI((dy - dH)), dy) > bk())
623591 }
624592
625593
626-func dU (bR,dV,di,dj,dk,dl) = {
627- let dW = aN(bR)
628- let dX = (0 > bR)
629- let dY = if ((dV == aC))
594+func dI (bF,dJ,cW,cX,cY,cZ) = {
595+ let dK = aI(bF)
596+ let dL = (0 > bF)
597+ let dM = if ((dJ == ax))
630598 then {
631- let dZ = dg(!(dX), dW, false, di, dj, dk, dl)._1
632- dZ
599+ let dN = cU(!(dL), dK, false, cW, cX, cY, cZ)._1
600+ dN
633601 }
634- else aK(dW, dx())
635- dY
602+ else aF(dK, dl())
603+ dM
636604 }
637605
638606
639-func ea (bR,eb,di,dj,dk,dl,dV) = if ((bR == 0))
607+func dO (bF,dP,cW,cX,cY,cZ,dJ) = if ((bF == 0))
640608 then throw("Invalid position size")
641609 else {
642- let dX = (0 > bR)
643- let dY = dU(bR, dV, di, dj, dk, dl)
644- let ec = if (dX)
645- then (eb - dY)
646- else (dY - eb)
647- $Tuple2(dY, ec)
610+ let dL = (0 > bF)
611+ let dM = dI(bF, dJ, cW, cX, cY, cZ)
612+ let dQ = if (dL)
613+ then (dP - dM)
614+ else (dM - dP)
615+ $Tuple2(dM, dQ)
648616 }
649617
650618
651-func ed (bT,dV) = {
652- let ee = bS(bT)
653- let bW = ee._1
654- let ef = ee._2
655- let eg = ee._3
656- let eh = ee._4
657- ea(bW, eg, bh(), bj(), bi(), bk(), dV)
619+func dR (bH,bI,dJ) = {
620+ let dS = bG(bH, bI)
621+ let bM = dS._1
622+ let dT = dS._2
623+ let dU = dS._3
624+ let dV = dS._4
625+ dO(bM, dU, aV(), aX(), aW(), aY(), dJ)
658626 }
659627
660628
661-func ei (ej,ek,el) = aI((ej - ek), el)
629+func dW (dX,dY,dZ) = aD((dX - dY), dZ)
662630
663631
664-func em (bT,dV) = {
665- let en = bS(bT)
666- let bW = en._1
667- let ef = en._2
668- let eo = en._3
669- let ep = en._4
670- let eq = en._5
671- let er = ed(bT, dV)
672- let dY = er._1
673- let ec = er._2
674- let es = cW(bW, ef, ep, eq, ec)
675- let de = es._1
676- let df = es._2
677- ei(de, df, dY)
632+func ea (bH,bI,dJ) = {
633+ let eb = bG(bH, bI)
634+ let bM = eb._1
635+ let dT = eb._2
636+ let ec = eb._3
637+ let ed = eb._4
638+ let ee = eb._5
639+ let ef = dR(bH, bI, dJ)
640+ let dM = ef._1
641+ let dQ = ef._2
642+ let eg = cK(bM, dT, ed, ee, dQ)
643+ let cS = eg._1
644+ let cT = eg._2
645+ dW(cS, cT, dM)
678646 }
679647
680648
681-func et (bT) = em(bT, aC)
649+func eh (bH,bI) = ea(bH, bI, ax)
682650
683651
684-func eu (bT,bR) = {
685- let ev = aO(bv(), (az - aI(et(bT), bt())))
686- let ew = aK(aN(bR), ev)
687- let ex = dr((bR > 0), ew, false)
688- let ey = ex._1
689- let cP = ex._7
690- if ((bx() > cP))
691- then ew
692- else aK(aN(bR), bv())
652+func ei (bH,bF) = {
653+ let ej = aJ(bj(), (au - aD(eh(bH, bN(bF)), bh())))
654+ let ek = aF(aI(bF), ej)
655+ let el = df((bF > 0), ek, false)
656+ let em = el._1
657+ let cD = el._7
658+ if ((bl() > cD))
659+ then ek
660+ else aF(aI(bF), bj())
693661 }
694662
695663
696-func ez (bT,eA,eB,eC,eD,dh,eE) = {
697- let eF = bS(bT)
698- let eG = eF._1
699- let eH = eF._2
700- let eI = eF._3
701- let eJ = eF._4
702- let eK = eF._5
703- let eL = (eG > 0)
704- let eM = aN(eG)
705- if (if ((eM >= eA))
706- then (eA > 0)
664+func en (bH,bI,eo,ep,eq,er,cV,es) = {
665+ let et = bG(bH, bI)
666+ let eu = et._1
667+ let ev = et._2
668+ let ew = et._3
669+ let ex = et._4
670+ let ey = et._5
671+ let ez = (eu > 0)
672+ let eA = aI(eu)
673+ if (if ((eA >= eo))
674+ then (eo > 0)
707675 else false)
708676 then {
709- let eN = (eM > eA)
710- let eO = dr((eG > 0), eA, dh)
711- let eP = eO._1
712- let cE = eO._2
713- let cF = eO._3
714- let eQ = eO._4
715- let eR = if ((eG > 0))
716- then -(eA)
717- else eA
718- let eS = ed(bT, aC)
719- let eT = eS._1
720- let ec = eS._2
721- let eU = aI(aN(eR), eM)
722- let eV = aK(ec, eU)
723- let eW = cW(eG, eH, eJ, eK, ec)
724- let eX = eW._1
725- let eY = eW._2
726- let eZ = eW._3
727- let cV = eW._4
728- let fa = cW(eG, eH, eJ, eK, eV)._2
729- let fb = aK(aK(eT, eU), eB)
730- let fc = (ec - eV)
731- let fd = if ((eG > 0))
732- then ((eT - eP) - fc)
733- else ((fc + eT) - eP)
734- let fe = (eG + eR)
735- let ff = if ((fe == 0))
677+ let eB = (eA > eo)
678+ let eC = df((eu > 0), eo, cV)
679+ let eD = eC._1
680+ let cs = eC._2
681+ let ct = eC._3
682+ let eE = eC._4
683+ let eF = if ((eu > 0))
684+ then -(eo)
685+ else eo
686+ let eG = dR(bH, bI, ax)
687+ let eH = eG._1
688+ let dQ = eG._2
689+ let eI = aD(aI(eF), eA)
690+ let eJ = aF(dQ, eI)
691+ let eK = cK(eu, ev, ex, ey, dQ)
692+ let eL = eK._1
693+ let eM = eK._2
694+ let eN = eK._3
695+ let cJ = eK._4
696+ let eO = cK(eu, ev, ex, ey, eJ)._2
697+ let eP = aF(aF(eH, eI), ep)
698+ let eQ = (dQ - eJ)
699+ let eR = if ((eu > 0))
700+ then ((eH - eD) - eQ)
701+ else ((eQ + eH) - eD)
702+ let eS = (eu + eF)
703+ let eT = if ((eS == 0))
736704 then $Tuple2(0, 0)
737- else $Tuple2(aN(fd), bQ(fe))
738- let fg = ff._1
739- let fh = ff._2
740- let fi = (eI - fg)
741- let fj = em(bT, aC)
742- let fk = if ((eG > 0))
743- then (aK((fg + fc), fj) - fc)
744- else (aK((fg - fc), fj) - fc)
745- let fl = ((eX - (fk + fc)) - fb)
746- let fm = if ((0 > fl))
747- then if (eE)
705+ else $Tuple2(aI(eR), bE(eS))
706+ let eU = eT._1
707+ let eV = eT._2
708+ let eW = (ew - eU)
709+ let eX = ea(bH, bI, ax)
710+ let eY = if ((eu > 0))
711+ then (aF((eU + eQ), eX) - eQ)
712+ else (aF((eU - eQ), eX) - eQ)
713+ let eZ = ((eL - (eY + eQ)) - eP)
714+ let fa = if ((0 > eZ))
715+ then if (es)
748716 then 0
749717 else throw("Invalid internalClosePosition params: unable to pay fee")
750- else fl
751- let fn = if (eD)
752- then (fk + fm)
753- else fk
754- if (if ((eC != 0))
755- then (eC > eP)
718+ else eZ
719+ let fb = if (er)
720+ then (eY + fa)
721+ else eY
722+ if (if ((eq != 0))
723+ then (eq > eD)
756724 else false)
757- then throw(((("Limit error: " + toString(eP)) + " < ") + toString(eC)))
758- else $Tuple17(fe, fn, fg, fh, fa, eV, if (if (eD)
759- then eN
725+ then throw(((("Limit error: " + toString(eD)) + " < ") + toString(eq)))
726+ else $Tuple17(eS, fb, eU, eV, eO, eJ, if (if (er)
727+ then eB
760728 else false)
761729 then 0
762- else fm, cE, cF, eQ, (bm() - fi), (bD() - (if (eL)
763- then aN(eR)
764- else 0)), (bC() - (if (!(eL))
765- then aN(eR)
766- else 0)), (bo() - (if (eL)
767- then fi
768- else 0)), (bn() - (if (!(eL))
769- then fi
770- else 0)), (fb + cV), eP)
730+ else fa, cs, ct, eE, (ba() - eW), (br() - (if (ez)
731+ then aI(eF)
732+ else 0)), (bq() - (if (!(ez))
733+ then aI(eF)
734+ else 0)), (bc() - (if (ez)
735+ then eW
736+ else 0)), (bb() - (if (!(ez))
737+ then eW
738+ else 0)), (eP + cJ), eD)
771739 }
772- else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eA)) + " max: ") + toString(eM)))
740+ else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eo)) + " max: ") + toString(eA)))
773741 }
774742
775743
776-func fo () = {
777- let bR = bl()
778- if ((bR == 0))
779- then $Tuple2(bh(), bi())
744+func fc () = {
745+ let bF = aZ()
746+ if ((bF == 0))
747+ then $Tuple2(aV(), aW())
780748 else {
781- let fp = (bR > 0)
782- let fq = dr(fp, aN(bR), false)
783- let fr = fq._1
784- let fs = fq._2
785- let ft = fq._3
786- $Tuple2(fs, ft)
749+ let fd = (bF > 0)
750+ let fe = df(fd, aI(bF), false)
751+ let ff = fe._1
752+ let fg = fe._2
753+ let fh = fe._3
754+ $Tuple2(fg, fh)
787755 }
788756 }
789757
790758
791-func fu (fv,bl,fw,fx) = {
792- let fy = toBigInt(fv)
793- let fz = toBigInt(bl)
794- let fA = toBigInt(fw)
795- let fB = toBigInt(fx)
796- let aX = aM(fA, fy)
797- let fC = (fy + fz)
798- let fD = aL(aX, fC)
799- let fE = aL(fD, fC)
800- let fF = aL(fB, fE)
801- toInt(fF)
759+func fi (fj,aZ,fk,fl) = {
760+ let fm = toBigInt(fj)
761+ let fn = toBigInt(aZ)
762+ let fo = toBigInt(fk)
763+ let fp = toBigInt(fl)
764+ let aL = aH(fo, fm)
765+ let fq = (fm + fn)
766+ let fr = aG(aL, fq)
767+ let fs = aG(fr, fq)
768+ let ft = aG(fp, fs)
769+ toInt(ft)
802770 }
803771
804772
805-func fG (fH,cw,cx) = {
806- let bR = bl()
807- if ((bR == 0))
773+func fu (fv,ck,cl) = {
774+ let bF = aZ()
775+ if ((bF == 0))
808776 then {
809- let fI = aI(aK(fH, cx), cw)
810- $Tuple3(fI, az, 0)
777+ let fw = aD(aF(fv, cl), ck)
778+ $Tuple3(fw, au, 0)
811779 }
812780 else {
813- let fp = (bR > 0)
814- let fr = dr(fp, aN(bR), false)._1
815- let fI = fu(cx, bR, cw, fH)
816- let fJ = az
817- let fK = ea(bR, fr, cw, fI, cx, fJ, aC)._2
818- $Tuple3(fI, fJ, fK)
781+ let fd = (bF > 0)
782+ let ff = df(fd, aI(bF), false)._1
783+ let fw = fi(cl, bF, ck, fv)
784+ let fx = au
785+ let fy = dO(bF, ff, ck, fw, cl, fx, ax)._2
786+ $Tuple3(fw, fx, fy)
819787 }
820788 }
821789
822790
823-func fL () = {
824- let fM = dx()
825- let fN = dR()
826- let fO = (fN - fM)
827- if (if (if ((bC() == 0))
791+func fz () = {
792+ let fA = dl()
793+ let fB = dF()
794+ let fC = (fB - fA)
795+ if (if (if ((bq() == 0))
828796 then true
829- else (bD() == 0))
797+ else (br() == 0))
830798 then true
831- else dD())
799+ else dr())
832800 then $Tuple3(0, 0, 0)
833- else if ((0 > fO))
801+ else if ((0 > fC))
834802 then {
835- let fP = aI(aK(fO, br()), aB)
836- if ((bH() == aE))
803+ let fD = aD(aF(fC, bf()), aw)
804+ if ((bv() == az))
837805 then {
838- let fQ = aI(aK(fP, bC()), bD())
839- $Tuple3(fP, fQ, 0)
806+ let fE = aD(aF(fD, bq()), br())
807+ $Tuple3(fD, fE, 0)
840808 }
841809 else {
842- let fR = aN(aK(fP, bC()))
843- let fS = aN(aK(fP, bD()))
844- let fT = (fR - fS)
845- $Tuple3(fP, fP, fT)
810+ let fF = aI(aF(fD, bq()))
811+ let fG = aI(aF(fD, br()))
812+ let fH = (fF - fG)
813+ $Tuple3(fD, fD, fH)
846814 }
847815 }
848816 else {
849- let fQ = aI(aK(fO, br()), aB)
850- if ((bH() == aE))
817+ let fE = aD(aF(fC, bf()), aw)
818+ if ((bv() == az))
851819 then {
852- let fP = aI(aK(fQ, bD()), bC())
853- $Tuple3(fP, fQ, 0)
820+ let fD = aD(aF(fE, br()), bq())
821+ $Tuple3(fD, fE, 0)
854822 }
855823 else {
856- let fS = aN(aK(fQ, bD()))
857- let fR = aN(aK(fQ, bC()))
858- let fT = (fS - fR)
859- $Tuple3(fQ, fQ, fT)
824+ let fG = aI(aF(fE, br()))
825+ let fF = aI(aF(fE, bq()))
826+ let fH = (fG - fF)
827+ $Tuple3(fE, fE, fH)
860828 }
861829 }
862830 }
863831
864832
865-func fU (fV,fW) = {
866- let fX = be()
867- let fY = aK(fX, fW)
868- let fZ = if ((fV != ""))
833+func fI (fJ,fK) = {
834+ let fL = aS()
835+ let fM = aF(fL, fK)
836+ let fN = if ((fJ != ""))
869837 then {
870- let ga = ba(aq(), ae(as, fV))
871- if ((ga == at))
838+ let fO = aO(am(), ab(ao, fJ))
839+ if ((fO == ap))
872840 then {
873- let gb = bc(aq(), ae(ar, fV))
874- let gc = aK(fY, gb)
875- $Tuple2(gc, true)
841+ let fP = aQ(am(), ab(an, fJ))
842+ let fQ = aF(fM, fP)
843+ $Tuple2(fQ, true)
876844 }
877845 else throw("Invalid attached artifact")
878846 }
879- else $Tuple2(fY, false)
880- let gc = fZ._1
881- let gd = fZ._2
882- $Tuple2(gc, gd)
847+ else $Tuple2(fM, false)
848+ let fQ = fN._1
849+ let fR = fN._2
850+ $Tuple2(fQ, fR)
883851 }
884852
885853
886-func ge (bT,gf) = {
887- let eG = bS(bT)._1
888- if ((eG == 0))
889- then true
890- else (bX(bT) == gf)
891- }
892-
893-
894-func gg (bT,gf) = (bX(bT) == gf)
895-
896-
897-func gh (bT,fV) = {
898- let gi = invoke(an(), "computeFeeDiscount", [bT], nil)
899- if ((gi == gi))
854+func fS (bH,fJ) = {
855+ let fT = invoke(aj(), "computeFeeDiscount", [bH], nil)
856+ if ((fT == fT))
900857 then {
901- let gj = {
902- let bV = gi
903- if ($isInstanceOf(bV, "Int"))
858+ let fU = {
859+ let bL = fT
860+ if ($isInstanceOf(bL, "Int"))
904861 then {
905- let gk = bV
906- gk
862+ let fV = bL
863+ fV
907864 }
908865 else throw("Invalid computeFeeDiscount result")
909866 }
910- let gl = fU(fV, gj)
911- let gc = gl._1
912- let gd = gl._2
913- $Tuple2(gc, gd)
867+ let fW = fI(fJ, fU)
868+ let fQ = fW._1
869+ let fR = fW._2
870+ $Tuple2(fQ, fR)
914871 }
915872 else throw("Strict value is not equal to itself.")
916873 }
917874
918875
919-func gm (bK) = {
920- let gn = if ((size(bK.payments) > 1))
921- then toBase58String(valueOrErrorMessage(bK.payments[1].assetId, "Invalid artifactId"))
876+func fX (by) = {
877+ let fY = if ((size(by.payments) > 1))
878+ then toBase58String(valueOrErrorMessage(by.payments[1].assetId, "Invalid artifactId"))
922879 else ""
923- gn
880+ fY
924881 }
925882
926883
927-func go (gp) = {
928- let gq = aK(gp, bF())
929- let gr = (gp - gq)
930- $Tuple2(gq, gr)
884+func fZ (ga) = {
885+ let gb = aF(ga, bt())
886+ let gc = (ga - gb)
887+ $Tuple2(gb, gc)
931888 }
932889
933890
934-func gs (gt,gu,gv,gw,eB,gx,gy,gz,gA,dQ,gB,gC,gD,gE) = [IntegerEntry(s, gt), IntegerEntry(t, gu), IntegerEntry(u, gv), IntegerEntry(r, gw), IntegerEntry(p, eB), IntegerEntry(w, gx), IntegerEntry(x, gy), IntegerEntry(v, gz), IntegerEntry(y, gA), IntegerEntry(z, dQ), IntegerEntry(A, gB), IntegerEntry(B, gB), IntegerEntry(q, gD), IntegerEntry(C, gE)]
891+func gd (ge,gf,gg,gh,ep,gi,gj,gk,gl,dE,gm,gn,go,gp) = [IntegerEntry(r, ge), IntegerEntry(s, gf), IntegerEntry(t, gg), IntegerEntry(q, gh), IntegerEntry(o, ep), IntegerEntry(v, gi), IntegerEntry(w, gj), IntegerEntry(u, gk), IntegerEntry(x, gl), IntegerEntry(y, dE), IntegerEntry(z, gm), IntegerEntry(A, gm), IntegerEntry(p, go), IntegerEntry(B, gp)]
935892
936893
937-func gF (gG,gH,gI,gJ,gK) = [IntegerEntry(F, gG), IntegerEntry(D, gH), IntegerEntry(E, gI), IntegerEntry(G, gJ), IntegerEntry(H, gK)]
894+func gq (gr,gs,gt,gu,gv) = [IntegerEntry(E, gr), IntegerEntry(C, gs), IntegerEntry(D, gt), IntegerEntry(F, gu), IntegerEntry(G, gv)]
938895
939896
940-func gL (gM,ag) = if (gM)
941- then {
942- let gN = bE()
943-[IntegerEntry(ae(i, ag), (gN + 1)), IntegerEntry(d, (gN + 1))]
944- }
897+func gw (gx,bH,bI) = {
898+ let bJ = ((bH + "_") + toString(bI))
899+ if (gx)
900+ then {
901+ let gy = bs()
902+[IntegerEntry(ab(i, bJ), (gy + 1)), IntegerEntry(d, (gy + 1))]
903+ }
904+ else nil
905+ }
906+
907+
908+func gz (gx,bH,bI,ep) = {
909+ let bJ = ((bH + "_") + toString(bI))
910+ if (gx)
911+ then [IntegerEntry(ab(j, bJ), ep)]
912+ else nil
913+ }
914+
915+
916+func gA (bH,eo,gB,gC,cP,gD) = {
917+ let fd = bN(eo)
918+ let bJ = ((bH + "_") + toString(fd))
919+[IntegerEntry(ab(e, bJ), eo), IntegerEntry(ab(f, bJ), gB), IntegerEntry(ab(g, bJ), gC), IntegerEntry(ab(h, bJ), cP), IntegerEntry(ab(k, bJ), gD)]
920+ }
921+
922+
923+func gE (ck,cl) = [IntegerEntry(H, ck), IntegerEntry(I, cl)]
924+
925+
926+func gF (cp,cq) = [IntegerEntry(J, cp), IntegerEntry(K, cq)]
927+
928+
929+func gG (ck,cl,gH,gI,gJ,gK,gL,gM) = {
930+ let cp = aX()
931+ let cq = aY()
932+ if (((gJ - gK) != gH))
933+ then throw(((((("Invalid AMM state data: " + toString(gJ)) + " + ") + toString(gK)) + " != ") + toString(gH)))
934+ else (gE(ck, cl) ++ [IntegerEntry(L, gH), IntegerEntry(O, gI), IntegerEntry(M, gJ), IntegerEntry(N, gK), IntegerEntry(Q, gL), IntegerEntry(P, gM)])
935+ }
936+
937+
938+func gN (bH,bI) = {
939+ let bJ = ((bH + "_") + toString(bI))
940+[DeleteEntry(ab(e, bJ)), DeleteEntry(ab(f, bJ)), DeleteEntry(ab(g, bJ)), DeleteEntry(ab(h, bJ)), DeleteEntry(ab(j, bJ)), DeleteEntry(ab(k, bJ))]
941+ }
942+
943+
944+func gO (ad,gP) = {
945+ let gQ = assetBalance(this, ag())
946+ if ((gP > gQ))
947+ then throw(((("Unable to withdraw " + toString(gP)) + " from contract balance ") + toString(gQ)))
948+ else [ScriptTransfer(ad, gP, ag())]
949+ }
950+
951+
952+func gR (by) = if ((0 > by))
953+ then throw("Balance")
954+ else [IntegerEntry(c, by)]
955+
956+
957+func gS (by) = [ScriptTransfer(ah(), by, ag())]
958+
959+
960+func gT (gU,by) = if (gU)
961+ then [Burn(valueOrErrorMessage(by.payments[1].assetId, "Invalid artifact"), 1)]
945962 else nil
946963
947964
948-func gO (gM,ag,eB) = if (gM)
949- then [IntegerEntry(ae(k, ag), eB)]
950- else nil
965+@Callable(by)
966+func pause () = if ((by.caller != af()))
967+ then throw("Invalid pause params")
968+ else [BooleanEntry(m, true)]
951969
952970
953-func gP (ag,eA,gQ,gR,db,gS) = [IntegerEntry(ae(e, ag), eA), IntegerEntry(ae(f, ag), gQ), IntegerEntry(ae(g, ag), gR), IntegerEntry(ae(h, ag), db), IntegerEntry(ae(l, ag), gS)]
971+
972+@Callable(by)
973+func unpause () = if ((by.caller != af()))
974+ then throw("Invalid unpause params")
975+ else [BooleanEntry(m, false)]
954976
955977
956-func gT (cw,cx) = [IntegerEntry(I, cw), IntegerEntry(J, cx)]
957978
958-
959-func gU (cB,cC) = [IntegerEntry(K, cB), IntegerEntry(L, cC)]
960-
961-
962-func gV (cw,cx,gW,gX,gY,gZ,ha,hb) = {
963- let cB = bj()
964- let cC = bk()
965- if (((gY - gZ) != gW))
966- then throw(((((("Invalid AMM state data: " + toString(gY)) + " + ") + toString(gZ)) + " != ") + toString(gW)))
967- else (gT(cw, cx) ++ [IntegerEntry(M, gW), IntegerEntry(P, gX), IntegerEntry(N, gY), IntegerEntry(O, gZ), IntegerEntry(R, ha), IntegerEntry(Q, hb)])
968- }
969-
970-
971-func hc (ag) = [DeleteEntry(ae(e, ag)), DeleteEntry(ae(f, ag)), DeleteEntry(ae(g, ag)), DeleteEntry(ae(h, ag)), DeleteEntry(ae(j, ag)), DeleteEntry(ae(k, ag)), DeleteEntry(ae(l, ag))]
972-
973-
974-func hd (ag,he) = {
975- let hf = assetBalance(this, aj())
976- if ((he > hf))
977- then throw(((("Unable to withdraw " + toString(he)) + " from contract balance ") + toString(hf)))
978- else [ScriptTransfer(ag, he, aj())]
979- }
980-
981-
982-func hg (bK) = if ((0 > bK))
983- then throw("Balance")
984- else [IntegerEntry(c, bK)]
985-
986-
987-func hh (bK) = [ScriptTransfer(al(), bK, aj())]
988-
989-
990-func hi (hj,bK) = if (hj)
991- then [Burn(valueOrErrorMessage(bK.payments[1].assetId, "Invalid artifact"), 1)]
992- else nil
993-
994-
995-@Callable(bK)
996-func pause () = if ((bK.caller != ai()))
997- then throw("Invalid pause params")
979+@Callable(by)
980+func setCloseOnly () = if ((by.caller != af()))
981+ then throw("Invalid setCloseOnly params")
998982 else [BooleanEntry(n, true)]
999983
1000984
1001985
1002-@Callable(bK)
1003-func unpause () = if ((bK.caller != ai()))
1004- then throw("Invalid unpause params")
986+@Callable(by)
987+func unsetCloseOnly () = if ((by.caller != af()))
988+ then throw("Invalid unsetCloseOnly params")
1005989 else [BooleanEntry(n, false)]
1006990
1007991
1008992
1009-@Callable(bK)
1010-func setCloseOnly () = if ((bK.caller != ai()))
1011- then throw("Invalid setCloseOnly params")
1012- else [BooleanEntry(o, true)]
1013-
1014-
1015-
1016-@Callable(bK)
1017-func unsetCloseOnly () = if ((bK.caller != ai()))
1018- then throw("Invalid unsetCloseOnly params")
1019- else [BooleanEntry(o, false)]
1020-
1021-
1022-
1023-@Callable(bK)
1024-func addLiquidity (cr) = if (if ((bK.caller != ai()))
993+@Callable(by)
994+func addLiquidity (cf) = if (if ((by.caller != af()))
1025995 then true
1026- else (0 >= cr))
996+ else (0 >= cf))
1027997 then throw("Invalid addLiquidity params")
1028998 else {
1029- let cw = bh()
1030- let cx = bi()
1031- let cB = bj()
1032- let cC = bk()
1033- let hk = aI(aK(cw, cB), aK(cx, cC))
1034- let hl = (cw + cr)
1035- let hm = (aI(aK(hl, cB), hk) - cx)
1036- let hn = (cx + hm)
1037- let ho = fG(dx(), hl, hn)
1038- let hp = ho._1
1039- let hq = ho._2
1040- let fK = ho._3
1041- let hr = if ((fK != 0))
999+ let ck = aV()
1000+ let cl = aW()
1001+ let cp = aX()
1002+ let cq = aY()
1003+ let gV = aD(aF(ck, cp), aF(cl, cq))
1004+ let gW = (ck + cf)
1005+ let gX = (aD(aF(gW, cp), gV) - cl)
1006+ let gY = (cl + gX)
1007+ let gZ = fu(dl(), gW, gY)
1008+ let ha = gZ._1
1009+ let hb = gZ._2
1010+ let fy = gZ._3
1011+ let hc = if ((fy != 0))
10421012 then {
1043- let hr = invoke(am(), "exchangeFreeAndLocked", [fK], nil)
1044- if ((hr == hr))
1013+ let hc = invoke(ai(), "exchangeFreeAndLocked", [fy], nil)
1014+ if ((hc == hc))
10451015 then nil
10461016 else throw("Strict value is not equal to itself.")
10471017 }
10481018 else nil
1049- if ((hr == hr))
1050- then (gT(hl, hn) ++ gU(hp, hq))
1019+ if ((hc == hc))
1020+ then (gE(gW, gY) ++ gF(ha, hb))
10511021 else throw("Strict value is not equal to itself.")
10521022 }
10531023
10541024
10551025
1056-@Callable(bK)
1057-func removeLiquidity (cr) = if (if ((bK.caller != ai()))
1026+@Callable(by)
1027+func removeLiquidity (cf) = if (if ((by.caller != af()))
10581028 then true
1059- else (cr >= 0))
1029+ else (cf >= 0))
10601030 then throw("Invalid removeLiquidity params")
10611031 else {
1062- let cw = bh()
1063- let cx = bi()
1064- let cB = bj()
1065- let cC = bk()
1066- let hk = aI(aK(cw, cB), aK(cx, cC))
1067- let hl = (cw - cr)
1068- let hs = aN((aI(aK(hl, cB), hk) - cx))
1069- let hn = (cx - hs)
1070- let ht = fG(dx(), hl, hn)
1071- let hp = ht._1
1072- let hq = ht._2
1073- let fK = ht._3
1074- let hr = if ((fK != 0))
1032+ let ck = aV()
1033+ let cl = aW()
1034+ let cp = aX()
1035+ let cq = aY()
1036+ let gV = aD(aF(ck, cp), aF(cl, cq))
1037+ let gW = (ck - cf)
1038+ let hd = aI((aD(aF(gW, cp), gV) - cl))
1039+ let gY = (cl - hd)
1040+ let he = fu(dl(), gW, gY)
1041+ let ha = he._1
1042+ let hb = he._2
1043+ let fy = he._3
1044+ let hc = if ((fy != 0))
10751045 then {
1076- let hr = invoke(am(), "exchangeFreeAndLocked", [fK], nil)
1077- if ((hr == hr))
1046+ let hc = invoke(ai(), "exchangeFreeAndLocked", [fy], nil)
1047+ if ((hc == hc))
10781048 then nil
10791049 else throw("Strict value is not equal to itself.")
10801050 }
10811051 else nil
1082- if ((hr == hr))
1083- then (gT(hl, hn) ++ gU(hp, hq))
1052+ if ((hc == hc))
1053+ then (gE(gW, gY) ++ gF(ha, hb))
10841054 else throw("Strict value is not equal to itself.")
10851055 }
10861056
10871057
10881058
1089-@Callable(bK)
1090-func changeSettings (gt,gu,gv,gw,eB,gx,gy,gz,gA,dQ,gB,gC,gD,gE) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= gw))
1059+@Callable(by)
1060+func changeSettings (ge,gf,gg,gh,ep,gi,gj,gk,gl,dE,gm,gn,go,gp) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= gh))
10911061 then true
1092- else (0 >= gt))
1062+ else (0 >= ge))
10931063 then true
1094- else (0 >= gu))
1064+ else (0 >= gf))
10951065 then true
1096- else (0 >= gv))
1066+ else (0 >= gg))
10971067 then true
1098- else (0 >= eB))
1068+ else (0 >= ep))
10991069 then true
1100- else (0 >= gx))
1070+ else (0 >= gi))
11011071 then true
1102- else (0 >= gy))
1072+ else (0 >= gj))
11031073 then true
1104- else (0 >= gz))
1074+ else (0 >= gk))
11051075 then true
1106- else (0 >= gA))
1076+ else (0 >= gl))
11071077 then true
1108- else (0 >= dQ))
1078+ else (0 >= dE))
11091079 then true
1110- else (0 >= gB))
1080+ else (0 >= gm))
11111081 then true
1112- else (gB > az))
1082+ else (gm > au))
11131083 then true
1114- else (0 >= gC))
1084+ else (0 >= gn))
11151085 then true
1116- else (0 >= gD))
1086+ else (0 >= go))
11171087 then true
1118- else if ((gE != aF))
1119- then (gE != aE)
1088+ else if ((gp != aA))
1089+ then (gp != az)
11201090 else false)
11211091 then true
1122- else !(cm()))
1092+ else !(ca()))
11231093 then true
1124- else (bK.caller != ai()))
1094+ else (by.caller != af()))
11251095 then throw("Invalid changeSettings params")
1126- else gs(gt, gu, gv, gw, eB, gx, gy, gz, gA, dQ, gB, gC, gD, gE)
1096+ else gd(ge, gf, gg, gh, ep, gi, gj, gk, gl, dE, gm, gn, go, gp)
11271097
11281098
11291099
1130-@Callable(bK)
1131-func initialize (cw,cx,gw,gt,gu,gv,eB,hu,hv,hw,gx,gy,gz,gA,dQ,gB,gC,gD,gE) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cw))
1100+@Callable(by)
1101+func initialize (ck,cl,gh,ge,gf,gg,ep,hf,hg,hh,gi,gj,gk,gl,dE,gm,gn,go,gp) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= ck))
11321102 then true
1133- else (0 >= cx))
1103+ else (0 >= cl))
11341104 then true
1135- else (0 >= gw))
1105+ else (0 >= gh))
11361106 then true
1137- else (0 >= gt))
1107+ else (0 >= ge))
11381108 then true
1139- else (0 >= gu))
1109+ else (0 >= gf))
11401110 then true
1141- else (0 >= gv))
1111+ else (0 >= gg))
11421112 then true
1143- else (0 >= eB))
1113+ else (0 >= ep))
11441114 then true
1145- else (0 >= gx))
1115+ else (0 >= gi))
11461116 then true
1147- else (0 >= gy))
1117+ else (0 >= gj))
11481118 then true
1149- else (0 >= gz))
1119+ else (0 >= gk))
11501120 then true
1151- else (0 >= gA))
1121+ else (0 >= gl))
11521122 then true
1153- else (0 >= dQ))
1123+ else (0 >= dE))
11541124 then true
1155- else (0 >= gB))
1125+ else (0 >= gm))
11561126 then true
1157- else (gB > az))
1127+ else (gm > au))
11581128 then true
1159- else (0 >= gC))
1129+ else (0 >= gn))
11601130 then true
1161- else (0 >= gD))
1131+ else (0 >= go))
11621132 then true
1163- else if ((gE != aF))
1164- then (gE != aE)
1133+ else if ((gp != aA))
1134+ then (gp != az)
11651135 else false)
11661136 then true
1167- else cm())
1137+ else ca())
11681138 then true
1169- else (bK.caller != this))
1139+ else (by.caller != this))
11701140 then throw("Invalid initialize parameters")
1171- else ((((gV(cw, cx, 0, 0, 0, 0, 0, 0) ++ gs(gt, gu, gv, gw, eB, gx, gy, gz, gA, dQ, gB, gC, gD, gE)) ++ gF((bI() + gw), 0, 0, 0, 0)) ++ hg(0)) ++ [BooleanEntry(m, true), StringEntry(a, hu), StringEntry(b, hv), StringEntry(T, toString(addressFromStringValue(hw)))])
1141+ else ((((gG(ck, cl, 0, 0, 0, 0, 0, 0) ++ gd(ge, gf, gg, gh, ep, gi, gj, gk, gl, dE, gm, gn, go, gp)) ++ gq((bw() + gh), 0, 0, 0, 0)) ++ gR(0)) ++ [BooleanEntry(l, true), StringEntry(a, hf), StringEntry(b, hg), StringEntry(S, toString(addressFromStringValue(hh)))])
11721142
11731143
11741144
1175-@Callable(bK)
1176-func increasePosition (hx,hy,hz,hA) = {
1177- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1178- if ((hB == hB))
1145+@Callable(by)
1146+func increasePosition (bI,hi,hj,hk) = {
1147+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1148+ if ((hl == hl))
11791149 then {
1180- let hC = invoke(this, "ensureCalledOnce", nil, nil)
1181- if ((hC == hC))
1150+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1151+ if ((hm == hm))
11821152 then {
1183- let bT = bJ(bK)
1184- let hD = bK.payments[0].amount
1185- let gf = bK.payments[0].assetId
1186- let hE = toBase58String(value(gf))
1187- let hF = (gf == aj())
1188- if (if (if (if (if (if (if (if (if (if ((hx != au))
1189- then (hx != av)
1153+ let bH = bx(by)
1154+ let hn = by.payments[0].amount
1155+ let ho = by.payments[0].assetId
1156+ let hp = toBase58String(value(ho))
1157+ let hq = (ho == ag())
1158+ if (if (if (if (if (if (if (if (if ((bI != aq))
1159+ then (bI != ar)
11901160 else false)
11911161 then true
1192- else (0 >= hD))
1162+ else (0 >= hn))
11931163 then true
1194- else !(cm()))
1164+ else !(ca()))
11951165 then true
1196- else !(hF))
1166+ else !(hq))
11971167 then true
1198- else !(ge(bT, hE)))
1168+ else !(bz(aD(au, hi), aU(), true)))
11991169 then true
1200- else !(bL(aI(az, hy), bg(), true)))
1170+ else cb())
12011171 then true
1202- else cn())
1172+ else cc())
12031173 then true
1204- else co())
1205- then true
1206- else dD())
1174+ else dr())
12071175 then throw("Invalid increasePosition parameters")
12081176 else {
1209- let hG = gh(bT, gm(bK))
1210- let gc = hG._1
1211- let gd = hG._2
1212- let he = aI(hD, (aK(gc, hy) + az))
1213- let hH = (hD - he)
1214- let hI = invoke(ap(), "acceptPaymentWithLink", [bT, hA], [AttachedPayment(aj(), hH)])
1215- if ((hI == hI))
1177+ let hr = fS(bH, fX(by))
1178+ let fQ = hr._1
1179+ let fR = hr._2
1180+ let gP = aD(hn, (aF(fQ, hi) + au))
1181+ let hs = (hn - gP)
1182+ let ht = invoke(al(), "acceptPaymentWithLink", [bH, hk], [AttachedPayment(ag(), hs)])
1183+ if ((ht == ht))
12161184 then {
1217- let hJ = {
1218- let bV = hI
1219- if ($isInstanceOf(bV, "Int"))
1185+ let hu = {
1186+ let bL = ht
1187+ if ($isInstanceOf(bL, "Int"))
12201188 then {
1221- let gk = bV
1222- gk
1189+ let fV = bL
1190+ fV
12231191 }
12241192 else throw("Invalid referrerFee")
12251193 }
1226- let hK = (hH - hJ)
1227- let hL = bS(bT)
1228- let eG = hL._1
1229- let eH = hL._2
1230- let eI = hL._3
1231- let eJ = hL._4
1232- let eK = hL._5
1233- let hM = (eG == 0)
1234- let hN = if ((eG > 0))
1235- then (hx == au)
1236- else (hx == av)
1237- let hO = if (!(hM))
1238- then hN
1194+ let hv = (hs - hu)
1195+ let hw = bG(bH, bI)
1196+ let eu = hw._1
1197+ let ev = hw._2
1198+ let ew = hw._3
1199+ let ex = hw._4
1200+ let ey = hw._5
1201+ let hx = (eu == 0)
1202+ let hy = if ((eu > 0))
1203+ then (bI == aq)
1204+ else (bI == ar)
1205+ let hz = if (!(hx))
1206+ then hy
12391207 else false
1240- let hP = (hx == au)
1241- let hQ = if (if (hM)
1208+ let hA = (bI == aq)
1209+ let hB = if (if (hx)
12421210 then true
1243- else hO)
1211+ else hz)
12441212 then {
1245- let hR = aK(he, hy)
1246- let hS = cA(hP, hR)
1247- let cH = hS._1
1248- let cE = hS._2
1249- let cF = hS._3
1250- let eQ = hS._4
1251- if (if ((hz != 0))
1252- then (hz > aN(cH))
1213+ let hC = aF(gP, hi)
1214+ let hD = co(hA, hC)
1215+ let cv = hD._1
1216+ let cs = hD._2
1217+ let ct = hD._3
1218+ let eE = hD._4
1219+ if (if ((hj != 0))
1220+ then (hj > aI(cv))
12531221 else false)
1254- then throw(((("Limit error: " + toString(aN(cH))) + " < ") + toString(hz)))
1222+ then throw(((("Limit error: " + toString(aI(cv))) + " < ") + toString(hj)))
12551223 else {
1256- let fe = (eG + cH)
1257- let hT = (bo() + (if ((fe > 0))
1258- then hR
1224+ let eS = (eu + cv)
1225+ let hE = (bc() + (if ((eS > 0))
1226+ then hC
12591227 else 0))
1260- let hU = (bn() + (if ((0 > fe))
1261- then hR
1228+ let hF = (bb() + (if ((0 > eS))
1229+ then hC
12621230 else 0))
1263- let hV = cW(eG, eH, eJ, eK, he)
1264- let de = hV._1
1265- let eY = hV._2
1266- let eZ = hV._3
1267- let cV = hV._4
1268- if (!(dJ(cE, cF)))
1231+ let hG = cK(eu, ev, ex, ey, gP)
1232+ let cS = hG._1
1233+ let eM = hG._2
1234+ let eN = hG._3
1235+ let cJ = hG._4
1236+ if (!(dx(cs, ct)))
12691237 then throw("Over max spread limit")
1270- else if (!(dN(hT, hU)))
1238+ else if (!(dB(hE, hF)))
12711239 then throw("Over max open notional")
1272- else $Tuple14(fe, de, (eI + hR), bQ(fe), bI(), cF, cE, eQ, (bm() + hR), (bD() + (if ((fe > 0))
1273- then aN(cH)
1274- else 0)), (bC() + (if ((0 > fe))
1275- then aN(cH)
1276- else 0)), hT, hU, cV)
1240+ else $Tuple14(eS, cS, (ew + hC), bE(eS), bw(), ct, cs, eE, (ba() + hC), (br() + (if ((eS > 0))
1241+ then aI(cv)
1242+ else 0)), (bq() + (if ((0 > eS))
1243+ then aI(cv)
1244+ else 0)), hE, hF, cJ)
12771245 }
12781246 }
12791247 else {
1280- let hR = aK(he, hy)
1281- let hW = ed(toString(bK.caller), aC)
1282- let eT = hW._1
1283- let ec = hW._2
1284- if ((eT > hR))
1248+ let hC = aF(gP, hi)
1249+ let hH = dR(toString(by.caller), bI, ax)
1250+ let eH = hH._1
1251+ let dQ = hH._2
1252+ if ((eH > hC))
12851253 then throw("Use decreasePosition to decrease position size")
12861254 else throw("Close position first")
12871255 }
1288- let fe = hQ._1
1289- let hX = hQ._2
1290- let fg = hQ._3
1291- let hY = hQ._4
1292- let hZ = hQ._5
1293- let cF = hQ._6
1294- let cE = hQ._7
1295- let eQ = hQ._8
1296- let ia = hQ._9
1297- let ib = hQ._10
1298- let ic = hQ._11
1299- let hT = hQ._12
1300- let hU = hQ._13
1301- let cV = hQ._14
1302- let id = go((hK + cV))
1303- let gq = id._1
1304- let gr = id._2
1305- let ie = if ((he >= cV))
1306- then invoke(am(), "addLocked", nil, [AttachedPayment(aj(), (he - cV))])
1307- else invoke(am(), "withdrawLocked", [(cV - he)], nil)
1308- if ((ie == ie))
1256+ let eS = hB._1
1257+ let hI = hB._2
1258+ let eU = hB._3
1259+ let hJ = hB._4
1260+ let hK = hB._5
1261+ let ct = hB._6
1262+ let cs = hB._7
1263+ let eE = hB._8
1264+ let hL = hB._9
1265+ let hM = hB._10
1266+ let hN = hB._11
1267+ let hE = hB._12
1268+ let hF = hB._13
1269+ let cJ = hB._14
1270+ let hO = fZ((hv + cJ))
1271+ let gb = hO._1
1272+ let gc = hO._2
1273+ let hP = if ((gP >= cJ))
1274+ then invoke(ai(), "addLocked", nil, [AttachedPayment(ag(), (gP - cJ))])
1275+ else invoke(ai(), "withdrawLocked", [(cJ - gP)], nil)
1276+ if ((hP == hP))
13091277 then {
1310- let if = invoke(am(), "addFree", nil, [AttachedPayment(aj(), gr)])
1311- if ((if == if))
1278+ let hQ = invoke(ai(), "addFree", nil, [AttachedPayment(ag(), gc)])
1279+ if ((hQ == hQ))
13121280 then {
1313- let ig = invoke(an(), "notifyFees", [bT, hK], nil)
1314- if ((ig == ig))
1281+ let hR = invoke(aj(), "notifyFees", [bH, hv], nil)
1282+ if ((hR == hR))
13151283 then {
1316- let ih = invoke(an(), "notifyNotional", [bT, fg], nil)
1317- if ((ih == ih))
1318- then ((((((gP(bT, fe, hX, fg, hY, hZ) ++ gL(hM, bT)) ++ gO(hM, bT, gc)) ++ gV(cE, cF, eQ, ia, ib, ic, hT, hU)) ++ hh(gq)) ++ hg(((bd() + he) - cV))) ++ hi(gd, bK))
1284+ let hS = invoke(aj(), "notifyNotional", [bH, eU], nil)
1285+ if ((hS == hS))
1286+ then ((((((gA(bH, eS, hI, eU, hJ, hK) ++ gw(hx, bH, bI)) ++ gz(hx, bH, bI, fQ)) ++ gG(cs, ct, eE, hL, hM, hN, hE, hF)) ++ gS(gb)) ++ gR(((aR() + gP) - cJ))) ++ gT(fR, by))
13191287 else throw("Strict value is not equal to itself.")
13201288 }
13211289 else throw("Strict value is not equal to itself.")
13221290 }
13231291 else throw("Strict value is not equal to itself.")
13241292 }
13251293 else throw("Strict value is not equal to itself.")
13261294 }
13271295 else throw("Strict value is not equal to itself.")
13281296 }
13291297 }
13301298 else throw("Strict value is not equal to itself.")
13311299 }
13321300 else throw("Strict value is not equal to itself.")
13331301 }
13341302
13351303
13361304
1337-@Callable(bK)
1338-func addMargin () = {
1339- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1340- if ((hB == hB))
1305+@Callable(by)
1306+func addMargin (bI) = {
1307+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1308+ if ((hl == hl))
13411309 then {
1342- let hC = invoke(this, "ensureCalledOnce", nil, nil)
1343- if ((hC == hC))
1310+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1311+ if ((hm == hm))
13441312 then {
1345- let bT = toString(bK.caller)
1346- let he = bK.payments[0].amount
1347- let gf = bK.payments[0].assetId
1348- let hE = toBase58String(value(gf))
1349- let hF = (gf == aj())
1350- if (if (if (if (if (if (if (!(hF))
1313+ let bH = toString(by.caller)
1314+ let gP = by.payments[0].amount
1315+ let ho = by.payments[0].assetId
1316+ let hp = toBase58String(value(ho))
1317+ let hq = (ho == ag())
1318+ if (if (if (if (if (!(hq))
13511319 then true
1352- else !(cd(toString(bK.caller))))
1320+ else !(bR(toString(by.caller), bI)))
13531321 then true
1354- else !(gg(bT, hE)))
1322+ else !(ca()))
13551323 then true
1356- else !(cm()))
1324+ else cb())
13571325 then true
1358- else cn())
1359- then true
1360- else co())
1361- then true
1362- else dD())
1326+ else dr())
13631327 then throw("Invalid addMargin parameters")
13641328 else {
1365- let ii = bS(bT)
1366- let eG = ii._1
1367- let eH = ii._2
1368- let eI = ii._3
1369- let eJ = ii._4
1370- let eK = ii._5
1371- let ie = invoke(am(), "addLocked", nil, [AttachedPayment(aj(), he)])
1372- if ((ie == ie))
1329+ let hT = bG(bH, bI)
1330+ let eu = hT._1
1331+ let ev = hT._2
1332+ let ew = hT._3
1333+ let ex = hT._4
1334+ let ey = hT._5
1335+ let hP = invoke(ai(), "addLocked", nil, [AttachedPayment(ag(), gP)])
1336+ if ((hP == hP))
13731337 then {
1374- let cV = cR(eH, eK)
1375- let ij = if ((cV > 0))
1338+ let cJ = cF(ev, ey)
1339+ let hU = if ((cJ > 0))
13761340 then {
1377- let ik = go(cV)
1378- let gq = ik._1
1379- let gr = ik._2
1380- let il = invoke(am(), "withdrawLocked", [gq], nil)
1381- if ((il == il))
1341+ let hV = fZ(cJ)
1342+ let gb = hV._1
1343+ let gc = hV._2
1344+ let hW = invoke(ai(), "withdrawLocked", [gb], nil)
1345+ if ((hW == hW))
13821346 then {
1383- let im = invoke(am(), "exchangeFreeAndLocked", [-(gr)], nil)
1384- if ((im == im))
1385- then hh(gq)
1347+ let hX = invoke(ai(), "exchangeFreeAndLocked", [-(gc)], nil)
1348+ if ((hX == hX))
1349+ then gS(gb)
13861350 else throw("Strict value is not equal to itself.")
13871351 }
13881352 else throw("Strict value is not equal to itself.")
13891353 }
13901354 else nil
1391- if ((ij == ij))
1392- then ((gP(bT, eG, ((eH - cV) + he), eI, eJ, bI()) ++ hg(((bd() + he) - cV))) ++ ij)
1355+ if ((hU == hU))
1356+ then ((gA(bH, eu, ((ev - cJ) + gP), ew, ex, bw()) ++ gR(((aR() + gP) - cJ))) ++ hU)
13931357 else throw("Strict value is not equal to itself.")
13941358 }
13951359 else throw("Strict value is not equal to itself.")
13961360 }
13971361 }
13981362 else throw("Strict value is not equal to itself.")
13991363 }
14001364 else throw("Strict value is not equal to itself.")
14011365 }
14021366
14031367
14041368
1405-@Callable(bK)
1406-func removeMargin (he) = {
1407- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1408- if ((hB == hB))
1369+@Callable(by)
1370+func removeMargin (gP,bI) = {
1371+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1372+ if ((hl == hl))
14091373 then {
1410- let hC = invoke(this, "ensureCalledOnce", nil, nil)
1411- if ((hC == hC))
1374+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1375+ if ((hm == hm))
14121376 then {
1413- let bT = toString(bK.caller)
1414- if (if (if (if (if ((0 >= he))
1377+ let bH = toString(by.caller)
1378+ if (if (if (if (if ((0 >= gP))
14151379 then true
1416- else !(cd(bT)))
1380+ else !(bR(bH, bI)))
14171381 then true
1418- else !(cm()))
1382+ else !(ca()))
14191383 then true
1420- else cn())
1384+ else cb())
14211385 then true
1422- else dD())
1386+ else dr())
14231387 then throw("Invalid removeMargin parameters")
14241388 else {
1425- let in = bS(bT)
1426- let eG = in._1
1427- let eH = in._2
1428- let eI = in._3
1429- let eJ = in._4
1430- let eK = in._5
1431- let io = cW(eG, eH, eJ, eK, -(he))
1432- let de = io._1
1433- let df = io._2
1434- let da = io._3
1435- let cV = io._4
1436- if ((df != 0))
1389+ let hY = bG(bH, bI)
1390+ let eu = hY._1
1391+ let ev = hY._2
1392+ let ew = hY._3
1393+ let ex = hY._4
1394+ let ey = hY._5
1395+ let hZ = cK(eu, ev, ex, ey, -(gP))
1396+ let cS = hZ._1
1397+ let cT = hZ._2
1398+ let cO = hZ._3
1399+ let cJ = hZ._4
1400+ if ((cT != 0))
14371401 then throw("Invalid removed margin amount")
14381402 else {
1439- let fj = ei(de, df, eI)
1440- if (!(bL(fj, bg(), true)))
1441- then throw(((("Too much margin removed: " + toString(fj)) + " < ") + toString(bg())))
1403+ let eX = dW(cS, cT, ew)
1404+ if (!(bz(eX, aU(), true)))
1405+ then throw(((("Too much margin removed: " + toString(eX)) + " < ") + toString(aU())))
14421406 else {
1443- let ip = go(cV)
1444- let gq = ip._1
1445- let gr = ip._2
1446- let ij = if ((cV > 0))
1407+ let ia = fZ(cJ)
1408+ let gb = ia._1
1409+ let gc = ia._2
1410+ let hU = if ((cJ > 0))
14471411 then {
1448- let im = invoke(am(), "exchangeFreeAndLocked", [-(gr)], nil)
1449- if ((im == im))
1450- then hh(gq)
1412+ let hX = invoke(ai(), "exchangeFreeAndLocked", [-(gc)], nil)
1413+ if ((hX == hX))
1414+ then gS(gb)
14511415 else throw("Strict value is not equal to itself.")
14521416 }
14531417 else nil
1454- if ((ij == ij))
1418+ if ((hU == hU))
14551419 then {
1456- let il = invoke(am(), "withdrawLocked", [(he + gq)], nil)
1457- if ((il == il))
1458- then (((gP(bT, eG, de, eI, bQ(eG), bI()) ++ hd(bK.caller, he)) ++ hg(((bd() - he) - cV))) ++ ij)
1420+ let hW = invoke(ai(), "withdrawLocked", [(gP + gb)], nil)
1421+ if ((hW == hW))
1422+ then (((gA(bH, eu, cS, ew, bE(eu), bw()) ++ gO(by.caller, gP)) ++ gR(((aR() - gP) - cJ))) ++ hU)
14591423 else throw("Strict value is not equal to itself.")
14601424 }
14611425 else throw("Strict value is not equal to itself.")
14621426 }
14631427 }
14641428 }
14651429 }
14661430 else throw("Strict value is not equal to itself.")
14671431 }
14681432 else throw("Strict value is not equal to itself.")
14691433 }
14701434
14711435
14721436
1473-@Callable(bK)
1474-func closePosition (eA,eC,eD) = {
1475- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1476- if ((hB == hB))
1437+@Callable(by)
1438+func closePosition (eo,bI,eq,er) = {
1439+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1440+ if ((hl == hl))
14771441 then {
1478- let hC = invoke(this, "ensureCalledOnce", nil, nil)
1479- if ((hC == hC))
1442+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1443+ if ((hm == hm))
14801444 then {
1481- let bT = bJ(bK)
1482- let iq = valueOrErrorMessage(addressFromString(bT), "Invalid caller")
1483- let cc = ca(bT)
1484- if (if (if (if (if (if (!(cd(bT)))
1445+ let bH = bx(by)
1446+ let ib = valueOrErrorMessage(addressFromString(bH), "Invalid caller")
1447+ let bQ = bO(bH)
1448+ if (if (if (if (if (if (!(bR(bH, bI)))
14851449 then true
1486- else !(cm()))
1450+ else !(ca()))
14871451 then true
1488- else cn())
1452+ else cb())
14891453 then true
1490- else (0 >= eA))
1454+ else (0 >= eo))
14911455 then true
1492- else (0 > eC))
1456+ else (0 > eq))
14931457 then true
1494- else dD())
1458+ else dr())
14951459 then throw("Invalid closePosition parameters")
14961460 else {
1497- let eK = bS(bT)._5
1498- let ir = ez(bT, eA, cc, eC, eD, true, true)
1499- let fe = ir._1
1500- let fn = ir._2
1501- let fg = ir._3
1502- let fh = ir._4
1503- let fa = ir._5
1504- let eV = ir._6
1505- let fm = ir._7
1506- let cE = ir._8
1507- let cF = ir._9
1508- let eQ = ir._10
1509- let ia = ir._11
1510- let ib = ir._12
1511- let ic = ir._13
1512- let hT = ir._14
1513- let hU = ir._15
1514- let is = ir._16
1515- if ((fa > 0))
1461+ let ey = bG(bH, bI)._5
1462+ let ic = en(bH, bI, eo, bQ, eq, er, true, true)
1463+ let eS = ic._1
1464+ let fb = ic._2
1465+ let eU = ic._3
1466+ let eV = ic._4
1467+ let eO = ic._5
1468+ let eJ = ic._6
1469+ let fa = ic._7
1470+ let cs = ic._8
1471+ let ct = ic._9
1472+ let eE = ic._10
1473+ let hL = ic._11
1474+ let hM = ic._12
1475+ let hN = ic._13
1476+ let hE = ic._14
1477+ let hF = ic._15
1478+ let id = ic._16
1479+ if ((eO > 0))
15161480 then throw("Invalid closePosition parameters: bad debt")
1517- else if ((eK >= bI()))
1481+ else if ((ey >= bw()))
15181482 then throw("Invalid closePosition parameters: wait at least 1 block before closing the position")
15191483 else {
1520- let eN = (fe != 0)
1521- let it = (fm + is)
1522- let iu = (bd() - it)
1523- let iv = if ((0 > iu))
1484+ let eB = (eS != 0)
1485+ let ie = (fa + id)
1486+ let if = (aR() - ie)
1487+ let ig = if ((0 > if))
15241488 then 0
1525- else iu
1526- let il = invoke(am(), "withdrawLocked", [it], nil)
1527- if ((il == il))
1489+ else if
1490+ let hW = invoke(ai(), "withdrawLocked", [ie], nil)
1491+ if ((hW == hW))
15281492 then {
1529- let iw = go(is)
1530- let gq = iw._1
1531- let gr = iw._2
1532- let if = invoke(am(), "addFree", nil, [AttachedPayment(aj(), gr)])
1533- if ((if == if))
1493+ let ht = invoke(al(), "acceptPayment", [bH], [AttachedPayment(ag(), id)])
1494+ if ((ht == ht))
15341495 then {
1535- let ig = invoke(an(), "notifyFees", [bT, is], nil)
1536- if ((ig == ig))
1496+ let hu = {
1497+ let bL = ht
1498+ if ($isInstanceOf(bL, "Int"))
1499+ then {
1500+ let fV = bL
1501+ fV
1502+ }
1503+ else throw("Invalid referrerFee")
1504+ }
1505+ let ih = fZ((id - hu))
1506+ let gb = ih._1
1507+ let gc = ih._2
1508+ let hQ = invoke(ai(), "addFree", nil, [AttachedPayment(ag(), gc)])
1509+ if ((hQ == hQ))
15371510 then {
1538- let ih = invoke(an(), "notifyNotional", [bT, fg], nil)
1539- if ((ih == ih))
1540- then (((((if (eN)
1541- then gP(bT, fe, fn, fg, fh, bI())
1542- else hc(bT)) ++ gV(cE, cF, eQ, ia, ib, ic, hT, hU)) ++ (if ((fm > 0))
1543- then hd(iq, fm)
1544- else nil)) ++ hg(iv)) ++ hh(gq))
1511+ let hR = invoke(aj(), "notifyFees", [bH, id], nil)
1512+ if ((hR == hR))
1513+ then {
1514+ let hS = invoke(aj(), "notifyNotional", [bH, eU], nil)
1515+ if ((hS == hS))
1516+ then (((((if (eB)
1517+ then gA(bH, eS, fb, eU, eV, bw())
1518+ else gN(bH, bI)) ++ gG(cs, ct, eE, hL, hM, hN, hE, hF)) ++ (if ((fa > 0))
1519+ then gO(ib, fa)
1520+ else nil)) ++ gR(ig)) ++ gS(gb))
1521+ else throw("Strict value is not equal to itself.")
1522+ }
15451523 else throw("Strict value is not equal to itself.")
15461524 }
15471525 else throw("Strict value is not equal to itself.")
15481526 }
15491527 else throw("Strict value is not equal to itself.")
15501528 }
15511529 else throw("Strict value is not equal to itself.")
15521530 }
15531531 }
15541532 }
15551533 else throw("Strict value is not equal to itself.")
15561534 }
15571535 else throw("Strict value is not equal to itself.")
15581536 }
15591537
15601538
15611539
1562-@Callable(bK)
1563-func liquidate (bT) = {
1564- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1565- if ((hB == hB))
1540+@Callable(by)
1541+func liquidate (bH,bI) = {
1542+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1543+ if ((hl == hl))
15661544 then {
1567- let ix = em(bT, aC)
1568- let iy = if (dS())
1545+ let ii = ea(bH, bI, ax)
1546+ let ij = if (dG())
15691547 then {
1570- let iz = em(bT, aD)
1571- aO(ix, iz)
1548+ let ik = ea(bH, bI, ay)
1549+ aJ(ii, ik)
15721550 }
1573- else ix
1574- if (if (if (if (if (!(bL(iy, bt(), false)))
1551+ else ii
1552+ if (if (if (if (if (!(bz(ij, bh(), false)))
15751553 then true
1576- else !(cd(bT)))
1554+ else !(bR(bH, bI)))
15771555 then true
1578- else !(cm()))
1556+ else !(ca()))
15791557 then true
1580- else cn())
1558+ else cb())
15811559 then true
1582- else dD())
1560+ else dr())
15831561 then throw("Unable to liquidate")
15841562 else {
1585- let iA = if (if ((ix > bu()))
1586- then (bv() > 0)
1563+ let il = if (if ((ii > bi()))
1564+ then (bj() > 0)
15871565 else false)
1588- then (az > bv())
1566+ then (au > bj())
15891567 else false
1590- let eG = bS(bT)._1
1591- let dW = aN(eG)
1592- let iB = if (iA)
1568+ let eu = bG(bH, bI)._1
1569+ let dK = aI(eu)
1570+ let im = if (il)
15931571 then {
1594- let iC = eu(bT, eG)
1595- let iD = aI(aN(iC), dW)
1596- $Tuple2(iD, aN(iC))
1572+ let in = ei(bH, eu)
1573+ let io = aD(aI(in), dK)
1574+ $Tuple2(io, aI(in))
15971575 }
1598- else $Tuple2(0, dW)
1599- let iD = iB._1
1600- let iC = iB._2
1601- let iE = ez(bT, if (iA)
1602- then iC
1603- else dW, bu(), 0, true, false, true)
1604- let fe = iE._1
1605- let fn = iE._2
1606- let fg = iE._3
1607- let fh = iE._4
1608- let fa = iE._5
1609- let eV = iE._6
1610- let fm = iE._7
1611- let cE = iE._8
1612- let cF = iE._9
1613- let eQ = iE._10
1614- let ia = iE._11
1615- let ib = iE._12
1616- let ic = iE._13
1617- let hT = iE._14
1618- let hU = iE._15
1619- let iF = iE._16
1620- let iG = (iF / 2)
1621- let gr = (iF - iG)
1622- let iu = (bd() - iF)
1623- let iH = if ((0 > iu))
1576+ else $Tuple2(0, dK)
1577+ let io = im._1
1578+ let in = im._2
1579+ let ip = en(bH, bI, if (il)
1580+ then in
1581+ else dK, bi(), 0, true, false, true)
1582+ let eS = ip._1
1583+ let fb = ip._2
1584+ let eU = ip._3
1585+ let eV = ip._4
1586+ let eO = ip._5
1587+ let eJ = ip._6
1588+ let fa = ip._7
1589+ let cs = ip._8
1590+ let ct = ip._9
1591+ let eE = ip._10
1592+ let hL = ip._11
1593+ let hM = ip._12
1594+ let hN = ip._13
1595+ let hE = ip._14
1596+ let hF = ip._15
1597+ let iq = ip._16
1598+ let ir = (iq / 2)
1599+ let gc = (iq - ir)
1600+ let if = (aR() - iq)
1601+ let is = if ((0 > if))
16241602 then 0
1625- else iu
1626- let im = if ((fa > 0))
1603+ else if
1604+ let hX = if ((eO > 0))
16271605 then {
1628- let im = invoke(am(), "exchangeFreeAndLocked", [(fa + iF)], nil)
1629- if ((im == im))
1606+ let hX = invoke(ai(), "exchangeFreeAndLocked", [(eO + iq)], nil)
1607+ if ((hX == hX))
16301608 then nil
16311609 else throw("Strict value is not equal to itself.")
16321610 }
16331611 else nil
1634- if ((im == im))
1612+ if ((hX == hX))
16351613 then {
1636- let il = invoke(am(), "withdrawLocked", [iF], nil)
1637- if ((il == il))
1614+ let hW = invoke(ai(), "withdrawLocked", [iq], nil)
1615+ if ((hW == hW))
16381616 then {
1639- let iI = invoke(am(), "addFree", nil, [AttachedPayment(aj(), gr)])
1640- if ((iI == iI))
1617+ let it = invoke(ai(), "addFree", nil, [AttachedPayment(ag(), gc)])
1618+ if ((it == it))
16411619 then {
1642- let ih = invoke(an(), "notifyNotional", [bT, fg], nil)
1643- if ((ih == ih))
1644- then ((((if (iA)
1645- then gP(bT, fe, fn, fg, fh, bI())
1646- else hc(bT)) ++ gV(cE, cF, eQ, ia, ib, ic, hT, hU)) ++ hd(bK.caller, iG)) ++ hg(iH))
1620+ let hS = invoke(aj(), "notifyNotional", [bH, eU], nil)
1621+ if ((hS == hS))
1622+ then ((((if (il)
1623+ then gA(bH, eS, fb, eU, eV, bw())
1624+ else gN(bH, bI)) ++ gG(cs, ct, eE, hL, hM, hN, hE, hF)) ++ gO(by.caller, ir)) ++ gR(is))
16471625 else throw("Strict value is not equal to itself.")
16481626 }
16491627 else throw("Strict value is not equal to itself.")
16501628 }
16511629 else throw("Strict value is not equal to itself.")
16521630 }
16531631 else throw("Strict value is not equal to itself.")
16541632 }
16551633 }
16561634 else throw("Strict value is not equal to itself.")
16571635 }
16581636
16591637
16601638
1661-@Callable(bK)
1639+@Callable(by)
16621640 func payFunding () = {
1663- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1664- if ((hB == hB))
1641+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1642+ if ((hl == hl))
16651643 then {
1666- let iJ = bp()
1667- if (if (if ((iJ > bI()))
1644+ let iu = bd()
1645+ if (if (if ((iu > bw()))
16681646 then true
1669- else !(cm()))
1647+ else !(ca()))
16701648 then true
1671- else cn())
1672- then throw(((("Invalid funding block timestamp: " + toString(bI())) + " < ") + toString(iJ)))
1649+ else cb())
1650+ then throw(((("Invalid funding block timestamp: " + toString(bw())) + " < ") + toString(iu)))
16731651 else {
1674- let fM = dx()
1675- let iK = fL()
1676- let fP = iK._1
1677- let fQ = iK._2
1678- let fT = iK._3
1679- let iL = if ((fT > 0))
1652+ let fA = dl()
1653+ let iv = fz()
1654+ let fD = iv._1
1655+ let fE = iv._2
1656+ let fH = iv._3
1657+ let iw = if ((fH > 0))
16801658 then {
1681- let iL = invoke(am(), "exchangeFreeAndLocked", [-(fT)], nil)
1682- if ((iL == iL))
1659+ let iw = invoke(ai(), "exchangeFreeAndLocked", [-(fH)], nil)
1660+ if ((iw == iw))
16831661 then nil
16841662 else throw("Strict value is not equal to itself.")
16851663 }
16861664 else nil
1687- if ((iL == iL))
1688- then gF((iJ + bs()), (bA() + fQ), (bB() + fP), aI(fQ, fM), aI(fP, fM))
1665+ if ((iw == iw))
1666+ then gq((iu + bg()), (bo() + fE), (bp() + fD), aD(fE, fA), aD(fD, fA))
16891667 else throw("Strict value is not equal to itself.")
16901668 }
16911669 }
16921670 else throw("Strict value is not equal to itself.")
16931671 }
16941672
16951673
16961674
1697-@Callable(bK)
1675+@Callable(by)
16981676 func syncTerminalPriceToOracle () = {
1699- let cw = bh()
1700- let cx = bi()
1701- let iM = fG(dx(), cw, cx)
1702- let hp = iM._1
1703- let hq = iM._2
1704- let fK = iM._3
1705- let iN = if (if ((0 > fK))
1706- then (aN(fK) > bd())
1677+ let ck = aV()
1678+ let cl = aW()
1679+ let ix = fu(dl(), ck, cl)
1680+ let ha = ix._1
1681+ let hb = ix._2
1682+ let fy = ix._3
1683+ let iy = if (if ((0 > fy))
1684+ then (aI(fy) > aR())
17071685 else false)
1708- then -(bd())
1709- else fK
1710- let hr = if ((iN != 0))
1686+ then -(aR())
1687+ else fy
1688+ let hc = if ((iy != 0))
17111689 then {
1712- let hr = invoke(am(), "exchangeFreeAndLocked", [iN], nil)
1713- if ((hr == hr))
1690+ let hc = invoke(ai(), "exchangeFreeAndLocked", [iy], nil)
1691+ if ((hc == hc))
17141692 then nil
17151693 else throw("Strict value is not equal to itself.")
17161694 }
17171695 else nil
1718- if ((hr == hr))
1719- then (hg((bd() + iN)) ++ gU(hp, hq))
1696+ if ((hc == hc))
1697+ then (gR((aR() + iy)) ++ gF(ha, hb))
17201698 else throw("Strict value is not equal to itself.")
17211699 }
17221700
17231701
17241702
1725-@Callable(bK)
1726-func ensureCalledOnce () = if ((bK.caller != this))
1703+@Callable(by)
1704+func ensureCalledOnce () = if ((by.caller != this))
17271705 then throw("Invalid saveCurrentTxId parameters")
17281706 else {
1729- let iO = valueOrElse(getString(this, S), "")
1730- if ((iO != toBase58String(bK.transactionId)))
1731- then [StringEntry(S, iO)]
1707+ let iz = toBase58String(by.transactionId)
1708+ let iA = valueOrElse(getString(this, R), "")
1709+ if ((iA != iz))
1710+ then [StringEntry(R, iz)]
17321711 else throw("Can not call vAMM methods twice in one tx")
17331712 }
17341713
17351714
17361715
1737-@Callable(bK)
1738-func view_calcRemainMarginWithFundingPayment (bT) = {
1739- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1740- if ((hB == hB))
1716+@Callable(by)
1717+func migratePosition (bH) = {
1718+ let bK = getInteger(this, ab(e, bH))
1719+ if (isDefined(bK))
17411720 then {
1742- let iP = bS(bT)
1743- let bW = iP._1
1744- let ef = iP._2
1745- let eo = iP._3
1746- let eh = iP._4
1747- let eq = iP._5
1748- let iQ = ed(bT, aC)
1749- let dY = iQ._1
1750- let ec = iQ._2
1751- let iR = cW(bW, ef, eh, eq, ec)
1752- let de = iR._1
1753- let df = iR._2
1754- let da = iR._3
1755- let cV = iR._4
1756- throw(((((((aG(de) + aG(da)) + aG(et(bT))) + aG(ec)) + aG(df)) + aG(dY)) + aG(cV)))
1721+ let iB = getIntegerValue(this, ab(e, bH))
1722+ let iC = getIntegerValue(this, ab(f, bH))
1723+ let iD = getIntegerValue(this, ab(g, bH))
1724+ let iE = getIntegerValue(this, ab(h, bH))
1725+ let iF = getIntegerValue(this, ab(k, bH))
1726+ let iG = getIntegerValue(this, ab(j, bH))
1727+ let iH = getIntegerValue(this, ab(i, bH))
1728+ let iI = bN(iB)
1729+ let bJ = ((bH + "_") + toString(iI))
1730+[DeleteEntry(ab(e, bH)), DeleteEntry(ab(f, bH)), DeleteEntry(ab(g, bH)), DeleteEntry(ab(h, bH)), DeleteEntry(ab(k, bH)), DeleteEntry(ab(j, bH)), DeleteEntry(ab(i, bH)), IntegerEntry(ab(e, bJ), iB), IntegerEntry(ab(f, bJ), iC), IntegerEntry(ab(g, bJ), iD), IntegerEntry(ab(h, bJ), iE), IntegerEntry(ab(k, bJ), iF), IntegerEntry(ab(j, bJ), iG), IntegerEntry(ab(i, bJ), iH)]
1731+ }
1732+ else throw(("Nothing to migrate for " + bH))
1733+ }
1734+
1735+
1736+
1737+@Callable(by)
1738+func view_calcRemainMarginWithFundingPayment (bH,bI) = {
1739+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1740+ if ((hl == hl))
1741+ then {
1742+ let iJ = bG(bH, bI)
1743+ let bM = iJ._1
1744+ let dT = iJ._2
1745+ let ec = iJ._3
1746+ let dV = iJ._4
1747+ let ee = iJ._5
1748+ let iK = dR(bH, bI, ax)
1749+ let dM = iK._1
1750+ let dQ = iK._2
1751+ let iL = cK(bM, dT, dV, ee, dQ)
1752+ let cS = iL._1
1753+ let cT = iL._2
1754+ let cO = iL._3
1755+ let cJ = iL._4
1756+ throw(((((((aB(cS) + aB(cO)) + aB(eh(bH, bI))) + aB(dQ)) + aB(cT)) + aB(dM)) + aB(cJ)))
17571757 }
17581758 else throw("Strict value is not equal to itself.")
17591759 }
17601760
17611761
17621762
1763-@Callable(bK)
1764-func view_getPegAdjustCost (iS) = {
1765- let cw = bh()
1766- let cx = bi()
1767- let fF = fG(iS, cw, cx)
1768- throw(toString(fF._3))
1763+@Callable(by)
1764+func view_getPegAdjustCost (iM) = {
1765+ let ck = aV()
1766+ let cl = aW()
1767+ let ft = fu(iM, ck, cl)
1768+ throw(toString(ft._3))
17691769 }
17701770
17711771
17721772
1773-@Callable(bK)
1773+@Callable(by)
17741774 func view_getTerminalAmmPrice () = {
1775- let iT = fo()
1776- let fs = iT._1
1777- let ft = iT._2
1778- let hk = aI(aK(fs, bj()), aK(ft, bk()))
1779- throw(toString(hk))
1775+ let iN = fc()
1776+ let fg = iN._1
1777+ let fh = iN._2
1778+ let gV = aD(aF(fg, aX()), aF(fh, aY()))
1779+ throw(toString(gV))
17801780 }
17811781
17821782
17831783
1784-@Callable(bK)
1784+@Callable(by)
17851785 func view_getFunding () = {
1786- let fM = dx()
1787- let iU = fL()
1788- let fP = iU._1
1789- let fQ = iU._2
1790- let fT = iU._3
1791- let iV = aI(fQ, fM)
1792- let iW = aI(fP, fM)
1793- throw(((((aG(iV) + aG(iW)) + aG(dR())) + aG(dx())) + aG(fT)))
1794- }
1795-
1796-
1797-
1798-@Callable(bK)
1799-func computeSpotPrice () = {
1800- let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1801- if ((hB == hB))
1786+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1787+ if ((hl == hl))
18021788 then {
1803- let fF = dR()
1804- $Tuple2(nil, fF)
1789+ let fA = dl()
1790+ let iO = fz()
1791+ let fD = iO._1
1792+ let fE = iO._2
1793+ let fH = iO._3
1794+ let iP = aD(fE, fA)
1795+ let iQ = aD(fD, fA)
1796+ throw(((((aB(iP) + aB(iQ)) + aB(dF())) + aB(dl())) + aB(fH)))
18051797 }
18061798 else throw("Strict value is not equal to itself.")
18071799 }
18081800
18091801
18101802
1811-@Callable(bK)
1812-func computeFeeForTraderWithArtifact (bT,fV) = {
1813- let fF = gh(bT, fV)
1814- $Tuple2(nil, fF)
1803+@Callable(by)
1804+func computeSpotPrice () = {
1805+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1806+ if ((hl == hl))
1807+ then {
1808+ let ft = dF()
1809+ $Tuple2(nil, ft)
1810+ }
1811+ else throw("Strict value is not equal to itself.")
18151812 }
18161813
18171814
1818-@Verifier(iX)
1819-func iY () = {
1820- let iZ = getString(this, T)
1821- if (isDefined(iZ))
1815+
1816+@Callable(by)
1817+func computeFeeForTraderWithArtifact (bH,fJ) = {
1818+ let ft = fS(bH, fJ)
1819+ $Tuple2(nil, ft)
1820+ }
1821+
1822+
1823+@Verifier(iR)
1824+func iS () = {
1825+ let iT = getString(this, S)
1826+ if (isDefined(iT))
18221827 then {
1823- let ja = getString(addressFromStringValue(value(iZ)), V)
1824- if (isDefined(ja))
1825- then valueOrElse(getBoolean(addressFromStringValue(value(ja)), ((("status_" + toString(this)) + "_") + toBase58String(iX.id))), false)
1828+ let iU = getString(addressFromStringValue(value(iT)), U)
1829+ if (isDefined(iU))
1830+ then valueOrElse(getBoolean(addressFromStringValue(value(iU)), ((("status_" + toString(this)) + "_") + toBase58String(iR.id))), false)
18261831 else throw("unable to verify: admin not set in coordinator")
18271832 }
1828- else sigVerify(iX.bodyBytes, iX.proofs[0], iX.senderPublicKey)
1833+ else sigVerify(iR.bodyBytes, iR.proofs[0], iR.senderPublicKey)
18291834 }
18301835

github/deemru/w8io/169f3d6 
849.09 ms