tx · 7MT5SuCVSV77LwmoEV9BgQLhJnd5wiVNRke6KNfqTAPt

3MstAuJdjcstykakArWP8VxVKifwLG2W9yA:  -0.02600000 Waves

2024.10.03 16:39 [3310735] smart account 3MstAuJdjcstykakArWP8VxVKifwLG2W9yA > SELF 0.00000000 Waves

{ "type": 13, "id": "7MT5SuCVSV77LwmoEV9BgQLhJnd5wiVNRke6KNfqTAPt", "fee": 2600000, "feeAssetId": null, "timestamp": 1727962791893, "version": 2, "chainId": 84, "sender": "3MstAuJdjcstykakArWP8VxVKifwLG2W9yA", "senderPublicKey": "DkbjqNkpZ5vgvUbWEZFoHUdgUFK8ziLVtw4Fox2YR2gz", "proofs": [ "4BqQtEJCv5VRZgAygJHLXpjVTgTxbVKwGgAXMFwZgVA7EftC6CMANwDg8GFCQpuHTaRvFHM4CC2Xgn5ZNPJ4R43Y" ], "script": "base64:BgJACAISABIHCgUICAgIARIHCgUICAgIARIDCgEEEgASAwoBCBIDCgEBEgASAwoBCBIECgIIARIFCgMICAESAwoBCEoAB1ZFUlNJT04CCFBNLTAuNC4wAAljb25maWdTdHIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwINY29uZmlnQWRkcmVzcwIjM045MWU3d0hpVjdRYWREc3gzUlVKUXh4MWV0cWNBS3JmSGoADkNPTkZJR19BRERSRVNTAwkAAAIFCWNvbmZpZ1N0cgIABQR0aGlzCQEHQWRkcmVzcwEJANkEAQUJY29uZmlnU3RyABVBc3NldHNXZWlnaHRzRGVjaW1hbHMABAAFU2NhbGUAkE4ABlNjYWxlOACAwtcvAAdTY2FsZTE2AICAhP6m3uERAAhGZWVTY2FsZQCQTgARUG9vbFRva2VuRGVjaW1hbHMACAAOUG9vbFRva2VuU2NhbGUJAGwGAAoAAAURUG9vbFRva2VuRGVjaW1hbHMAAAAABQZIQUxGVVAAFEluaXRhbFdhdmVzTGlxdWlkaXR5BQZTY2FsZTgAEE1JTl9TVEVQU19BTU9VTlQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOQ09ORklHX0FERFJFU1MCEG1pbl9zdGVwc19hbW91bnQAAQAQTUFYX1NURVBTX0FNT1VOVAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5DT05GSUdfQUREUkVTUwIQbWF4X3N0ZXBzX2Ftb3VudAD0AwASTUlOX1NURVBTX0lOVEVSVkFMCQELdmFsdWVPckVsc2UCCQCaCAIFDkNPTkZJR19BRERSRVNTAhJtaW5fc3RlcHNfaW50ZXJ2YWwAAQASTUFYX1NURVBTX0lOVEVSVkFMCQELdmFsdWVPckVsc2UCCQCaCAIFDkNPTkZJR19BRERSRVNTAhJtYXhfc3RlcHNfaW50ZXJ2YWwAkE4ACk1JTl9XRUlHSFQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOQ09ORklHX0FERFJFU1MCCm1pbl93ZWlnaHQAZAAKTUFYX1dFSUdIVAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5DT05GSUdfQUREUkVTUwIKbWF4X3dlaWdodACsTQENdHJ5R2V0SW50ZWdlcgEDa2V5BAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAEMdHJ5R2V0QmluYXJ5AQNrZXkEByRtYXRjaDAJAJwIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAFAWIBAAEMdHJ5R2V0U3RyaW5nAQNrZXkEByRtYXRjaDAJAJ0IAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYgUHJG1hdGNoMAUBYgIAARN0cnlHZXRTdHJpbmdPclRocm93AQNrZXkEByRtYXRjaDAJAJ0IAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYgUHJG1hdGNoMAUBYgkAAgEJAKwCAgIdbm8gc3VjaCBrZXkgaW4gZGF0YSBzdG9yYWdlOiAFA2tleQEOZ2V0QXNzZXRTdHJpbmcBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiAgVXQVZFUwENZ2V0QXNzZXRCeXRlcwEKYXNzZXRJZFN0cgMJAAACBQphc3NldElkU3RyAgVXQVZFUwUEdW5pdAkA2QQBBQphc3NldElkU3RyAQ9nZXRUb2tlbkJhbGFuY2UBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBdAUHJG1hdGNoMAkA8AcCBQR0aGlzBQF0CAkA7wcBBQR0aGlzCWF2YWlsYWJsZQETYWRkQXNzZXRCeXRlc1RvTGlzdAIFYWNjdW0EaXRlbQMJAQIhPQIFBGl0ZW0CAAkAzggCBQVhY2N1bQkAzAgCCQENZ2V0QXNzZXRCeXRlcwEFBGl0ZW0FA25pbAUFYWNjdW0BFGFkZEFzc2V0V2VpZ2h0VG9MaXN0AgVhY2N1bQRpdGVtCQDOCAIFBWFjY3VtCQDMCAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICB3N0YXRpY18JAQ5nZXRBc3NldFN0cmluZwEFBGl0ZW0CB193ZWlnaHQFA25pbAEXYWRkQXNzZXRXZWlnaHRUb1N0ckxpc3QCBWFjY3VtBGl0ZW0JAM4IAgUFYWNjdW0JAMwIAgkApAMBCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgdzdGF0aWNfBQRpdGVtAgdfd2VpZ2h0BQNuaWwBFmFkZEFzc2V0RGVjaW1hbHNUb0xpc3QCBWFjY3VtBGl0ZW0JAM4IAgUFYWNjdW0JAMwIAgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIHc3RhdGljXwkBDmdldEFzc2V0U3RyaW5nAQUEaXRlbQIJX2RlY2ltYWxzBQNuaWwBE2FkZEFzc2V0U2NhbGVUb0xpc3QCBWFjY3VtBGl0ZW0JAM4IAgUFYWNjdW0JAMwIAgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIHc3RhdGljXwkBDmdldEFzc2V0U3RyaW5nAQUEaXRlbQIGX3NjYWxlBQNuaWwBDGFkZEludFRvTGlzdAIFYWNjdW0EaXRlbQkAzggCBQVhY2N1bQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0FA25pbAAOdXNkbkFzc2V0SWRTdHIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOQ09ORklHX0FERFJFU1MCDnVzZG5Bc3NldElkU3RyAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAAQcHV6emxlQXNzZXRJZFN0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5DT05GSUdfQUREUkVTUwIQcHV6emxlQXNzZXRJZFN0cgIsSEVCOFFhdzl4cldwV3M4dEhzaUFUWUdCV0RCdFAyUzdrY1BBTHJNdTQzQVMADnVzZHRBc3NldElkU3RyCQELdmFsdWVPckVsc2UCCQCdCAIFDkNPTkZJR19BRERSRVNTAg51c2R0QXNzZXRJZFN0cgIsMzROOVljRUVUTFduOTNxWVE2NEVzUDF4ODl0U3J1SlU0NFJyRU1TWFhFUEoAEXVzZHRQcHRBc3NldElkU3RyCQELdmFsdWVPckVsc2UCCQCdCAIFDkNPTkZJR19BRERSRVNTAhF1c2R0UHB0QXNzZXRJZFN0cgIsOXdjM0xYTkE0VEVCc1h5S3RvTEU5bXJiREQ3V01IWHZYckNqWnZhYkxBc2kADnJvbWVBc3NldElkU3RyCQELdmFsdWVPckVsc2UCCQCdCAIFDkNPTkZJR19BRERSRVNTAg5yb21lQXNzZXRJZFN0cgIsQVA0Q2I1eExZR0g2WmlnSHJlQ1pIb1hwUVRXRGtQc0cyQkhxZkRVeDZ0YUoAD3dhdmVzQXNzZXRJZFN0cgIFV0FWRVMAC3VzZG5Bc3NldElkCQDZBAEFDnVzZG5Bc3NldElkU3RyAA1wdXp6bGVBc3NldElkCQDZBAEFEHB1enpsZUFzc2V0SWRTdHIAC3VzZHRBc3NldElkCQDZBAEFDnVzZHRBc3NldElkU3RyAA51c2R0UHB0QXNzZXRJZAkA2QQBBRF1c2R0UHB0QXNzZXRJZFN0cgALcm9tZUFzc2V0SWQJANkEAQUOcm9tZUFzc2V0SWRTdHIADHdhdmVzQXNzZXRJZAUEdW5pdAAVc3VwcG9ydGVkRmVlQXNzZXRzU3RyCQDMCAIFDnVzZG5Bc3NldElkU3RyCQDMCAIFEHB1enpsZUFzc2V0SWRTdHIJAMwIAgUOdXNkdEFzc2V0SWRTdHIJAMwIAgURdXNkdFBwdEFzc2V0SWRTdHIJAMwIAgUPd2F2ZXNBc3NldElkU3RyCQDMCAIFDnJvbWVBc3NldElkU3RyBQNuaWwADW9yYWNsZUFkZHJlc3MJAQdBZGRyZXNzAQkA2QQBCQELdmFsdWVPckVsc2UCCQCdCAIFDkNPTkZJR19BRERSRVNTAg1vcmFjbGVBZGRyZXNzAiMzTjkxZTd3SGlWN1FhZERzeDNSVUpReHgxZXRxY0FLcmZIagALZmVlc0FkZHJlc3MJAQdBZGRyZXNzAQkA2QQBCQELdmFsdWVPckVsc2UCCQCdCAIFDkNPTkZJR19BRERSRVNTAgtmZWVzQWRkcmVzcwIjM045MWU3d0hpVjdRYWREc3gzUlVKUXh4MWV0cWNBS3JmSGoAEnNodXRkb3duQWRkcmVzc1N0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5DT05GSUdfQUREUkVTUwIPc2h1dGRvd25BZGRyZXNzAiMzTjkxZTd3SGlWN1FhZERzeDNSVUpReHgxZXRxY0FLcmZIagAPbGF5ZXIyQWRkcmVzc2VzCQELdmFsdWVPckVsc2UCCQCdCAIFDkNPTkZJR19BRERSRVNTAg9sYXllcjJBZGRyZXNzZXMCIzNOOTFlN3dIaVY3UWFkRHN4M1JVSlF4eDFldHFjQUtyZkhqABFjb2xkTWFzdGVyQWRkcmVzcwkBB0FkZHJlc3MBCQDZBAEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOQ09ORklHX0FERFJFU1MCEWNvbGRNYXN0ZXJBZGRyZXNzAiMzTjkxZTd3SGlWN1FhZERzeDNSVUpReHgxZXRxY0FLcmZIagAOZmFjdG9yeUFjY291bnQJAQdBZGRyZXNzAQkA2QQBCQELdmFsdWVPckVsc2UCCQCdCAIFDkNPTkZJR19BRERSRVNTAg5mYWN0b3J5QWRkcmVzcwIjM012b3dWeFZucVRVWlp5Ukw2aTN2a0hOR2Fiam1GeGtIQnIADG1hc3RlclB1YktleQkA2QQBCQELdmFsdWVPckVsc2UCCQCdCAIFDkNPTkZJR19BRERSRVNTAgxtYXN0ZXJQdWJLZXkCLDR6OENLU1lRQktreng3UEJiNXVCUDFZUGE2WUFIUk5UQXBXMXNRVkhUNWVVAAFUCQENdHJ5R2V0SW50ZWdlcgECE3N0YXRpY190b2tlbnNBbW91bnQACGFzc2V0SWRzCgACJGwJALUJAgkBDHRyeUdldFN0cmluZwECD3N0YXRpY190b2tlbklkcwIBLAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQETYWRkQXNzZXRCeXRlc1RvTGlzdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgANQXNzZXRzV2VpZ2h0cwoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEUYWRkQXNzZXRXZWlnaHRUb0xpc3QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACERlY2ltYWxzCgACJGwFCGFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARZhZGRBc3NldERlY2ltYWxzVG9MaXN0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAZTY2FsZXMKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjNfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBE2FkZEFzc2V0U2NhbGVUb0xpc3QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjNfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYzXzICCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoAA0ZlZQkBDXRyeUdldEludGVnZXIBAgpzdGF0aWNfZmVlAAxlYXJuZWRBc3NldHMFCGFzc2V0SWRzAQppc1NodXRkb3duAAQPc2h1dGRvd25BZGRyZXNzCQCmCAEFEnNodXRkb3duQWRkcmVzc1N0cgMJAAACBQ9zaHV0ZG93bkFkZHJlc3MFBHVuaXQHBAckbWF0Y2gwCQCbCAIJAQV2YWx1ZQEFD3NodXRkb3duQWRkcmVzcwILaXNfc2h1dGRvd24DCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBeAUHJG1hdGNoMAUBeAcBFmdldEN1cnJlbnRUb2tlbkJhbGFuY2UBCHRva2VuTnVtBAp0b2tlbklkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBCQCRAwIFCGFzc2V0SWRzBQh0b2tlbk51bQkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIHZ2xvYmFsXwUKdG9rZW5JZFN0cgIIX2JhbGFuY2UBCGdldEtNdWx0AAQHJG1hdGNoMAkAnwgBAgxzdGF0aWNfS011bHQDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4BQdTY2FsZTE2ARlnZXRWaXJ0dWFsUG9vbFRva2VuQW1vdW50AAkAawMJAQ10cnlHZXRJbnRlZ2VyAQIXZ2xvYmFsX3Bvb2xUb2tlbl9hbW91bnQJAQhnZXRLTXVsdAAFB1NjYWxlMTYBEmdldFByaWNlRnJvbU9yYWNsZQEKYXNzZXRJZFN0cgQHJG1hdGNoMAkAmggCBQ1vcmFjbGVBZGRyZXNzCQCsAgIFCmFzc2V0SWRTdHICB190d2FwNUIDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4AMCEPQERY2FsY3VsYXRlVXNkVmFsdWUDB2Fzc2V0SWQGYW1vdW50CGFCYWxhbmNlBAthc3NldFdlaWdodAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIHc3RhdGljXwkBDmdldEFzc2V0U3RyaW5nAQUHYXNzZXRJZAIHX3dlaWdodAQLZmVlQXNzZXRTdHIJAQx0cnlHZXRTdHJpbmcBAg9zdGF0aWNfZmVlVG9rZW4EDWZlZUFzc2V0U2NhbGUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICAgdzdGF0aWNfBQtmZWVBc3NldFN0cgIGX3NjYWxlBAtmZWVBc3NldE51bQkBBXZhbHVlAQkAzwgCBQhhc3NldElkcwkBDWdldEFzc2V0Qnl0ZXMBBQtmZWVBc3NldFN0cgQOZmVlQXNzZXRXZWlnaHQJAJEDAgUNQXNzZXRzV2VpZ2h0cwULZmVlQXNzZXROdW0ED2ZlZUFzc2V0QmFsYW5jZQkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIHZ2xvYmFsXwULZmVlQXNzZXRTdHICCF9iYWxhbmNlBA12YWxJbkZlZUFzc2V0CQBrAwUGYW1vdW50CQBpAgUPZmVlQXNzZXRCYWxhbmNlBQ5mZWVBc3NldFdlaWdodAkAaQIFCGFCYWxhbmNlBQthc3NldFdlaWdodAQNZmVlQXNzZXRQcmljZQkBEmdldFByaWNlRnJvbU9yYWNsZQEFC2ZlZUFzc2V0U3RyCQBrAwUNdmFsSW5GZWVBc3NldAUNZmVlQXNzZXRQcmljZQUNZmVlQXNzZXRTY2FsZQEWaGFuZGxlUG9vbFRva2Vuc1JlZGVlbQIJUFJlZGVlbWVkC3VzZXJBZGRyZXNzCgERaGFuZGxlVG9rZW5SZWRlZW0CBWFjY3VtB3Rva2VuSWQEAkJrCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgdnbG9iYWxfCQEOZ2V0QXNzZXRTdHJpbmcBBQd0b2tlbklkAghfYmFsYW5jZQQHUFN1cHBseQkBGWdldFZpcnR1YWxQb29sVG9rZW5BbW91bnQABA10b2tlbkRlY2ltYWxzCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgdzdGF0aWNfCQEOZ2V0QXNzZXRTdHJpbmcBBQd0b2tlbklkAgZfc2NhbGUEBnBzdXBwbAkAvQIECQC5AgIJALYCAQkAZQIFB1BTdXBwbHkFCVBSZWRlZW1lZAkAtgIBBQZTY2FsZTgJALYCAQUGU2NhbGU4CQC2AgEFB1BTdXBwbHkFBERPV04EBmFtb3VudAkAoAMBCQC9AgQJALgCAgkAtgIBBQdTY2FsZTE2BQZwc3VwcGwJALYCAQUCQmsJALYCAQUHU2NhbGUxNgUHQ0VJTElORwkAzggCBQVhY2N1bQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICB2dsb2JhbF8JAQ5nZXRBc3NldFN0cmluZwEFB3Rva2VuSWQCCF9iYWxhbmNlCQBlAgUCQmsFBmFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQt1c2VyQWRkcmVzcwUGYW1vdW50BQd0b2tlbklkBQNuaWwKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjRfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEWhhbmRsZVRva2VuUmVkZWVtAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGY0XzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmNF8yAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKARJjYWxjdWxhdGVPdXRBbW91bnQFCEFtb3VudEluB2Fzc2V0SW4IYXNzZXRPdXQJQmFsYW5jZUluCkJhbGFuY2VPdXQEB0luZGV4SW4JAQV2YWx1ZQEJAM8IAgUIYXNzZXRJZHMFB2Fzc2V0SW4ECEluZGV4T3V0CQEFdmFsdWUBCQDPCAIFCGFzc2V0SWRzBQhhc3NldE91dAMJAAACBQdJbmRleEluBQhJbmRleE91dAUIQW1vdW50SW4JAG4EBQpCYWxhbmNlT3V0CQBlAgkAaAIFBlNjYWxlOAUGU2NhbGU4CQCgAwEJAHYGCQC9AgQJALkCAgkAtgIBBQlCYWxhbmNlSW4JALYCAQCQTgkAtgIBCQBoAgUGU2NhbGU4BQZTY2FsZTgJALkCAgkAtgIBCQBkAgUJQmFsYW5jZUluBQhBbW91bnRJbgkAtgIBAJBOBQZIQUxGVVAAEAkAtgIBCQBrAwkAkQMCBQ1Bc3NldHNXZWlnaHRzBQdJbmRleEluAICglKWNHQkAkQMCBQ1Bc3NldHNXZWlnaHRzBQhJbmRleE91dAAMABAFB0NFSUxJTkcJAGgCBQZTY2FsZTgFBlNjYWxlOAUISEFMRkVWRU4BHWNhbGN1bGF0ZUN1cnJlbnRBc3NldEludGVyZXN0BAdhc3NldElkCmFzc2V0SWRTdHIIYUJhbGFuY2UWdG9rZW5FYXJuaW5nc0xhc3RDaGVjawQLdG90YWxTdGFrZWQJAQ10cnlHZXRJbnRlZ2VyAQISZ2xvYmFsX2luZGV4U3Rha2VkBBV0b2tlbkJhbGFuY2VMYXN0Q2hlY2sFFnRva2VuRWFybmluZ3NMYXN0Q2hlY2sEE2N1cnJlbnRCYWxhbmNlRGVsdGEJAGUCCQEPZ2V0VG9rZW5CYWxhbmNlAQUHYXNzZXRJZAUIYUJhbGFuY2UEFGN1cnJlbnRUb2tlbkVhcm5pbmdzAwkAZgIFE2N1cnJlbnRCYWxhbmNlRGVsdGEFFXRva2VuQmFsYW5jZUxhc3RDaGVjawUTY3VycmVudEJhbGFuY2VEZWx0YQUVdG9rZW5CYWxhbmNlTGFzdENoZWNrBAtuZXdFYXJuaW5ncwkAZQIFFGN1cnJlbnRUb2tlbkVhcm5pbmdzBRV0b2tlbkJhbGFuY2VMYXN0Q2hlY2sEC25ld0ludGVyZXN0AwkAAAIFC3RvdGFsU3Rha2VkAAAAAAkAawMFC25ld0Vhcm5pbmdzBQZTY2FsZTgFC3RvdGFsU3Rha2VkBBFsYXN0Q2hlY2tJbnRlcmVzdAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIRZ2xvYmFsX2xhc3RDaGVja18FCmFzc2V0SWRTdHICCV9pbnRlcmVzdAkAZAIFEWxhc3RDaGVja0ludGVyZXN0BQtuZXdJbnRlcmVzdAELY2xhaW1SZXN1bHQBB2FkZHJlc3MECmFkZHJlc3NTdHIJAKUIAQUHYWRkcmVzcwQMcHV6emxlQW1vdW50CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYWRkcmVzc1N0cgIMX2luZGV4U3Rha2VkCgEHaGFuZGxlcgIFYWNjdW0HYXNzZXRJZAQKYXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQUHYXNzZXRJZAQIYUJhbGFuY2UJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICB2dsb2JhbF8JAQ5nZXRBc3NldFN0cmluZwEFB2Fzc2V0SWQCCF9iYWxhbmNlBBZ0b2tlbkVhcm5pbmdzTGFzdENoZWNrCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAhFnbG9iYWxfbGFzdENoZWNrXwUKYXNzZXRJZFN0cgIJX2Vhcm5pbmdzBBRjdXJyZW50VG9rZW5JbnRlcmVzdAkBHWNhbGN1bGF0ZUN1cnJlbnRBc3NldEludGVyZXN0BAUHYXNzZXRJZAUKYXNzZXRJZFN0cgUIYUJhbGFuY2UFFnRva2VuRWFybmluZ3NMYXN0Q2hlY2sEFGN1cnJlbnRUb2tlbkVhcm5pbmdzCQCWAwEJAMwIAgUWdG9rZW5FYXJuaW5nc0xhc3RDaGVjawkAzAgCCQBlAgkBD2dldFRva2VuQmFsYW5jZQEFB2Fzc2V0SWQFCGFCYWxhbmNlBQNuaWwEDHJld2FyZEFtb3VudAkAawMFDHB1enpsZUFtb3VudAkAZQIFFGN1cnJlbnRUb2tlbkludGVyZXN0CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICCQCsAgIFCmFkZHJlc3NTdHICC19sYXN0Q2hlY2tfBQphc3NldElkU3RyAglfaW50ZXJlc3QFBlNjYWxlOAQIdHJhbnNmZXIDCQAAAgUMcmV3YXJkQW1vdW50AAAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQdhZGRyZXNzBQxyZXdhcmRBbW91bnQFB2Fzc2V0SWQFA25pbAkAlAoCCQDOCAIJAM4IAggFBWFjY3VtAl8xBQh0cmFuc2ZlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICEWdsb2JhbF9sYXN0Q2hlY2tfBQphc3NldElkU3RyAglfZWFybmluZ3MJAGUCBRRjdXJyZW50VG9rZW5FYXJuaW5ncwUMcmV3YXJkQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIRZ2xvYmFsX2xhc3RDaGVja18FCmFzc2V0SWRTdHICCV9pbnRlcmVzdAUUY3VycmVudFRva2VuSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFCmFkZHJlc3NTdHICC19sYXN0Q2hlY2tfBQphc3NldElkU3RyAglfaW50ZXJlc3QFFGN1cnJlbnRUb2tlbkludGVyZXN0BQNuaWwJAGQCCAUFYWNjdW0CXzIJARFjYWxjdWxhdGVVc2RWYWx1ZQMFB2Fzc2V0SWQFDHJld2FyZEFtb3VudAUIYUJhbGFuY2UEBWFjY3VtCgACJGwFDGVhcm5lZEFzc2V0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjRfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB2hhbmRsZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjRfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGY0XzICCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoJAJQKAgkAzggCCAUFYWNjdW0CXzEJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYWRkcmVzc1N0cgIRX2NsYWltZWRSZXdhcmRVU0QJAGQCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYWRkcmVzc1N0cgIRX2NsYWltZWRSZXdhcmRVU0QIBQVhY2N1bQJfMgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQphZGRyZXNzU3RyAgpfbGFzdENsYWltCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUDbmlsCAUFYWNjdW0CXzIBEGluZGV4U3Rha2VSZXN1bHQCCmFkZHJlc3NTdHIGYW1vdW50BAJsaQgJAQtjbGFpbVJlc3VsdAEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCmFkZHJlc3NTdHICXzEJAM4IAgUCbGkJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYWRkcmVzc1N0cgIMX2luZGV4U3Rha2VkCQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFkZHJlc3NTdHICDF9pbmRleFN0YWtlZAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCAhJnbG9iYWxfaW5kZXhTdGFrZWQJAGQCCQENdHJ5R2V0SW50ZWdlcgECEmdsb2JhbF9pbmRleFN0YWtlZAUGYW1vdW50BQNuaWwBA3N1bQIFYWNjdW0BbgkAZAIFBWFjY3VtCQENcGFyc2VJbnRWYWx1ZQEFAW4BDWNoZWNrRmVlQXNzZXQCBWFjY3VtBG5leHQDAwkBAiE9AgkAzwgCBRVzdXBwb3J0ZWRGZWVBc3NldHNTdHIFBG5leHQFBHVuaXQJAAACBQVhY2N1bQIABwUEbmV4dAUFYWNjdW0BEmdldFRtcFJlYmFsYW5jZUlkcwENbmV3QXNzZXRJZHNMaQQRY3VycmVudEFzc2V0SWRzTGkJALUJAgkBDHRyeUdldFN0cmluZwECD3N0YXRpY190b2tlbklkcwIBLAQGcmVzdWx0BQ1uZXdBc3NldElkc0xpCgEBZgIFYWNjdW0HYXNzZXRJZAMJAAACCQDPCAIFBnJlc3VsdAUHYXNzZXRJZAUEdW5pdAkAzggCBQVhY2N1bQkAzAgCBQdhc3NldElkBQNuaWwFBWFjY3VtCgACJGwFEWN1cnJlbnRBc3NldElkc0xpCgACJHMJAJADAQUCJGwKAAUkYWNjMAUGcmVzdWx0CgEFJGY0XzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGY0XzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmNF8yAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKARFjaGVja1Rva2Vuc0NoYW5nZQENbmV3QXNzZXRJZHNMaQQRY3VycmVudEFzc2V0SWRzTGkJALUJAgkBDHRyeUdldFN0cmluZwECD3N0YXRpY190b2tlbklkcwIBLAoBA3JlbQIFYWNjdW0HYXNzZXRJZAMJAAACCQDPCAIFDW5ld0Fzc2V0SWRzTGkFB2Fzc2V0SWQFBHVuaXQJAGQCBQVhY2N1bQABBQVhY2N1bQoBA2FkZAIFYWNjdW0HYXNzZXRJZAMJAAACCQDPCAIFEWN1cnJlbnRBc3NldElkc0xpBQdhc3NldElkBQR1bml0CQBkAgUFYWNjdW0AAQUFYWNjdW0EB3JlbW92ZWQKAAIkbAURY3VycmVudEFzc2V0SWRzTGkKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjRfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA3JlbQIF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JGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGY2XzICCQEFJGY2XzECCQEFJGY2XzECCQEFJGY2XzECCQEFJGY2XzECCQEFJGY2XzECCQEFJGY2XzECCQEFJGY2XzECCQEFJGY2XzECCQEFJGY2XzECCQEFJGY2XzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoJAGQCBQJhMQUCYTIBDHN3YXBJbnRlcm5hbAUHYXNzZXRJbghhc3NldE91dAhhbW91bnRJbgdtaW5pbXVtFHJlY2VpcGllbnRBZGRyZXNzU3RyBAhBbW91bnRJbgUIYW1vdW50SW4EB0Fzc2V0SW4JAQ1nZXRBc3NldEJ5dGVzAQUHYXNzZXRJbgQIQXNzZXRPdXQJAQ1nZXRBc3NldEJ5dGVzAQUIYXNzZXRPdXQEB3NjYWxlSW4JAGkCBQZTY2FsZTgJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICB3N0YXRpY18FB2Fzc2V0SW4CBl9zY2FsZQQIc2NhbGVPdXQJAGkCBQZTY2FsZTgJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICB3N0YXRpY18FCGFzc2V0T3V0AgZfc2NhbGUEDmZlZUFzc2V0T3V0U3RyCQEMdHJ5R2V0U3RyaW5nAQIPc3RhdGljX2ZlZVRva2VuBAtmZWVBc3NldE91dAMJAAACBQ5mZWVBc3NldE91dFN0cgIABQx3YXZlc0Fzc2V0SWQJAQ1nZXRBc3NldEJ5dGVzAQUOZmVlQXNzZXRPdXRTdHIEDkFzc2V0SW5CYWxhbmNlCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgdnbG9iYWxfCQEOZ2V0QXNzZXRTdHJpbmcBBQdBc3NldEluAghfYmFsYW5jZQQPQXNzZXRPdXRCYWxhbmNlCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgdnbG9iYWxfBQhhc3NldE91dAIIX2JhbGFuY2UEFEFzc2V0SW5CYWxhbmNlU2NhbGVkCQBoAgUOQXNzZXRJbkJhbGFuY2UFB3NjYWxlSW4EFUFzc2V0T3V0QmFsYW5jZVNjYWxlZAkAaAIFD0Fzc2V0T3V0QmFsYW5jZQUIc2NhbGVPdXQEC2ZlZUFtb3VudEluCQBrAwUIQW1vdW50SW4FA0ZlZQUIRmVlU2NhbGUEDWNsZWFuQW1vdW50SW4JAGUCBQhBbW91bnRJbgULZmVlQW1vdW50SW4EE2NsZWFuQW1vdW50SW5TY2FsZWQJAGgCBQ1jbGVhbkFtb3VudEluBQdzY2FsZUluBApBbW91bnRPdXQxCQESY2FsY3VsYXRlT3V0QW1vdW50BQUTY2xlYW5BbW91bnRJblNjYWxlZAUHQXNzZXRJbgUIQXNzZXRPdXQFFEFzc2V0SW5CYWxhbmNlU2NhbGVkBRVBc3NldE91dEJhbGFuY2VTY2FsZWQECUFtb3VudE91dAkAawMFCkFtb3VudE91dDEAAQUIc2NhbGVPdXQEEEFzc2V0T3V0QmFsYW5jZTIJAGUCBQ9Bc3NldE91dEJhbGFuY2UFCUFtb3VudE91dAQPQXNzZXRJbkJhbGFuY2UyCQBkAgUOQXNzZXRJbkJhbGFuY2UFDWNsZWFuQW1vdW50SW4EEmZlZUFzc2V0T3V0QmFsYW5jZQMJAAACBQtmZWVBc3NldE91dAUHQXNzZXRJbgUPQXNzZXRJbkJhbGFuY2UyAwkAAAIFC2ZlZUFzc2V0T3V0BQhBc3NldE91dAUQQXNzZXRPdXRCYWxhbmNlMgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIHZ2xvYmFsXwkBDmdldEFzc2V0U3RyaW5nAQULZmVlQXNzZXRPdXQCCF9iYWxhbmNlBAxmZWVBbW91bnRPdXQJARJjYWxjdWxhdGVPdXRBbW91bnQFBQtmZWVBbW91bnRJbgUHQXNzZXRJbgULZmVlQXNzZXRPdXQFDkFzc2V0SW5CYWxhbmNlBRJmZWVBc3NldE91dEJhbGFuY2UDCQBmAgUHbWluaW11bQUJQW1vdW50T3V0CQACAQIpYW1vdW50IHRvIHJlY2lldmUgaXMgbG93ZXIgdGhhbiBnaXZlbiBvbmUDCQAAAgUIQXNzZXRPdXQFB0Fzc2V0SW4JAAIBAhh0aGlzIHN3YXAgaXMgbm90IGFsbG93ZWQDCQBmAgAACQBlAgUPQXNzZXRPdXRCYWxhbmNlBQlBbW91bnRPdXQJAAIBAhtjb250cmFjdCBpcyBvdXQgb2YgcmVzZXJ2ZXMDCQEKaXNTaHV0ZG93bgAJAAIBAhNjb250cmFjdCBpcyBvbiBzdG9wBApjcmVhdG9yRmVlCQBrAwUMZmVlQW1vdW50T3V0AAEACgQLcHJvdG9jb2xGZWUJAGsDBQxmZWVBbW91bnRPdXQABAAKBAxuZXdCYWxhbmNlSW4FD0Fzc2V0SW5CYWxhbmNlMgQNbmV3QmFsYW5jZU91dAkAZQIFEEFzc2V0T3V0QmFsYW5jZTIDCQAAAgUIQXNzZXRPdXQFC2ZlZUFzc2V0T3V0BQxmZWVBbW91bnRPdXQAAAQSbmV3QmFsYW5jZUZlZUFzc2V0AwMJAQIhPQIFC2ZlZUFzc2V0T3V0BQdBc3NldEluCQECIT0CBQtmZWVBc3NldE91dAUIQXNzZXRPdXQHCQBlAgUSZmVlQXNzZXRPdXRCYWxhbmNlBQxmZWVBbW91bnRPdXQFBHVuaXQEDWFzc2V0SW5DaGFuZ2UJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIHZ2xvYmFsXwkBDmdldEFzc2V0U3RyaW5nAQUHQXNzZXRJbgIIX2JhbGFuY2UFDG5ld0JhbGFuY2VJbgQOYXNzZXRPdXRDaGFuZ2UJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIHZ2xvYmFsXwUIYXNzZXRPdXQCCF9iYWxhbmNlBQ1uZXdCYWxhbmNlT3V0BBFmZWVBc3NldE91dENoYW5nZQMJAQIhPQIFEm5ld0JhbGFuY2VGZWVBc3NldAUEdW5pdAkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAgdnbG9iYWxfCQEOZ2V0QXNzZXRTdHJpbmcBBQtmZWVBc3NldE91dAIIX2JhbGFuY2UJAQV2YWx1ZQEFEm5ld0JhbGFuY2VGZWVBc3NldAkBC1N0cmluZ0VudHJ5AgIFaGVsbG8CBXdvcmxkBA92b2x1bWVVc2RVcGRhdGUJARFjYWxjdWxhdGVVc2RWYWx1ZQMFB0Fzc2V0SW4FCEFtb3VudEluBQ5Bc3NldEluQmFsYW5jZQkAlAoCCQDMCAIFDmFzc2V0T3V0Q2hhbmdlCQDMCAIFDWFzc2V0SW5DaGFuZ2UJAMwIAgURZmVlQXNzZXRPdXRDaGFuZ2UJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUUcmVjZWlwaWVudEFkZHJlc3NTdHIFCUFtb3VudE91dAUIQXNzZXRPdXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBDHRyeUdldFN0cmluZwECEHN0YXRpY19wb29sT3duZXIFCmNyZWF0b3JGZWUFC2ZlZUFzc2V0T3V0CQDMCAIJAQxJbnRlZ2VyRW50cnkCAhRnbG9iYWxfZWFybmVkQnlPd25lcgkAZAIJAQ10cnlHZXRJbnRlZ2VyAQIUZ2xvYmFsX2Vhcm5lZEJ5T3duZXIFCmNyZWF0b3JGZWUJAMwIAgkBDEludGVnZXJFbnRyeQICEWdsb2JhbF92b2x1bWVfdXNkCQBkAgkBDXRyeUdldEludGVnZXIBAhFnbG9iYWxfdm9sdW1lX3VzZAUPdm9sdW1lVXNkVXBkYXRlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFC2ZlZXNBZGRyZXNzBQtwcm90b2NvbEZlZQULZmVlQXNzZXRPdXQFA25pbAUJQW1vdW50T3V0DAFpAQZkZUluaXQAAwkBCmlzU2h1dGRvd24ACQACAQITY29udHJhY3QgaXMgb24gc3RvcAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCmFkbWluIG9ubHkJAMwIAgkBDEludGVnZXJFbnRyeQICEGdsb2JhbF93YXNJbml0ZWQAAAUDbmlsAWkBCGluaXRQb29sBQpwb29sRG9tYWluCXBvb2xPd25lcgl0b2tlbk5hbWUJdG9rZW5EZXNjDXRva2VuUXVhbnRpdHkKARljYWxjdWxhdGVQb29sVG9rZW5zQW1vdW50AQhwYXltZW50cwoBB2hhbmRsZXICBWFjY3VtA3BtdAQHYXNzZXRJZAgFA3BtdAdhc3NldElkCgEIaGFuZGxlcjICBWFjY3VtAW4DCQAAAgUBbgUHYXNzZXRJZAkBBXZhbHVlAQkAzwgCBQhhc3NldElkcwUBbgUFYWNjdW0EBVRva2VuCgACJGwFCGFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAABCgEFJGY0XzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhoYW5kbGVyMgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmNF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjRfMgIJAQUkZjRfMQIJAQUkZjRfMQIJAQUkZjRfMQIJAQUkZjRfMQIJAQUkZjRfMQIJAQUkZjRfMQIJAQUkZjRfMQIJAQUkZjRfMQIJAQUkZjRfMQIJAQUkZjRfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgkAawMFBWFjY3VtCQBsBggFA3BtdAZhbW91bnQJAJEDAgUIRGVjaW1hbHMFBVRva2VuCQCRAwIFDUFzc2V0c1dlaWdodHMFBVRva2VuBRVBc3NldHNXZWlnaHRzRGVjaW1hbHMACAUFRkxPT1IFBlNjYWxlOAoAAiRsBQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFDlBvb2xUb2tlblNjYWxlCgEFJGY0XzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdoYW5kbGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGY0XzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmNF8yAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBARtZW1lCQDCCAUFCXRva2VuTmFtZQUJdG9rZW5EZXNjBQ10b2tlblF1YW50aXR5AAgHBAZtZW1lSWQJALgIAQUEbWVtZQQJbWVtZUlkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBBQZtZW1lSWQED2Fzc2V0V2VpZ2h0c1N0cgIJNTAwMCw1MDAwBA5iYXNlVG9rZW5JZFN0cgIFV0FWRVMEEHBvb2xPd25lckFkZHJlc3MJAQdBZGRyZXNzAQkA2QQBBQlwb29sT3duZXIEC2Fzc2V0SWRzU3RyCQCsAgICBldBVkVTLAUJbWVtZUlkU3RyBA1hc3NldElkc1N0ckxpCQC1CQIFC2Fzc2V0SWRzU3RyAgEsBAphc3NldElkc0xpCgACJGwFDWFzc2V0SWRzU3RyTGkKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjRfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBE2FkZEFzc2V0Qnl0ZXNUb0xpc3QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjRfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGY0XzICCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEA2ZlZQBkBAtmZWVBc3NldFN0cgoAAiRsBQ1hc3NldElkc1N0ckxpCgACJHMJAJADAQUCJGwKAAUkYWNjMAIACgEFJGY1XzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1jaGVja0ZlZUFzc2V0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGY1XzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmNV8yAgkBBSRmNV8xAgkBBSRmNV8xAgkBBSRmNV8xAgkBBSRmNV8xAgkBBSRmNV8xAgkBBSRmNV8xAgkBBSRmNV8xAgkBBSRmNV8xAgkBBSRmNV8xAgkBBSRmNV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQGYW1vdW50CAUDcG10BmFtb3VudAQIcG10QXNzZXQDCQAAAggFA3BtdAdhc3NldElkBQR1bml0AgVXQVZFUwkAAgECHXlvdSBoYXZlIHRvIGF0dGFjaCBzb21lIFdBVkVTAwkBAiE9AgUEdGhpcwUEdGhpcwkAAgECCmFkbWluIG9ubHkDCQAAAgULZmVlQXNzZXRTdHICAAkAAgECQXBvb2wgbXVzdCBoYXZlIG9uZSBvZiB0aGUgc3VwcG9ydGVkIGZlZSBhc3NldHMgaW4gdGhlIGNvbXBvc2l0aW9uAwkAZgIJALECAQUKcG9vbERvbWFpbgANCQACAQIVdG9vIGxhcmdlIHBvb2wgZG9tYWluAwMJAGYCBQNmZWUA9AMGCQBmAgAABQNmZWUJAAIBAi1mZWUgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDUwIGFuZCA1MDAgKDAuNS01JSkDCQEKaXNTaHV0ZG93bgAJAAIBAhNjb250cmFjdCBpcyBvbiBzdG9wBBFhc3NldFdlaWdodHNTdHJMaQkAtQkCBQ9hc3NldFdlaWdodHNTdHICASwED2Fzc2V0V2VpZ2h0c1N1bQoAAiRsBRFhc3NldFdlaWdodHNTdHJMaQoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmNl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDc3VtAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGY2XzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmNl8yAgkBBSRmNl8xAgkBBSRmNl8xAgkBBSRmNl8xAgkBBSRmNl8xAgkBBSRmNl8xAgkBBSRmNl8xAgkBBSRmNl8xAgkBBSRmNl8xAgkBBSRmNl8xAgkBBSRmNl8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKCgETYWRkVG9rZW5EYXRhRW50cmllcwIFYWNjdW0IYXNzZXROdW0DCQBnAgUIYXNzZXROdW0JAJADAQUKYXNzZXRJZHNMaQUFYWNjdW0EDWFzc2V0RGVjaW1hbHMACAkAzggCBQVhY2N1bQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICB3N0YXRpY18JAJEDAgUNYXNzZXRJZHNTdHJMaQUIYXNzZXROdW0CBl9zY2FsZQkAbAYACgAABQ1hc3NldERlY2ltYWxzAAAAAAUERE9XTgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICB3N0YXRpY18JAJEDAgUNYXNzZXRJZHNTdHJMaQUIYXNzZXROdW0CCV9kZWNpbWFscwUNYXNzZXREZWNpbWFscwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICB3N0YXRpY18JAJEDAgUNYXNzZXRJZHNTdHJMaQUIYXNzZXROdW0CB193ZWlnaHQJAQV2YWx1ZQEJALYJAQkAkQMCBRFhc3NldFdlaWdodHNTdHJMaQUIYXNzZXROdW0FA25pbAQRaW5pdGlhbFBvb2xUb2tlbnMJARljYWxjdWxhdGVQb29sVG9rZW5zQW1vdW50AQgFAWkIcGF5bWVudHMDCQECIT0CBQ9hc3NldFdlaWdodHNTdW0AkE4JAAIBAitzdW0gb2YgdG9rZW4gd2VpZ2h0cyBtdXN0IGJlIGVxdWFsIHRvIDEwMDAwAwkAAAIFEWluaXRpYWxQb29sVG9rZW5zAAAJAAIBAjJ5b3UgbmVlZCBhIGJpZ2dlciB0b2tlbnMgYW1vdW50IHRvIGxhdW5jaCB0aGUgcG9vbAQOcG9vbFRva2VuSXNzdWUJAMMIBwkArAICAgNQWiAFCnBvb2xEb21haW4CHVB1enpsZSBTd2FwOiBwb29sIGluZGV4IHRva2VuBRFpbml0aWFsUG9vbFRva2VucwURUG9vbFRva2VuRGVjaW1hbHMGBQR1bml0AAAEC3Bvb2xUb2tlbklkCQC4CAEFDnBvb2xUb2tlbklzc3VlCQCUCgIJAM4IAgkAzggCCQDOCAIKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmN18xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQETYWRkVG9rZW5EYXRhRW50cmllcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmN18yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjdfMgIJAQUkZjdfMQIJAQUkZjdfMQIJAQUkZjdfMQIJAQUkZjdfMQIJAQUkZjdfMQIJAQUkZjdfMQIJAQUkZjdfMQIJAQUkZjdfMQIJAQUkZjdfMQIJAQUkZjdfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgkAzAgCBQRtZW1lCQDMCAIJAQtTdHJpbmdFbnRyeQICD3N0YXRpY190b2tlbklkcwULYXNzZXRJZHNTdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgIPc3RhdGljX2ZlZVRva2VuBQtmZWVBc3NldFN0cgkAzAgCCQELU3RyaW5nRW50cnkCAhNzdGF0aWNfdG9rZW5XZWlnaHRzBQ9hc3NldFdlaWdodHNTdHIJAMwIAgkBDEludGVnZXJFbnRyeQICE3N0YXRpY190b2tlbnNBbW91bnQJAJADAQUKYXNzZXRJZHNMaQkAzAgCCQELU3RyaW5nRW50cnkCAhFzdGF0aWNfcG9vbERvbWFpbgUKcG9vbERvbWFpbgkAzAgCCQELU3RyaW5nRW50cnkCAhJzdGF0aWNfYmFzZVRva2VuSWQFDmJhc2VUb2tlbklkU3RyCQDMCAIJAQtTdHJpbmdFbnRyeQICEHN0YXRpY19wb29sT3duZXIFCXBvb2xPd25lcgkAzAgCCQEMSW50ZWdlckVudHJ5AgIKc3RhdGljX2ZlZQUDZmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgxzdGF0aWNfS011bHQFB1NjYWxlMTYJAMwIAgkBDEludGVnZXJFbnRyeQICE2dsb2JhbF93YXNQcmVJbml0ZWQAAQUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhRnbG9iYWxfV0FWRVNfYmFsYW5jZQUUSW5pdGFsV2F2ZXNMaXF1aWRpdHkJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAgdnbG9iYWxfBQltZW1lSWRTdHICCF9iYWxhbmNlBQ10b2tlblF1YW50aXR5BQNuaWwJAMwIAgUOcG9vbFRva2VuSXNzdWUJAMwIAgkBDEludGVnZXJFbnRyeQICF2dsb2JhbF9wb29sVG9rZW5fYW1vdW50BRFpbml0aWFsUG9vbFRva2VucwkAzAgCCQEMSW50ZWdlckVudHJ5AgIQZ2xvYmFsX3dhc0luaXRlZAABCQDMCAIJAQtCaW5hcnlFbnRyeQICE2dsb2JhbF9wb29sVG9rZW5faWQFC3Bvb2xUb2tlbklkCQDMCAIJAQtTdHJpbmdFbnRyeQICFnN0YXRpY19wb29sVG9rZW5faWRTdHIJAQ5nZXRBc3NldFN0cmluZwEFC3Bvb2xUb2tlbklkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgxfaW5kZXhTdGFrZWQFEWluaXRpYWxQb29sVG9rZW5zCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhJnbG9iYWxfaW5kZXhTdGFrZWQFEWluaXRpYWxQb29sVG9rZW5zBQNuaWwFCW1lbWVJZFN0cgFpAQRpbml0BQpwb29sRG9tYWluCXBvb2xPd25lcgl0b2tlbk5hbWUJdG9rZW5EZXNjDXRva2VuUXVhbnRpdHkDCQECIT0CCAUBaQZjYWxsZXIFDmZhY3RvcnlBY2NvdW50CQACAQIKYWRtaW4gb25seQQEaW52MQkA/AcEBQR0aGlzAghpbml0UG9vbAkAzAgCBQpwb29sRG9tYWluCQDMCAIFCXBvb2xPd25lcgkAzAgCBQl0b2tlbk5hbWUJAMwIAgUJdG9rZW5EZXNjCQDMCAIFDXRva2VuUXVhbnRpdHkFA25pbAUDbmlsAwkAAAIFBGludjEFBGludjEECW1lbWVJZFN0cgoAAUAFBGludjEDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nCAkBDHN3YXBJbnRlcm5hbAUCBVdBVkVTBQltZW1lSWRTdHIJAGUCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUUSW5pdGFsV2F2ZXNMaXF1aWRpdHkAAAkApQgBCAUBaQZjYWxsZXICXzEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELcmVkZWVtSW5kZXgBDHNlbmRUb09yaWdpbgQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQJAQx0cnlHZXRCaW5hcnkBAhNnbG9iYWxfcG9vbFRva2VuX2lkCQACAQIecGxlYXNlIGF0dGFjaCBwb29sIHNoYXJlIHRva2VuAwkBCmlzU2h1dGRvd24ACQACAQITY29udHJhY3QgaXMgb24gc3RvcAQRUFJlZGVlbWVkV2l0aE11bHQIBQNwbXQGYW1vdW50BBNQUmVkZWVtZWRXaXRoTm9NdWx0CQBuBAURUFJlZGVlbWVkV2l0aE11bHQJAQhnZXRLTXVsdAAFB1NjYWxlMTYFBERPV04EBnJlc3VsdAkBFmhhbmRsZVBvb2xUb2tlbnNSZWRlZW0CBRNQUmVkZWVtZWRXaXRoTm9NdWx0AwUMc2VuZFRvT3JpZ2luCAUBaQxvcmlnaW5DYWxsZXIIBQFpBmNhbGxlcgkAzggCBQZyZXN1bHQJAMwIAgkBBEJ1cm4CCQEMdHJ5R2V0QmluYXJ5AQITZ2xvYmFsX3Bvb2xUb2tlbl9pZAURUFJlZGVlbWVkV2l0aE11bHQJAMwIAgkBDEludGVnZXJFbnRyeQICF2dsb2JhbF9wb29sVG9rZW5fYW1vdW50CQBlAgkBDXRyeUdldEludGVnZXIBAhdnbG9iYWxfcG9vbFRva2VuX2Ftb3VudAURUFJlZGVlbWVkV2l0aE11bHQFA25pbAFpAQpzdGFrZUluZGV4AAQKYWRkcmVzc1N0cgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkCQEMdHJ5R2V0QmluYXJ5AQITZ2xvYmFsX3Bvb2xUb2tlbl9pZAkAAgECFHdyb25nIGFzc2V0IGF0dGFjaGVkCQEQaW5kZXhTdGFrZVJlc3VsdAIFCmFkZHJlc3NTdHIIBQNwbXQGYW1vdW50AWkBDXN0YWtlSW5kZXhGb3IBCmFkZHJlc3NTdHIEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkCQEMdHJ5R2V0QmluYXJ5AQITZ2xvYmFsX3Bvb2xUb2tlbl9pZAkAAgECFHdyb25nIGFzc2V0IGF0dGFjaGVkCQEQaW5kZXhTdGFrZVJlc3VsdAIFCmFkZHJlc3NTdHIIBQNwbXQGYW1vdW50AWkBDHVuc3Rha2VJbmRleAELaW5kZXhBbW91bnQECmFkZHJlc3NTdHIDCQECIT0CCQCzCQIFD2xheWVyMkFkZHJlc3NlcwkApQgBCAUBaQZjYWxsZXIFBHVuaXQJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyCQClCAEIBQFpBmNhbGxlcgQOaW5kZXhBdmFpbGFibGUJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphZGRyZXNzU3RyAgxfaW5kZXhTdGFrZWQDCQEKaXNTaHV0ZG93bgAJAAIBAhNjb250cmFjdCBpcyBvbiBzdG9wAwkAZgIFC2luZGV4QW1vdW50BQ5pbmRleEF2YWlsYWJsZQkAAgECJXlvdSBkb24ndCBoYXZlIGluZGV4IHRva2VucyBhdmFpbGFibGUDCQEKaXNTaHV0ZG93bgAJAAIBAhNjb250cmFjdCBpcyBvbiBzdG9wCQDOCAIICQELY2xhaW1SZXN1bHQBCQERQGV4dHJOYXRpdmUoMTA2MikBBQphZGRyZXNzU3RyAl8xCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCmFkZHJlc3NTdHICDF9pbmRleFN0YWtlZAkAZQIFDmluZGV4QXZhaWxhYmxlBQtpbmRleEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgISZ2xvYmFsX2luZGV4U3Rha2VkCQBlAgkBDXRyeUdldEludGVnZXIBAhJnbG9iYWxfaW5kZXhTdGFrZWQFC2luZGV4QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULaW5kZXhBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDU3KQECE2dsb2JhbF9wb29sVG9rZW5faWQFA25pbAFpARFjbGFpbUluZGV4UmV3YXJkcwADCQEKaXNTaHV0ZG93bgAJAAIBAhNjb250cmFjdCBpcyBvbiBzdG9wCQELY2xhaW1SZXN1bHQBCAUBaQZjYWxsZXIBaQENZXZhbHVhdGVDbGFpbQEEdXNlcgkAlAoCBQNuaWwICQELY2xhaW1SZXN1bHQBCQERQGV4dHJOYXRpdmUoMTA2MikBBQR1c2VyAl8yAWkBBHN3YXACCGFzc2V0T3V0B21pbmltdW0EA3BtdAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAkAAgECIXBsZWFzZSBhdHRhY2ggZXhhY3RseSBvbmUgcGF5bWVudAQIQW1vdW50SW4JAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAdBc3NldEluCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAQxzd2FwSW50ZXJuYWwFCQEOZ2V0QXNzZXRTdHJpbmcBBQdBc3NldEluBQhhc3NldE91dAUIQW1vdW50SW4FB21pbmltdW0JAKUIAQgFAWkGY2FsbGVyAWkBDHN3YXBSZWFkT25seQMHYXNzZXRJbghhc3NldE91dAhBbW91bnRJbgQHQXNzZXRJbgkBDWdldEFzc2V0Qnl0ZXMBBQdhc3NldEluBAhBc3NldE91dAkBDWdldEFzc2V0Qnl0ZXMBBQhhc3NldE91dAQHc2NhbGVJbgkAaQIFBlNjYWxlOAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIHc3RhdGljXwUHYXNzZXRJbgIGX3NjYWxlBAhzY2FsZU91dAkAaQIFBlNjYWxlOAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIHc3RhdGljXwUIYXNzZXRPdXQCBl9zY2FsZQQOZmVlQXNzZXRPdXRTdHIJAQx0cnlHZXRTdHJpbmcBAg9zdGF0aWNfZmVlVG9rZW4EC2ZlZUFzc2V0T3V0AwkAAAIFDmZlZUFzc2V0T3V0U3RyAgAFC3VzZG5Bc3NldElkCQENZ2V0QXNzZXRCeXRlcwEFDmZlZUFzc2V0T3V0U3RyBA5Bc3NldEluQmFsYW5jZQkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIHZ2xvYmFsXwkBDmdldEFzc2V0U3RyaW5nAQUHQXNzZXRJbgIIX2JhbGFuY2UED0Fzc2V0T3V0QmFsYW5jZQkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIHZ2xvYmFsXwUIYXNzZXRPdXQCCF9iYWxhbmNlBBRBc3NldEluQmFsYW5jZVNjYWxlZAkAaAIFDkFzc2V0SW5CYWxhbmNlBQdzY2FsZUluBBVBc3NldE91dEJhbGFuY2VTY2FsZWQJAGgCBQ9Bc3NldE91dEJhbGFuY2UFCHNjYWxlT3V0BAtmZWVBbW91bnRJbgkAawMFCEFtb3VudEluBQNGZWUFCEZlZVNjYWxlBA1jbGVhbkFtb3VudEluCQBlAgUIQW1vdW50SW4FC2ZlZUFtb3VudEluBBNjbGVhbkFtb3VudEluU2NhbGVkCQBoAgUNY2xlYW5BbW91bnRJbgUHc2NhbGVJbgQKQW1vdW50T3V0MQkBEmNhbGN1bGF0ZU91dEFtb3VudAUFE2NsZWFuQW1vdW50SW5TY2FsZWQFB0Fzc2V0SW4FCEFzc2V0T3V0BRRBc3NldEluQmFsYW5jZVNjYWxlZAUVQXNzZXRPdXRCYWxhbmNlU2NhbGVkBAlBbW91bnRPdXQJAGsDBQpBbW91bnRPdXQxAAEFCHNjYWxlT3V0BBBBc3NldE91dEJhbGFuY2UyCQBlAgUPQXNzZXRPdXRCYWxhbmNlBQlBbW91bnRPdXQED0Fzc2V0SW5CYWxhbmNlMgkAZAIFDkFzc2V0SW5CYWxhbmNlBQ1jbGVhbkFtb3VudEluBBJmZWVBc3NldE91dEJhbGFuY2UDCQAAAgULZmVlQXNzZXRPdXQFB0Fzc2V0SW4FD0Fzc2V0SW5CYWxhbmNlMgMJAAACBQtmZWVBc3NldE91dAUIQXNzZXRPdXQFEEFzc2V0T3V0QmFsYW5jZTIJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICB2dsb2JhbF8JAQ5nZXRBc3NldFN0cmluZwEFC2ZlZUFzc2V0T3V0AghfYmFsYW5jZQQMZmVlQW1vdW50T3V0CQESY2FsY3VsYXRlT3V0QW1vdW50BQULZmVlQW1vdW50SW4FB0Fzc2V0SW4FC2ZlZUFzc2V0T3V0BQ5Bc3NldEluQmFsYW5jZQUSZmVlQXNzZXRPdXRCYWxhbmNlAwkAAAIFCEFzc2V0T3V0BQdBc3NldEluCQACAQIYdGhpcyBzd2FwIGlzIG5vdCBhbGxvd2VkAwkAZgIAAAkAZQIFD0Fzc2V0T3V0QmFsYW5jZQUJQW1vdW50T3V0CQACAQIbY29udHJhY3QgaXMgb3V0IG9mIHJlc2VydmVzAwkBCmlzU2h1dGRvd24ACQACAQITY29udHJhY3QgaXMgb24gc3RvcAkAlAoCBQNuaWwFCUFtb3VudE91dAFpARF0cmFuc2Zlck93bmVyc2hpcAEPbmV3T3duZXJBZGRyZXNzAwkBAiE9AgkApQgBCAUBaQZjYWxsZXIJAQx0cnlHZXRTdHJpbmcBAhBzdGF0aWNfcG9vbE93bmVyCQACAQIndGhpcyBjYWxsIGF2YWlsYWJsZSBvbmx5IGZvciBwb29sIG93bmVyCQDMCAIJAQtTdHJpbmdFbnRyeQICEHN0YXRpY19wb29sT3duZXIFD25ld093bmVyQWRkcmVzcwUDbmlsAJCMMos=", "height": 3310735, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: C73KUhjcNi623LgtNESZtvhkBZTtC1StbT787SQ1P4VE Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let a = "PM-0.4.0"
5+
6+let b = valueOrElse(getString(this, "configAddress"), "3N91e7wHiV7QadDsx3RUJQxx1etqcAKrfHj")
7+
8+let c = if ((b == ""))
9+ then this
10+ else Address(fromBase58String(b))
11+
12+let d = 4
13+
14+let e = 10000
15+
16+let f = 100000000
17+
18+let g = 10000000000000000
19+
20+let h = 10000
21+
22+let i = 8
23+
24+let j = pow(10, 0, i, 0, 0, HALFUP)
25+
26+let k = f
27+
28+let l = valueOrElse(getInteger(c, "min_steps_amount"), 1)
29+
30+let m = valueOrElse(getInteger(c, "max_steps_amount"), 500)
31+
32+let n = valueOrElse(getInteger(c, "min_steps_interval"), 1)
33+
34+let o = valueOrElse(getInteger(c, "max_steps_interval"), 10000)
35+
36+let p = valueOrElse(getInteger(c, "min_weight"), 100)
37+
38+let q = valueOrElse(getInteger(c, "max_weight"), 9900)
39+
40+func r (s) = {
41+ let t = getInteger(this, s)
42+ if ($isInstanceOf(t, "Int"))
43+ then {
44+ let u = t
45+ u
46+ }
47+ else 0
48+ }
49+
50+
51+func v (s) = {
52+ let t = getBinary(this, s)
53+ if ($isInstanceOf(t, "ByteVector"))
54+ then {
55+ let u = t
56+ u
57+ }
58+ else base58''
59+ }
60+
61+
62+func w (s) = {
63+ let t = getString(this, s)
64+ if ($isInstanceOf(t, "String"))
65+ then {
66+ let u = t
67+ u
68+ }
69+ else ""
70+ }
71+
72+
73+func x (s) = {
74+ let t = getString(this, s)
75+ if ($isInstanceOf(t, "String"))
76+ then {
77+ let u = t
78+ u
79+ }
80+ else throw(("no such key in data storage: " + s))
81+ }
82+
83+
84+func y (z) = {
85+ let t = z
86+ if ($isInstanceOf(t, "ByteVector"))
87+ then {
88+ let u = t
89+ toBase58String(u)
90+ }
91+ else "WAVES"
92+ }
93+
94+
95+func A (B) = if ((B == "WAVES"))
96+ then unit
97+ else fromBase58String(B)
98+
99+
100+func C (z) = {
101+ let t = z
102+ if ($isInstanceOf(t, "ByteVector"))
103+ then {
104+ let D = t
105+ assetBalance(this, D)
106+ }
107+ else wavesBalance(this).available
108+ }
109+
110+
111+func E (F,G) = if ((G != ""))
112+ then (F ++ [A(G)])
113+ else F
114+
115+
116+func H (F,G) = (F ++ [r((("static_" + y(G)) + "_weight"))])
117+
118+
119+func I (F,G) = (F ++ [toString(r((("static_" + G) + "_weight")))])
120+
121+
122+func J (F,G) = (F ++ [r((("static_" + y(G)) + "_decimals"))])
123+
124+
125+func K (F,G) = (F ++ [r((("static_" + y(G)) + "_scale"))])
126+
127+
128+func L (F,G) = (F ++ [parseIntValue(G)])
129+
130+
131+let M = valueOrElse(getString(c, "usdnAssetIdStr"), "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
132+
133+let N = valueOrElse(getString(c, "puzzleAssetIdStr"), "HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS")
134+
135+let O = valueOrElse(getString(c, "usdtAssetIdStr"), "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ")
136+
137+let P = valueOrElse(getString(c, "usdtPptAssetIdStr"), "9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi")
138+
139+let Q = valueOrElse(getString(c, "romeAssetIdStr"), "AP4Cb5xLYGH6ZigHreCZHoXpQTWDkPsG2BHqfDUx6taJ")
140+
141+let R = "WAVES"
142+
143+let S = fromBase58String(M)
144+
145+let T = fromBase58String(N)
146+
147+let U = fromBase58String(O)
148+
149+let V = fromBase58String(P)
150+
151+let W = fromBase58String(Q)
152+
153+let X = unit
154+
155+let Y = [M, N, O, P, R, Q]
156+
157+let Z = Address(fromBase58String(valueOrElse(getString(c, "oracleAddress"), "3N91e7wHiV7QadDsx3RUJQxx1etqcAKrfHj")))
158+
159+let aa = Address(fromBase58String(valueOrElse(getString(c, "feesAddress"), "3N91e7wHiV7QadDsx3RUJQxx1etqcAKrfHj")))
160+
161+let ab = valueOrElse(getString(c, "shutdownAddress"), "3N91e7wHiV7QadDsx3RUJQxx1etqcAKrfHj")
162+
163+let ac = valueOrElse(getString(c, "layer2Addresses"), "3N91e7wHiV7QadDsx3RUJQxx1etqcAKrfHj")
164+
165+let ad = Address(fromBase58String(valueOrElse(getString(c, "coldMasterAddress"), "3N91e7wHiV7QadDsx3RUJQxx1etqcAKrfHj")))
166+
167+let ae = Address(fromBase58String(valueOrElse(getString(c, "factoryAddress"), "3MvowVxVnqTUZZyRL6i3vkHNGabjmFxkHBr")))
168+
169+let af = fromBase58String(valueOrElse(getString(c, "masterPubKey"), "4z8CKSYQBKkzx7PBb5uBP1YPa6YAHRNTApW1sQVHT5eU"))
170+
171+let ag = r("static_tokensAmount")
172+
173+let ah = {
174+ let ai = split(w("static_tokenIds"), ",")
175+ let aj = size(ai)
176+ let ak = nil
177+ func al (am,an) = if ((an >= aj))
178+ then am
179+ else E(am, ai[an])
180+
181+ func ao (am,an) = if ((an >= aj))
182+ then am
183+ else throw("List size exceeds 10")
184+
185+ ao(al(al(al(al(al(al(al(al(al(al(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
186+ }
187+
188+let ap = {
189+ let ai = ah
190+ let aj = size(ai)
191+ let ak = nil
192+ func aq (am,an) = if ((an >= aj))
193+ then am
194+ else H(am, ai[an])
195+
196+ func ar (am,an) = if ((an >= aj))
197+ then am
198+ else throw("List size exceeds 10")
199+
200+ ar(aq(aq(aq(aq(aq(aq(aq(aq(aq(aq(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
201+ }
202+
203+let as = {
204+ let ai = ah
205+ let aj = size(ai)
206+ let ak = nil
207+ func at (am,an) = if ((an >= aj))
208+ then am
209+ else J(am, ai[an])
210+
211+ func au (am,an) = if ((an >= aj))
212+ then am
213+ else throw("List size exceeds 10")
214+
215+ au(at(at(at(at(at(at(at(at(at(at(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
216+ }
217+
218+let av = {
219+ let ai = ah
220+ let aj = size(ai)
221+ let ak = nil
222+ func aw (am,an) = if ((an >= aj))
223+ then am
224+ else K(am, ai[an])
225+
226+ func ax (am,an) = if ((an >= aj))
227+ then am
228+ else throw("List size exceeds 10")
229+
230+ ax(aw(aw(aw(aw(aw(aw(aw(aw(aw(aw(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
231+ }
232+
233+let ay = r("static_fee")
234+
235+let az = ah
236+
237+func aA () = {
238+ let aB = addressFromString(ab)
239+ if ((aB == unit))
240+ then false
241+ else {
242+ let t = getBoolean(value(aB), "is_shutdown")
243+ if ($isInstanceOf(t, "Boolean"))
244+ then {
245+ let aC = t
246+ aC
247+ }
248+ else false
249+ }
250+ }
251+
252+
253+func aD (aE) = {
254+ let aF = y(ah[aE])
255+ r((("global_" + aF) + "_balance"))
256+ }
257+
258+
259+func aG () = {
260+ let t = getInteger("static_KMult")
261+ if ($isInstanceOf(t, "Int"))
262+ then {
263+ let aC = t
264+ aC
265+ }
266+ else g
267+ }
268+
269+
270+func aH () = fraction(r("global_poolToken_amount"), aG(), g)
271+
272+
273+func aI (B) = {
274+ let t = getInteger(Z, (B + "_twap5B"))
275+ if ($isInstanceOf(t, "Int"))
276+ then {
277+ let aC = t
278+ aC
279+ }
280+ else 1000000
281+ }
282+
283+
284+func aJ (z,aK,aL) = {
285+ let aM = r((("static_" + y(z)) + "_weight"))
286+ let aN = w("static_feeToken")
287+ let aO = getIntegerValue(this, (("static_" + aN) + "_scale"))
288+ let aP = value(indexOf(ah, A(aN)))
289+ let aQ = ap[aP]
290+ let aR = r((("global_" + aN) + "_balance"))
291+ let aS = fraction(aK, (aR / aQ), (aL / aM))
292+ let aT = aI(aN)
293+ fraction(aS, aT, aO)
294+ }
295+
296+
297+func aU (aV,aW) = {
298+ func aX (F,aY) = {
299+ let aZ = r((("global_" + y(aY)) + "_balance"))
300+ let ba = aH()
301+ let bb = r((("static_" + y(aY)) + "_scale"))
302+ let bc = fraction((toBigInt((ba - aV)) * toBigInt(f)), toBigInt(f), toBigInt(ba), DOWN)
303+ let aK = toInt(fraction((toBigInt(g) - bc), toBigInt(aZ), toBigInt(g), CEILING))
304+ (F ++ [IntegerEntry((("global_" + y(aY)) + "_balance"), (aZ - aK)), ScriptTransfer(aW, aK, aY)])
305+ }
306+
307+ let ai = ah
308+ let aj = size(ai)
309+ let ak = nil
310+ func bd (am,an) = if ((an >= aj))
311+ then am
312+ else aX(am, ai[an])
313+
314+ func be (am,an) = if ((an >= aj))
315+ then am
316+ else throw("List size exceeds 10")
317+
318+ be(bd(bd(bd(bd(bd(bd(bd(bd(bd(bd(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
319+ }
320+
321+
322+func bf (bg,bh,bi,bj,bk) = {
323+ let bl = value(indexOf(ah, bh))
324+ let bm = value(indexOf(ah, bi))
325+ if ((bl == bm))
326+ then bg
327+ else fraction(bk, ((f * f) - toInt(pow(fraction((toBigInt(bj) * toBigInt(10000)), toBigInt((f * f)), (toBigInt((bj + bg)) * toBigInt(10000)), HALFUP), 16, toBigInt(fraction(ap[bl], 1000000000000, ap[bm])), 12, 16, CEILING))), (f * f), HALFEVEN)
328+ }
329+
330+
331+func bn (z,B,aL,bo) = {
332+ let bp = r("global_indexStaked")
333+ let bq = bo
334+ let br = (C(z) - aL)
335+ let bs = if ((br > bq))
336+ then br
337+ else bq
338+ let bt = (bs - bq)
339+ let bu = if ((bp == 0))
340+ then 0
341+ else fraction(bt, f, bp)
342+ let bv = r((("global_lastCheck_" + B) + "_interest"))
343+ (bv + bu)
344+ }
345+
346+
347+func bw (bx) = {
348+ let by = toString(bx)
349+ let bz = r((by + "_indexStaked"))
350+ func bA (F,z) = {
351+ let B = y(z)
352+ let aL = r((("global_" + y(z)) + "_balance"))
353+ let bo = r((("global_lastCheck_" + B) + "_earnings"))
354+ let bB = bn(z, B, aL, bo)
355+ let bs = max([bo, (C(z) - aL)])
356+ let bC = fraction(bz, (bB - r((((by + "_lastCheck_") + B) + "_interest"))), f)
357+ let bD = if ((bC == 0))
358+ then nil
359+ else [ScriptTransfer(bx, bC, z)]
360+ $Tuple2(((F._1 ++ bD) ++ [IntegerEntry((("global_lastCheck_" + B) + "_earnings"), (bs - bC)), IntegerEntry((("global_lastCheck_" + B) + "_interest"), bB), IntegerEntry((((by + "_lastCheck_") + B) + "_interest"), bB)]), (F._2 + aJ(z, bC, aL)))
361+ }
362+
363+ let F = {
364+ let ai = az
365+ let aj = size(ai)
366+ let ak = $Tuple2(nil, 0)
367+ func bd (am,an) = if ((an >= aj))
368+ then am
369+ else bA(am, ai[an])
370+
371+ func be (am,an) = if ((an >= aj))
372+ then am
373+ else throw("List size exceeds 10")
374+
375+ be(bd(bd(bd(bd(bd(bd(bd(bd(bd(bd(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
376+ }
377+ $Tuple2((F._1 ++ [IntegerEntry((by + "_claimedRewardUSD"), (r((by + "_claimedRewardUSD")) + F._2)), IntegerEntry((by + "_lastClaim"), lastBlock.timestamp)]), F._2)
378+ }
379+
380+
381+func bE (by,aK) = {
382+ let bF = bw(addressFromStringValue(by))._1
383+ (bF ++ [IntegerEntry((by + "_indexStaked"), (r((by + "_indexStaked")) + aK)), IntegerEntry("global_indexStaked", (r("global_indexStaked") + aK))])
384+ }
385+
386+
387+func bG (F,bH) = (F + parseIntValue(bH))
388+
389+
390+func bI (F,bJ) = if (if ((indexOf(Y, bJ) != unit))
391+ then (F == "")
392+ else false)
393+ then bJ
394+ else F
395+
396+
397+func bK (bL) = {
398+ let bM = split(w("static_tokenIds"), ",")
399+ let bN = bL
400+ func bO (F,z) = if ((indexOf(bN, z) == unit))
401+ then (F ++ [z])
402+ else F
403+
404+ let ai = bM
405+ let aj = size(ai)
406+ let ak = bN
407+ func bd (am,an) = if ((an >= aj))
408+ then am
409+ else bO(am, ai[an])
410+
411+ func be (am,an) = if ((an >= aj))
412+ then am
413+ else throw("List size exceeds 10")
414+
415+ be(bd(bd(bd(bd(bd(bd(bd(bd(bd(bd(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
416+ }
417+
418+
419+func bP (bL) = {
420+ let bM = split(w("static_tokenIds"), ",")
421+ func bQ (F,z) = if ((indexOf(bL, z) == unit))
422+ then (F + 1)
423+ else F
424+
425+ func bR (F,z) = if ((indexOf(bM, z) == unit))
426+ then (F + 1)
427+ else F
428+
429+ let bS = {
430+ let ai = bM
431+ let aj = size(ai)
432+ let ak = 0
433+ func bd (am,an) = if ((an >= aj))
434+ then am
435+ else bQ(am, ai[an])
436+
437+ func be (am,an) = if ((an >= aj))
438+ then am
439+ else throw("List size exceeds 10")
440+
441+ be(bd(bd(bd(bd(bd(bd(bd(bd(bd(bd(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
442+ }
443+ let bT = {
444+ let ai = bL
445+ let aj = size(ai)
446+ let ak = 0
447+ func bU (am,an) = if ((an >= aj))
448+ then am
449+ else bR(am, ai[an])
450+
451+ func bV (am,an) = if ((an >= aj))
452+ then am
453+ else throw("List size exceeds 10")
454+
455+ bV(bU(bU(bU(bU(bU(bU(bU(bU(bU(bU(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
456+ }
457+ (bS + bT)
458+ }
459+
460+
461+func bW (bX,bY) = {
462+ func bZ (F,bJ) = if ((0 >= bJ.amount))
463+ then throw(((("Too low payment amount for " + y(bJ.assetId)) + ": ") + toString(bJ.amount)))
464+ else (F ++ [y(bJ.assetId)])
465+
466+ let ca = {
467+ let ai = bY
468+ let aj = size(ai)
469+ let ak = nil
470+ func bd (am,an) = if ((an >= aj))
471+ then am
472+ else bZ(am, ai[an])
473+
474+ func be (am,an) = if ((an >= aj))
475+ then am
476+ else throw("List size exceeds 10")
477+
478+ be(bd(bd(bd(bd(bd(bd(bd(bd(bd(bd(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
479+ }
480+ func cb (F,bJ) = if ((indexOf(bX, bJ) == unit))
481+ then throw(((bJ + " asset is present in payments, but is not in new assets: ") + makeString(bX, ",")))
482+ else (F + 1)
483+
484+ func cc (F,bJ) = if ((indexOf(ca, bJ) == unit))
485+ then throw(((bJ + " asset is present in new assets, but is not in payments: ") + makeString(ca, ",")))
486+ else (F + 1)
487+
488+ let cd = {
489+ let ai = ca
490+ let aj = size(ai)
491+ let ak = 0
492+ func bU (am,an) = if ((an >= aj))
493+ then am
494+ else cb(am, ai[an])
495+
496+ func bV (am,an) = if ((an >= aj))
497+ then am
498+ else throw("List size exceeds 10")
499+
500+ bV(bU(bU(bU(bU(bU(bU(bU(bU(bU(bU(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
501+ }
502+ let ce = {
503+ let ai = bX
504+ let aj = size(ai)
505+ let ak = 0
506+ func cf (am,an) = if ((an >= aj))
507+ then am
508+ else cc(am, ai[an])
509+
510+ func cg (am,an) = if ((an >= aj))
511+ then am
512+ else throw("List size exceeds 10")
513+
514+ cg(cf(cf(cf(cf(cf(cf(cf(cf(cf(cf(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
515+ }
516+ (cd + ce)
517+ }
518+
519+
520+func ch (bh,bi,ci,cj,ck) = {
521+ let bg = ci
522+ let cl = A(bh)
523+ let cm = A(bi)
524+ let cn = (f / r((("static_" + bh) + "_scale")))
525+ let co = (f / r((("static_" + bi) + "_scale")))
526+ let cp = w("static_feeToken")
527+ let cq = if ((cp == ""))
528+ then X
529+ else A(cp)
530+ let cr = r((("global_" + y(cl)) + "_balance"))
531+ let cs = r((("global_" + bi) + "_balance"))
532+ let ct = (cr * cn)
533+ let cu = (cs * co)
534+ let cv = fraction(bg, ay, h)
535+ let cw = (bg - cv)
536+ let cx = (cw * cn)
537+ let cy = bf(cx, cl, cm, ct, cu)
538+ let cz = fraction(cy, 1, co)
539+ let cA = (cs - cz)
540+ let cB = (cr + cw)
541+ let cC = if ((cq == cl))
542+ then cB
543+ else if ((cq == cm))
544+ then cA
545+ else r((("global_" + y(cq)) + "_balance"))
546+ let cD = bf(cv, cl, cq, cr, cC)
547+ if ((cj > cz))
548+ then throw("amount to recieve is lower than given one")
549+ else if ((cm == cl))
550+ then throw("this swap is not allowed")
551+ else if ((0 > (cs - cz)))
552+ then throw("contract is out of reserves")
553+ else if (aA())
554+ then throw("contract is on stop")
555+ else {
556+ let cE = fraction(cD, 1, 10)
557+ let cF = fraction(cD, 4, 10)
558+ let cG = cB
559+ let cH = (cA - (if ((cm == cq))
560+ then cD
561+ else 0))
562+ let cI = if (if ((cq != cl))
563+ then (cq != cm)
564+ else false)
565+ then (cC - cD)
566+ else unit
567+ let cJ = IntegerEntry((("global_" + y(cl)) + "_balance"), cG)
568+ let cK = IntegerEntry((("global_" + bi) + "_balance"), cH)
569+ let cL = if ((cI != unit))
570+ then IntegerEntry((("global_" + y(cq)) + "_balance"), value(cI))
571+ else StringEntry("hello", "world")
572+ let cM = aJ(cl, bg, cr)
573+ $Tuple2([cK, cJ, cL, ScriptTransfer(addressFromStringValue(ck), cz, cm), ScriptTransfer(addressFromStringValue(w("static_poolOwner")), cE, cq), IntegerEntry("global_earnedByOwner", (r("global_earnedByOwner") + cE)), IntegerEntry("global_volume_usd", (r("global_volume_usd") + cM)), ScriptTransfer(aa, cF, cq)], cz)
574+ }
575+ }
576+
577+
578+@Callable(cN)
579+func deInit () = if (aA())
580+ then throw("contract is on stop")
581+ else if ((cN.caller != this))
582+ then throw("admin only")
583+ else [IntegerEntry("global_wasInited", 0)]
584+
585+
586+
587+@Callable(cN)
588+func initPool (cO,cP,cQ,cR,cS) = {
589+ func cT (bY) = {
590+ func bA (F,cU) = {
591+ let z = cU.assetId
592+ func cV (F,bH) = if ((bH == z))
593+ then value(indexOf(ah, bH))
594+ else F
595+
596+ let cW = {
597+ let ai = ah
598+ let aj = size(ai)
599+ let ak = 1
600+ func bd (am,an) = if ((an >= aj))
601+ then am
602+ else cV(am, ai[an])
603+
604+ func be (am,an) = if ((an >= aj))
605+ then am
606+ else throw("List size exceeds 10")
607+
608+ be(bd(bd(bd(bd(bd(bd(bd(bd(bd(bd(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
609+ }
610+ fraction(F, pow(cU.amount, as[cW], ap[cW], d, 8, FLOOR), f)
611+ }
612+
613+ let ai = bY
614+ let aj = size(ai)
615+ let ak = j
616+ func bd (am,an) = if ((an >= aj))
617+ then am
618+ else bA(am, ai[an])
619+
620+ func be (am,an) = if ((an >= aj))
621+ then am
622+ else throw("List size exceeds 10")
623+
624+ be(bd(bd(bd(bd(bd(bd(bd(bd(bd(bd(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
625+ }
626+
627+ let cX = Issue(cQ, cR, cS, 8, false)
628+ let cY = calculateAssetId(cX)
629+ let cZ = y(cY)
630+ let da = "5000,5000"
631+ let db = "WAVES"
632+ let dc = Address(fromBase58String(cP))
633+ let dd = ("WAVES," + cZ)
634+ let de = split(dd, ",")
635+ let df = {
636+ let ai = de
637+ let aj = size(ai)
638+ let ak = nil
639+ func bd (am,an) = if ((an >= aj))
640+ then am
641+ else E(am, ai[an])
642+
643+ func be (am,an) = if ((an >= aj))
644+ then am
645+ else throw("List size exceeds 10")
646+
647+ be(bd(bd(bd(bd(bd(bd(bd(bd(bd(bd(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
648+ }
649+ let dg = 100
650+ let aN = {
651+ let ai = de
652+ let aj = size(ai)
653+ let ak = ""
654+ func bU (am,an) = if ((an >= aj))
655+ then am
656+ else bI(am, ai[an])
657+
658+ func bV (am,an) = if ((an >= aj))
659+ then am
660+ else throw("List size exceeds 10")
661+
662+ bV(bU(bU(bU(bU(bU(bU(bU(bU(bU(bU(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
663+ }
664+ let cU = cN.payments[0]
665+ let aK = cU.amount
666+ let dh = if ((cU.assetId == unit))
667+ then "WAVES"
668+ else throw("you have to attach some WAVES")
669+ if ((this != this))
670+ then throw("admin only")
671+ else if ((aN == ""))
672+ then throw("pool must have one of the supported fee assets in the composition")
673+ else if ((size(cO) > 13))
674+ then throw("too large pool domain")
675+ else if (if ((dg > 500))
676+ then true
677+ else (0 > dg))
678+ then throw("fee value must be between 50 and 500 (0.5-5%)")
679+ else if (aA())
680+ then throw("contract is on stop")
681+ else {
682+ let di = split(da, ",")
683+ let dj = {
684+ let ai = di
685+ let aj = size(ai)
686+ let ak = 0
687+ func cf (am,an) = if ((an >= aj))
688+ then am
689+ else bG(am, ai[an])
690+
691+ func cg (am,an) = if ((an >= aj))
692+ then am
693+ else throw("List size exceeds 10")
694+
695+ cg(cf(cf(cf(cf(cf(cf(cf(cf(cf(cf(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
696+ }
697+ func dk (F,dl) = if ((dl >= size(df)))
698+ then F
699+ else {
700+ let dm = 8
701+ (F ++ [IntegerEntry((("static_" + de[dl]) + "_scale"), pow(10, 0, dm, 0, 0, DOWN)), IntegerEntry((("static_" + de[dl]) + "_decimals"), dm), IntegerEntry((("static_" + de[dl]) + "_weight"), value(parseInt(di[dl])))])
702+ }
703+
704+ let dn = cT(cN.payments)
705+ if ((dj != 10000))
706+ then throw("sum of token weights must be equal to 10000")
707+ else if ((dn == 0))
708+ then throw("you need a bigger tokens amount to launch the pool")
709+ else {
710+ let do = Issue(("PZ " + cO), "Puzzle Swap: pool index token", dn, i, true, unit, 0)
711+ let dp = calculateAssetId(do)
712+ $Tuple2(((({
713+ let ai = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
714+ let aj = size(ai)
715+ let ak = nil
716+ func dq (am,an) = if ((an >= aj))
717+ then am
718+ else dk(am, ai[an])
719+
720+ func dr (am,an) = if ((an >= aj))
721+ then am
722+ else throw("List size exceeds 10")
723+
724+ dr(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
725+ } ++ [cX, StringEntry("static_tokenIds", dd), StringEntry("static_feeToken", aN), StringEntry("static_tokenWeights", da), IntegerEntry("static_tokensAmount", size(df)), StringEntry("static_poolDomain", cO), StringEntry("static_baseTokenId", db), StringEntry("static_poolOwner", cP), IntegerEntry("static_fee", dg), IntegerEntry("static_KMult", g), IntegerEntry("global_wasPreInited", 1)]) ++ [IntegerEntry("global_WAVES_balance", k), IntegerEntry((("global_" + cZ) + "_balance"), cS)]) ++ [do, IntegerEntry("global_poolToken_amount", dn), IntegerEntry("global_wasInited", 1), BinaryEntry("global_poolToken_id", dp), StringEntry("static_poolToken_idStr", y(dp)), IntegerEntry((toString(cN.caller) + "_indexStaked"), dn), IntegerEntry("global_indexStaked", dn)]), cZ)
726+ }
727+ }
728+ }
729+
730+
731+
732+@Callable(cN)
733+func init (cO,cP,cQ,cR,cS) = if ((cN.caller != ae))
734+ then throw("admin only")
735+ else {
736+ let ds = invoke(this, "initPool", [cO, cP, cQ, cR, cS], nil)
737+ if ((ds == ds))
738+ then {
739+ let cZ = {
740+ let dt = ds
741+ if ($isInstanceOf(dt, "String"))
742+ then dt
743+ else throw(($getType(dt) + " couldn't be cast to String"))
744+ }
745+ ch("WAVES", cZ, (cN.payments[0].amount - k), 0, toString(cN.caller))._1
746+ }
747+ else throw("Strict value is not equal to itself.")
748+ }
749+
750+
751+
752+@Callable(cN)
753+func redeemIndex (du) = {
754+ let cU = cN.payments[0]
755+ if ((cU.assetId != v("global_poolToken_id")))
756+ then throw("please attach pool share token")
757+ else if (aA())
758+ then throw("contract is on stop")
759+ else {
760+ let dv = cU.amount
761+ let dw = fraction(dv, aG(), g, DOWN)
762+ let bN = aU(dw, if (du)
763+ then cN.originCaller
764+ else cN.caller)
765+ (bN ++ [Burn(v("global_poolToken_id"), dv), IntegerEntry("global_poolToken_amount", (r("global_poolToken_amount") - dv))])
766+ }
767+ }
768+
769+
770+
771+@Callable(cN)
772+func stakeIndex () = {
773+ let by = toString(cN.originCaller)
774+ let cU = cN.payments[0]
775+ if ((value(cU.assetId) != v("global_poolToken_id")))
776+ then throw("wrong asset attached")
777+ else bE(by, cU.amount)
778+ }
779+
780+
781+
782+@Callable(cN)
783+func stakeIndexFor (by) = {
784+ let cU = cN.payments[0]
785+ if ((value(cU.assetId) != v("global_poolToken_id")))
786+ then throw("wrong asset attached")
787+ else bE(by, cU.amount)
788+ }
789+
790+
791+
792+@Callable(cN)
793+func unstakeIndex (dx) = {
794+ let by = if ((indexOf(ac, toString(cN.caller)) != unit))
795+ then toString(cN.originCaller)
796+ else toString(cN.caller)
797+ let dy = r((by + "_indexStaked"))
798+ if (aA())
799+ then throw("contract is on stop")
800+ else if ((dx > dy))
801+ then throw("you don't have index tokens available")
802+ else if (aA())
803+ then throw("contract is on stop")
804+ else (bw(addressFromStringValue(by))._1 ++ [IntegerEntry((by + "_indexStaked"), (dy - dx)), IntegerEntry("global_indexStaked", (r("global_indexStaked") - dx)), ScriptTransfer(cN.caller, dx, getBinaryValue("global_poolToken_id"))])
805+ }
806+
807+
808+
809+@Callable(cN)
810+func claimIndexRewards () = if (aA())
811+ then throw("contract is on stop")
812+ else bw(cN.caller)
813+
814+
815+
816+@Callable(cN)
817+func evaluateClaim (dz) = $Tuple2(nil, bw(addressFromStringValue(dz))._2)
818+
819+
820+
821+@Callable(cN)
822+func swap (bi,cj) = {
823+ let cU = if ((size(cN.payments) == 1))
824+ then value(cN.payments[0])
825+ else throw("please attach exactly one payment")
826+ let bg = value(cN.payments[0].amount)
827+ let cl = cN.payments[0].assetId
828+ ch(y(cl), bi, bg, cj, toString(cN.caller))
829+ }
830+
831+
832+
833+@Callable(cN)
834+func swapReadOnly (bh,bi,bg) = {
835+ let cl = A(bh)
836+ let cm = A(bi)
837+ let cn = (f / r((("static_" + bh) + "_scale")))
838+ let co = (f / r((("static_" + bi) + "_scale")))
839+ let cp = w("static_feeToken")
840+ let cq = if ((cp == ""))
841+ then S
842+ else A(cp)
843+ let cr = r((("global_" + y(cl)) + "_balance"))
844+ let cs = r((("global_" + bi) + "_balance"))
845+ let ct = (cr * cn)
846+ let cu = (cs * co)
847+ let cv = fraction(bg, ay, h)
848+ let cw = (bg - cv)
849+ let cx = (cw * cn)
850+ let cy = bf(cx, cl, cm, ct, cu)
851+ let cz = fraction(cy, 1, co)
852+ let cA = (cs - cz)
853+ let cB = (cr + cw)
854+ let cC = if ((cq == cl))
855+ then cB
856+ else if ((cq == cm))
857+ then cA
858+ else r((("global_" + y(cq)) + "_balance"))
859+ let cD = bf(cv, cl, cq, cr, cC)
860+ if ((cm == cl))
861+ then throw("this swap is not allowed")
862+ else if ((0 > (cs - cz)))
863+ then throw("contract is out of reserves")
864+ else if (aA())
865+ then throw("contract is on stop")
866+ else $Tuple2(nil, cz)
867+ }
868+
869+
870+
871+@Callable(cN)
872+func transferOwnership (dA) = if ((toString(cN.caller) != w("static_poolOwner")))
873+ then throw("this call available only for pool owner")
874+ else [StringEntry("static_poolOwner", dA)]
875+
876+

github/deemru/w8io/169f3d6 
77.20 ms