tx · 9SBX3dfcNRaE1YYScpjBKmgUbjb6gj997RL4P9e5TZyD

3NCGjbgqZVk7eaqrLMEnEnqRhozNm1KTG5z:  -0.01900000 Waves

2025.01.18 06:00 [3463974] smart account 3NCGjbgqZVk7eaqrLMEnEnqRhozNm1KTG5z > SELF 0.00000000 Waves

{ "type": 13, "id": "9SBX3dfcNRaE1YYScpjBKmgUbjb6gj997RL4P9e5TZyD", "fee": 1900000, "feeAssetId": null, "timestamp": 1737169280406, "version": 2, "chainId": 84, "sender": "3NCGjbgqZVk7eaqrLMEnEnqRhozNm1KTG5z", "senderPublicKey": "5CoDbXxoqnvJpx9GrS6M4G5GYJXh9rcoiXJz7RYTPVkL", "proofs": [ "4HLBj5mNqwyi4nsnfCtWTHw2PPUeYC9GkG9xJh4qUpM8ZN2iuSRAcTWn1rJTa2ssc3LDzkx1Ux56J7o2bmtj9vDX" ], "script": "base64:BgIyCAISCgoIAQgEAhEYFBISBAoCCAgSABIDCgEBEgASABIAEgMKAQESABIDCgEIEgMKAQg4AANNMTYAgICE/qbe4READlNUQUtFUlNfQU1PVU5UAICAzvK+j6oFAAtURUFNX0FNT1VOVACAgJqm6q/jAQANTUFSS0VUX0FNT1VOVACAgJzl/Z7UCgALWUVBUl9CTE9DS1MJAGgCAO0CAKALAAxTVEFLRV9QRVJJT0QJAGgCAAUFC1lFQVJfQkxPQ0tTAAtCTEVTU19QUklDRQCA0NvD9AIADUxPVFRFUllfUFJJQ0UAgNDbw/QCABNERUZBVUxUX0ZPTU9fUEVSSU9EADwAD01JTl9GT01PX1BFUklPRAACAAxSQU5ET01fREVMQVkAAgAUQ1VSUkVOVF9KQUNLUE9UX1BFUkMAMgARTkVYVF9KQUNLUE9UX1BFUkMAFAAJVEVBTV9QRVJDAAoADmdvcmNBc3NldElkS2V5Agtnb3JjQXNzZXRJZAALZ29yY0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoQgBBQ5nb3JjQXNzZXRJZEtleQIWR09SQyBpcyBub3QgaXNzdWVkIHlldAAMaXNzdWVUaW1lS2V5Aglpc3N1ZVRpbWUAFXN0YWtlcnNBbW91bnRUb3RhbEtleQISc3Rha2Vyc0Ftb3VudFRvdGFsABRzdGFrZXJzQW1vdW50TGVmdEtleQIRc3Rha2Vyc0Ftb3VudExlZnQAFHN0YWtlZEFtb3VudFRvdGFsS2V5AgtzdGFrZWRUb3RhbAEVc3Rha2VkQW1vdW50QnlVc2VyS2V5AQRhZGRyCQCsAgICDXN0YWtlZEFtb3VudF8FBGFkZHIBFmxhc3RDbGFpbVRpbWVCeVVzZXJLZXkBBGFkZHIJAKwCAgIObGFzdENsYWltVGltZV8FBGFkZHIADGZvbW9FcG9jaEtleQIJZm9tb0Vwb2NoABFjdXJyRm9tb1BlcmlvZEtleQIOY3VyckZvbW9QZXJpb2QAD2xhc3RGb21vVGltZUtleQIMbGFzdEZvbW9UaW1lABJjdXJyRm9tb0phY2twb3RLZXkCD2N1cnJGb21vSmFja3BvdAASbmV4dEZvbW9KYWNrcG90S2V5Ag9uZXh0Rm9tb0phY2twb3QAEWxhc3RGb21vUGxheWVyS2V5Ag5sYXN0Rm9tb1BsYXllcgARbGFzdEZvbW9XaW5uZXJLZXkCDmxhc3RGb21vV2lubmVyABdsYXN0Rm9tb1dpbm5lckFtb3VudEtleQIUbGFzdEZvbW9XaW5uZXJBbW91bnQAFWxhc3RGb21vV2lubmVyVGltZUtleQISbGFzdEZvbW9XaW5uZXJUaW1lABF0ZWFtV2FsbGV0QWRkcktleQIOdGVhbVdhbGxldEFkZHIADWJyb2tlckFkZHJLZXkCCmJyb2tlckFkZHIBCWtleUNvbW1pdAEHYWRkcmVzcwkArAICAg9maW5pc2hCbG9ja0Zvcl8FB2FkZHJlc3MBCGtleUd1ZXNzAQdhZGRyZXNzCQCsAgICCWd1ZXNzRm9yXwUHYWRkcmVzcwEHa2V5U2FsdAEHYWRkcmVzcwkArAICAghzYWx0Rm9yXwUHYWRkcmVzcwAVY3VyckxvdHRlcnlKYWNrcG90S2V5AhJjdXJyTG90dGVyeUphY2twb3QAFW5leHRMb3R0ZXJ5SmFja3BvdEtleQISbmV4dExvdHRlcnlKYWNrcG90ABRsYXN0TG90dGVyeVdpbm5lcktleQIRbGFzdExvdHRlcnlXaW5uZXIAGmxhc3RMb3R0ZXJ5V2lubmVyQW1vdW50S2V5AhdsYXN0TG90dGVyeVdpbm5lckFtb3VudAAYbGFzdExvdHRlcnlXaW5uZXJUaW1lS2V5AhVsYXN0TG90dGVyeVdpbm5lclRpbWUAF2ZvbW9OdW1VbmlxdWVQbGF5ZXJzS2V5AhRmb21vTnVtVW5pcXVlUGxheWVycwAVZm9tb1RvdGFsTnVtU3Rha2VzS2V5AhJmb21vVG90YWxOdW1TdGFrZXMAGGZvbW9Ub3RhbFN0YWtlZEFtb3VudEtleQIVZm9tb1RvdGFsU3Rha2VkQW1vdW50ARRmb21vVXNlck51bVN0YWtlc0tleQEHYWRkcmVzcwkArAICAhJmb21vVXNlck51bVN0YWtlc18FB2FkZHJlc3MBF2ZvbW9Vc2VyU3Rha2VkQW1vdW50S2V5AQdhZGRyZXNzCQCsAgICFWZvbW9Vc2VyU3Rha2VkQW1vdW50XwUHYWRkcmVzcwESZm9tb1VzZXJOdW1XaW5zS2V5AQdhZGRyZXNzCQCsAgICEGZvbW9Vc2VyTnVtV2luc18FB2FkZHJlc3MBFGZvbW9Vc2VyV29uQW1vdW50S2V5AQdhZGRyZXNzCQCsAgICEmZvbW9Vc2VyV29uQW1vdW50XwUHYWRkcmVzcwAZZm9tb0Zhdm9yaXRlQnlOdW1HYW1lc0tleQIWZm9tb0Zhdm9yaXRlQnlOdW1HYW1lcwAXZm9tb0Zhdm9yaXRlQnlBbW91bnRLZXkCFGZvbW9GYXZvcml0ZUJ5QW1vdW50AQlnb3JjU3RhdHMBC3VzZXJBZGRyT3B0BA9hbW91bnRMZWZ0VG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUUc3Rha2Vyc0Ftb3VudExlZnRLZXkAAAQMbGFzdFVzZXJUaW1lCQELdmFsdWVPckVsc2UCCQCfCAEJARZsYXN0Q2xhaW1UaW1lQnlVc2VyS2V5AQULdXNlckFkZHJPcHQA////////////AQMJAGYCAAAFDGxhc3RVc2VyVGltZQkAlAoCAAAFD2Ftb3VudExlZnRUb3RhbAQJaXNzdWVUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUMaXNzdWVUaW1lS2V5AhZHT1JDIGlzIG5vdCBpc3N1ZWQgeWV0BApub3dMaW1pdGVkCQCXAwEJAMwIAgUGaGVpZ2h0CQDMCAIJAGQCBQlpc3N1ZVRpbWUFDFNUQUtFX1BFUklPRAUDbmlsBAp1c2VyU2hhcmVzCQELdmFsdWVPckVsc2UCCQCfCAEJARVzdGFrZWRBbW91bnRCeVVzZXJLZXkBBQt1c2VyQWRkck9wdAAABAt0b3RhbFNoYXJlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBRRzdGFrZWRBbW91bnRUb3RhbEtleQAABBJzdGFrZXJzQW1vdW50VG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUVc3Rha2Vyc0Ftb3VudFRvdGFsS2V5BQ5TVEFLRVJTX0FNT1VOVAQMdXNlclRlbXBvcmFsCQBrAwUSc3Rha2Vyc0Ftb3VudFRvdGFsCQBlAgUKbm93TGltaXRlZAUMbGFzdFVzZXJUaW1lBQxTVEFLRV9QRVJJT0QECnVzZXJBbW91bnQDCQECIT0CBQt0b3RhbFNoYXJlcwAACQBrAwUMdXNlclRlbXBvcmFsBQp1c2VyU2hhcmVzBQt0b3RhbFNoYXJlcwAACQCUCgIFCnVzZXJBbW91bnQJAGUCBQ9hbW91bnRMZWZ0VG90YWwFCnVzZXJBbW91bnQBCmZpeGVkUG9pbnQCA3ZhbAhkZWNpbWFscwQGdGVuUG93CQBsBgAKAAAFCGRlY2ltYWxzAAAAAAUERE9XTgQHbG93UGFydAkApAMBCQBqAgUDdmFsBQZ0ZW5Qb3cEBnplcm9lcwkAsAICCQCkAwEFBnRlblBvdwkAZAIAAQkAsQIBBQdsb3dQYXJ0CQCsAgIJAKwCAgkArAICCQCkAwEJAGkCBQN2YWwFBnRlblBvdwIBLgUGemVyb2VzBQdsb3dQYXJ0AQ1nZXROZXdMZWFkZXJzAw1vbGRMZWFkZXJzU3RyB25ld0FkZHIJbmV3QW1vdW50BAxuZXdDYW5kaWRhdGUJAKwCAgkArAICBQduZXdBZGRyAgFfCQCkAwEFCW5ld0Ftb3VudAMJAAACBQ1vbGRMZWFkZXJzU3RyAgAJAMwIAgUMbmV3Q2FuZGlkYXRlBQNuaWwKAQxzb3J0QnlBbW91bnQCA2FjYwJlbAQLYWRkcl9hbW91bnQJALUJAgUCZWwCAV8EBGFkZHIJAJEDAgULYWRkcl9hbW91bnQAAAQGYW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULYWRkcl9hbW91bnQAAQMIBQNhY2MCXzIDCQAAAgUEYWRkcgUHbmV3QWRkcgUDYWNjCQCUCgIJAM0IAggFA2FjYwJfMQUCZWwGAwkAAAIFBGFkZHIFB25ld0FkZHIJAJQKAgkAzQgCCAUDYWNjAl8xBQxuZXdDYW5kaWRhdGUGAwkAZgIFBmFtb3VudAUJbmV3QW1vdW50CQCUCgIJAM0IAggFA2FjYwJfMQUCZWwHCQCUCgIJAM0IAgkAzQgCCAUDYWNjAl8xBQxuZXdDYW5kaWRhdGUFAmVsBgQGcmVzdWx0CgACJGwJALUJAgUNb2xkTGVhZGVyc1N0cgIBOgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMc29ydEJ5QW1vdW50AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyAzCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADBANhcnIIBQZyZXN1bHQCXzEDCAUGcmVzdWx0Al8yAwkAZgIJAJADAQUDYXJyAAMJAMwIAgkAkQMCBQNhcnIAAAkAzAgCCQCRAwIFA2FycgABCQDMCAIJAJEDAgUDYXJyAAIFA25pbAUDYXJyAwkAZwIJAJADAQUDYXJyAAMFA2FycgkAzQgCBQNhcnIFDG5ld0NhbmRpZGF0ZQEMZm9tb0ludGVybmFsAQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQtnb3JjQXNzZXRJZAkAAgECE0dPUkMgcGF5bWVudHMgb25seSEEBmNoYW5nZQkAZQIFA2FtdAULQkxFU1NfUFJJQ0UDCQBmAgAABQZjaGFuZ2UJAAIBCQCsAgIJAKwCAgkArAICAhZZb3UgbmVlZCB0byBzYWNyaWZpY2UgCQEKZml4ZWRQb2ludAIFC0JMRVNTX1BSSUNFAAgCFiBHT1JDLCBidXQgSSBzZWUgb25seSAJAQpmaXhlZFBvaW50AgUDYW10AAgEDWNoYW5nZUFjdGlvbnMDCQBmAgUGY2hhbmdlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZjaGFuZ2UFC2dvcmNBc3NldElkBQNuaWwFA25pbAQMbGFzdEZvbW9UaW1lCQELdmFsdWVPckVsc2UCCQCfCAEFD2xhc3RGb21vVGltZUtleQAABA5sYXN0Rm9tb1BsYXllcgkBC3ZhbHVlT3JFbHNlAgkAoggBBRFsYXN0Rm9tb1BsYXllcktleQIABBJsYXN0Rm9tb051bVdpbnNLZXkJARJmb21vVXNlck51bVdpbnNLZXkBBQ5sYXN0Rm9tb1BsYXllcgQUbGFzdEZvbW9Xb25BbW91bnRLZXkJARRmb21vVXNlcldvbkFtb3VudEtleQEFDmxhc3RGb21vUGxheWVyBA9sYXN0Rm9tb051bVdpbnMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUSbGFzdEZvbW9OdW1XaW5zS2V5AAAEEWxhc3RGb21vV29uQW1vdW50CQELdmFsdWVPckVsc2UCCQCfCAEFFGxhc3RGb21vV29uQW1vdW50S2V5AAAEEGRlbHRhQ3VyckphY2twb3QJAGsDBQtCTEVTU19QUklDRQUUQ1VSUkVOVF9KQUNLUE9UX1BFUkMAZAQQZGVsdGFOZXh0SmFja3BvdAkAawMFC0JMRVNTX1BSSUNFBRFORVhUX0pBQ0tQT1RfUEVSQwBkBA9kZWx0YVRlYW1BbW91bnQJAGsDBQtCTEVTU19QUklDRQUJVEVBTV9QRVJDAGQEEmRlbHRhU3Rha2Vyc0Ftb3VudAkAZQIJAGUCCQBlAgULQkxFU1NfUFJJQ0UFEGRlbHRhQ3VyckphY2twb3QFEGRlbHRhTmV4dEphY2twb3QFD2RlbHRhVGVhbUFtb3VudAQJZm9tb0Vwb2NoCQELdmFsdWVPckVsc2UCCQCfCAEFDGZvbW9FcG9jaEtleQAABA5jdXJyRm9tb1BlcmlvZAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRFjdXJyRm9tb1BlcmlvZEtleQUTREVGQVVMVF9GT01PX1BFUklPRAQObmV4dEZvbW9QZXJpb2QJAJYDAQkAzAgCBQ9NSU5fRk9NT19QRVJJT0QJAMwIAgkAZQIFDmN1cnJGb21vUGVyaW9kAAEFA25pbAQPZm9tb0N1cnJKYWNrcG90CQELdmFsdWVPckVsc2UCCQCfCAEFEmN1cnJGb21vSmFja3BvdEtleQAABA9mb21vTmV4dEphY2twb3QJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUSbmV4dEZvbW9KYWNrcG90S2V5AAAED29sZExlYWRlcnNCeU51bQkBC3ZhbHVlT3JFbHNlAgkAoggBBRlmb21vRmF2b3JpdGVCeU51bUdhbWVzS2V5AgAEEm9sZExlYWRlcnNCeUFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAoggBBRdmb21vRmF2b3JpdGVCeUFtb3VudEtleQIABAtmb21vQWN0aW9ucwMDAwkAZgIFBmhlaWdodAkAZAIFDGxhc3RGb21vVGltZQUOY3VyckZvbW9QZXJpb2QJAGYCBQ9mb21vQ3VyckphY2twb3QAAAcJAQIhPQIFDmxhc3RGb21vUGxheWVyAgAHCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDmxhc3RGb21vUGxheWVyBQ9mb21vQ3VyckphY2twb3QFC2dvcmNBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFEWxhc3RGb21vV2lubmVyS2V5BQ5sYXN0Rm9tb1BsYXllcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUXbGFzdEZvbW9XaW5uZXJBbW91bnRLZXkFD2ZvbW9DdXJySmFja3BvdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVbGFzdEZvbW9XaW5uZXJUaW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSY3VyckZvbW9KYWNrcG90S2V5CQBkAgUPZm9tb05leHRKYWNrcG90BRBkZWx0YUN1cnJKYWNrcG90CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJuZXh0Rm9tb0phY2twb3RLZXkFEGRlbHRhTmV4dEphY2twb3QJAMwIAgkBDEludGVnZXJFbnRyeQIFDGZvbW9FcG9jaEtleQkAZAIFCWZvbW9FcG9jaAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFjdXJyRm9tb1BlcmlvZEtleQUTREVGQVVMVF9GT01PX1BFUklPRAkAzAgCCQELU3RyaW5nRW50cnkCBRlmb21vRmF2b3JpdGVCeU51bUdhbWVzS2V5CQC5CQIJAQ1nZXROZXdMZWFkZXJzAwUPb2xkTGVhZGVyc0J5TnVtBQ5sYXN0Rm9tb1BsYXllcgkAZAIFD2xhc3RGb21vTnVtV2lucwABAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIFF2ZvbW9GYXZvcml0ZUJ5QW1vdW50S2V5CQC5CQIJAQ1nZXROZXdMZWFkZXJzAwUSb2xkTGVhZGVyc0J5QW1vdW50BQ5sYXN0Rm9tb1BsYXllcgkAZAIFEWxhc3RGb21vV29uQW1vdW50BQ9mb21vQ3VyckphY2twb3QCAToJAMwIAgkBDEludGVnZXJFbnRyeQIFEmxhc3RGb21vTnVtV2luc0tleQkAZAIFD2xhc3RGb21vTnVtV2lucwABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRsYXN0Rm9tb1dvbkFtb3VudEtleQkAZAIFEWxhc3RGb21vV29uQW1vdW50BQ9mb21vQ3VyckphY2twb3QFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSY3VyckZvbW9KYWNrcG90S2V5CQBkAgUPZm9tb0N1cnJKYWNrcG90BRBkZWx0YUN1cnJKYWNrcG90CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJuZXh0Rm9tb0phY2twb3RLZXkJAGQCBQ9mb21vTmV4dEphY2twb3QFEGRlbHRhTmV4dEphY2twb3QJAMwIAgkBDEludGVnZXJFbnRyeQIFEWN1cnJGb21vUGVyaW9kS2V5BQ5uZXh0Rm9tb1BlcmlvZAUDbmlsBARhZGRyCQClCAEIBQFpBmNhbGxlcgQUZm9tb051bVVuaXF1ZVBsYXllcnMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUXZm9tb051bVVuaXF1ZVBsYXllcnNLZXkAAAQQdXNlck51bVN0YWtlc0tleQkBFGZvbW9Vc2VyTnVtU3Rha2VzS2V5AQUEYWRkcgQTdXNlclN0YWtlZEFtb3VudEtleQkBF2ZvbW9Vc2VyU3Rha2VkQW1vdW50S2V5AQUEYWRkcgQNdXNlck51bVN0YWtlcwkAnwgBBRB1c2VyTnVtU3Rha2VzS2V5BAxzdGF0c0FjdGlvbnMJAM4IAgMJAQlpc0RlZmluZWQBBQ11c2VyTnVtU3Rha2VzCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRB1c2VyTnVtU3Rha2VzS2V5CQBkAgkBBXZhbHVlAQUNdXNlck51bVN0YWtlcwABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRN1c2VyU3Rha2VkQW1vdW50S2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBRN1c2VyU3Rha2VkQW1vdW50S2V5AAAFC0JMRVNTX1BSSUNFBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIFF2ZvbW9OdW1VbmlxdWVQbGF5ZXJzS2V5CQBkAgUUZm9tb051bVVuaXF1ZVBsYXllcnMAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgUQdXNlck51bVN0YWtlc0tleQABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRN1c2VyU3Rha2VkQW1vdW50S2V5BQtCTEVTU19QUklDRQUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVmb21vVG90YWxOdW1TdGFrZXNLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFFWZvbW9Ub3RhbE51bVN0YWtlc0tleQAAAAEJAMwIAgkBDEludGVnZXJFbnRyeQIFGGZvbW9Ub3RhbFN0YWtlZEFtb3VudEtleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUYZm9tb1RvdGFsU3Rha2VkQW1vdW50S2V5AAAFC0JMRVNTX1BSSUNFBQNuaWwJAM4IAgkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFD2xhc3RGb21vVGltZUtleQUGaGVpZ2h0CQDMCAIJAQtTdHJpbmdFbnRyeQIFEWxhc3RGb21vUGxheWVyS2V5CQClCAEIBQFpBmNhbGxlcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1OCkBBRF0ZWFtV2FsbGV0QWRkcktleQUPZGVsdGFUZWFtQW1vdW50BQtnb3JjQXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUUc3Rha2Vyc0Ftb3VudExlZnRLZXkJAGQCCQERQGV4dHJOYXRpdmUoMTA1NSkBBRRzdGFrZXJzQW1vdW50TGVmdEtleQUSZGVsdGFTdGFrZXJzQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVzdGFrZXJzQW1vdW50VG90YWxLZXkJAGQCCQERQGV4dHJOYXRpdmUoMTA1NSkBBRVzdGFrZXJzQW1vdW50VG90YWxLZXkFEmRlbHRhU3Rha2Vyc0Ftb3VudAUDbmlsBQ1jaGFuZ2VBY3Rpb25zBQtmb21vQWN0aW9ucwUMc3RhdHNBY3Rpb25zAQ9nZXRSYW5kb21OdW1iZXIDCG1heFZhbHVlBHNhbHQHZW50cm9weQMJAGcCAAAFCG1heFZhbHVlCQACAQIWbWF4VmFsdWUgc2hvdWxkIGJlID4gMAQKcmFuZG9tSGFzaAkA1BYBCQDLAQIFBHNhbHQFB2VudHJvcHkJAGoCCQCxCQEFCnJhbmRvbUhhc2gFCG1heFZhbHVlAQ53YWxsZXRJbnRlcm5hbAEOdXNlckFkZHJlc3NPcHQEBGFkZHIJAKYIAQUOdXNlckFkZHJlc3NPcHQEB2JhbGFuY2UDCQEJaXNEZWZpbmVkAQUEYWRkcgkA7wcBCQEFdmFsdWUBBQRhZGRyCQEOQmFsYW5jZURldGFpbHMEAAAAAAAAAAAEC2dvcmNCYWxhbmNlAwkBCWlzRGVmaW5lZAEFBGFkZHIJAPAHAgkBBXZhbHVlAQUEYWRkcgULZ29yY0Fzc2V0SWQAAAQKc3Rha2VkR29yYwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEVc3Rha2VkQW1vdW50QnlVc2VyS2V5AQUOdXNlckFkZHJlc3NPcHQAAAkAzAgCCQCsAgICFCVzJWRfX3dhdmVzQmFsYW5jZV9fCQCkAwEIBQdiYWxhbmNlCWF2YWlsYWJsZQkAzAgCCQCsAgICEyVzJWRfX2dvcmNCYWxhbmNlX18JAKQDAQULZ29yY0JhbGFuY2UJAMwIAgkArAICAhIlcyVkX19zdGFrZWRHb3JjX18JAKQDAQUKc3Rha2VkR29yYwUDbmlsCwFpAQh0ZXN0QXJncwgGaW50VmFsBnN0clZhbAdib29sVmFsBmJpblZhbAZhcnJJbnQGYXJyU3RyB2FyckJvb2wGYXJyQmluBQNuaWwBaQENY29uc3RydWN0b3JWMQIOdGVhbVdhbGxldEFkZHIKYnJva2VyQWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAxpc3N1ZWRBbW91bnQFA00xNgQFaXNzdWUJAMMIBwIER09SQwK1AU1lbWUgY29pbiBieSBHb2Qgb2YgUmFuZG9tIENoYW5jZS4gVmlzaXQgaHR0cHM6Ly9nb3JjLm1lbWUsIHNhY3JpZmljZSB0byB0aGUgR29kIG9mIFJhbmRvbSBhbmQgeW91IHdpbGwgcmVjZWl2ZSBhbiBhbnN3ZXIgdG8gYW55IHF1ZXN0aW9uIG9yIGEgYmxlc3NpbmcuIEx1Y2t5IG9uZSBnZXRzIGEgR2lmdCBvZiBHb2QFDGlzc3VlZEFtb3VudAAIBwUEdW5pdAAABAdhc3NldElkCQC4CAEFBWlzc3VlCQDMCAIFBWlzc3VlCQDMCAIJAQtCaW5hcnlFbnRyeQIFDmdvcmNBc3NldElkS2V5BQdhc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxpc3N1ZVRpbWVLZXkFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgUUc3Rha2Vyc0Ftb3VudExlZnRLZXkFDlNUQUtFUlNfQU1PVU5UCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVzdGFrZXJzQW1vdW50VG90YWxLZXkFDlNUQUtFUlNfQU1PVU5UCQDMCAIJAQtTdHJpbmdFbnRyeQIFEXRlYW1XYWxsZXRBZGRyS2V5BQ50ZWFtV2FsbGV0QWRkcgkAzAgCCQELU3RyaW5nRW50cnkCBQ1icm9rZXJBZGRyS2V5BQpicm9rZXJBZGRyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDnRlYW1XYWxsZXRBZGRyBQtURUFNX0FNT1VOVAUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQpicm9rZXJBZGRyBQ1NQVJLRVRfQU1PVU5UBQdhc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxmb21vRXBvY2hLZXkAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgURY3VyckZvbW9QZXJpb2RLZXkFE0RFRkFVTFRfRk9NT19QRVJJT0QFA25pbAFpAQlzdGFrZUdvcmMAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQtnb3JjQXNzZXRJZAkAAgECE0dPUkMgcGF5bWVudHMgb25seSEEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBA0kdDAxMjE2ODEyMjE5CQEJZ29yY1N0YXRzAQUEYWRkcgQKdXNlckFtb3VudAgFDSR0MDEyMTY4MTIyMTkCXzEED2Ftb3VudExlZnRUb3RhbAgFDSR0MDEyMTY4MTIyMTkCXzIEDXVzZXJBbW91bnRLZXkJARVzdGFrZWRBbW91bnRCeVVzZXJLZXkBBQRhZGRyBAxjbGFpbUFjdGlvbnMDCQBmAgUKdXNlckFtb3VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUKdXNlckFtb3VudAULZ29yY0Fzc2V0SWQFA25pbAUDbmlsCQCUCgIJAM4IAgUMY2xhaW1BY3Rpb25zCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRzdGFrZWRBbW91bnRUb3RhbEtleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUUc3Rha2VkQW1vdW50VG90YWxLZXkAAAUDYW10CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ11c2VyQW1vdW50S2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ11c2VyQW1vdW50S2V5AAAFA2FtdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmxhc3RDbGFpbVRpbWVCeVVzZXJLZXkBBQRhZGRyBQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIFFHN0YWtlcnNBbW91bnRMZWZ0S2V5BQ9hbW91bnRMZWZ0VG90YWwFA25pbAUKdXNlckFtb3VudAFpAQt1bnN0YWtlR29yYwEGYW1vdW50AwkAZwIAAAUGYW1vdW50CQACAQIZQW1vdW50IHNob3VsZCBiZSBwb3NpdGl2ZQQEYWRkcgkApQgBCAUBaQZjYWxsZXIDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQNdXNlckFtb3VudEtleQkBFXN0YWtlZEFtb3VudEJ5VXNlcktleQEFBGFkZHIECW9sZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ11c2VyQW1vdW50S2V5AAADCQBmAgAACQBlAgUJb2xkQW1vdW50BQZhbW91bnQJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkBCmZpeGVkUG9pbnQCBQlvbGRBbW91bnQACAIfIEdPUkMgc3Rha2VkLCB0cmllZCB0byB1bnN0YWtlIAkBCmZpeGVkUG9pbnQCBQZhbW91bnQACAQNJHQwMTMxODAxMzIzMQkBCWdvcmNTdGF0cwEFBGFkZHIECnVzZXJBbW91bnQIBQ0kdDAxMzE4MDEzMjMxAl8xBA9hbW91bnRMZWZ0VG90YWwIBQ0kdDAxMzE4MDEzMjMxAl8yBAxjbGFpbUFjdGlvbnMDCQBmAgUKdXNlckFtb3VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUKdXNlckFtb3VudAULZ29yY0Fzc2V0SWQFA25pbAUDbmlsCQCUCgIJAM4IAgUMY2xhaW1BY3Rpb25zCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRzdGFrZWRBbW91bnRUb3RhbEtleQkAZQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBRRzdGFrZWRBbW91bnRUb3RhbEtleQIOTm8gR09SQyBzdGFrZWQFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNdXNlckFtb3VudEtleQkAZQIFCW9sZEFtb3VudAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWbGFzdENsYWltVGltZUJ5VXNlcktleQEFBGFkZHIFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgUUc3Rha2Vyc0Ftb3VudExlZnRLZXkFD2Ftb3VudExlZnRUb3RhbAUDbmlsAAABaQEJY2xhaW1Hb3JjAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpBmNhbGxlcgQNJHQwMTM3OTUxMzg0NgkBCWdvcmNTdGF0cwEFBGFkZHIECnVzZXJBbW91bnQIBQ0kdDAxMzc5NTEzODQ2Al8xBA9hbW91bnRMZWZ0VG90YWwIBQ0kdDAxMzc5NTEzODQ2Al8yBAxjbGFpbUFjdGlvbnMDCQBmAgUKdXNlckFtb3VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUKdXNlckFtb3VudAULZ29yY0Fzc2V0SWQFA25pbAUDbmlsCQCUCgIJAM4IAgUMY2xhaW1BY3Rpb25zCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWbGFzdENsYWltVGltZUJ5VXNlcktleQEFBGFkZHIFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgUUc3Rha2Vyc0Ftb3VudExlZnRLZXkFD2Ftb3VudExlZnRUb3RhbAUDbmlsBQp1c2VyQW1vdW50AWkBCGFuc3dlck1lAAkAlAoCCQEMZm9tb0ludGVybmFsAQUBaQkAsQkBCAUBaQ10cmFuc2FjdGlvbklkAWkBB2JsZXNzTWUACQCUCgIJAQxmb21vSW50ZXJuYWwBBQFpACoBaQELY29tbWl0R3Vlc3MBBWd1ZXNzBARhZGRyCQClCAEIBQFpBmNhbGxlcgQJZmluaXNoS2V5CQEJa2V5Q29tbWl0AQUEYWRkcgQIZ3Vlc3NLZXkJAQhrZXlHdWVzcwEFBGFkZHIDCQEJaXNEZWZpbmVkAQkAnwgBBQlmaW5pc2hLZXkJAAIBAiVZb3UgYWxyZWFkeSBtYWRlIGEgYmV0LCBwbGVhc2UgdXNlIGl0AwMJAGYCAAAFBWd1ZXNzBgkAZgIFBWd1ZXNzAAsJAAIBAiVUaGUgbnVtYmVyIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDExAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQtnb3JjQXNzZXRJZAkAAgECE0dPUkMgcGF5bWVudHMgb25seSEEBmNoYW5nZQkAZQIFA2FtdAUNTE9UVEVSWV9QUklDRQMJAGYCAAAFBmNoYW5nZQkAAgEJAKwCAgkArAICCQCsAgICFllvdSBuZWVkIHRvIHNhY3JpZmljZSAJAQpmaXhlZFBvaW50AgUNTE9UVEVSWV9QUklDRQAIAhYgR09SQywgYnV0IEkgc2VlIG9ubHkgCQEKZml4ZWRQb2ludAIFA2FtdAAIBA1jaGFuZ2VBY3Rpb25zAwkAZgIFBmNoYW5nZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGY2hhbmdlBQtnb3JjQXNzZXRJZAUDbmlsBQNuaWwEC2ZpbmlzaEJsb2NrCQBkAgUGaGVpZ2h0BQxSQU5ET01fREVMQVkEEGRlbHRhQ3VyckphY2twb3QJAGsDBQ1MT1RURVJZX1BSSUNFBRRDVVJSRU5UX0pBQ0tQT1RfUEVSQwBkBBBkZWx0YU5leHRKYWNrcG90CQBrAwUNTE9UVEVSWV9QUklDRQURTkVYVF9KQUNLUE9UX1BFUkMAZAQPZGVsdGFUZWFtQW1vdW50CQBrAwUNTE9UVEVSWV9QUklDRQUJVEVBTV9QRVJDAGQEEmRlbHRhU3Rha2Vyc0Ftb3VudAkAZQIJAGUCCQBlAgUNTE9UVEVSWV9QUklDRQUQZGVsdGFDdXJySmFja3BvdAUQZGVsdGFOZXh0SmFja3BvdAUPZGVsdGFUZWFtQW1vdW50CQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJZmluaXNoS2V5BQtmaW5pc2hCbG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgUIZ3Vlc3NLZXkFBWd1ZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVjdXJyTG90dGVyeUphY2twb3RLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFFWN1cnJMb3R0ZXJ5SmFja3BvdEtleQAABRBkZWx0YUN1cnJKYWNrcG90CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVuZXh0TG90dGVyeUphY2twb3RLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFFW5leHRMb3R0ZXJ5SmFja3BvdEtleQAABRBkZWx0YU5leHRKYWNrcG90CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFEXRlYW1XYWxsZXRBZGRyS2V5BQ9kZWx0YVRlYW1BbW91bnQFC2dvcmNBc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRzdGFrZXJzQW1vdW50TGVmdEtleQkAZAIJARFAZXh0ck5hdGl2ZSgxMDU1KQEFFHN0YWtlcnNBbW91bnRMZWZ0S2V5BRJkZWx0YVN0YWtlcnNBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFFXN0YWtlcnNBbW91bnRUb3RhbEtleQkAZAIJARFAZXh0ck5hdGl2ZSgxMDU1KQEFFXN0YWtlcnNBbW91bnRUb3RhbEtleQUSZGVsdGFTdGFrZXJzQW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlTYWx0AQUEYWRkcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBQNuaWwFDWNoYW5nZUFjdGlvbnMFC2ZpbmlzaEJsb2NrAWkBDGd1ZXNzTG90dGVyeQAEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAlmaW5pc2hLZXkJAQlrZXlDb21taXQBBQRhZGRyBAhndWVzc0tleQkBCGtleUd1ZXNzAQUEYWRkcgQFZ3Vlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQhndWVzc0tleQIXWW91IGhhdmUgbm90IG1hZGUgYSBiZXQEC2ZpbmlzaEJsb2NrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUJZmluaXNoS2V5AhdZb3UgaGF2ZSBub3QgbWFkZSBhIGJldAMJAGYCBQtmaW5pc2hCbG9jawUGaGVpZ2h0CQACAQkArAICAjRSYW5kb20gbnVtYmVyIGlzIG5vdCByZWFkeSB5ZXQsIHdhaXQgdW50aWwgaGVpZ2h0ID0gCQCkAwEFC2ZpbmlzaEJsb2NrBAdlbnRyb3B5CQEFdmFsdWUBCAkBBXZhbHVlAQkA7QcBBQtmaW5pc2hCbG9jawN2cmYEB3NhbHRLZXkJAQdrZXlTYWx0AQUEYWRkcgQEc2FsdAkA2QQBCQELdmFsdWVPckVsc2UCCQCiCAEFB3NhbHRLZXkCB0RFRkFVTFQEBHJhbmQJAQ9nZXRSYW5kb21OdW1iZXIDAAwFBHNhbHQFB2VudHJvcHkEC2N1cnJKYWNrcG90CQELdmFsdWVPckVsc2UCCQCfCAEFFWN1cnJMb3R0ZXJ5SmFja3BvdEtleQAABAp3aW5BY3Rpb25zAwkAAAIFBHJhbmQFBWd1ZXNzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULY3VyckphY2twb3QFC2dvcmNBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFFGxhc3RMb3R0ZXJ5V2lubmVyS2V5BQRhZGRyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRpsYXN0TG90dGVyeVdpbm5lckFtb3VudEtleQULY3VyckphY2twb3QJAMwIAgkBDEludGVnZXJFbnRyeQIFGGxhc3RMb3R0ZXJ5V2lubmVyVGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIFFWN1cnJMb3R0ZXJ5SmFja3BvdEtleQkBC3ZhbHVlT3JFbHNlAgkAnwgBBRVuZXh0TG90dGVyeUphY2twb3RLZXkAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVbmV4dExvdHRlcnlKYWNrcG90S2V5AAAFA25pbAUDbmlsCQCUCgIJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBBQlmaW5pc2hLZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQUIZ3Vlc3NLZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQUHc2FsdEtleQUDbmlsBQp3aW5BY3Rpb25zBQRyYW5kAWkBDXN0YXRzUkVBRE9OTFkBC3VzZXJBZGRyT3B0BA0kdDAxODE5NTE4MjUzCQEJZ29yY1N0YXRzAQULdXNlckFkZHJPcHQECnVzZXJBbW91bnQIBQ0kdDAxODE5NTE4MjUzAl8xBA9hbW91bnRMZWZ0VG90YWwIBQ0kdDAxODE5NTE4MjUzAl8yBA9jdXJyRm9tb0phY2twb3QJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUSY3VyckZvbW9KYWNrcG90S2V5AAAED25leHRGb21vSmFja3BvdAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRJuZXh0Rm9tb0phY2twb3RLZXkAAAQMbGFzdEZvbW9UaW1lCQELdmFsdWVPckVsc2UCCQCfCAEFD2xhc3RGb21vVGltZUtleQAABA5sYXN0Rm9tb1BsYXllcgkBC3ZhbHVlT3JFbHNlAgkAoggBBRFsYXN0Rm9tb1BsYXllcktleQIABAlmb21vRXBvY2gJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUMZm9tb0Vwb2NoS2V5AAAEDmN1cnJGb21vUGVyaW9kCQELdmFsdWVPckVsc2UCCQCfCAEFEWN1cnJGb21vUGVyaW9kS2V5BRNERUZBVUxUX0ZPTU9fUEVSSU9EBBJjdXJyTG90dGVyeUphY2twb3QJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUVY3VyckxvdHRlcnlKYWNrcG90S2V5AAAEEm5leHRMb3R0ZXJ5SmFja3BvdAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRVuZXh0TG90dGVyeUphY2twb3RLZXkAAAQJZmluaXNoS2V5CQEJa2V5Q29tbWl0AQULdXNlckFkZHJPcHQECGd1ZXNzS2V5CQEIa2V5R3Vlc3MBBQt1c2VyQWRkck9wdAQFZ3Vlc3MJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIZ3Vlc3NLZXkA////////////AQQLZmluaXNoQmxvY2sJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJZmluaXNoS2V5AP///////////wEEDmxhc3RGb21vV2lubmVyCQELdmFsdWVPckVsc2UCCQCiCAEFEWxhc3RGb21vV2lubmVyS2V5AgAEFGxhc3RGb21vV2lubmVyQW1vdW50CQELdmFsdWVPckVsc2UCCQCfCAEFF2xhc3RGb21vV2lubmVyQW1vdW50S2V5AAAEEmxhc3RGb21vV2lubmVyVGltZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBRVsYXN0Rm9tb1dpbm5lclRpbWVLZXkAAAQRbGFzdExvdHRlcnlXaW5uZXIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUUbGFzdExvdHRlcnlXaW5uZXJLZXkCAAQXbGFzdExvdHRlcnlXaW5uZXJBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUabGFzdExvdHRlcnlXaW5uZXJBbW91bnRLZXkAAAQVbGFzdExvdHRlcnlXaW5uZXJUaW1lCQELdmFsdWVPckVsc2UCCQCfCAEFGGxhc3RMb3R0ZXJ5V2lubmVyVGltZUtleQAABA9nb3JjU3Rha2VkVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUUc3Rha2VkQW1vdW50VG90YWxLZXkAAAQUZm9tb051bVVuaXF1ZVBsYXllcnMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUXZm9tb051bVVuaXF1ZVBsYXllcnNLZXkAAAQSZm9tb1RvdGFsTnVtU3Rha2VzCQELdmFsdWVPckVsc2UCCQCfCAEFFWZvbW9Ub3RhbE51bVN0YWtlc0tleQAABBVmb21vVG90YWxTdGFrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUYZm9tb1RvdGFsU3Rha2VkQW1vdW50S2V5AAAEEWZvbW9Vc2VyTnVtU3Rha2VzCQELdmFsdWVPckVsc2UCCQCfCAEJARRmb21vVXNlck51bVN0YWtlc0tleQEFC3VzZXJBZGRyT3B0AAAEFGZvbW9Vc2VyU3Rha2VkQW1vdW50CQELdmFsdWVPckVsc2UCCQCfCAEJARdmb21vVXNlclN0YWtlZEFtb3VudEtleQEFC3VzZXJBZGRyT3B0AAAED2ZvbW9Vc2VyTnVtV2lucwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESZm9tb1VzZXJOdW1XaW5zS2V5AQULdXNlckFkZHJPcHQAAAQRZm9tb1VzZXJXb25BbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFGZvbW9Vc2VyV29uQW1vdW50S2V5AQULdXNlckFkZHJPcHQAAAQWZm9tb0Zhdm9yaXRlQnlOdW1HYW1lcwkBC3ZhbHVlT3JFbHNlAgkAoggBBRlmb21vRmF2b3JpdGVCeU51bUdhbWVzS2V5AgAEFGZvbW9GYXZvcml0ZUJ5QW1vdW50CQELdmFsdWVPckVsc2UCCQCiCAEFF2ZvbW9GYXZvcml0ZUJ5QW1vdW50S2V5AgAJAJQKAgUDbmlsCQDMCAIJAKwCAgIYJXMlZF9fZ29yY0F2YWlsVG9DbGFpbV9fCQCkAwEFCnVzZXJBbW91bnQJAMwIAgkArAICAhElcyVkX19mb21vRXBvY2hfXwkApAMBBQlmb21vRXBvY2gJAMwIAgkArAICAhYlcyVkX19jdXJyRm9tb1BlcmlvZF9fCQCkAwEFDmN1cnJGb21vUGVyaW9kCQDMCAIJAKwCAgIdJXMlZF9fY3VyckZvbW9KYWNrcG90QW1vdW50X18JAKQDAQUPY3VyckZvbW9KYWNrcG90CQDMCAIJAKwCAgIdJXMlZF9fbmV4dEZvbW9KYWNrcG90QW1vdW50X18JAKQDAQUPbmV4dEZvbW9KYWNrcG90CQDMCAIJAKwCAgIgJXMlZF9fY3VyckxvdHRlcnlKYWNrcG90QW1vdW50X18JAKQDAQUSY3VyckxvdHRlcnlKYWNrcG90CQDMCAIJAKwCAgIgJXMlZF9fbmV4dExvdHRlcnlKYWNrcG90QW1vdW50X18JAKQDAQUSbmV4dExvdHRlcnlKYWNrcG90CQDMCAIJAKwCAgIUJXMlZF9fbGFzdEZvbW9UaW1lX18JAKQDAQUMbGFzdEZvbW9UaW1lCQDMCAIJAKwCAgIWJXMlc19fbGFzdEZvbW9QbGF5ZXJfXwUObGFzdEZvbW9QbGF5ZXIJAMwIAgkArAICAhclcyVkX19hbW91bnRMZWZ0VG90YWxfXwkApAMBBQ9hbW91bnRMZWZ0VG90YWwJAMwIAgkArAICAhMlcyVkX19maW5pc2hCbG9ja19fCQCkAwEFC2ZpbmlzaEJsb2NrCQDMCAIJAKwCAgINJXMlZF9fZ3Vlc3NfXwkApAMBBQVndWVzcwkAzAgCCQCsAgICFiVzJXNfX2xhc3RGb21vV2lubmVyX18FDmxhc3RGb21vV2lubmVyCQDMCAIJAKwCAgIcJXMlZF9fbGFzdEZvbW9XaW5uZXJBbW91bnRfXwkApAMBBRRsYXN0Rm9tb1dpbm5lckFtb3VudAkAzAgCCQCsAgICGiVzJWRfX2xhc3RGb21vV2lubmVyVGltZV9fCQCkAwEFEmxhc3RGb21vV2lubmVyVGltZQkAzAgCCQCsAgICGSVzJXNfX2xhc3RMb3R0ZXJ5V2lubmVyX18FEWxhc3RMb3R0ZXJ5V2lubmVyCQDMCAIJAKwCAgIfJXMlZF9fbGFzdExvdHRlcnlXaW5uZXJBbW91bnRfXwkApAMBBRdsYXN0TG90dGVyeVdpbm5lckFtb3VudAkAzAgCCQCsAgICHSVzJWRfX2xhc3RMb3R0ZXJ5V2lubmVyVGltZV9fCQCkAwEFFWxhc3RMb3R0ZXJ5V2lubmVyVGltZQkAzAgCCQCsAgICEiVzJWRfX2dvcmNJc3N1ZWRfXwkApAMBBQNNMTYJAMwIAgkArAICAhclcyVkX19nb3JjU3Rha2VkVG90YWxfXwkApAMBBQ9nb3JjU3Rha2VkVG90YWwJAMwIAgkArAICAhwlcyVkX19mb21vTnVtVW5pcXVlUGxheWVyc19fCQCkAwEFFGZvbW9OdW1VbmlxdWVQbGF5ZXJzCQDMCAIJAKwCAgIaJXMlZF9fZm9tb1RvdGFsTnVtU3Rha2VzX18JAKQDAQUSZm9tb1RvdGFsTnVtU3Rha2VzCQDMCAIJAKwCAgIdJXMlZF9fZm9tb1RvdGFsU3Rha2VkQW1vdW50X18JAKQDAQUVZm9tb1RvdGFsU3Rha2VkQW1vdW50CQDMCAIJAKwCAgIZJXMlZF9fZm9tb1VzZXJOdW1TdGFrZXNfXwkApAMBBRFmb21vVXNlck51bVN0YWtlcwkAzAgCCQCsAgICHCVzJWRfX2ZvbW9Vc2VyU3Rha2VkQW1vdW50X18JAKQDAQUUZm9tb1VzZXJTdGFrZWRBbW91bnQJAMwIAgkArAICAhclcyVkX19mb21vVXNlck51bVdpbnNfXwkApAMBBQ9mb21vVXNlck51bVdpbnMJAMwIAgkArAICAhklcyVkX19mb21vVXNlcldvbkFtb3VudF9fCQCkAwEFEWZvbW9Vc2VyV29uQW1vdW50CQDMCAIJAKwCAgIeJXMlc19fZm9tb0Zhdm9yaXRlQnlOdW1HYW1lc19fBRZmb21vRmF2b3JpdGVCeU51bUdhbWVzCQDMCAIJAKwCAgIcJXMlc19fZm9tb0Zhdm9yaXRlQnlBbW91bnRfXwUUZm9tb0Zhdm9yaXRlQnlBbW91bnQFA25pbAFpARJ3YWxsZXRJbmZvUkVBRE9OTFkBDnVzZXJBZGRyZXNzT3B0CQCUCgIFA25pbAkBDndhbGxldEludGVybmFsAQUOdXNlckFkZHJlc3NPcHQAhHadyA==", "height": 3463974, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5pUuYSYw9wB9644JowHGSgNhtUFdWUsJKj43DRdCDNKs Next: none Diff:
OldNewDifferences
233233 let statsActions = ((if (isDefined(userNumStakes))
234234 then [IntegerEntry(userNumStakesKey, (value(userNumStakes) + 1)), IntegerEntry(userStakedAmountKey, (valueOrElse(getInteger(userStakedAmountKey), 0) + BLESS_PRICE))]
235235 else [IntegerEntry(fomoNumUniquePlayersKey, (fomoNumUniquePlayers + 1)), IntegerEntry(userNumStakesKey, 1), IntegerEntry(userStakedAmountKey, BLESS_PRICE)]) ++ [IntegerEntry(fomoTotalNumStakesKey, (valueOrElse(getInteger(fomoTotalNumStakesKey), 0) + 1)), IntegerEntry(fomoTotalStakedAmountKey, (valueOrElse(getInteger(fomoTotalStakedAmountKey), 0) + BLESS_PRICE))])
236- (([IntegerEntry(lastFomoTimeKey, height), StringEntry(lastFomoPlayerKey, toString(i.caller)), ScriptTransfer(addressFromStringValue(getStringValue(teamWalletAddrKey)), deltaTeamAmount, gorcAssetId), IntegerEntry(stakersAmountLeftKey, (getIntegerValue(stakersAmountLeftKey) + deltaStakersAmount)), IntegerEntry(stakersAmountTotalKey, (getIntegerValue(stakersAmountTotalKey) + deltaStakersAmount))] ++ changeActions) ++ fomoActions)
236+ ((([IntegerEntry(lastFomoTimeKey, height), StringEntry(lastFomoPlayerKey, toString(i.caller)), ScriptTransfer(addressFromStringValue(getStringValue(teamWalletAddrKey)), deltaTeamAmount, gorcAssetId), IntegerEntry(stakersAmountLeftKey, (getIntegerValue(stakersAmountLeftKey) + deltaStakersAmount)), IntegerEntry(stakersAmountTotalKey, (getIntegerValue(stakersAmountTotalKey) + deltaStakersAmount))] ++ changeActions) ++ fomoActions) ++ statsActions)
237237 }
238238 }
239239 }
289289 then throw("GORC payments only!")
290290 else {
291291 let addr = toString(i.caller)
292- let $t01215212203 = gorcStats(addr)
293- let userAmount = $t01215212203._1
294- let amountLeftTotal = $t01215212203._2
292+ let $t01216812219 = gorcStats(addr)
293+ let userAmount = $t01216812219._1
294+ let amountLeftTotal = $t01216812219._2
295295 let userAmountKey = stakedAmountByUserKey(addr)
296296 let claimActions = if ((userAmount > 0))
297297 then [ScriptTransfer(i.caller, userAmount, gorcAssetId)]
315315 if ((0 > (oldAmount - amount)))
316316 then throw(((("You have only " + fixedPoint(oldAmount, 8)) + " GORC staked, tried to unstake ") + fixedPoint(amount, 8)))
317317 else {
318- let $t01316413215 = gorcStats(addr)
319- let userAmount = $t01316413215._1
320- let amountLeftTotal = $t01316413215._2
318+ let $t01318013231 = gorcStats(addr)
319+ let userAmount = $t01318013231._1
320+ let amountLeftTotal = $t01318013231._2
321321 let claimActions = if ((userAmount > 0))
322322 then [ScriptTransfer(i.caller, userAmount, gorcAssetId)]
323323 else nil
333333 then throw("No payments required")
334334 else {
335335 let addr = toString(i.caller)
336- let $t01377913830 = gorcStats(addr)
337- let userAmount = $t01377913830._1
338- let amountLeftTotal = $t01377913830._2
336+ let $t01379513846 = gorcStats(addr)
337+ let userAmount = $t01379513846._1
338+ let amountLeftTotal = $t01379513846._2
339339 let claimActions = if ((userAmount > 0))
340340 then [ScriptTransfer(i.caller, userAmount, gorcAssetId)]
341341 else nil
421421
422422 @Callable(i)
423423 func statsREADONLY (userAddrOpt) = {
424- let $t01817918237 = gorcStats(userAddrOpt)
425- let userAmount = $t01817918237._1
426- let amountLeftTotal = $t01817918237._2
424+ let $t01819518253 = gorcStats(userAddrOpt)
425+ let userAmount = $t01819518253._1
426+ let amountLeftTotal = $t01819518253._2
427427 let currFomoJackpot = valueOrElse(getInteger(currFomoJackpotKey), 0)
428428 let nextFomoJackpot = valueOrElse(getInteger(nextFomoJackpotKey), 0)
429429 let lastFomoTime = valueOrElse(getInteger(lastFomoTimeKey), 0)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let M16 = 10000000000000000
55
66 let STAKERS_AMOUNT = 3000000000000000
77
88 let TEAM_AMOUNT = 1000000000000000
99
1010 let MARKET_AMOUNT = 6000000000000000
1111
1212 let YEAR_BLOCKS = (365 * 1440)
1313
1414 let STAKE_PERIOD = (5 * YEAR_BLOCKS)
1515
1616 let BLESS_PRICE = 100000000000
1717
1818 let LOTTERY_PRICE = 100000000000
1919
2020 let DEFAULT_FOMO_PERIOD = 60
2121
2222 let MIN_FOMO_PERIOD = 2
2323
2424 let RANDOM_DELAY = 2
2525
2626 let CURRENT_JACKPOT_PERC = 50
2727
2828 let NEXT_JACKPOT_PERC = 20
2929
3030 let TEAM_PERC = 10
3131
3232 let gorcAssetIdKey = "gorcAssetId"
3333
3434 let gorcAssetId = valueOrErrorMessage(getBinary(gorcAssetIdKey), "GORC is not issued yet")
3535
3636 let issueTimeKey = "issueTime"
3737
3838 let stakersAmountTotalKey = "stakersAmountTotal"
3939
4040 let stakersAmountLeftKey = "stakersAmountLeft"
4141
4242 let stakedAmountTotalKey = "stakedTotal"
4343
4444 func stakedAmountByUserKey (addr) = ("stakedAmount_" + addr)
4545
4646
4747 func lastClaimTimeByUserKey (addr) = ("lastClaimTime_" + addr)
4848
4949
5050 let fomoEpochKey = "fomoEpoch"
5151
5252 let currFomoPeriodKey = "currFomoPeriod"
5353
5454 let lastFomoTimeKey = "lastFomoTime"
5555
5656 let currFomoJackpotKey = "currFomoJackpot"
5757
5858 let nextFomoJackpotKey = "nextFomoJackpot"
5959
6060 let lastFomoPlayerKey = "lastFomoPlayer"
6161
6262 let lastFomoWinnerKey = "lastFomoWinner"
6363
6464 let lastFomoWinnerAmountKey = "lastFomoWinnerAmount"
6565
6666 let lastFomoWinnerTimeKey = "lastFomoWinnerTime"
6767
6868 let teamWalletAddrKey = "teamWalletAddr"
6969
7070 let brokerAddrKey = "brokerAddr"
7171
7272 func keyCommit (address) = ("finishBlockFor_" + address)
7373
7474
7575 func keyGuess (address) = ("guessFor_" + address)
7676
7777
7878 func keySalt (address) = ("saltFor_" + address)
7979
8080
8181 let currLotteryJackpotKey = "currLotteryJackpot"
8282
8383 let nextLotteryJackpotKey = "nextLotteryJackpot"
8484
8585 let lastLotteryWinnerKey = "lastLotteryWinner"
8686
8787 let lastLotteryWinnerAmountKey = "lastLotteryWinnerAmount"
8888
8989 let lastLotteryWinnerTimeKey = "lastLotteryWinnerTime"
9090
9191 let fomoNumUniquePlayersKey = "fomoNumUniquePlayers"
9292
9393 let fomoTotalNumStakesKey = "fomoTotalNumStakes"
9494
9595 let fomoTotalStakedAmountKey = "fomoTotalStakedAmount"
9696
9797 func fomoUserNumStakesKey (address) = ("fomoUserNumStakes_" + address)
9898
9999
100100 func fomoUserStakedAmountKey (address) = ("fomoUserStakedAmount_" + address)
101101
102102
103103 func fomoUserNumWinsKey (address) = ("fomoUserNumWins_" + address)
104104
105105
106106 func fomoUserWonAmountKey (address) = ("fomoUserWonAmount_" + address)
107107
108108
109109 let fomoFavoriteByNumGamesKey = "fomoFavoriteByNumGames"
110110
111111 let fomoFavoriteByAmountKey = "fomoFavoriteByAmount"
112112
113113 func gorcStats (userAddrOpt) = {
114114 let amountLeftTotal = valueOrElse(getInteger(stakersAmountLeftKey), 0)
115115 let lastUserTime = valueOrElse(getInteger(lastClaimTimeByUserKey(userAddrOpt)), -1)
116116 if ((0 > lastUserTime))
117117 then $Tuple2(0, amountLeftTotal)
118118 else {
119119 let issueTime = valueOrErrorMessage(getInteger(issueTimeKey), "GORC is not issued yet")
120120 let nowLimited = min([height, (issueTime + STAKE_PERIOD)])
121121 let userShares = valueOrElse(getInteger(stakedAmountByUserKey(userAddrOpt)), 0)
122122 let totalShares = valueOrElse(getInteger(stakedAmountTotalKey), 0)
123123 let stakersAmountTotal = valueOrElse(getInteger(stakersAmountTotalKey), STAKERS_AMOUNT)
124124 let userTemporal = fraction(stakersAmountTotal, (nowLimited - lastUserTime), STAKE_PERIOD)
125125 let userAmount = if ((totalShares != 0))
126126 then fraction(userTemporal, userShares, totalShares)
127127 else 0
128128 $Tuple2(userAmount, (amountLeftTotal - userAmount))
129129 }
130130 }
131131
132132
133133 func fixedPoint (val,decimals) = {
134134 let tenPow = pow(10, 0, decimals, 0, 0, DOWN)
135135 let lowPart = toString((val % tenPow))
136136 let zeroes = drop(toString(tenPow), (1 + size(lowPart)))
137137 (((toString((val / tenPow)) + ".") + zeroes) + lowPart)
138138 }
139139
140140
141141 func getNewLeaders (oldLeadersStr,newAddr,newAmount) = {
142142 let newCandidate = ((newAddr + "_") + toString(newAmount))
143143 if ((oldLeadersStr == ""))
144144 then [newCandidate]
145145 else {
146146 func sortByAmount (acc,el) = {
147147 let addr_amount = split(el, "_")
148148 let addr = addr_amount[0]
149149 let amount = parseIntValue(addr_amount[1])
150150 if (acc._2)
151151 then if ((addr == newAddr))
152152 then acc
153153 else $Tuple2((acc._1 :+ el), true)
154154 else if ((addr == newAddr))
155155 then $Tuple2((acc._1 :+ newCandidate), true)
156156 else if ((amount > newAmount))
157157 then $Tuple2((acc._1 :+ el), false)
158158 else $Tuple2(((acc._1 :+ newCandidate) :+ el), true)
159159 }
160160
161161 let result = {
162162 let $l = split(oldLeadersStr, ":")
163163 let $s = size($l)
164164 let $acc0 = $Tuple2(nil, false)
165165 func $f0_1 ($a,$i) = if (($i >= $s))
166166 then $a
167167 else sortByAmount($a, $l[$i])
168168
169169 func $f0_2 ($a,$i) = if (($i >= $s))
170170 then $a
171171 else throw("List size exceeds 3")
172172
173173 $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3)
174174 }
175175 let arr = result._1
176176 if (result._2)
177177 then if ((size(arr) > 3))
178178 then [arr[0], arr[1], arr[2]]
179179 else arr
180180 else if ((size(arr) >= 3))
181181 then arr
182182 else (arr :+ newCandidate)
183183 }
184184 }
185185
186186
187187 func fomoInternal (i) = if ((size(i.payments) != 1))
188188 then throw("exactly 1 payment must be attached")
189189 else {
190190 let pmt = i.payments[0]
191191 let amt = pmt.amount
192192 if (if (!(isDefined(pmt.assetId)))
193193 then true
194194 else (value(pmt.assetId) != gorcAssetId))
195195 then throw("GORC payments only!")
196196 else {
197197 let change = (amt - BLESS_PRICE)
198198 if ((0 > change))
199199 then throw(((("You need to sacrifice " + fixedPoint(BLESS_PRICE, 8)) + " GORC, but I see only ") + fixedPoint(amt, 8)))
200200 else {
201201 let changeActions = if ((change > 0))
202202 then [ScriptTransfer(i.caller, change, gorcAssetId)]
203203 else nil
204204 let lastFomoTime = valueOrElse(getInteger(lastFomoTimeKey), 0)
205205 let lastFomoPlayer = valueOrElse(getString(lastFomoPlayerKey), "")
206206 let lastFomoNumWinsKey = fomoUserNumWinsKey(lastFomoPlayer)
207207 let lastFomoWonAmountKey = fomoUserWonAmountKey(lastFomoPlayer)
208208 let lastFomoNumWins = valueOrElse(getInteger(lastFomoNumWinsKey), 0)
209209 let lastFomoWonAmount = valueOrElse(getInteger(lastFomoWonAmountKey), 0)
210210 let deltaCurrJackpot = fraction(BLESS_PRICE, CURRENT_JACKPOT_PERC, 100)
211211 let deltaNextJackpot = fraction(BLESS_PRICE, NEXT_JACKPOT_PERC, 100)
212212 let deltaTeamAmount = fraction(BLESS_PRICE, TEAM_PERC, 100)
213213 let deltaStakersAmount = (((BLESS_PRICE - deltaCurrJackpot) - deltaNextJackpot) - deltaTeamAmount)
214214 let fomoEpoch = valueOrElse(getInteger(fomoEpochKey), 0)
215215 let currFomoPeriod = valueOrElse(getInteger(currFomoPeriodKey), DEFAULT_FOMO_PERIOD)
216216 let nextFomoPeriod = max([MIN_FOMO_PERIOD, (currFomoPeriod - 1)])
217217 let fomoCurrJackpot = valueOrElse(getInteger(currFomoJackpotKey), 0)
218218 let fomoNextJackpot = valueOrElse(getInteger(nextFomoJackpotKey), 0)
219219 let oldLeadersByNum = valueOrElse(getString(fomoFavoriteByNumGamesKey), "")
220220 let oldLeadersByAmount = valueOrElse(getString(fomoFavoriteByAmountKey), "")
221221 let fomoActions = if (if (if ((height > (lastFomoTime + currFomoPeriod)))
222222 then (fomoCurrJackpot > 0)
223223 else false)
224224 then (lastFomoPlayer != "")
225225 else false)
226226 then [ScriptTransfer(addressFromStringValue(lastFomoPlayer), fomoCurrJackpot, gorcAssetId), StringEntry(lastFomoWinnerKey, lastFomoPlayer), IntegerEntry(lastFomoWinnerAmountKey, fomoCurrJackpot), IntegerEntry(lastFomoWinnerTimeKey, lastBlock.timestamp), IntegerEntry(currFomoJackpotKey, (fomoNextJackpot + deltaCurrJackpot)), IntegerEntry(nextFomoJackpotKey, deltaNextJackpot), IntegerEntry(fomoEpochKey, (fomoEpoch + 1)), IntegerEntry(currFomoPeriodKey, DEFAULT_FOMO_PERIOD), StringEntry(fomoFavoriteByNumGamesKey, makeString(getNewLeaders(oldLeadersByNum, lastFomoPlayer, (lastFomoNumWins + 1)), ":")), StringEntry(fomoFavoriteByAmountKey, makeString(getNewLeaders(oldLeadersByAmount, lastFomoPlayer, (lastFomoWonAmount + fomoCurrJackpot)), ":")), IntegerEntry(lastFomoNumWinsKey, (lastFomoNumWins + 1)), IntegerEntry(lastFomoWonAmountKey, (lastFomoWonAmount + fomoCurrJackpot))]
227227 else [IntegerEntry(currFomoJackpotKey, (fomoCurrJackpot + deltaCurrJackpot)), IntegerEntry(nextFomoJackpotKey, (fomoNextJackpot + deltaNextJackpot)), IntegerEntry(currFomoPeriodKey, nextFomoPeriod)]
228228 let addr = toString(i.caller)
229229 let fomoNumUniquePlayers = valueOrElse(getInteger(fomoNumUniquePlayersKey), 0)
230230 let userNumStakesKey = fomoUserNumStakesKey(addr)
231231 let userStakedAmountKey = fomoUserStakedAmountKey(addr)
232232 let userNumStakes = getInteger(userNumStakesKey)
233233 let statsActions = ((if (isDefined(userNumStakes))
234234 then [IntegerEntry(userNumStakesKey, (value(userNumStakes) + 1)), IntegerEntry(userStakedAmountKey, (valueOrElse(getInteger(userStakedAmountKey), 0) + BLESS_PRICE))]
235235 else [IntegerEntry(fomoNumUniquePlayersKey, (fomoNumUniquePlayers + 1)), IntegerEntry(userNumStakesKey, 1), IntegerEntry(userStakedAmountKey, BLESS_PRICE)]) ++ [IntegerEntry(fomoTotalNumStakesKey, (valueOrElse(getInteger(fomoTotalNumStakesKey), 0) + 1)), IntegerEntry(fomoTotalStakedAmountKey, (valueOrElse(getInteger(fomoTotalStakedAmountKey), 0) + BLESS_PRICE))])
236- (([IntegerEntry(lastFomoTimeKey, height), StringEntry(lastFomoPlayerKey, toString(i.caller)), ScriptTransfer(addressFromStringValue(getStringValue(teamWalletAddrKey)), deltaTeamAmount, gorcAssetId), IntegerEntry(stakersAmountLeftKey, (getIntegerValue(stakersAmountLeftKey) + deltaStakersAmount)), IntegerEntry(stakersAmountTotalKey, (getIntegerValue(stakersAmountTotalKey) + deltaStakersAmount))] ++ changeActions) ++ fomoActions)
236+ ((([IntegerEntry(lastFomoTimeKey, height), StringEntry(lastFomoPlayerKey, toString(i.caller)), ScriptTransfer(addressFromStringValue(getStringValue(teamWalletAddrKey)), deltaTeamAmount, gorcAssetId), IntegerEntry(stakersAmountLeftKey, (getIntegerValue(stakersAmountLeftKey) + deltaStakersAmount)), IntegerEntry(stakersAmountTotalKey, (getIntegerValue(stakersAmountTotalKey) + deltaStakersAmount))] ++ changeActions) ++ fomoActions) ++ statsActions)
237237 }
238238 }
239239 }
240240
241241
242242 func getRandomNumber (maxValue,salt,entropy) = if ((0 >= maxValue))
243243 then throw("maxValue should be > 0")
244244 else {
245245 let randomHash = sha256_16Kb((salt + entropy))
246246 (toInt(randomHash) % maxValue)
247247 }
248248
249249
250250 func walletInternal (userAddressOpt) = {
251251 let addr = addressFromString(userAddressOpt)
252252 let balance = if (isDefined(addr))
253253 then wavesBalance(value(addr))
254254 else BalanceDetails(0, 0, 0, 0)
255255 let gorcBalance = if (isDefined(addr))
256256 then assetBalance(value(addr), gorcAssetId)
257257 else 0
258258 let stakedGorc = valueOrElse(getInteger(stakedAmountByUserKey(userAddressOpt)), 0)
259259 [("%s%d__wavesBalance__" + toString(balance.available)), ("%s%d__gorcBalance__" + toString(gorcBalance)), ("%s%d__stakedGorc__" + toString(stakedGorc))]
260260 }
261261
262262
263263 @Callable(i)
264264 func testArgs (intVal,strVal,boolVal,binVal,arrInt,arrStr,arrBool,arrBin) = nil
265265
266266
267267
268268 @Callable(i)
269269 func constructorV1 (teamWalletAddr,brokerAddr) = if ((i.caller != this))
270270 then throw("Permission denied")
271271 else {
272272 let issuedAmount = M16
273273 let issue = Issue("GORC", "Meme coin by God of Random Chance. Visit https://gorc.meme, sacrifice to the God of Random and you will receive an answer to any question or a blessing. Lucky one gets a Gift of God", issuedAmount, 8, false, unit, 0)
274274 let assetId = calculateAssetId(issue)
275275 [issue, BinaryEntry(gorcAssetIdKey, assetId), IntegerEntry(issueTimeKey, height), IntegerEntry(stakersAmountLeftKey, STAKERS_AMOUNT), IntegerEntry(stakersAmountTotalKey, STAKERS_AMOUNT), StringEntry(teamWalletAddrKey, teamWalletAddr), StringEntry(brokerAddrKey, brokerAddr), ScriptTransfer(addressFromStringValue(teamWalletAddr), TEAM_AMOUNT, assetId), ScriptTransfer(addressFromStringValue(brokerAddr), MARKET_AMOUNT, assetId), IntegerEntry(fomoEpochKey, 0), IntegerEntry(currFomoPeriodKey, DEFAULT_FOMO_PERIOD)]
276276 }
277277
278278
279279
280280 @Callable(i)
281281 func stakeGorc () = if ((size(i.payments) != 1))
282282 then throw("exactly 1 payment must be attached")
283283 else {
284284 let pmt = i.payments[0]
285285 let amt = pmt.amount
286286 if (if (!(isDefined(pmt.assetId)))
287287 then true
288288 else (value(pmt.assetId) != gorcAssetId))
289289 then throw("GORC payments only!")
290290 else {
291291 let addr = toString(i.caller)
292- let $t01215212203 = gorcStats(addr)
293- let userAmount = $t01215212203._1
294- let amountLeftTotal = $t01215212203._2
292+ let $t01216812219 = gorcStats(addr)
293+ let userAmount = $t01216812219._1
294+ let amountLeftTotal = $t01216812219._2
295295 let userAmountKey = stakedAmountByUserKey(addr)
296296 let claimActions = if ((userAmount > 0))
297297 then [ScriptTransfer(i.caller, userAmount, gorcAssetId)]
298298 else nil
299299 $Tuple2((claimActions ++ [IntegerEntry(stakedAmountTotalKey, (valueOrElse(getInteger(stakedAmountTotalKey), 0) + amt)), IntegerEntry(userAmountKey, (valueOrElse(getInteger(userAmountKey), 0) + amt)), IntegerEntry(lastClaimTimeByUserKey(addr), height), IntegerEntry(stakersAmountLeftKey, amountLeftTotal)]), userAmount)
300300 }
301301 }
302302
303303
304304
305305 @Callable(i)
306306 func unstakeGorc (amount) = if ((0 >= amount))
307307 then throw("Amount should be positive")
308308 else {
309309 let addr = toString(i.caller)
310310 if ((size(i.payments) != 0))
311311 then throw("No payments required")
312312 else {
313313 let userAmountKey = stakedAmountByUserKey(addr)
314314 let oldAmount = valueOrElse(getInteger(userAmountKey), 0)
315315 if ((0 > (oldAmount - amount)))
316316 then throw(((("You have only " + fixedPoint(oldAmount, 8)) + " GORC staked, tried to unstake ") + fixedPoint(amount, 8)))
317317 else {
318- let $t01316413215 = gorcStats(addr)
319- let userAmount = $t01316413215._1
320- let amountLeftTotal = $t01316413215._2
318+ let $t01318013231 = gorcStats(addr)
319+ let userAmount = $t01318013231._1
320+ let amountLeftTotal = $t01318013231._2
321321 let claimActions = if ((userAmount > 0))
322322 then [ScriptTransfer(i.caller, userAmount, gorcAssetId)]
323323 else nil
324324 $Tuple2((claimActions ++ [IntegerEntry(stakedAmountTotalKey, (valueOrErrorMessage(getInteger(stakedAmountTotalKey), "No GORC staked") - amount)), IntegerEntry(userAmountKey, (oldAmount - amount)), IntegerEntry(lastClaimTimeByUserKey(addr), height), IntegerEntry(stakersAmountLeftKey, amountLeftTotal)]), 0)
325325 }
326326 }
327327 }
328328
329329
330330
331331 @Callable(i)
332332 func claimGorc () = if ((size(i.payments) != 0))
333333 then throw("No payments required")
334334 else {
335335 let addr = toString(i.caller)
336- let $t01377913830 = gorcStats(addr)
337- let userAmount = $t01377913830._1
338- let amountLeftTotal = $t01377913830._2
336+ let $t01379513846 = gorcStats(addr)
337+ let userAmount = $t01379513846._1
338+ let amountLeftTotal = $t01379513846._2
339339 let claimActions = if ((userAmount > 0))
340340 then [ScriptTransfer(i.caller, userAmount, gorcAssetId)]
341341 else nil
342342 $Tuple2((claimActions ++ [IntegerEntry(lastClaimTimeByUserKey(addr), height), IntegerEntry(stakersAmountLeftKey, amountLeftTotal)]), userAmount)
343343 }
344344
345345
346346
347347 @Callable(i)
348348 func answerMe () = $Tuple2(fomoInternal(i), toInt(i.transactionId))
349349
350350
351351
352352 @Callable(i)
353353 func blessMe () = $Tuple2(fomoInternal(i), 42)
354354
355355
356356
357357 @Callable(i)
358358 func commitGuess (guess) = {
359359 let addr = toString(i.caller)
360360 let finishKey = keyCommit(addr)
361361 let guessKey = keyGuess(addr)
362362 if (isDefined(getInteger(finishKey)))
363363 then throw("You already made a bet, please use it")
364364 else if (if ((0 > guess))
365365 then true
366366 else (guess > 11))
367367 then throw("The number should be between 0 and 11")
368368 else if ((size(i.payments) != 1))
369369 then throw("exactly 1 payment must be attached")
370370 else {
371371 let pmt = i.payments[0]
372372 let amt = pmt.amount
373373 if (if (!(isDefined(pmt.assetId)))
374374 then true
375375 else (value(pmt.assetId) != gorcAssetId))
376376 then throw("GORC payments only!")
377377 else {
378378 let change = (amt - LOTTERY_PRICE)
379379 if ((0 > change))
380380 then throw(((("You need to sacrifice " + fixedPoint(LOTTERY_PRICE, 8)) + " GORC, but I see only ") + fixedPoint(amt, 8)))
381381 else {
382382 let changeActions = if ((change > 0))
383383 then [ScriptTransfer(i.caller, change, gorcAssetId)]
384384 else nil
385385 let finishBlock = (height + RANDOM_DELAY)
386386 let deltaCurrJackpot = fraction(LOTTERY_PRICE, CURRENT_JACKPOT_PERC, 100)
387387 let deltaNextJackpot = fraction(LOTTERY_PRICE, NEXT_JACKPOT_PERC, 100)
388388 let deltaTeamAmount = fraction(LOTTERY_PRICE, TEAM_PERC, 100)
389389 let deltaStakersAmount = (((LOTTERY_PRICE - deltaCurrJackpot) - deltaNextJackpot) - deltaTeamAmount)
390390 $Tuple2(([IntegerEntry(finishKey, finishBlock), IntegerEntry(guessKey, guess), IntegerEntry(currLotteryJackpotKey, (valueOrElse(getInteger(currLotteryJackpotKey), 0) + deltaCurrJackpot)), IntegerEntry(nextLotteryJackpotKey, (valueOrElse(getInteger(nextLotteryJackpotKey), 0) + deltaNextJackpot)), ScriptTransfer(addressFromStringValue(getStringValue(teamWalletAddrKey)), deltaTeamAmount, gorcAssetId), IntegerEntry(stakersAmountLeftKey, (getIntegerValue(stakersAmountLeftKey) + deltaStakersAmount)), IntegerEntry(stakersAmountTotalKey, (getIntegerValue(stakersAmountTotalKey) + deltaStakersAmount)), StringEntry(keySalt(addr), toBase58String(i.transactionId))] ++ changeActions), finishBlock)
391391 }
392392 }
393393 }
394394 }
395395
396396
397397
398398 @Callable(i)
399399 func guessLottery () = {
400400 let addr = toString(i.caller)
401401 let finishKey = keyCommit(addr)
402402 let guessKey = keyGuess(addr)
403403 let guess = valueOrErrorMessage(getInteger(guessKey), "You have not made a bet")
404404 let finishBlock = valueOrErrorMessage(getInteger(finishKey), "You have not made a bet")
405405 if ((finishBlock > height))
406406 then throw(("Random number is not ready yet, wait until height = " + toString(finishBlock)))
407407 else {
408408 let entropy = value(value(blockInfoByHeight(finishBlock)).vrf)
409409 let saltKey = keySalt(addr)
410410 let salt = fromBase58String(valueOrElse(getString(saltKey), "DEFAULT"))
411411 let rand = getRandomNumber(12, salt, entropy)
412412 let currJackpot = valueOrElse(getInteger(currLotteryJackpotKey), 0)
413413 let winActions = if ((rand == guess))
414414 then [ScriptTransfer(i.caller, currJackpot, gorcAssetId), StringEntry(lastLotteryWinnerKey, addr), IntegerEntry(lastLotteryWinnerAmountKey, currJackpot), IntegerEntry(lastLotteryWinnerTimeKey, lastBlock.timestamp), IntegerEntry(currLotteryJackpotKey, valueOrElse(getInteger(nextLotteryJackpotKey), 0)), IntegerEntry(nextLotteryJackpotKey, 0)]
415415 else nil
416416 $Tuple2(([DeleteEntry(finishKey), DeleteEntry(guessKey), DeleteEntry(saltKey)] ++ winActions), rand)
417417 }
418418 }
419419
420420
421421
422422 @Callable(i)
423423 func statsREADONLY (userAddrOpt) = {
424- let $t01817918237 = gorcStats(userAddrOpt)
425- let userAmount = $t01817918237._1
426- let amountLeftTotal = $t01817918237._2
424+ let $t01819518253 = gorcStats(userAddrOpt)
425+ let userAmount = $t01819518253._1
426+ let amountLeftTotal = $t01819518253._2
427427 let currFomoJackpot = valueOrElse(getInteger(currFomoJackpotKey), 0)
428428 let nextFomoJackpot = valueOrElse(getInteger(nextFomoJackpotKey), 0)
429429 let lastFomoTime = valueOrElse(getInteger(lastFomoTimeKey), 0)
430430 let lastFomoPlayer = valueOrElse(getString(lastFomoPlayerKey), "")
431431 let fomoEpoch = valueOrElse(getInteger(fomoEpochKey), 0)
432432 let currFomoPeriod = valueOrElse(getInteger(currFomoPeriodKey), DEFAULT_FOMO_PERIOD)
433433 let currLotteryJackpot = valueOrElse(getInteger(currLotteryJackpotKey), 0)
434434 let nextLotteryJackpot = valueOrElse(getInteger(nextLotteryJackpotKey), 0)
435435 let finishKey = keyCommit(userAddrOpt)
436436 let guessKey = keyGuess(userAddrOpt)
437437 let guess = valueOrElse(getInteger(guessKey), -1)
438438 let finishBlock = valueOrElse(getInteger(finishKey), -1)
439439 let lastFomoWinner = valueOrElse(getString(lastFomoWinnerKey), "")
440440 let lastFomoWinnerAmount = valueOrElse(getInteger(lastFomoWinnerAmountKey), 0)
441441 let lastFomoWinnerTime = valueOrElse(getInteger(lastFomoWinnerTimeKey), 0)
442442 let lastLotteryWinner = valueOrElse(getString(lastLotteryWinnerKey), "")
443443 let lastLotteryWinnerAmount = valueOrElse(getInteger(lastLotteryWinnerAmountKey), 0)
444444 let lastLotteryWinnerTime = valueOrElse(getInteger(lastLotteryWinnerTimeKey), 0)
445445 let gorcStakedTotal = valueOrElse(getInteger(stakedAmountTotalKey), 0)
446446 let fomoNumUniquePlayers = valueOrElse(getInteger(fomoNumUniquePlayersKey), 0)
447447 let fomoTotalNumStakes = valueOrElse(getInteger(fomoTotalNumStakesKey), 0)
448448 let fomoTotalStakedAmount = valueOrElse(getInteger(fomoTotalStakedAmountKey), 0)
449449 let fomoUserNumStakes = valueOrElse(getInteger(fomoUserNumStakesKey(userAddrOpt)), 0)
450450 let fomoUserStakedAmount = valueOrElse(getInteger(fomoUserStakedAmountKey(userAddrOpt)), 0)
451451 let fomoUserNumWins = valueOrElse(getInteger(fomoUserNumWinsKey(userAddrOpt)), 0)
452452 let fomoUserWonAmount = valueOrElse(getInteger(fomoUserWonAmountKey(userAddrOpt)), 0)
453453 let fomoFavoriteByNumGames = valueOrElse(getString(fomoFavoriteByNumGamesKey), "")
454454 let fomoFavoriteByAmount = valueOrElse(getString(fomoFavoriteByAmountKey), "")
455455 $Tuple2(nil, [("%s%d__gorcAvailToClaim__" + toString(userAmount)), ("%s%d__fomoEpoch__" + toString(fomoEpoch)), ("%s%d__currFomoPeriod__" + toString(currFomoPeriod)), ("%s%d__currFomoJackpotAmount__" + toString(currFomoJackpot)), ("%s%d__nextFomoJackpotAmount__" + toString(nextFomoJackpot)), ("%s%d__currLotteryJackpotAmount__" + toString(currLotteryJackpot)), ("%s%d__nextLotteryJackpotAmount__" + toString(nextLotteryJackpot)), ("%s%d__lastFomoTime__" + toString(lastFomoTime)), ("%s%s__lastFomoPlayer__" + lastFomoPlayer), ("%s%d__amountLeftTotal__" + toString(amountLeftTotal)), ("%s%d__finishBlock__" + toString(finishBlock)), ("%s%d__guess__" + toString(guess)), ("%s%s__lastFomoWinner__" + lastFomoWinner), ("%s%d__lastFomoWinnerAmount__" + toString(lastFomoWinnerAmount)), ("%s%d__lastFomoWinnerTime__" + toString(lastFomoWinnerTime)), ("%s%s__lastLotteryWinner__" + lastLotteryWinner), ("%s%d__lastLotteryWinnerAmount__" + toString(lastLotteryWinnerAmount)), ("%s%d__lastLotteryWinnerTime__" + toString(lastLotteryWinnerTime)), ("%s%d__gorcIssued__" + toString(M16)), ("%s%d__gorcStakedTotal__" + toString(gorcStakedTotal)), ("%s%d__fomoNumUniquePlayers__" + toString(fomoNumUniquePlayers)), ("%s%d__fomoTotalNumStakes__" + toString(fomoTotalNumStakes)), ("%s%d__fomoTotalStakedAmount__" + toString(fomoTotalStakedAmount)), ("%s%d__fomoUserNumStakes__" + toString(fomoUserNumStakes)), ("%s%d__fomoUserStakedAmount__" + toString(fomoUserStakedAmount)), ("%s%d__fomoUserNumWins__" + toString(fomoUserNumWins)), ("%s%d__fomoUserWonAmount__" + toString(fomoUserWonAmount)), ("%s%s__fomoFavoriteByNumGames__" + fomoFavoriteByNumGames), ("%s%s__fomoFavoriteByAmount__" + fomoFavoriteByAmount)])
456456 }
457457
458458
459459
460460 @Callable(i)
461461 func walletInfoREADONLY (userAddressOpt) = $Tuple2(nil, walletInternal(userAddressOpt))
462462
463463

github/deemru/w8io/169f3d6 
71.25 ms