tx · DKDS1cCHdcgWWoYxcd3DzfNhKLknA1CUcA3kfdMuADk2

3Mx4GxjrawhKHBgMKH9C5Hmbj8ePZDrs8ed:  -0.02100000 Waves

2024.01.23 13:45 [2944097] smart account 3Mx4GxjrawhKHBgMKH9C5Hmbj8ePZDrs8ed > SELF 0.00000000 Waves

{ "type": 13, "id": "DKDS1cCHdcgWWoYxcd3DzfNhKLknA1CUcA3kfdMuADk2", "fee": 2100000, "feeAssetId": null, "timestamp": 1706006682638, "version": 2, "chainId": 84, "sender": "3Mx4GxjrawhKHBgMKH9C5Hmbj8ePZDrs8ed", "senderPublicKey": "9DpEgmia9fGpxtGGDeSMtER4g9qB7WQPPYTKTHzqSFuX", "proofs": [ "5RtVTyAfEj8avgGnGxMypGkd1jTVGVR9DtTGPFWKJTRWy4rT9beYx8yvcxiBaUFTYN2BQhAyzS6uRfMqo8HsFduc" ], "script": "base64:BgJiCAISBgoECAgICBIJCgcICAgICAgIEgUKAwEIARIGCgQBCAgBEgQKAgEIEgMKAQgSBAoCAQQSAwoBCBIFCgMBCAESCwoJAQgIAQEBAQEEEgQKAggIEgASABIDCgEIEgMKAQhLAAlTRVBBUkFUT1ICAl9fAAhLRVlfSU5JVAIESU5JVAAMS0VZX01VTFRJU0lHAghNVUxUSVNJRwAKS0VZX1NUQVRVUwIGU1RBVFVTAApLRVlfUEFVU0VEAgZQQVVTRUQACktFWV9QQVVTRVICBlBBVVNFUgAMS0VZX0VYRUNVVE9SAghFWEVDVVRPUgAQS0VZX1JPT1RfQURBUFRFUgIMUk9PVF9BREFQVEVSABNLRVlfQ0FMTEVSX0NPTlRSQUNUAg9DQUxMRVJfQ09OVFJBQ1QACUtFWV9DSEFJTgIFQ0hBSU4AC0tFWV9CSU5ESU5HAgdCSU5ESU5HAAdLRVlfRkVFAgNGRUUAEUtFWV9GRUVfUkVDSVBJRU5UAg1GRUVfUkVDSVBJRU5UABhLRVlfUkVGRVJSRVJfRkVFX1BFUkNFTlQCFFJFRkVSUkVSX0ZFRV9QRVJDRU5UAB1LRVlfQ1JPU1NDSEFJTl9QT09MX0NPTlRSQUNUUwIZQ1JPU1NDSEFJTl9QT09MX0NPTlRSQUNUUwAZS0VZX0JSSURHRV9BU1NFVF9DT05UUkFDVAIVQlJJREdFX0FTU0VUX0NPTlRSQUNUAAlGVU5DX01JTlQCBG1pbnQADEZVTkNfREVQT1NJVAIHZGVwb3NpdAATRlVOQ19SRUxFQVNFX1RPS0VOUwINcmVsZWFzZVRva2VucwARRlVOQ19HRVRfQVNTRVRfSUQCCmdldEFzc2V0SWQAEUZVTkNfR0VUX0RFQ0lNQUxTAgtnZXREZWNpbWFscwAFV0FWRVMCBVdBVkVTAA5XQVZFU19ERUNJTUFMUwAIAAhERUNJTUFMUwAGAA5QRVJDRU5UX0ZBQ1RPUgDAhD0AEE1BWF9SRUZFUlJFUl9GRUUAwJoMAAdNQVhfSU5UAP//////////fwEQX3ZhbGlkYXRlQWRkcmVzcwIIYWRkcmVzc18EZXJyXwQHJG1hdGNoMAkApggBBQhhZGRyZXNzXwMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBgkAAgEFBGVycl8BDl92YWxpZGF0ZUFzc2V0Aghhc3NldElkXwRlcnJfBAckbWF0Y2gwCQDsBwEJANkEAQUIYXNzZXRJZF8DCQABAgUHJG1hdGNoMAIFQXNzZXQEAWEFByRtYXRjaDAGCQACAQUEZXJyXwEMX3ZhbGlkYXRlSW50BAR2YWxfDmxvd2VyQm91bmRhcnlfDnVwcGVyQm91bmRhcnlfBGVycl8DAwkAZgIFDmxvd2VyQm91bmRhcnlfBQR2YWxfBgkAZgIFBHZhbF8FDnVwcGVyQm91bmRhcnlfCQACAQUEZXJyXwYBDV92YWxpZGF0ZUJvb2wDBHZhbF8HdGFyZ2V0XwRlcnJfAwkBAiE9AgUEdmFsXwUHdGFyZ2V0XwkAAgEFBGVycl8GARVfdmFsaWRhdGVQYXltZW50c1NpemUDCXBheW1lbnRzXwd0YXJnZXRfBGVycl8DCQECIT0CCQCQAwEFCXBheW1lbnRzXwUHdGFyZ2V0XwkAAgEFBGVycl8GARFfdmFsaWRhdGVSZWZlcnJlcgIJcmVmZXJyZXJfBGVycl8DCQECIT0CBQlyZWZlcnJlcl8CAAkBEF92YWxpZGF0ZUFkZHJlc3MCBQlyZWZlcnJlcl8FBGVycl8GARJfbm9ybWFsaXplRGVjaW1hbHMDB2Ftb3VudF8Pc291cmNlRGVjaW1hbHNfD3RhcmdldERlY2ltYWxzXwMJAGcCBQ9zb3VyY2VEZWNpbWFsc18FD3RhcmdldERlY2ltYWxzXwkAaQIFB2Ftb3VudF8JAGwGAAoAAAkAZQIFD3NvdXJjZURlY2ltYWxzXwUPdGFyZ2V0RGVjaW1hbHNfAAAAAAUERE9XTgkAaAIFB2Ftb3VudF8JAGwGAAoAAAkAZQIFD3RhcmdldERlY2ltYWxzXwUPc291cmNlRGVjaW1hbHNfAAAAAAUERE9XTgEJX2xvYWRJbml0AAQHJG1hdGNoMAkAoAgBBQhLRVlfSU5JVAMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFhBQckbWF0Y2gwBQFhBwEJX3NhdmVJbml0AQdpc0luaXRfCQDMCAIJAQxCb29sZWFuRW50cnkCBQhLRVlfSU5JVAUHaXNJbml0XwUDbmlsAQpfbG9hZFBhdXNlAAQHJG1hdGNoMAkAoAgBBQpLRVlfUEFVU0VEAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWEFByRtYXRjaDAFAWEHAQpfc2F2ZVBhdXNlAQlpc1BhdXNlZF8JAMwIAgkBDEJvb2xlYW5FbnRyeQIFCktFWV9QQVVTRUQFCWlzUGF1c2VkXwUDbmlsAQtfbG9hZFBhdXNlcgAEByRtYXRjaDAJAKIIAQUKS0VZX1BBVVNFUgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAQdBZGRyZXNzAQEAAQtfc2F2ZVBhdXNlcgEHcGF1c2VyXwkAzAgCCQELU3RyaW5nRW50cnkCBQpLRVlfUEFVU0VSCQClCAEFB3BhdXNlcl8FA25pbAENX2xvYWRNdWx0aXNpZwAEByRtYXRjaDAJAKIIAQUMS0VZX01VTFRJU0lHAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQUBYQkBB0FkZHJlc3MBAQABDV9zYXZlTXVsdGlzaWcBCW11bHRpc2lnXwkAzAgCCQELU3RyaW5nRW50cnkCBQxLRVlfTVVMVElTSUcJAKUIAQUJbXVsdGlzaWdfBQNuaWwBDV9sb2FkRXhlY3V0b3IABAckbWF0Y2gwCQCiCAEFDEtFWV9FWEVDVVRPUgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAQdBZGRyZXNzAQEAAQ1fc2F2ZUV4ZWN1dG9yAQlleGVjdXRvcl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUMS0VZX0VYRUNVVE9SCQClCAEFCWV4ZWN1dG9yXwUDbmlsARNfbG9hZENhbGxlckNvbnRyYWN0AAQHJG1hdGNoMAkAoggBBRNLRVlfQ0FMTEVSX0NPTlRSQUNUAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIAARNfc2F2ZUNhbGxlckNvbnRyYWN0AQdjYWxsZXJfCQDMCAIJAQtTdHJpbmdFbnRyeQIFE0tFWV9DQUxMRVJfQ09OVFJBQ1QFB2NhbGxlcl8FA25pbAEKX2xvYWRDaGFpbgEIY2hhaW5JZF8EByRtYXRjaDAJAKAIAQkAuQkCCQDMCAIFCUtFWV9DSEFJTgkAzAgCCQCkAwEFCGNoYWluSWRfBQNuaWwFCVNFUEFSQVRPUgMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFhBQckbWF0Y2gwBQFhBwEKX3NhdmVDaGFpbgIIY2hhaW5JZF8EdmFsXwkAzAgCCQEMQm9vbGVhbkVudHJ5AgkAuQkCCQDMCAIFCUtFWV9DSEFJTgkAzAgCCQCkAwEFCGNoYWluSWRfBQNuaWwFCVNFUEFSQVRPUgUEdmFsXwUDbmlsAQxfbG9hZEJpbmRpbmcCEWV4ZWN1dGlvbkNoYWluSWRfCGFzc2V0SWRfBAckbWF0Y2gwCQCiCAEJALkJAgkAzAgCBQtLRVlfQklORElORwkAzAgCCQCkAwEFEWV4ZWN1dGlvbkNoYWluSWRfCQDMCAIJANgEAQUIYXNzZXRJZF8FA25pbAUJU0VQQVJBVE9SAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAQGc3RydWN0CQC1CQIFAWEFCVNFUEFSQVRPUgkAmgoICQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFBnN0cnVjdAAACQCRAwIFBnN0cnVjdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RydWN0AAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdHJ1Y3QAAwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0cnVjdAAECQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RydWN0AAUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdHJ1Y3QABgMJAAACCQCRAwIFBnN0cnVjdAAHAgExBgcJAJoKCAkBB0FkZHJlc3MBAQACAAAAAAAAAAAAAAAHAQxfc2F2ZUJpbmRpbmcDEWV4ZWN1dGlvbkNoYWluSWRfCGFzc2V0SWRfCGJpbmRpbmdfCQDMCAIJAQtTdHJpbmdFbnRyeQIJALkJAgkAzAgCBQtLRVlfQklORElORwkAzAgCCQCkAwEFEWV4ZWN1dGlvbkNoYWluSWRfCQDMCAIJANgEAQUIYXNzZXRJZF8FA25pbAUJU0VQQVJBVE9SCQC5CQIJAMwIAgkApQgBCAUIYmluZGluZ18CXzEJAMwIAggFCGJpbmRpbmdfAl8yCQDMCAIJAKQDAQgFCGJpbmRpbmdfAl8zCQDMCAIJAKQDAQgFCGJpbmRpbmdfAl80CQDMCAIJAKQDAQgFCGJpbmRpbmdfAl81CQDMCAIJAKQDAQgFCGJpbmRpbmdfAl82CQDMCAIJAKQDAQgFCGJpbmRpbmdfAl83CQDMCAIDCAUIYmluZGluZ18CXzgCATECATAFA25pbAUJU0VQQVJBVE9SBQNuaWwBCF9sb2FkRmVlAQhhc3NldElkXwQHJG1hdGNoMAkAnwgBCQC5CQIJAMwIAgUHS0VZX0ZFRQkAzAgCCQDYBAEFCGFzc2V0SWRfBQNuaWwFCVNFUEFSQVRPUgMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAEIX3NhdmVGZWUCCGFzc2V0SWRfBHZhbF8JAMwIAgkBDEludGVnZXJFbnRyeQIJALkJAgkAzAgCBQdLRVlfRkVFCQDMCAIJANgEAQUIYXNzZXRJZF8FA25pbAUJU0VQQVJBVE9SBQR2YWxfBQNuaWwBEF9sb2FkUm9vdEFkYXB0ZXIABAckbWF0Y2gwCQCiCAEFEEtFWV9ST09UX0FEQVBURVIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFhCQEHQWRkcmVzcwEBAAEQX3NhdmVSb290QWRhcHRlcgEIYWRhcHRlcl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUQS0VZX1JPT1RfQURBUFRFUgkApQgBBQhhZGFwdGVyXwUDbmlsARFfbG9hZEZlZVJlY2lwaWVudAAEByRtYXRjaDAJAKIIAQURS0VZX0ZFRV9SRUNJUElFTlQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFhCQEHQWRkcmVzcwEBAAERX3NhdmVGZWVSZWNpcGllbnQBBHZhbF8JAMwIAgkBC1N0cmluZ0VudHJ5AgURS0VZX0ZFRV9SRUNJUElFTlQJAKUIAQUEdmFsXwUDbmlsARdfbG9hZFJlZmVycmVyRmVlUGVyY2VudAIRZXhlY3V0aW9uQ2hhaW5JZF8JcmVmZXJyZXJfBAckbWF0Y2gwCQCfCAEJALkJAgkAzAgCBRhLRVlfUkVGRVJSRVJfRkVFX1BFUkNFTlQJAMwIAgkApAMBBRFleGVjdXRpb25DaGFpbklkXwkAzAgCCQClCAEFCXJlZmVycmVyXwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAABF19zYXZlUmVmZXJyZXJGZWVQZXJjZW50AxFleGVjdXRpb25DaGFpbklkXwlyZWZlcnJlcl8EdmFsXwkAzAgCCQEMSW50ZWdlckVudHJ5AgkAuQkCCQDMCAIFGEtFWV9SRUZFUlJFUl9GRUVfUEVSQ0VOVAkAzAgCCQCkAwEFEWV4ZWN1dGlvbkNoYWluSWRfCQDMCAIJAKUIAQUJcmVmZXJyZXJfBQNuaWwFCVNFUEFSQVRPUgUEdmFsXwUDbmlsARxfbG9hZENyb3NzY2hhaW5Qb29sQ29udHJhY3RzAAQHJG1hdGNoMAkAoggBBR1LRVlfQ1JPU1NDSEFJTl9QT09MX0NPTlRSQUNUUwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDADCQBmAgkAsQIBBQFhAAAJAL0JAgUBYQUJU0VQQVJBVE9SBQNuaWwFA25pbAEcX3NhdmVDcm9zc2NoYWluUG9vbENvbnRyYWN0cwEKY29udHJhY3RzXwkAzAgCCQELU3RyaW5nRW50cnkCBR1LRVlfQ1JPU1NDSEFJTl9QT09MX0NPTlRSQUNUUwkAuwkCBQpjb250cmFjdHNfBQlTRVBBUkFUT1IFA25pbAEYX2xvYWRCcmlkZ2VBc3NldENvbnRyYWN0ARdjcm9zc2NoYWluUG9vbENvbnRyYWN0XwQHJG1hdGNoMAkAoggBCQC5CQIJAMwIAgUZS0VZX0JSSURHRV9BU1NFVF9DT05UUkFDVAkAzAgCCQClCAEFF2Nyb3NzY2hhaW5Qb29sQ29udHJhY3RfBQNuaWwFCVNFUEFSQVRPUgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAQdBZGRyZXNzAQEAARhfc2F2ZUJyaWRnZUFzc2V0Q29udHJhY3QCF2Nyb3NzY2hhaW5Qb29sQ29udHJhY3RfFGJyaWRnZUFzc2V0Q29udHJhY3RfCQDMCAIJAQtTdHJpbmdFbnRyeQIJALkJAgkAzAgCBRlLRVlfQlJJREdFX0FTU0VUX0NPTlRSQUNUCQDMCAIJAKUIAQUXY3Jvc3NjaGFpblBvb2xDb250cmFjdF8FA25pbAUJU0VQQVJBVE9SCQClCAEFFGJyaWRnZUFzc2V0Q29udHJhY3RfBQNuaWwBEV9vbmx5VGhpc0NvbnRyYWN0AQdjYWxsZXJfAwkBAiE9AgUHY2FsbGVyXwUEdGhpcwkAAgECGV9vbmx5VGhpc0NvbnRyYWN0OiByZXZlcnQGARBfd2hlbk11bHRpc2lnU2V0AAMJAAACCQENX2xvYWRNdWx0aXNpZwAJAQdBZGRyZXNzAQEACQACAQIYX3doZW5NdWx0aXNpZ1NldDogcmV2ZXJ0BgETX3doZW5Ob3RJbml0aWFsaXplZAADCQEJX2xvYWRJbml0AAkAAgECG193aGVuTm90SW5pdGlhbGl6ZWQ6IHJldmVydAYBEF93aGVuSW5pdGlhbGl6ZWQAAwkBASEBCQEJX2xvYWRJbml0AAkAAgECGF93aGVuSW5pdGlhbGl6ZWQ6IHJldmVydAYBDl93aGVuTm90UGF1c2VkAAMJAQpfbG9hZFBhdXNlAAkAAgECFl93aGVuTm90UGF1c2VkOiByZXZlcnQGAQtfd2hlblBhdXNlZAADCQEBIQEJAQpfbG9hZFBhdXNlAAkAAgECE193aGVuUGF1c2VkOiByZXZlcnQGAQtfb25seVBhdXNlcgEHY2FsbGVyXwMJAQIhPQIFB2NhbGxlcl8JAQtfbG9hZFBhdXNlcgAJAAIBAhNfb25seVBhdXNlcjogcmV2ZXJ0BgEGX2FzSW50AQR2YWxfBAckbWF0Y2gwBQR2YWxfAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQkAAgECDl9hc0ludDogcmV2ZXJ0AQhfYXNCeXRlcwEEdmFsXwQHJG1hdGNoMAUEdmFsXwMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFhBQckbWF0Y2gwBQFhCQACAQIQX2FzQnl0ZXM6IHJldmVydAEJX2FzU3RyaW5nAQR2YWxfBAckbWF0Y2gwBQR2YWxfAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQkAAgECEV9hc1N0cmluZzogcmV2ZXJ0ARFfdmFsaWRhdGVFeGVjdXRvcgIEdmFsXwRlcnJfAwkBAiE9AgUEdmFsXwkBDV9sb2FkRXhlY3V0b3IACQACAQUEZXJyXwYBD192YWxpZGF0ZUNhbGxlcgIEdmFsXwRlcnJfAwkBAiE9AgUEdmFsXwkBE19sb2FkQ2FsbGVyQ29udHJhY3QACQACAQUEZXJyXwYBDl92YWxpZGF0ZUNoYWluAhFleGVjdXRpb25DaGFpbklkXwRlcnJfAwkBASEBCQEKX2xvYWRDaGFpbgEFEWV4ZWN1dGlvbkNoYWluSWRfCQACAQUEZXJyXwYPAWkBBGluaXQECWV4ZWN1dG9yXwhhZGFwdGVyXwdwYXVzZXJfDWZlZVJlY2lwaWVudF8EA2VycgMDAwMDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQETX3doZW5Ob3RJbml0aWFsaXplZAAHCQEQX3doZW5NdWx0aXNpZ1NldAAHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFCWV4ZWN1dG9yXwIWaW5pdDogaW52YWxpZCBleGVjdXRvcgcJARBfdmFsaWRhdGVBZGRyZXNzAgUIYWRhcHRlcl8CFWluaXQ6IGludmFsaWQgYWRhcHRlcgcJARBfdmFsaWRhdGVBZGRyZXNzAgUHcGF1c2VyXwIUaW5pdDogaW52YWxpZCBwYXVzZXIHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFDWZlZVJlY2lwaWVudF8CGmluaXQ6IGludmFsaWQgZmVlUmVjaXBpZW50BwMJAAACBQNlcnIFA2VycgkAlAoCCQDOCAIJAM4IAgkAzggCCQDOCAIJAQlfc2F2ZUluaXQBBgkBDV9zYXZlRXhlY3V0b3IBCQERQGV4dHJOYXRpdmUoMTA2MikBBQlleGVjdXRvcl8JARBfc2F2ZVJvb3RBZGFwdGVyAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUIYWRhcHRlcl8JAQtfc2F2ZVBhdXNlcgEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB3BhdXNlcl8JARFfc2F2ZUZlZVJlY2lwaWVudAEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDWZlZVJlY2lwaWVudF8FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKbWludFRva2VucwcPY2FsbGVyQ29udHJhY3RfDmFzc2V0Q29udHJhY3RfB2Ftb3VudF8KcmVjaXBpZW50Xw5nYXNsZXNzUmV3YXJkXwlyZWZlcnJlcl8McmVmZXJyZXJGZWVfBAZhbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBBQdhbW91bnRfAhdtaW50OiBhbW91bnQgaXMgbm90IEludAQNZ2FzbGVzc1Jld2FyZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEFDmdhc2xlc3NSZXdhcmRfAh5taW50OiBnYXNsZXNzUmV3YXJkIGlzIG5vdCBJbnQEC3JlZmVycmVyRmVlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQUMcmVmZXJyZXJGZWVfAhxtaW50OiByZWZlcnJlckZlZSBpcyBub3QgSW50BANlcnIDAwMDAwMDAwkBEF93aGVuSW5pdGlhbGl6ZWQACQEOX3doZW5Ob3RQYXVzZWQABwkBEF92YWxpZGF0ZUFkZHJlc3MCBQ5hc3NldENvbnRyYWN0XwIcbWludDogaW52YWxpZCBhc3NldCBjb250cmFjdAcJARFfdmFsaWRhdGVFeGVjdXRvcgIIBQFpBmNhbGxlcgIWbWludDogaW52YWxpZCBleGVjdXRvcgcJAQ9fdmFsaWRhdGVDYWxsZXICBQ9jYWxsZXJDb250cmFjdF8CFG1pbnQ6IGludmFsaWQgY2FsbGVyBwkBEF92YWxpZGF0ZUFkZHJlc3MCBQpyZWNpcGllbnRfAh9taW50OiBpbnZhbGlkIHJlY2lwaWVudCBhZGRyZXNzBwkBDF92YWxpZGF0ZUludAQFBmFtb3VudAAABQdNQVhfSU5UAhRtaW50OiBpbnZhbGlkIGFtb3VudAcJAQxfdmFsaWRhdGVJbnQEBQ1nYXNsZXNzUmV3YXJkAAAFB01BWF9JTlQCG21pbnQ6IGludmFsaWQgZ2FzbGVzc1Jld2FyZAcJAQxfdmFsaWRhdGVJbnQEBQtyZWZlcnJlckZlZQAABQdNQVhfSU5UAhptaW50OiBpbnZhbGlkIHJlZmVycmVyIGZlZQcDCQAAAgUDZXJyBQNlcnIEDSR0MDExOTI1MTIyMTQDCQEPY29udGFpbnNFbGVtZW50AgkBHF9sb2FkQ3Jvc3NjaGFpblBvb2xDb250cmFjdHMABQ5hc3NldENvbnRyYWN0XwkAlAoCBgkBGF9sb2FkQnJpZGdlQXNzZXRDb250cmFjdAEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDmFzc2V0Q29udHJhY3RfCQCUCgIHCQERQGV4dHJOYXRpdmUoMTA2MikBBQ5hc3NldENvbnRyYWN0XwQVaXNDcm9zc2NoYWluUG9vbEFzc2V0CAUNJHQwMTE5MjUxMjIxNAJfMQQTYnJpZGdlQXNzZXRDb250cmFjdAgFDSR0MDExOTI1MTIyMTQCXzIEB2Fzc2V0SWQJAQhfYXNCeXRlcwEJAPwHBAUTYnJpZGdlQXNzZXRDb250cmFjdAURRlVOQ19HRVRfQVNTRVRfSUQFA25pbAUDbmlsAwkAAAIFB2Fzc2V0SWQFB2Fzc2V0SWQECGRlY2ltYWxzCQEGX2FzSW50AQkA/AcEBRNicmlkZ2VBc3NldENvbnRyYWN0BRFGVU5DX0dFVF9ERUNJTUFMUwUDbmlsBQNuaWwDCQAAAgUIZGVjaW1hbHMFCGRlY2ltYWxzBBBub3JtYWxpemVkQW1vdW50CQESX25vcm1hbGl6ZURlY2ltYWxzAwUGYW1vdW50BQhERUNJTUFMUwUIZGVjaW1hbHMEEW5vcm1hbGl6ZWRHYXNsZXNzCQESX25vcm1hbGl6ZURlY2ltYWxzAwUNZ2FzbGVzc1Jld2FyZAUIREVDSU1BTFMFCGRlY2ltYWxzBA0kdDAxMjU1MTEyOTg4BAckbWF0Y2gwCQCmCAEFCXJlZmVycmVyXwMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBA5yZWZlcmVyQWRkcmVzcwUHJG1hdGNoMAQVbm9ybWFsaXplZFJlZmVycmVyRmVlCQESX25vcm1hbGl6ZURlY2ltYWxzAwULcmVmZXJyZXJGZWUFCERFQ0lNQUxTBQhkZWNpbWFscwkAlAoCBRVub3JtYWxpemVkUmVmZXJyZXJGZWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUOcmVmZXJlckFkZHJlc3MFFW5vcm1hbGl6ZWRSZWZlcnJlckZlZQUHYXNzZXRJZAUDbmlsCQCUCgIAAAUDbmlsBBVub3JtYWxpemVkUmVmZXJyZXJGZWUIBQ0kdDAxMjU1MTEyOTg4Al8xBA9yZWZlcnJlckFjdGlvbnMIBQ0kdDAxMjU1MTEyOTg4Al8yBA5taW50SW52b2NhdGlvbgkA/AcEBRNicmlkZ2VBc3NldENvbnRyYWN0BQlGVU5DX01JTlQJAMwIAgkAZAIFEG5vcm1hbGl6ZWRBbW91bnQFFW5vcm1hbGl6ZWRSZWZlcnJlckZlZQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAAIFDm1pbnRJbnZvY2F0aW9uBQ5taW50SW52b2NhdGlvbgQNJHQwMTMxMjcxMzQ2NQMDCQBmAgURbm9ybWFsaXplZEdhc2xlc3MAAAkBAiE9AgkBEUBleHRyTmF0aXZlKDEwNjIpAQUKcmVjaXBpZW50XwgFAWkMb3JpZ2luQ2FsbGVyBwkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpDG9yaWdpbkNhbGxlcgURbm9ybWFsaXplZEdhc2xlc3MFB2Fzc2V0SWQFA25pbAURbm9ybWFsaXplZEdhc2xlc3MJAJQKAgUDbmlsAAAEDmdhc2xlc3NBY3Rpb25zCAUNJHQwMTMxMjcxMzQ2NQJfMQQVbm9ybWFsaXplZEdhc2xlc3NVc2VkCAUNJHQwMTMxMjcxMzQ2NQJfMgQHYWN0aW9ucwMFFWlzQ3Jvc3NjaGFpblBvb2xBc3NldAQLcG9vbEFzc2V0SWQJANkEAQkBCV9hc1N0cmluZwEJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUOYXNzZXRDb250cmFjdF8FEUZVTkNfR0VUX0FTU0VUX0lEBQNuaWwFA25pbAMJAAACBQtwb29sQXNzZXRJZAULcG9vbEFzc2V0SWQEDWJhbGFuY2VCZWZvcmUJAPAHAgUEdGhpcwULcG9vbEFzc2V0SWQDCQAAAgUNYmFsYW5jZUJlZm9yZQUNYmFsYW5jZUJlZm9yZQQRZGVwb3NpdEludm9jYXRpb24JAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUOYXNzZXRDb250cmFjdF8FDEZVTkNfREVQT1NJVAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJZAkAZQIFEG5vcm1hbGl6ZWRBbW91bnQFFW5vcm1hbGl6ZWRHYXNsZXNzVXNlZAUDbmlsAwkAAAIFEWRlcG9zaXRJbnZvY2F0aW9uBRFkZXBvc2l0SW52b2NhdGlvbgQMYmFsYW5jZUFmdGVyCQDwBwIFBHRoaXMFC3Bvb2xBc3NldElkAwkAAAIFDGJhbGFuY2VBZnRlcgUMYmFsYW5jZUFmdGVyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCnJlY2lwaWVudF8JAGUCBQxiYWxhbmNlQWZ0ZXIFDWJhbGFuY2VCZWZvcmUFC3Bvb2xBc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUKcmVjaXBpZW50XwkAZQIFEG5vcm1hbGl6ZWRBbW91bnQFFW5vcm1hbGl6ZWRHYXNsZXNzVXNlZAUHYXNzZXRJZAUDbmlsCQCUCgIJAM4IAgkAzggCBQdhY3Rpb25zBQ5nYXNsZXNzQWN0aW9ucwUPcmVmZXJyZXJBY3Rpb25zBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmJ1cm5Ub2tlbnMDEWV4ZWN1dGlvbkNoYWluSWRfCnJlY2lwaWVudF8OZ2FzbGVzc1Jld2FyZF8EA2VycgMDAwMDCQEQX3doZW5Jbml0aWFsaXplZAAJAQ5fd2hlbk5vdFBhdXNlZAAHCQEOX3ZhbGlkYXRlQ2hhaW4CBRFleGVjdXRpb25DaGFpbklkXwIjYnVyblRva2VuczogaW52YWxpZCBleGVjdXRpb24gY2hhaW4HCQEVX3ZhbGlkYXRlUGF5bWVudHNTaXplAwgFAWkIcGF5bWVudHMAAQIWYnVyblRva2Vuczogbm8gcGF5bWVudAcJAQxfdmFsaWRhdGVJbnQEBQ5nYXNsZXNzUmV3YXJkXwAABQdNQVhfSU5UAiFidXJuVG9rZW5zOiBpbnZhbGlkIGdhc2xlc3NSZXdhcmQHCQEMX3ZhbGlkYXRlSW50BAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAAUHTUFYX0lOVAIiYnVyblRva2VuczogaW52YWxpZCBwYXltZW50IGFtb3VudAcDCQAAAgUDZXJyBQNlcnIEBmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEB2Fzc2V0SWQEByRtYXRjaDAICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFhBQckbWF0Y2gwBQFhCQACAQIZYnVyblRva2VuczogaW52YWxpZCBhc3NldAQHYmluZGluZwkBDF9sb2FkQmluZGluZwIFEWV4ZWN1dGlvbkNoYWluSWRfBQdhc3NldElkBA1hc3NldENvbnRyYWN0CAUHYmluZGluZwJfMQQOZXhlY3V0aW9uQXNzZXQIBQdiaW5kaW5nAl8yBAltaW5BbW91bnQIBQdiaW5kaW5nAl8zBAZtaW5GZWUIBQdiaW5kaW5nAl80BAx0aHJlc2hvbGRGZWUIBQdiaW5kaW5nAl81BBBiZWZvcmVQZXJjZW50RmVlCAUHYmluZGluZwJfNgQPYWZ0ZXJQZXJjZW50RmVlCAUHYmluZGluZwJfNwQHZW5hYmxlZAgFB2JpbmRpbmcCXzgEBGVycjEDAwkBEF92YWxpZGF0ZUFkZHJlc3MCCQClCAEFDWFzc2V0Q29udHJhY3QCG2J1cm5Ub2tlbnM6IG5vIHN1Y2ggYmluZGluZwkBDF92YWxpZGF0ZUludAQFBmFtb3VudAUJbWluQW1vdW50BQdNQVhfSU5UAhlidXJuVG9rZW5zOiBsZXNzIHRoYW4gbWluBwkBDV92YWxpZGF0ZUJvb2wDBQdlbmFibGVkBgIdYnVyblRva2VuczogdG9rZW4gaXMgZGlzYWJsZWQHAwkAAAIFBGVycjEFBGVycjEEDWFzc2V0RGVjaW1hbHMJAQZfYXNJbnQBCQD8BwQFDWFzc2V0Q29udHJhY3QFEUZVTkNfR0VUX0RFQ0lNQUxTBQNuaWwFA25pbAMJAAACBQ1hc3NldERlY2ltYWxzBQ1hc3NldERlY2ltYWxzBAdwZXJjZW50AwkAZgIFBmFtb3VudAUMdGhyZXNob2xkRmVlBQ9hZnRlclBlcmNlbnRGZWUFEGJlZm9yZVBlcmNlbnRGZWUEA2ZlZQkAZAIFBm1pbkZlZQkAawMFBmFtb3VudAUHcGVyY2VudAUOUEVSQ0VOVF9GQUNUT1IEBGVycjIJAQxfdmFsaWRhdGVJbnQEBQZhbW91bnQJAGQCBQNmZWUAAQUHTUFYX0lOVAIgYnVyblRva2VuczogZmVlIG1vcmUgdGhhbiBhbW91bnQDCQAAAgUEZXJyMgUEZXJyMgQMYW1vdW50VG9TZW5kCQBlAgUGYW1vdW50BQNmZWUEBGVycjMJAQxfdmFsaWRhdGVJbnQEBQxhbW91bnRUb1NlbmQJAGQCBQ5nYXNsZXNzUmV3YXJkXwABBQdNQVhfSU5UAiNidXJuVG9rZW5zOiByZXdhcmQgbW9yZSB0aGFuIGFtb3VudAMJAAACBQRlcnIzBQRlcnIzBAl1cGRhdGVGZWUJAGQCCQEIX2xvYWRGZWUBBQdhc3NldElkBQNmZWUEEG5vcm1hbGl6ZWRBbW91bnQJARJfbm9ybWFsaXplRGVjaW1hbHMDBQxhbW91bnRUb1NlbmQFDWFzc2V0RGVjaW1hbHMFCERFQ0lNQUxTBBFub3JtYWxpemVkR2FzbGVzcwkBEl9ub3JtYWxpemVEZWNpbWFscwMFDmdhc2xlc3NSZXdhcmRfBQ1hc3NldERlY2ltYWxzBQhERUNJTUFMUwQKaW52b2NhdGlvbgkA/AcECQEQX2xvYWRSb290QWRhcHRlcgAFE0ZVTkNfUkVMRUFTRV9UT0tFTlMJAMwIAgURZXhlY3V0aW9uQ2hhaW5JZF8JAMwIAgUOZXhlY3V0aW9uQXNzZXQJAMwIAgUQbm9ybWFsaXplZEFtb3VudAkAzAgCBQpyZWNpcGllbnRfCQDMCAIFEW5vcm1hbGl6ZWRHYXNsZXNzBQNuaWwFA25pbAMJAAACBQppbnZvY2F0aW9uBQppbnZvY2F0aW9uCQCUCgIJAM4IAgkBCF9zYXZlRmVlAgUHYXNzZXRJZAUJdXBkYXRlRmVlCQDMCAIJAQRCdXJuAgUHYXNzZXRJZAUMYW1vdW50VG9TZW5kBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMYnVyblRva2Vuc1YyBBFleGVjdXRpb25DaGFpbklkXwpyZWNpcGllbnRfCXJlZmVycmVyXw5nYXNsZXNzUmV3YXJkXwQDZXJyAwMDAwMDCQEQX3doZW5Jbml0aWFsaXplZAAJAQ5fd2hlbk5vdFBhdXNlZAAHCQEOX3ZhbGlkYXRlQ2hhaW4CBRFleGVjdXRpb25DaGFpbklkXwIlYnVyblRva2Vuc1YyOiBpbnZhbGlkIGV4ZWN1dGlvbiBjaGFpbgcJARVfdmFsaWRhdGVQYXltZW50c1NpemUDCAUBaQhwYXltZW50cwABAhhidXJuVG9rZW5zVjI6IG5vIHBheW1lbnQHCQEMX3ZhbGlkYXRlSW50BAUOZ2FzbGVzc1Jld2FyZF8AAAUHTUFYX0lOVAIjYnVyblRva2Vuc1YyOiBpbnZhbGlkIGdhc2xlc3NSZXdhcmQHCQEMX3ZhbGlkYXRlSW50BAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAAUHTUFYX0lOVAIkYnVyblRva2Vuc1YyOiBpbnZhbGlkIHBheW1lbnQgYW1vdW50BwkBEV92YWxpZGF0ZVJlZmVycmVyAgUJcmVmZXJyZXJfAh5idXJuVG9rZW5zVjI6IGludmFsaWQgcmVmZXJyZXIHAwkAAAIFA2VycgUDZXJyBAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAdhc3NldElkBAckbWF0Y2gwCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYQUHJG1hdGNoMAUBYQkAAgECG2J1cm5Ub2tlbnNWMjogaW52YWxpZCBhc3NldAQHYmluZGluZwkBDF9sb2FkQmluZGluZwIFEWV4ZWN1dGlvbkNoYWluSWRfBQdhc3NldElkBA1hc3NldENvbnRyYWN0CAUHYmluZGluZwJfMQQOZXhlY3V0aW9uQXNzZXQIBQdiaW5kaW5nAl8yBAltaW5BbW91bnQIBQdiaW5kaW5nAl8zBAZtaW5GZWUIBQdiaW5kaW5nAl80BAx0aHJlc2hvbGRGZWUIBQdiaW5kaW5nAl81BBBiZWZvcmVQZXJjZW50RmVlCAUHYmluZGluZwJfNgQPYWZ0ZXJQZXJjZW50RmVlCAUHYmluZGluZwJfNwQHZW5hYmxlZAgFB2JpbmRpbmcCXzgEBGVycjEDAwkBEF92YWxpZGF0ZUFkZHJlc3MCCQClCAEFDWFzc2V0Q29udHJhY3QCHWJ1cm5Ub2tlbnNWMjogbm8gc3VjaCBiaW5kaW5nCQEMX3ZhbGlkYXRlSW50BAUGYW1vdW50BQltaW5BbW91bnQFB01BWF9JTlQCG2J1cm5Ub2tlbnNWMjogbGVzcyB0aGFuIG1pbgcJAQ1fdmFsaWRhdGVCb29sAwUHZW5hYmxlZAYCH2J1cm5Ub2tlbnNWMjogdG9rZW4gaXMgZGlzYWJsZWQHAwkAAAIFBGVycjEFBGVycjEEDWFzc2V0RGVjaW1hbHMJAQZfYXNJbnQBCQD8BwQFDWFzc2V0Q29udHJhY3QFEUZVTkNfR0VUX0RFQ0lNQUxTBQNuaWwFA25pbAMJAAACBQ1hc3NldERlY2ltYWxzBQ1hc3NldERlY2ltYWxzBAdwZXJjZW50AwkAZgIFBmFtb3VudAUMdGhyZXNob2xkRmVlBQ9hZnRlclBlcmNlbnRGZWUFEGJlZm9yZVBlcmNlbnRGZWUEA2ZlZQkAZAIFBm1pbkZlZQkAawMFBmFtb3VudAUHcGVyY2VudAUOUEVSQ0VOVF9GQUNUT1IEBGVycjIJAQxfdmFsaWRhdGVJbnQEBQZhbW91bnQJAGQCBQNmZWUAAQUHTUFYX0lOVAIiYnVyblRva2Vuc1YyOiBmZWUgbW9yZSB0aGFuIGFtb3VudAMJAAACBQRlcnIyBQRlcnIyBA0kdDAxODMxNTE4NzIwAwkBAiE9AgUJcmVmZXJyZXJfAgAECHJlZmVycmVyCQERQGV4dHJOYXRpdmUoMTA2MikBBQlyZWZlcnJlcl8EEXJlZmVycmVyRmVlQW1vdW50CQBrAwkBF19sb2FkUmVmZXJyZXJGZWVQZXJjZW50AgURZXhlY3V0aW9uQ2hhaW5JZF8FCHJlZmVycmVyBQNmZWUFDlBFUkNFTlRfRkFDVE9SCQCUCgIFEXJlZmVycmVyRmVlQW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCHJlZmVycmVyBRFyZWZlcnJlckZlZUFtb3VudAUHYXNzZXRJZAUDbmlsCQCUCgIAAAUDbmlsBAtyZWZlcnJlckZlZQgFDSR0MDE4MzE1MTg3MjACXzEED3JlZmVycmVyQWN0aW9ucwgFDSR0MDE4MzE1MTg3MjACXzIEDGFtb3VudFRvU2VuZAkAZQIFBmFtb3VudAUDZmVlBARlcnIzCQEMX3ZhbGlkYXRlSW50BAUMYW1vdW50VG9TZW5kCQBkAgUOZ2FzbGVzc1Jld2FyZF8AAQUHTUFYX0lOVAIlYnVyblRva2Vuc1YyOiByZXdhcmQgbW9yZSB0aGFuIGFtb3VudAMJAAACBQRlcnIzBQRlcnIzBAl1cGRhdGVGZWUJAGUCCQBkAgkBCF9sb2FkRmVlAQUHYXNzZXRJZAUDZmVlBQtyZWZlcnJlckZlZQQQbm9ybWFsaXplZEFtb3VudAkBEl9ub3JtYWxpemVEZWNpbWFscwMFDGFtb3VudFRvU2VuZAUNYXNzZXREZWNpbWFscwUIREVDSU1BTFMEEW5vcm1hbGl6ZWRHYXNsZXNzCQESX25vcm1hbGl6ZURlY2ltYWxzAwUOZ2FzbGVzc1Jld2FyZF8FDWFzc2V0RGVjaW1hbHMFCERFQ0lNQUxTBAppbnZvY2F0aW9uCQD8BwQJARBfbG9hZFJvb3RBZGFwdGVyAAUTRlVOQ19SRUxFQVNFX1RPS0VOUwkAzAgCBRFleGVjdXRpb25DaGFpbklkXwkAzAgCBQ5leGVjdXRpb25Bc3NldAkAzAgCBRBub3JtYWxpemVkQW1vdW50CQDMCAIFCnJlY2lwaWVudF8JAMwIAgURbm9ybWFsaXplZEdhc2xlc3MFA25pbAUDbmlsAwkAAAIFCmludm9jYXRpb24FCmludm9jYXRpb24JAJQKAgkAzggCCQDOCAIJAQhfc2F2ZUZlZQIFB2Fzc2V0SWQFCXVwZGF0ZUZlZQUPcmVmZXJyZXJBY3Rpb25zCQDMCAIJAQRCdXJuAgUHYXNzZXRJZAUMYW1vdW50VG9TZW5kBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELdHJhbnNmZXJGZWUCEWV4ZWN1dGlvbkNoYWluSWRfCGFzc2V0SWRfBANlcnIDAwkBEF93aGVuSW5pdGlhbGl6ZWQACQEOX3doZW5Ob3RQYXVzZWQABwkBDl92YWxpZGF0ZUFzc2V0AgUIYXNzZXRJZF8CGnRyYW5zZmVyRmVlOiBpbnZhbGlkIGFzc2V0BwMJAAACBQNlcnIFA2VycgQHYXNzZXRJZAkA2QQBBQhhc3NldElkXwQHYmluZGluZwkBDF9sb2FkQmluZGluZwIFEWV4ZWN1dGlvbkNoYWluSWRfBQdhc3NldElkBA1hc3NldENvbnRyYWN0CAUHYmluZGluZwJfMQQHZW5hYmxlZAgFB2JpbmRpbmcCXzgEBGVycjEDCQEQX3ZhbGlkYXRlQWRkcmVzcwIJAKUIAQUNYXNzZXRDb250cmFjdAIcdHJhbnNmZXJGZWU6IG5vIHN1Y2ggYmluZGluZwkBDV92YWxpZGF0ZUJvb2wDBQdlbmFibGVkBgIedHJhbnNmZXJGZWU6IHRva2VuIGlzIGRpc2FibGVkBwMJAAACBQRlcnIxBQRlcnIxCQCUCgIJAM4IAgkBCF9zYXZlRmVlAgUHYXNzZXRJZAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFfbG9hZEZlZVJlY2lwaWVudAAJAQhfbG9hZEZlZQEFB2Fzc2V0SWQFB2Fzc2V0SWQFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARR1cGRhdGVDYWxsZXJDb250cmFjdAEPY2FsbGVyQ29udHJhY3RfBANlcnIDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBE19zYXZlQ2FsbGVyQ29udHJhY3QBBQ9jYWxsZXJDb250cmFjdF8FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEUdXBkYXRlRXhlY3V0aW9uQ2hhaW4CEWV4ZWN1dGlvbkNoYWluSWRfCGVuYWJsZWRfBANlcnIDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEMX3ZhbGlkYXRlSW50BAURZXhlY3V0aW9uQ2hhaW5JZF8AAAUHTUFYX0lOVAIudXBkYXRlRXhlY3V0aW9uQ2hhaW46IGludmFsaWQgZXhlY3V0aW9uQ2hhaW5JZAcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBCl9zYXZlQ2hhaW4CBRFleGVjdXRpb25DaGFpbklkXwUIZW5hYmxlZF8FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQESdXBkYXRlRmVlUmVjaXBpZW50AQ1mZWVSZWNpcGllbnRfBANlcnIDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFDWZlZVJlY2lwaWVudF8CKHVwZGF0ZUZlZVJlY2lwaWVudDogaW52YWxpZCBmZWVSZWNpcGllbnQHAwkAAAIFA2VycgUDZXJyCQCUCgIJARFfc2F2ZUZlZVJlY2lwaWVudAEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDWZlZVJlY2lwaWVudF8FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOdXBkYXRlUmVmZXJyZXIDEWV4ZWN1dGlvbkNoYWluSWRfCXJlZmVycmVyXwRmZWVfBANlcnIDAwMDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJAQ5fdmFsaWRhdGVDaGFpbgIFEWV4ZWN1dGlvbkNoYWluSWRfAid1cGRhdGVSZWZlcnJlcjogaW52YWxpZCBleGVjdXRpb24gY2hhaW4HCQEQX3ZhbGlkYXRlQWRkcmVzcwIFCXJlZmVycmVyXwIgdXBkYXRlUmVmZXJyZXI6IGludmFsaWQgcmVmZXJyZXIHCQEMX3ZhbGlkYXRlSW50BAUEZmVlXwAABRBNQVhfUkVGRVJSRVJfRkVFAht1cGRhdGVSZWZlcnJlcjogaW52YWxpZCBmZWUHAwkAAAIFA2VycgUDZXJyCQCUCgIJARdfc2F2ZVJlZmVycmVyRmVlUGVyY2VudAMFEWV4ZWN1dGlvbkNoYWluSWRfCQERQGV4dHJOYXRpdmUoMTA2MikBBQlyZWZlcnJlcl8FBGZlZV8FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERdXBkYXRlQmluZGluZ0luZm8JEWV4ZWN1dGlvbkNoYWluSWRfDmFzc2V0Q29udHJhY3RfD2V4ZWN1dGlvbkFzc2V0XwptaW5BbW91bnRfB21pbkZlZV8NdGhyZXNob2xkRmVlXxFiZWZvcmVQZXJjZW50RmVlXxBhZnRlclBlcmNlbnRGZWVfCGVuYWJsZWRfBANlcnIDAwMDAwMDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFDmFzc2V0Q29udHJhY3RfAil1cGRhdGVCaW5kaW5nSW5mbzogaW52YWxpZCBhc3NldCBjb250cmFjdAcJAQxfdmFsaWRhdGVJbnQEBRFleGVjdXRpb25DaGFpbklkXwAABQdNQVhfSU5UAit1cGRhdGVCaW5kaW5nSW5mbzogaW52YWxpZCBleGVjdXRpb25DaGFpbklkBwkBDF92YWxpZGF0ZUludAQFCm1pbkFtb3VudF8AAAUHTUFYX0lOVAIkdXBkYXRlQmluZGluZ0luZm86IGludmFsaWQgbWluQW1vdW50BwkBDF92YWxpZGF0ZUludAQFB21pbkZlZV8AAAUHTUFYX0lOVAIhdXBkYXRlQmluZGluZ0luZm86IGludmFsaWQgbWluRmVlBwkBDF92YWxpZGF0ZUludAQFDXRocmVzaG9sZEZlZV8AAAUHTUFYX0lOVAIndXBkYXRlQmluZGluZ0luZm86IGludmFsaWQgdGhyZXNob2xkRmVlBwkBDF92YWxpZGF0ZUludAQFEWJlZm9yZVBlcmNlbnRGZWVfAAAFB01BWF9JTlQCK3VwZGF0ZUJpbmRpbmdJbmZvOiBpbnZhbGlkIGJlZm9yZVBlcmNlbnRGZWUHCQEMX3ZhbGlkYXRlSW50BAUQYWZ0ZXJQZXJjZW50RmVlXwAABQdNQVhfSU5UAip1cGRhdGVCaW5kaW5nSW5mbzogaW52YWxpZCBhZnRlclBlcmNlbnRGZWUHAwkAAAIFA2VycgUDZXJyBAdhc3NldElkCQEIX2FzQnl0ZXMBCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDmFzc2V0Q29udHJhY3RfBRFGVU5DX0dFVF9BU1NFVF9JRAUDbmlsBQNuaWwDCQAAAgUHYXNzZXRJZAUHYXNzZXRJZAQHYmluZGluZwkAmgoICQERQGV4dHJOYXRpdmUoMTA2MikBBQ5hc3NldENvbnRyYWN0XwUPZXhlY3V0aW9uQXNzZXRfBQptaW5BbW91bnRfBQdtaW5GZWVfBQ10aHJlc2hvbGRGZWVfBRFiZWZvcmVQZXJjZW50RmVlXwUQYWZ0ZXJQZXJjZW50RmVlXwUIZW5hYmxlZF8JAJQKAgkBDF9zYXZlQmluZGluZwMFEWV4ZWN1dGlvbkNoYWluSWRfBQdhc3NldElkBQdiaW5kaW5nBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGWFkZENyb3NzY2hhaW5Qb29sQ29udHJhY3QCF2Nyb3NzY2hhaW5Qb29sQ29udHJhY3RfFGJyaWRnZUFzc2V0Q29udHJhY3RfBANlcnIDAwMJARFfb25seVRoaXNDb250cmFjdAEIBQFpBmNhbGxlcgkBEF93aGVuSW5pdGlhbGl6ZWQABwkBEF92YWxpZGF0ZUFkZHJlc3MCBRdjcm9zc2NoYWluUG9vbENvbnRyYWN0XwI5YWRkQ3Jvc3NjaGFpblBvb2xDb250cmFjdDogaW52YWxpZCBjcm9zc2NoYWluUG9vbENvbnRyYWN0BwkBEF92YWxpZGF0ZUFkZHJlc3MCBRRicmlkZ2VBc3NldENvbnRyYWN0XwI2YWRkQ3Jvc3NjaGFpblBvb2xDb250cmFjdDogaW52YWxpZCBicmlkZ2VBc3NldENvbnRyYWN0BwMJAAACBQNlcnIFA2VycgkAlAoCCQDOCAIJARxfc2F2ZUNyb3NzY2hhaW5Qb29sQ29udHJhY3RzAQkAzQgCCQEcX2xvYWRDcm9zc2NoYWluUG9vbENvbnRyYWN0cwAFF2Nyb3NzY2hhaW5Qb29sQ29udHJhY3RfCQEYX3NhdmVCcmlkZ2VBc3NldENvbnRyYWN0AgkBEUBleHRyTmF0aXZlKDEwNjIpAQUXY3Jvc3NjaGFpblBvb2xDb250cmFjdF8JARFAZXh0ck5hdGl2ZSgxMDYyKQEFFGJyaWRnZUFzc2V0Q29udHJhY3RfBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBXBhdXNlAAQDZXJyAwMJAQtfb25seVBhdXNlcgEIBQFpBmNhbGxlcgkBEF93aGVuSW5pdGlhbGl6ZWQABwkBDl93aGVuTm90UGF1c2VkAAcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBCl9zYXZlUGF1c2UBBgUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQd1bnBhdXNlAAQDZXJyAwMJAQtfb25seVBhdXNlcgEIBQFpBmNhbGxlcgkBEF93aGVuSW5pdGlhbGl6ZWQABwkBC193aGVuUGF1c2VkAAcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBCl9zYXZlUGF1c2UBBwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQx1cGRhdGVQYXVzZXIBB3BhdXNlcl8EA2VycgMDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJARBfdmFsaWRhdGVBZGRyZXNzAgUHcGF1c2VyXwIcdXBkYXRlUGF1c2VyOiBpbnZhbGlkIHBhdXNlcgcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBC19zYXZlUGF1c2VyAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUHcGF1c2VyXwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtzZXRNdWx0aXNpZwEJbXVsdGlzaWdfBANlcnIDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARBfdmFsaWRhdGVBZGRyZXNzAgUJbXVsdGlzaWdfAh1zZXRNdWx0aXNpZzogaW52YWxpZCBtdWx0aXNpZwcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBDV9zYXZlTXVsdGlzaWcBCQERQGV4dHJOYXRpdmUoMTA2MikBBQltdWx0aXNpZ18FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABAckbWF0Y2gwCQCiCAEFDEtFWV9NVUxUSVNJRwMJAAECBQckbWF0Y2gwAgZTdHJpbmcECG11bHRpc2lnBQckbWF0Y2gwCQELdmFsdWVPckVsc2UCCQCbCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCG11bHRpc2lnCQC5CQIJAMwIAgUKS0VZX1NUQVRVUwkAzAgCCQClCAEFBHRoaXMJAMwIAgkA2AQBCAUCdHgCaWQFA25pbAUJU0VQQVJBVE9SBwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleS36kMY=", "height": 2944097, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HQk1zzpFd1kqKkmmzkK3P4NjC9YomXh6g3Jtdg6PPGxA Next: none Diff:
OldNewDifferences
310310 }
311311
312312
313+func _asString (val_) = match val_ {
314+ case a: String =>
315+ a
316+ case _ =>
317+ throw("_asString: revert")
318+}
319+
320+
313321 func _validateExecutor (val_,err_) = if ((val_ != _loadExecutor()))
314322 then throw(err_)
315323 else true
371379 else false
372380 if ((err == err))
373381 then {
374- let $t01179712086 = if (containsElement(_loadCrosschainPoolContracts(), assetContract_))
382+ let $t01192512214 = if (containsElement(_loadCrosschainPoolContracts(), assetContract_))
375383 then $Tuple2(true, _loadBridgeAssetContract(addressFromStringValue(assetContract_)))
376384 else $Tuple2(false, addressFromStringValue(assetContract_))
377- let isCrosschainPoolAsset = $t01179712086._1
378- let bridgeAssetContract = $t01179712086._2
385+ let isCrosschainPoolAsset = $t01192512214._1
386+ let bridgeAssetContract = $t01192512214._2
379387 let assetId = _asBytes(invoke(bridgeAssetContract, FUNC_GET_ASSET_ID, nil, nil))
380388 if ((assetId == assetId))
381389 then {
384392 then {
385393 let normalizedAmount = _normalizeDecimals(amount, DECIMALS, decimals)
386394 let normalizedGasless = _normalizeDecimals(gaslessReward, DECIMALS, decimals)
387- let $t01242312860 = match addressFromString(referrer_) {
395+ let $t01255112988 = match addressFromString(referrer_) {
388396 case refererAddress: Address =>
389397 let normalizedReferrerFee = _normalizeDecimals(referrerFee, DECIMALS, decimals)
390398 $Tuple2(normalizedReferrerFee, [ScriptTransfer(refererAddress, normalizedReferrerFee, assetId)])
391399 case _ =>
392400 $Tuple2(0, nil)
393401 }
394- let normalizedReferrerFee = $t01242312860._1
395- let referrerActions = $t01242312860._2
402+ let normalizedReferrerFee = $t01255112988._1
403+ let referrerActions = $t01255112988._2
396404 let mintInvocation = invoke(bridgeAssetContract, FUNC_MINT, [(normalizedAmount + normalizedReferrerFee), toString(this)], nil)
397405 if ((mintInvocation == mintInvocation))
398406 then {
399- let $t01299913337 = if (if ((normalizedGasless > 0))
407+ let $t01312713465 = if (if ((normalizedGasless > 0))
400408 then (addressFromStringValue(recipient_) != i.originCaller)
401409 else false)
402410 then $Tuple2([ScriptTransfer(i.originCaller, normalizedGasless, assetId)], normalizedGasless)
403411 else $Tuple2(nil, 0)
404- let gaslessActions = $t01299913337._1
405- let normalizedGaslessUsed = $t01299913337._2
412+ let gaslessActions = $t01312713465._1
413+ let normalizedGaslessUsed = $t01312713465._2
406414 let actions = if (isCrosschainPoolAsset)
407415 then {
408- let poolAssetId = _asBytes(invoke(addressFromStringValue(assetContract_), FUNC_GET_ASSET_ID, nil, nil))
416+ let poolAssetId = fromBase58String(_asString(invoke(addressFromStringValue(assetContract_), FUNC_GET_ASSET_ID, nil, nil)))
409417 if ((poolAssetId == poolAssetId))
410418 then {
411419 let balanceBefore = assetBalance(this, poolAssetId)
562570 let err2 = _validateInt(amount, (fee + 1), MAX_INT, "burnTokensV2: fee more than amount")
563571 if ((err2 == err2))
564572 then {
565- let $t01816718572 = if ((referrer_ != ""))
573+ let $t01831518720 = if ((referrer_ != ""))
566574 then {
567575 let referrer = addressFromStringValue(referrer_)
568576 let referrerFeeAmount = fraction(_loadReferrerFeePercent(executionChainId_, referrer), fee, PERCENT_FACTOR)
569577 $Tuple2(referrerFeeAmount, [ScriptTransfer(referrer, referrerFeeAmount, assetId)])
570578 }
571579 else $Tuple2(0, nil)
572- let referrerFee = $t01816718572._1
573- let referrerActions = $t01816718572._2
580+ let referrerFee = $t01831518720._1
581+ let referrerActions = $t01831518720._2
574582 let amountToSend = (amount - fee)
575583 let err3 = _validateInt(amountToSend, (gaslessReward_ + 1), MAX_INT, "burnTokensV2: reward more than amount")
576584 if ((err3 == err3))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEPARATOR = "__"
55
66 let KEY_INIT = "INIT"
77
88 let KEY_MULTISIG = "MULTISIG"
99
1010 let KEY_STATUS = "STATUS"
1111
1212 let KEY_PAUSED = "PAUSED"
1313
1414 let KEY_PAUSER = "PAUSER"
1515
1616 let KEY_EXECUTOR = "EXECUTOR"
1717
1818 let KEY_ROOT_ADAPTER = "ROOT_ADAPTER"
1919
2020 let KEY_CALLER_CONTRACT = "CALLER_CONTRACT"
2121
2222 let KEY_CHAIN = "CHAIN"
2323
2424 let KEY_BINDING = "BINDING"
2525
2626 let KEY_FEE = "FEE"
2727
2828 let KEY_FEE_RECIPIENT = "FEE_RECIPIENT"
2929
3030 let KEY_REFERRER_FEE_PERCENT = "REFERRER_FEE_PERCENT"
3131
3232 let KEY_CROSSCHAIN_POOL_CONTRACTS = "CROSSCHAIN_POOL_CONTRACTS"
3333
3434 let KEY_BRIDGE_ASSET_CONTRACT = "BRIDGE_ASSET_CONTRACT"
3535
3636 let FUNC_MINT = "mint"
3737
3838 let FUNC_DEPOSIT = "deposit"
3939
4040 let FUNC_RELEASE_TOKENS = "releaseTokens"
4141
4242 let FUNC_GET_ASSET_ID = "getAssetId"
4343
4444 let FUNC_GET_DECIMALS = "getDecimals"
4545
4646 let WAVES = "WAVES"
4747
4848 let WAVES_DECIMALS = 8
4949
5050 let DECIMALS = 6
5151
5252 let PERCENT_FACTOR = 1000000
5353
5454 let MAX_REFERRER_FEE = 200000
5555
5656 let MAX_INT = 9223372036854775807
5757
5858 func _validateAddress (address_,err_) = match addressFromString(address_) {
5959 case a: Address =>
6060 true
6161 case _ =>
6262 throw(err_)
6363 }
6464
6565
6666 func _validateAsset (assetId_,err_) = match assetInfo(fromBase58String(assetId_)) {
6767 case a: Asset =>
6868 true
6969 case _ =>
7070 throw(err_)
7171 }
7272
7373
7474 func _validateInt (val_,lowerBoundary_,upperBoundary_,err_) = if (if ((lowerBoundary_ > val_))
7575 then true
7676 else (val_ > upperBoundary_))
7777 then throw(err_)
7878 else true
7979
8080
8181 func _validateBool (val_,target_,err_) = if ((val_ != target_))
8282 then throw(err_)
8383 else true
8484
8585
8686 func _validatePaymentsSize (payments_,target_,err_) = if ((size(payments_) != target_))
8787 then throw(err_)
8888 else true
8989
9090
9191 func _validateReferrer (referrer_,err_) = if ((referrer_ != ""))
9292 then _validateAddress(referrer_, err_)
9393 else true
9494
9595
9696 func _normalizeDecimals (amount_,sourceDecimals_,targetDecimals_) = if ((sourceDecimals_ >= targetDecimals_))
9797 then (amount_ / pow(10, 0, (sourceDecimals_ - targetDecimals_), 0, 0, DOWN))
9898 else (amount_ * pow(10, 0, (targetDecimals_ - sourceDecimals_), 0, 0, DOWN))
9999
100100
101101 func _loadInit () = match getBoolean(KEY_INIT) {
102102 case a: Boolean =>
103103 a
104104 case _ =>
105105 false
106106 }
107107
108108
109109 func _saveInit (isInit_) = [BooleanEntry(KEY_INIT, isInit_)]
110110
111111
112112 func _loadPause () = match getBoolean(KEY_PAUSED) {
113113 case a: Boolean =>
114114 a
115115 case _ =>
116116 false
117117 }
118118
119119
120120 func _savePause (isPaused_) = [BooleanEntry(KEY_PAUSED, isPaused_)]
121121
122122
123123 func _loadPauser () = match getString(KEY_PAUSER) {
124124 case a: String =>
125125 addressFromStringValue(a)
126126 case _ =>
127127 Address(base58'')
128128 }
129129
130130
131131 func _savePauser (pauser_) = [StringEntry(KEY_PAUSER, toString(pauser_))]
132132
133133
134134 func _loadMultisig () = match getString(KEY_MULTISIG) {
135135 case a: String =>
136136 addressFromStringValue(a)
137137 case _ =>
138138 Address(base58'')
139139 }
140140
141141
142142 func _saveMultisig (multisig_) = [StringEntry(KEY_MULTISIG, toString(multisig_))]
143143
144144
145145 func _loadExecutor () = match getString(KEY_EXECUTOR) {
146146 case a: String =>
147147 addressFromStringValue(a)
148148 case _ =>
149149 Address(base58'')
150150 }
151151
152152
153153 func _saveExecutor (executor_) = [StringEntry(KEY_EXECUTOR, toString(executor_))]
154154
155155
156156 func _loadCallerContract () = match getString(KEY_CALLER_CONTRACT) {
157157 case a: String =>
158158 a
159159 case _ =>
160160 ""
161161 }
162162
163163
164164 func _saveCallerContract (caller_) = [StringEntry(KEY_CALLER_CONTRACT, caller_)]
165165
166166
167167 func _loadChain (chainId_) = match getBoolean(makeString([KEY_CHAIN, toString(chainId_)], SEPARATOR)) {
168168 case a: Boolean =>
169169 a
170170 case _ =>
171171 false
172172 }
173173
174174
175175 func _saveChain (chainId_,val_) = [BooleanEntry(makeString([KEY_CHAIN, toString(chainId_)], SEPARATOR), val_)]
176176
177177
178178 func _loadBinding (executionChainId_,assetId_) = match getString(makeString([KEY_BINDING, toString(executionChainId_), toBase58String(assetId_)], SEPARATOR)) {
179179 case a: String =>
180180 let struct = split(a, SEPARATOR)
181181 $Tuple8(addressFromStringValue(struct[0]), struct[1], parseIntValue(struct[2]), parseIntValue(struct[3]), parseIntValue(struct[4]), parseIntValue(struct[5]), parseIntValue(struct[6]), if ((struct[7] == "1"))
182182 then true
183183 else false)
184184 case _ =>
185185 $Tuple8(Address(base58''), "", 0, 0, 0, 0, 0, false)
186186 }
187187
188188
189189 func _saveBinding (executionChainId_,assetId_,binding_) = [StringEntry(makeString([KEY_BINDING, toString(executionChainId_), toBase58String(assetId_)], SEPARATOR), makeString([toString(binding_._1), binding_._2, toString(binding_._3), toString(binding_._4), toString(binding_._5), toString(binding_._6), toString(binding_._7), if (binding_._8)
190190 then "1"
191191 else "0"], SEPARATOR))]
192192
193193
194194 func _loadFee (assetId_) = match getInteger(makeString([KEY_FEE, toBase58String(assetId_)], SEPARATOR)) {
195195 case a: Int =>
196196 a
197197 case _ =>
198198 0
199199 }
200200
201201
202202 func _saveFee (assetId_,val_) = [IntegerEntry(makeString([KEY_FEE, toBase58String(assetId_)], SEPARATOR), val_)]
203203
204204
205205 func _loadRootAdapter () = match getString(KEY_ROOT_ADAPTER) {
206206 case a: String =>
207207 addressFromStringValue(a)
208208 case _ =>
209209 Address(base58'')
210210 }
211211
212212
213213 func _saveRootAdapter (adapter_) = [StringEntry(KEY_ROOT_ADAPTER, toString(adapter_))]
214214
215215
216216 func _loadFeeRecipient () = match getString(KEY_FEE_RECIPIENT) {
217217 case a: String =>
218218 addressFromStringValue(a)
219219 case _ =>
220220 Address(base58'')
221221 }
222222
223223
224224 func _saveFeeRecipient (val_) = [StringEntry(KEY_FEE_RECIPIENT, toString(val_))]
225225
226226
227227 func _loadReferrerFeePercent (executionChainId_,referrer_) = match getInteger(makeString([KEY_REFERRER_FEE_PERCENT, toString(executionChainId_), toString(referrer_)], SEPARATOR)) {
228228 case a: Int =>
229229 a
230230 case _ =>
231231 0
232232 }
233233
234234
235235 func _saveReferrerFeePercent (executionChainId_,referrer_,val_) = [IntegerEntry(makeString([KEY_REFERRER_FEE_PERCENT, toString(executionChainId_), toString(referrer_)], SEPARATOR), val_)]
236236
237237
238238 func _loadCrosschainPoolContracts () = match getString(KEY_CROSSCHAIN_POOL_CONTRACTS) {
239239 case a: String =>
240240 if ((size(a) > 0))
241241 then split_51C(a, SEPARATOR)
242242 else nil
243243 case _ =>
244244 nil
245245 }
246246
247247
248248 func _saveCrosschainPoolContracts (contracts_) = [StringEntry(KEY_CROSSCHAIN_POOL_CONTRACTS, makeString_11C(contracts_, SEPARATOR))]
249249
250250
251251 func _loadBridgeAssetContract (crosschainPoolContract_) = match getString(makeString([KEY_BRIDGE_ASSET_CONTRACT, toString(crosschainPoolContract_)], SEPARATOR)) {
252252 case a: String =>
253253 addressFromStringValue(a)
254254 case _ =>
255255 Address(base58'')
256256 }
257257
258258
259259 func _saveBridgeAssetContract (crosschainPoolContract_,bridgeAssetContract_) = [StringEntry(makeString([KEY_BRIDGE_ASSET_CONTRACT, toString(crosschainPoolContract_)], SEPARATOR), toString(bridgeAssetContract_))]
260260
261261
262262 func _onlyThisContract (caller_) = if ((caller_ != this))
263263 then throw("_onlyThisContract: revert")
264264 else true
265265
266266
267267 func _whenMultisigSet () = if ((_loadMultisig() == Address(base58'')))
268268 then throw("_whenMultisigSet: revert")
269269 else true
270270
271271
272272 func _whenNotInitialized () = if (_loadInit())
273273 then throw("_whenNotInitialized: revert")
274274 else true
275275
276276
277277 func _whenInitialized () = if (!(_loadInit()))
278278 then throw("_whenInitialized: revert")
279279 else true
280280
281281
282282 func _whenNotPaused () = if (_loadPause())
283283 then throw("_whenNotPaused: revert")
284284 else true
285285
286286
287287 func _whenPaused () = if (!(_loadPause()))
288288 then throw("_whenPaused: revert")
289289 else true
290290
291291
292292 func _onlyPauser (caller_) = if ((caller_ != _loadPauser()))
293293 then throw("_onlyPauser: revert")
294294 else true
295295
296296
297297 func _asInt (val_) = match val_ {
298298 case a: Int =>
299299 a
300300 case _ =>
301301 throw("_asInt: revert")
302302 }
303303
304304
305305 func _asBytes (val_) = match val_ {
306306 case a: ByteVector =>
307307 a
308308 case _ =>
309309 throw("_asBytes: revert")
310310 }
311311
312312
313+func _asString (val_) = match val_ {
314+ case a: String =>
315+ a
316+ case _ =>
317+ throw("_asString: revert")
318+}
319+
320+
313321 func _validateExecutor (val_,err_) = if ((val_ != _loadExecutor()))
314322 then throw(err_)
315323 else true
316324
317325
318326 func _validateCaller (val_,err_) = if ((val_ != _loadCallerContract()))
319327 then throw(err_)
320328 else true
321329
322330
323331 func _validateChain (executionChainId_,err_) = if (!(_loadChain(executionChainId_)))
324332 then throw(err_)
325333 else true
326334
327335
328336 @Callable(i)
329337 func init (executor_,adapter_,pauser_,feeRecipient_) = {
330338 let err = if (if (if (if (if (if (_onlyThisContract(i.caller))
331339 then _whenNotInitialized()
332340 else false)
333341 then _whenMultisigSet()
334342 else false)
335343 then _validateAddress(executor_, "init: invalid executor")
336344 else false)
337345 then _validateAddress(adapter_, "init: invalid adapter")
338346 else false)
339347 then _validateAddress(pauser_, "init: invalid pauser")
340348 else false)
341349 then _validateAddress(feeRecipient_, "init: invalid feeRecipient")
342350 else false
343351 if ((err == err))
344352 then $Tuple2(((((_saveInit(true) ++ _saveExecutor(addressFromStringValue(executor_))) ++ _saveRootAdapter(addressFromStringValue(adapter_))) ++ _savePauser(addressFromStringValue(pauser_))) ++ _saveFeeRecipient(addressFromStringValue(feeRecipient_))), unit)
345353 else throw("Strict value is not equal to itself.")
346354 }
347355
348356
349357
350358 @Callable(i)
351359 func mintTokens (callerContract_,assetContract_,amount_,recipient_,gaslessReward_,referrer_,referrerFee_) = {
352360 let amount = valueOrErrorMessage(parseInt(amount_), "mint: amount is not Int")
353361 let gaslessReward = valueOrErrorMessage(parseInt(gaslessReward_), "mint: gaslessReward is not Int")
354362 let referrerFee = valueOrErrorMessage(parseInt(referrerFee_), "mint: referrerFee is not Int")
355363 let err = if (if (if (if (if (if (if (if (_whenInitialized())
356364 then _whenNotPaused()
357365 else false)
358366 then _validateAddress(assetContract_, "mint: invalid asset contract")
359367 else false)
360368 then _validateExecutor(i.caller, "mint: invalid executor")
361369 else false)
362370 then _validateCaller(callerContract_, "mint: invalid caller")
363371 else false)
364372 then _validateAddress(recipient_, "mint: invalid recipient address")
365373 else false)
366374 then _validateInt(amount, 0, MAX_INT, "mint: invalid amount")
367375 else false)
368376 then _validateInt(gaslessReward, 0, MAX_INT, "mint: invalid gaslessReward")
369377 else false)
370378 then _validateInt(referrerFee, 0, MAX_INT, "mint: invalid referrer fee")
371379 else false
372380 if ((err == err))
373381 then {
374- let $t01179712086 = if (containsElement(_loadCrosschainPoolContracts(), assetContract_))
382+ let $t01192512214 = if (containsElement(_loadCrosschainPoolContracts(), assetContract_))
375383 then $Tuple2(true, _loadBridgeAssetContract(addressFromStringValue(assetContract_)))
376384 else $Tuple2(false, addressFromStringValue(assetContract_))
377- let isCrosschainPoolAsset = $t01179712086._1
378- let bridgeAssetContract = $t01179712086._2
385+ let isCrosschainPoolAsset = $t01192512214._1
386+ let bridgeAssetContract = $t01192512214._2
379387 let assetId = _asBytes(invoke(bridgeAssetContract, FUNC_GET_ASSET_ID, nil, nil))
380388 if ((assetId == assetId))
381389 then {
382390 let decimals = _asInt(invoke(bridgeAssetContract, FUNC_GET_DECIMALS, nil, nil))
383391 if ((decimals == decimals))
384392 then {
385393 let normalizedAmount = _normalizeDecimals(amount, DECIMALS, decimals)
386394 let normalizedGasless = _normalizeDecimals(gaslessReward, DECIMALS, decimals)
387- let $t01242312860 = match addressFromString(referrer_) {
395+ let $t01255112988 = match addressFromString(referrer_) {
388396 case refererAddress: Address =>
389397 let normalizedReferrerFee = _normalizeDecimals(referrerFee, DECIMALS, decimals)
390398 $Tuple2(normalizedReferrerFee, [ScriptTransfer(refererAddress, normalizedReferrerFee, assetId)])
391399 case _ =>
392400 $Tuple2(0, nil)
393401 }
394- let normalizedReferrerFee = $t01242312860._1
395- let referrerActions = $t01242312860._2
402+ let normalizedReferrerFee = $t01255112988._1
403+ let referrerActions = $t01255112988._2
396404 let mintInvocation = invoke(bridgeAssetContract, FUNC_MINT, [(normalizedAmount + normalizedReferrerFee), toString(this)], nil)
397405 if ((mintInvocation == mintInvocation))
398406 then {
399- let $t01299913337 = if (if ((normalizedGasless > 0))
407+ let $t01312713465 = if (if ((normalizedGasless > 0))
400408 then (addressFromStringValue(recipient_) != i.originCaller)
401409 else false)
402410 then $Tuple2([ScriptTransfer(i.originCaller, normalizedGasless, assetId)], normalizedGasless)
403411 else $Tuple2(nil, 0)
404- let gaslessActions = $t01299913337._1
405- let normalizedGaslessUsed = $t01299913337._2
412+ let gaslessActions = $t01312713465._1
413+ let normalizedGaslessUsed = $t01312713465._2
406414 let actions = if (isCrosschainPoolAsset)
407415 then {
408- let poolAssetId = _asBytes(invoke(addressFromStringValue(assetContract_), FUNC_GET_ASSET_ID, nil, nil))
416+ let poolAssetId = fromBase58String(_asString(invoke(addressFromStringValue(assetContract_), FUNC_GET_ASSET_ID, nil, nil)))
409417 if ((poolAssetId == poolAssetId))
410418 then {
411419 let balanceBefore = assetBalance(this, poolAssetId)
412420 if ((balanceBefore == balanceBefore))
413421 then {
414422 let depositInvocation = invoke(addressFromStringValue(assetContract_), FUNC_DEPOSIT, [0], [AttachedPayment(assetId, (normalizedAmount - normalizedGaslessUsed))])
415423 if ((depositInvocation == depositInvocation))
416424 then {
417425 let balanceAfter = assetBalance(this, poolAssetId)
418426 if ((balanceAfter == balanceAfter))
419427 then [ScriptTransfer(addressFromStringValue(recipient_), (balanceAfter - balanceBefore), poolAssetId)]
420428 else throw("Strict value is not equal to itself.")
421429 }
422430 else throw("Strict value is not equal to itself.")
423431 }
424432 else throw("Strict value is not equal to itself.")
425433 }
426434 else throw("Strict value is not equal to itself.")
427435 }
428436 else [ScriptTransfer(addressFromStringValue(recipient_), (normalizedAmount - normalizedGaslessUsed), assetId)]
429437 $Tuple2(((actions ++ gaslessActions) ++ referrerActions), unit)
430438 }
431439 else throw("Strict value is not equal to itself.")
432440 }
433441 else throw("Strict value is not equal to itself.")
434442 }
435443 else throw("Strict value is not equal to itself.")
436444 }
437445 else throw("Strict value is not equal to itself.")
438446 }
439447
440448
441449
442450 @Callable(i)
443451 func burnTokens (executionChainId_,recipient_,gaslessReward_) = {
444452 let err = if (if (if (if (if (_whenInitialized())
445453 then _whenNotPaused()
446454 else false)
447455 then _validateChain(executionChainId_, "burnTokens: invalid execution chain")
448456 else false)
449457 then _validatePaymentsSize(i.payments, 1, "burnTokens: no payment")
450458 else false)
451459 then _validateInt(gaslessReward_, 0, MAX_INT, "burnTokens: invalid gaslessReward")
452460 else false)
453461 then _validateInt(i.payments[0].amount, 0, MAX_INT, "burnTokens: invalid payment amount")
454462 else false
455463 if ((err == err))
456464 then {
457465 let amount = i.payments[0].amount
458466 let assetId = match i.payments[0].assetId {
459467 case a: ByteVector =>
460468 a
461469 case _ =>
462470 throw("burnTokens: invalid asset")
463471 }
464472 let binding = _loadBinding(executionChainId_, assetId)
465473 let assetContract = binding._1
466474 let executionAsset = binding._2
467475 let minAmount = binding._3
468476 let minFee = binding._4
469477 let thresholdFee = binding._5
470478 let beforePercentFee = binding._6
471479 let afterPercentFee = binding._7
472480 let enabled = binding._8
473481 let err1 = if (if (_validateAddress(toString(assetContract), "burnTokens: no such binding"))
474482 then _validateInt(amount, minAmount, MAX_INT, "burnTokens: less than min")
475483 else false)
476484 then _validateBool(enabled, true, "burnTokens: token is disabled")
477485 else false
478486 if ((err1 == err1))
479487 then {
480488 let assetDecimals = _asInt(invoke(assetContract, FUNC_GET_DECIMALS, nil, nil))
481489 if ((assetDecimals == assetDecimals))
482490 then {
483491 let percent = if ((amount > thresholdFee))
484492 then afterPercentFee
485493 else beforePercentFee
486494 let fee = (minFee + fraction(amount, percent, PERCENT_FACTOR))
487495 let err2 = _validateInt(amount, (fee + 1), MAX_INT, "burnTokens: fee more than amount")
488496 if ((err2 == err2))
489497 then {
490498 let amountToSend = (amount - fee)
491499 let err3 = _validateInt(amountToSend, (gaslessReward_ + 1), MAX_INT, "burnTokens: reward more than amount")
492500 if ((err3 == err3))
493501 then {
494502 let updateFee = (_loadFee(assetId) + fee)
495503 let normalizedAmount = _normalizeDecimals(amountToSend, assetDecimals, DECIMALS)
496504 let normalizedGasless = _normalizeDecimals(gaslessReward_, assetDecimals, DECIMALS)
497505 let invocation = invoke(_loadRootAdapter(), FUNC_RELEASE_TOKENS, [executionChainId_, executionAsset, normalizedAmount, recipient_, normalizedGasless], nil)
498506 if ((invocation == invocation))
499507 then $Tuple2((_saveFee(assetId, updateFee) ++ [Burn(assetId, amountToSend)]), unit)
500508 else throw("Strict value is not equal to itself.")
501509 }
502510 else throw("Strict value is not equal to itself.")
503511 }
504512 else throw("Strict value is not equal to itself.")
505513 }
506514 else throw("Strict value is not equal to itself.")
507515 }
508516 else throw("Strict value is not equal to itself.")
509517 }
510518 else throw("Strict value is not equal to itself.")
511519 }
512520
513521
514522
515523 @Callable(i)
516524 func burnTokensV2 (executionChainId_,recipient_,referrer_,gaslessReward_) = {
517525 let err = if (if (if (if (if (if (_whenInitialized())
518526 then _whenNotPaused()
519527 else false)
520528 then _validateChain(executionChainId_, "burnTokensV2: invalid execution chain")
521529 else false)
522530 then _validatePaymentsSize(i.payments, 1, "burnTokensV2: no payment")
523531 else false)
524532 then _validateInt(gaslessReward_, 0, MAX_INT, "burnTokensV2: invalid gaslessReward")
525533 else false)
526534 then _validateInt(i.payments[0].amount, 0, MAX_INT, "burnTokensV2: invalid payment amount")
527535 else false)
528536 then _validateReferrer(referrer_, "burnTokensV2: invalid referrer")
529537 else false
530538 if ((err == err))
531539 then {
532540 let amount = i.payments[0].amount
533541 let assetId = match i.payments[0].assetId {
534542 case a: ByteVector =>
535543 a
536544 case _ =>
537545 throw("burnTokensV2: invalid asset")
538546 }
539547 let binding = _loadBinding(executionChainId_, assetId)
540548 let assetContract = binding._1
541549 let executionAsset = binding._2
542550 let minAmount = binding._3
543551 let minFee = binding._4
544552 let thresholdFee = binding._5
545553 let beforePercentFee = binding._6
546554 let afterPercentFee = binding._7
547555 let enabled = binding._8
548556 let err1 = if (if (_validateAddress(toString(assetContract), "burnTokensV2: no such binding"))
549557 then _validateInt(amount, minAmount, MAX_INT, "burnTokensV2: less than min")
550558 else false)
551559 then _validateBool(enabled, true, "burnTokensV2: token is disabled")
552560 else false
553561 if ((err1 == err1))
554562 then {
555563 let assetDecimals = _asInt(invoke(assetContract, FUNC_GET_DECIMALS, nil, nil))
556564 if ((assetDecimals == assetDecimals))
557565 then {
558566 let percent = if ((amount > thresholdFee))
559567 then afterPercentFee
560568 else beforePercentFee
561569 let fee = (minFee + fraction(amount, percent, PERCENT_FACTOR))
562570 let err2 = _validateInt(amount, (fee + 1), MAX_INT, "burnTokensV2: fee more than amount")
563571 if ((err2 == err2))
564572 then {
565- let $t01816718572 = if ((referrer_ != ""))
573+ let $t01831518720 = if ((referrer_ != ""))
566574 then {
567575 let referrer = addressFromStringValue(referrer_)
568576 let referrerFeeAmount = fraction(_loadReferrerFeePercent(executionChainId_, referrer), fee, PERCENT_FACTOR)
569577 $Tuple2(referrerFeeAmount, [ScriptTransfer(referrer, referrerFeeAmount, assetId)])
570578 }
571579 else $Tuple2(0, nil)
572- let referrerFee = $t01816718572._1
573- let referrerActions = $t01816718572._2
580+ let referrerFee = $t01831518720._1
581+ let referrerActions = $t01831518720._2
574582 let amountToSend = (amount - fee)
575583 let err3 = _validateInt(amountToSend, (gaslessReward_ + 1), MAX_INT, "burnTokensV2: reward more than amount")
576584 if ((err3 == err3))
577585 then {
578586 let updateFee = ((_loadFee(assetId) + fee) - referrerFee)
579587 let normalizedAmount = _normalizeDecimals(amountToSend, assetDecimals, DECIMALS)
580588 let normalizedGasless = _normalizeDecimals(gaslessReward_, assetDecimals, DECIMALS)
581589 let invocation = invoke(_loadRootAdapter(), FUNC_RELEASE_TOKENS, [executionChainId_, executionAsset, normalizedAmount, recipient_, normalizedGasless], nil)
582590 if ((invocation == invocation))
583591 then $Tuple2(((_saveFee(assetId, updateFee) ++ referrerActions) ++ [Burn(assetId, amountToSend)]), unit)
584592 else throw("Strict value is not equal to itself.")
585593 }
586594 else throw("Strict value is not equal to itself.")
587595 }
588596 else throw("Strict value is not equal to itself.")
589597 }
590598 else throw("Strict value is not equal to itself.")
591599 }
592600 else throw("Strict value is not equal to itself.")
593601 }
594602 else throw("Strict value is not equal to itself.")
595603 }
596604
597605
598606
599607 @Callable(i)
600608 func transferFee (executionChainId_,assetId_) = {
601609 let err = if (if (_whenInitialized())
602610 then _whenNotPaused()
603611 else false)
604612 then _validateAsset(assetId_, "transferFee: invalid asset")
605613 else false
606614 if ((err == err))
607615 then {
608616 let assetId = fromBase58String(assetId_)
609617 let binding = _loadBinding(executionChainId_, assetId)
610618 let assetContract = binding._1
611619 let enabled = binding._8
612620 let err1 = if (_validateAddress(toString(assetContract), "transferFee: no such binding"))
613621 then _validateBool(enabled, true, "transferFee: token is disabled")
614622 else false
615623 if ((err1 == err1))
616624 then $Tuple2((_saveFee(assetId, 0) ++ [ScriptTransfer(_loadFeeRecipient(), _loadFee(assetId), assetId)]), unit)
617625 else throw("Strict value is not equal to itself.")
618626 }
619627 else throw("Strict value is not equal to itself.")
620628 }
621629
622630
623631
624632 @Callable(i)
625633 func updateCallerContract (callerContract_) = {
626634 let err = if (_onlyThisContract(i.caller))
627635 then _whenInitialized()
628636 else false
629637 if ((err == err))
630638 then $Tuple2(_saveCallerContract(callerContract_), unit)
631639 else throw("Strict value is not equal to itself.")
632640 }
633641
634642
635643
636644 @Callable(i)
637645 func updateExecutionChain (executionChainId_,enabled_) = {
638646 let err = if (if (_onlyThisContract(i.caller))
639647 then _whenInitialized()
640648 else false)
641649 then _validateInt(executionChainId_, 0, MAX_INT, "updateExecutionChain: invalid executionChainId")
642650 else false
643651 if ((err == err))
644652 then $Tuple2(_saveChain(executionChainId_, enabled_), unit)
645653 else throw("Strict value is not equal to itself.")
646654 }
647655
648656
649657
650658 @Callable(i)
651659 func updateFeeRecipient (feeRecipient_) = {
652660 let err = if (if (_onlyThisContract(i.caller))
653661 then _whenInitialized()
654662 else false)
655663 then _validateAddress(feeRecipient_, "updateFeeRecipient: invalid feeRecipient")
656664 else false
657665 if ((err == err))
658666 then $Tuple2(_saveFeeRecipient(addressFromStringValue(feeRecipient_)), unit)
659667 else throw("Strict value is not equal to itself.")
660668 }
661669
662670
663671
664672 @Callable(i)
665673 func updateReferrer (executionChainId_,referrer_,fee_) = {
666674 let err = if (if (if (if (_onlyThisContract(i.caller))
667675 then _whenInitialized()
668676 else false)
669677 then _validateChain(executionChainId_, "updateReferrer: invalid execution chain")
670678 else false)
671679 then _validateAddress(referrer_, "updateReferrer: invalid referrer")
672680 else false)
673681 then _validateInt(fee_, 0, MAX_REFERRER_FEE, "updateReferrer: invalid fee")
674682 else false
675683 if ((err == err))
676684 then $Tuple2(_saveReferrerFeePercent(executionChainId_, addressFromStringValue(referrer_), fee_), unit)
677685 else throw("Strict value is not equal to itself.")
678686 }
679687
680688
681689
682690 @Callable(i)
683691 func updateBindingInfo (executionChainId_,assetContract_,executionAsset_,minAmount_,minFee_,thresholdFee_,beforePercentFee_,afterPercentFee_,enabled_) = {
684692 let err = if (if (if (if (if (if (if (if (_onlyThisContract(i.caller))
685693 then _whenInitialized()
686694 else false)
687695 then _validateAddress(assetContract_, "updateBindingInfo: invalid asset contract")
688696 else false)
689697 then _validateInt(executionChainId_, 0, MAX_INT, "updateBindingInfo: invalid executionChainId")
690698 else false)
691699 then _validateInt(minAmount_, 0, MAX_INT, "updateBindingInfo: invalid minAmount")
692700 else false)
693701 then _validateInt(minFee_, 0, MAX_INT, "updateBindingInfo: invalid minFee")
694702 else false)
695703 then _validateInt(thresholdFee_, 0, MAX_INT, "updateBindingInfo: invalid thresholdFee")
696704 else false)
697705 then _validateInt(beforePercentFee_, 0, MAX_INT, "updateBindingInfo: invalid beforePercentFee")
698706 else false)
699707 then _validateInt(afterPercentFee_, 0, MAX_INT, "updateBindingInfo: invalid afterPercentFee")
700708 else false
701709 if ((err == err))
702710 then {
703711 let assetId = _asBytes(invoke(addressFromStringValue(assetContract_), FUNC_GET_ASSET_ID, nil, nil))
704712 if ((assetId == assetId))
705713 then {
706714 let binding = $Tuple8(addressFromStringValue(assetContract_), executionAsset_, minAmount_, minFee_, thresholdFee_, beforePercentFee_, afterPercentFee_, enabled_)
707715 $Tuple2(_saveBinding(executionChainId_, assetId, binding), unit)
708716 }
709717 else throw("Strict value is not equal to itself.")
710718 }
711719 else throw("Strict value is not equal to itself.")
712720 }
713721
714722
715723
716724 @Callable(i)
717725 func addCrosschainPoolContract (crosschainPoolContract_,bridgeAssetContract_) = {
718726 let err = if (if (if (_onlyThisContract(i.caller))
719727 then _whenInitialized()
720728 else false)
721729 then _validateAddress(crosschainPoolContract_, "addCrosschainPoolContract: invalid crosschainPoolContract")
722730 else false)
723731 then _validateAddress(bridgeAssetContract_, "addCrosschainPoolContract: invalid bridgeAssetContract")
724732 else false
725733 if ((err == err))
726734 then $Tuple2((_saveCrosschainPoolContracts((_loadCrosschainPoolContracts() :+ crosschainPoolContract_)) ++ _saveBridgeAssetContract(addressFromStringValue(crosschainPoolContract_), addressFromStringValue(bridgeAssetContract_))), unit)
727735 else throw("Strict value is not equal to itself.")
728736 }
729737
730738
731739
732740 @Callable(i)
733741 func pause () = {
734742 let err = if (if (_onlyPauser(i.caller))
735743 then _whenInitialized()
736744 else false)
737745 then _whenNotPaused()
738746 else false
739747 if ((err == err))
740748 then $Tuple2(_savePause(true), unit)
741749 else throw("Strict value is not equal to itself.")
742750 }
743751
744752
745753
746754 @Callable(i)
747755 func unpause () = {
748756 let err = if (if (_onlyPauser(i.caller))
749757 then _whenInitialized()
750758 else false)
751759 then _whenPaused()
752760 else false
753761 if ((err == err))
754762 then $Tuple2(_savePause(false), unit)
755763 else throw("Strict value is not equal to itself.")
756764 }
757765
758766
759767
760768 @Callable(i)
761769 func updatePauser (pauser_) = {
762770 let err = if (if (_onlyThisContract(i.caller))
763771 then _whenInitialized()
764772 else false)
765773 then _validateAddress(pauser_, "updatePauser: invalid pauser")
766774 else false
767775 if ((err == err))
768776 then $Tuple2(_savePauser(addressFromStringValue(pauser_)), unit)
769777 else throw("Strict value is not equal to itself.")
770778 }
771779
772780
773781
774782 @Callable(i)
775783 func setMultisig (multisig_) = {
776784 let err = if (_onlyThisContract(i.caller))
777785 then _validateAddress(multisig_, "setMultisig: invalid multisig")
778786 else false
779787 if ((err == err))
780788 then $Tuple2(_saveMultisig(addressFromStringValue(multisig_)), unit)
781789 else throw("Strict value is not equal to itself.")
782790 }
783791
784792
785793 @Verifier(tx)
786794 func verify () = match getString(KEY_MULTISIG) {
787795 case multisig: String =>
788796 valueOrElse(getBoolean(addressFromStringValue(multisig), makeString([KEY_STATUS, toString(this), toBase58String(tx.id)], SEPARATOR)), false)
789797 case _ =>
790798 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
791799 }
792800

github/deemru/w8io/026f985 
73.26 ms