tx · 8a3BDFGh4g8n8JXpMTA6kD59wusUwGNTwyCMwavRs5Qm 3N6HSS7Toat1RhyEsyqVGgVSRzH19W1FTbP: -0.02900000 Waves 2023.07.27 14:19 [2684188] smart account 3N6HSS7Toat1RhyEsyqVGgVSRzH19W1FTbP > SELF 0.00000000 Waves
{ "type": 13, "id": "8a3BDFGh4g8n8JXpMTA6kD59wusUwGNTwyCMwavRs5Qm", "fee": 2900000, "feeAssetId": null, "timestamp": 1690456728676, "version": 2, "chainId": 84, "sender": "3N6HSS7Toat1RhyEsyqVGgVSRzH19W1FTbP", "senderPublicKey": "AoKo4segKHU4DeJnxXQYJj2u7J6XJeux6r8KLW52cd2Q", "proofs": [ "4Beh6FiGVQSgSpGqYcfTSbormkbsaeR1wxuAwJuSqiZF3dRXaPnWQdLuFn2GijgR88b3jN9V8g6qrsw5EXCvZB9d" ], "script": "base64:BwIxCAISAwoBAhIGCgQCAQEBEgUKAwEBARIDCgECEgMKAQISBAoCAgISBAoCAgISAwoBAjEAA1NFUAICX18ADUNPTlRSQUNUX05BTUUCD2NhbGN1bGF0b3IucmlkZQAGU0NBTEU4AIDC1y8AB1BFTkRJTkcCB1BFTkRJTkcACEZJTklTSEVEAghGSU5JU0hFRAAFV0FWRVMCBVdBVkVTAQd3cmFwRXJyAQFzCQCsAgIJAKwCAgUNQ09OVFJBQ1RfTkFNRQICOiAFAXMBCHRocm93RXJyAQFzCQACAQkBB3dyYXBFcnIBBQFzAQ9hc3NldElkVG9TdHJpbmcBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiAwkAAQIFByRtYXRjaDACBFVuaXQFBVdBVkVTCQACAQILTWF0Y2ggZXJyb3IBD3N0cmluZ1RvQXNzZXRJZAEBcwMJAAACBQFzBQVXQVZFUwUEdW5pdAkA2QQBBQFzAQNhYnMBAW4DCQBmAgAABQFuCQEBLQEFAW4FAW4BEWtleUZhY3RvcnlBZGRyZXNzAAkAuQkCCQDMCAICAiVzCQDMCAICB2ZhY3RvcnkFA25pbAUDU0VQARNrZXlNYW5hZ2VyUHVibGljS2V5AAkAuQkCCQDMCAICAiVzCQDMCAICEG1hbmFnZXJQdWJsaWNLZXkFA25pbAUDU0VQAQxrZXlMcEFzc2V0SWQACQC5CQIJAMwIAgICJXMJAMwIAgIJbHBBc3NldElkBQNuaWwFA1NFUAEXa2V5UHJveHlUcmVhc3VyeUFkZHJlc3MACQC5CQIJAMwIAgICJXMJAMwIAgINcHJveHlUcmVhc3VyeQUDbmlsBQNTRVABFmtleU1haW5UcmVhc3VyeUFkZHJlc3MACQC5CQIJAMwIAgICJXMJAMwIAgIMbWFpblRyZWFzdXJ5BQNuaWwFA1NFUAELa2V5SW52ZXN0ZWQBB2Fzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAICCGludmVzdGVkCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQdhc3NldElkBQNuaWwFA1NFUAEKa2V5RG9uYXRlZAEHYXNzZXRJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgIHZG9uYXRlZAkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQUHYXNzZXRJZAUDbmlsBQNTRVABDGtleUF2YWlsYWJsZQELdXNlckFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICCWF2YWlsYWJsZQkAzAgCCQClCAEFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAEKa2V5Q2xhaW1lZAELdXNlckFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICB2NsYWltZWQJAMwIAgkApQgBBQt1c2VyQWRkcmVzcwUDbmlsBQNTRVABEGtleUN1cnJlbnRQZXJpb2QACQC5CQIJAMwIAgICJXMJAMwIAgINY3VycmVudFBlcmlvZAUDbmlsBQNTRVABEWtleVByaWNlRm9yUGVyaW9kAQZwZXJpb2QJALkJAgkAzAgCAgQlcyVkCQDMCAICBXByaWNlCQDMCAIJAKQDAQUGcGVyaW9kBQNuaWwFA1NFUAEOa2V5U3RhcnRIZWlnaHQBBnBlcmlvZAkAuQkCCQDMCAICBCVzJWQJAMwIAgILc3RhcnRIZWlnaHQJAMwIAgkApAMBBQZwZXJpb2QFA25pbAUDU0VQARRrZXlQb3dlck1hbmFnZXJCb251cwEGcGVyaW9kCQC5CQIJAMwIAgIEJXMlZAkAzAgCAhFwb3dlck1hbmFnZXJCb251cwkAzAgCCQCkAwEFBnBlcmlvZAUDbmlsBQNTRVABD2tleVBlcmlvZExlbmd0aAACECVzX19wZXJpb2RMZW5ndGgBGGtleUJsb2NrUHJvY2Vzc2luZ1Jld2FyZAACGSVzX19ibG9ja1Byb2Nlc3NpbmdSZXdhcmQBFWtleU5leHRCbG9ja1RvUHJvY2VzcwACFiVzX19uZXh0QmxvY2tUb1Byb2Nlc3MBEWtleUJsb2NrUHJvY2Vzc2VkAQZoZWlnaHQJALkJAgkAzAgCAgQlcyVkCQDMCAICDmJsb2NrUHJvY2Vzc2VkCQDMCAIJAKQDAQUGaGVpZ2h0BQNuaWwFA1NFUAENa2V5V2l0aGRyYXdhbAACDiVzX193aXRoZHJhd2FsARRrZXlXaXRoZHJhd2FsUmVxdWVzdAILdXNlckFkZHJlc3MEdHhJZAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgp3aXRoZHJhd2FsCQDMCAIJAKUIAQULdXNlckFkZHJlc3MJAMwIAgkA2AQBBQR0eElkBQNuaWwFA1NFUAEWdmFsdWVXaXRoZHJhd2FsUmVxdWVzdAQGc3RhdHVzDWxwQXNzZXRBbW91bnQMdGFyZ2V0UGVyaW9kCWNsYWltVHhJZAQMY2xhaW1UeElkU3RyBAckbWF0Y2gwBQljbGFpbVR4SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiAwkAAQIFByRtYXRjaDACBFVuaXQCBFNPT04JAAIBAgtNYXRjaCBlcnJvcgkAuQkCCQDMCAICCCVzJWQlZCVzCQDMCAIFBnN0YXR1cwkAzAgCCQCkAwEFDWxwQXNzZXRBbW91bnQJAMwIAgkApAMBBQx0YXJnZXRQZXJpb2QJAMwIAgUMY2xhaW1UeElkU3RyBQNuaWwFA1NFUAEba2V5UGVyaW9kV2l0aGRyYXdhbEFzc2V0SWRzAQZwZXJpb2QJALkJAgkAzAgCAgQlcyVkCQDMCAICDHBlcmlvZFJld2FyZAkAzAgCCQCkAwEFBnBlcmlvZAUDbmlsBQNTRVABGmtleVBlcmlvZFdpdGhkcmF3YWxBbW91bnRzAQZwZXJpb2QJALkJAgkAzAgCAgQlcyVkCQDMCAICEnBlcmlvZFJld2FyZEFtb3VudAkAzAgCCQCkAwEFBnBlcmlvZAUDbmlsBQNTRVAAF2tleU1pbkhlaWdodEZvcldpdGhkcmF3CQC5CQIJAMwIAgICJXMJAMwIAgIUbWluSGVpZ2h0Rm9yV2l0aGRyYXcFA25pbAUDU0VQABdrZXlNYXhIZWlnaHRGb3JXaXRoZHJhdwkAuQkCCQDMCAICAiVzCQDMCAICFG1heEhlaWdodEZvcldpdGhkcmF3BQNuaWwFA1NFUAEhcGFyc2VXaXRoZHJhd2FsUmVxdWVzdFZhbHVlT3JGYWlsAQFzBAVwYXJ0cwkAtQkCBQFzBQNTRVADCQAAAgkAkAMBBQVwYXJ0cwAFBAZzdGF0dXMJAJEDAgUFcGFydHMAAQQNbHBBc3NldEFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUFcGFydHMAAgkBB3dyYXBFcnIBAhVpbnZhbGlkIGxwQXNzZXRBbW91bnQEDHRhcmdldFBlcmlvZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUFcGFydHMAAwkBB3dyYXBFcnIBAhRpbnZhbGlkIHRhcmdldFBlcmlvZAQJY2xhaW1UeElkCQCRAwIFBXBhcnRzAAQJAJYKBAUGc3RhdHVzBQ1scEFzc2V0QW1vdW50BQx0YXJnZXRQZXJpb2QFCWNsYWltVHhJZAkBCHRocm93RXJyAQIgaW52YWxpZCB3aXRoZHJhd2FsIHJlcXVlc3QgdmFsdWUAFGZhY3RvcnlBZGRyZXNzT3B0aW9uBAckbWF0Y2gwCQCdCAIFBHRoaXMJARFrZXlGYWN0b3J5QWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQCmCAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yABRmYWN0b3J5QWRkcmVzc09yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBRRmYWN0b3J5QWRkcmVzc09wdGlvbgkBB3dyYXBFcnIBAhdpbnZhbGlkIGZhY3RvcnkgYWRkcmVzcwAPbHBBc3NldElkT3B0aW9uBAckbWF0Y2gwBRRmYWN0b3J5QWRkcmVzc09wdGlvbgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBAckbWF0Y2gxCQCdCAIFAWEJAQxrZXlMcEFzc2V0SWQAAwkAAQIFByRtYXRjaDECBlN0cmluZwQBcwUHJG1hdGNoMQkA2QQBBQFzAwkAAQIFByRtYXRjaDECBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAD2xwQXNzZXRJZE9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBQ9scEFzc2V0SWRPcHRpb24JAQd3cmFwRXJyAQIRaW52YWxpZCBscEFzc2V0SWQAGnByb3h5VHJlYXN1cnlBZGRyZXNzT3B0aW9uBAckbWF0Y2gwBRRmYWN0b3J5QWRkcmVzc09wdGlvbgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBAckbWF0Y2gxCQCdCAIFAWEJARdrZXlQcm94eVRyZWFzdXJ5QWRkcmVzcwADCQABAgUHJG1hdGNoMQIGU3RyaW5nBAFzBQckbWF0Y2gxCQCmCAEFAXMDCQABAgUHJG1hdGNoMQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgAacHJveHlUcmVhc3VyeUFkZHJlc3NPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUacHJveHlUcmVhc3VyeUFkZHJlc3NPcHRpb24JAQd3cmFwRXJyAQIeaW52YWxpZCBwcm94eSB0cmVhc3VyeSBhZGRyZXNzABltYWluVHJlYXN1cnlBZGRyZXNzT3B0aW9uBAckbWF0Y2gwBRRmYWN0b3J5QWRkcmVzc09wdGlvbgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBAckbWF0Y2gxCQCdCAIFAWEJARZrZXlNYWluVHJlYXN1cnlBZGRyZXNzAAMJAAECBQckbWF0Y2gxAgZTdHJpbmcEAXMFByRtYXRjaDEJAKYIAQUBcwMJAAECBQckbWF0Y2gxAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yABltYWluVHJlYXN1cnlBZGRyZXNzT3JGYWlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIFGW1haW5UcmVhc3VyeUFkZHJlc3NPcHRpb24JAQd3cmFwRXJyAQIdaW52YWxpZCBtYWluIHRyZWFzdXJ5IGFkZHJlc3MBGWdldE1hbmFnZXJQdWJsaWNLZXlPclVuaXQABAckbWF0Y2gwBRRmYWN0b3J5QWRkcmVzc09wdGlvbgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAJmYQUHJG1hdGNoMAQHJG1hdGNoMQkAnQgCBQJmYQkBE2tleU1hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDECBlN0cmluZwQDcHViBQckbWF0Y2gxCQDZBAEFA3B1YgUEdW5pdAUEdW5pdAELb25seUFkZHJlc3MCAWkHYWRkcmVzcwMJAAACCAUBaQZjYWxsZXIFB2FkZHJlc3MGCQEIdGhyb3dFcnIBAhFwZXJtaXNzaW9uIGRlbmllZAELb25seUZhY3RvcnkBAWkJAQtvbmx5QWRkcmVzcwIFAWkFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAQ9yZXdhcmRGb3JPcHRpb24CB3Jld2FyZHMGdGFyZ2V0BAFzCQCQAwEFB3Jld2FyZHMECyR0MDUyMDg1MjMzCQCRAwIFB3Jld2FyZHMAAAQCYTAIBQskdDA1MjA4NTIzMwJfMQQCcjAIBQskdDA1MjA4NTIzMwJfMgQLJHQwNTIzNjUyNjEJAJEDAgUHcmV3YXJkcwABBAJhMQgFCyR0MDUyMzY1MjYxAl8xBAJyMQgFCyR0MDUyMzY1MjYxAl8yBAskdDA1MjY0NTI4OQkAkQMCBQdyZXdhcmRzAAIEAmEyCAULJHQwNTI2NDUyODkCXzEEAnIyCAULJHQwNTI2NDUyODkCXzIDAwkAZgIFAXMAAAkAAAIFAmEwBQZ0YXJnZXQHBQJyMAMDCQBmAgUBcwABCQAAAgUCYTEFBnRhcmdldAcFAnIxAwMJAGYCBQFzAAIJAAACBQJhMgUGdGFyZ2V0BwUCcjIFBHVuaXQBEGZpbmFsaXplSU5URVJOQUwDGG5ld1RyZWFzdXJ5Vm9sdW1lSW5XYXZlcxdwd3JNYW5hZ2Vyc0JvbnVzSW5XYXZlcyB0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZgQSZG9uYXRlZFdhdmVzQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEKa2V5RG9uYXRlZAEFBHVuaXQAAAQTaW52ZXN0ZWRXYXZlc0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBC2tleUludmVzdGVkAQUEdW5pdAAABBxjdXJyZW50VHJlYXN1cnlWb2x1bWVJbldhdmVzCQBkAgUSZG9uYXRlZFdhdmVzQW1vdW50BRNpbnZlc3RlZFdhdmVzQW1vdW50BAlwcm9maXRSYXcJAGUCBRhuZXdUcmVhc3VyeVZvbHVtZUluV2F2ZXMFHGN1cnJlbnRUcmVhc3VyeVZvbHVtZUluV2F2ZXMEFnB3ck1hbmFnZXJzQm9udXNBbW91bnQDAwkAZwIFCXByb2ZpdFJhdwUXcHdyTWFuYWdlcnNCb251c0luV2F2ZXMGCQAAAgUXcHdyTWFuYWdlcnNCb251c0luV2F2ZXMAAAUXcHdyTWFuYWdlcnNCb251c0luV2F2ZXMJAQh0aHJvd0VycgECH3Bvd2VyIGJvbnVzIGlzIG1vcmUgdGhhbiBwcm9maXQEBnByb2ZpdAkAZQIFCXByb2ZpdFJhdwUWcHdyTWFuYWdlcnNCb251c0Ftb3VudAQMZG9uYXRpb25QYXJ0AwkAZgIFHGN1cnJlbnRUcmVhc3VyeVZvbHVtZUluV2F2ZXMAAAkAawMFEmRvbmF0ZWRXYXZlc0Ftb3VudAUGU0NBTEU4BRxjdXJyZW50VHJlYXN1cnlWb2x1bWVJbldhdmVzAAAEFWRvbmF0aW9uUHJvZml0UGFydFJhdwkAawMFBnByb2ZpdAUMZG9uYXRpb25QYXJ0BQZTQ0FMRTgEF2ludmVzdG1lbnRQcm9maXRQYXJ0UmF3CQBlAgUGcHJvZml0BRVkb25hdGlvblByb2ZpdFBhcnRSYXcEI3RyZWFzdXJ5Vm9sdW1lRGlmZkFsbG9jYXRpb25Db2VmQWJzCQEDYWJzAQUgdHJlYXN1cnlWb2x1bWVEaWZmQWxsb2NhdGlvbkNvZWYEEGFtb3VudFRvRG9uYXRpb24JAGsDBRdpbnZlc3RtZW50UHJvZml0UGFydFJhdwMJAGYCAAAFIHRyZWFzdXJ5Vm9sdW1lRGlmZkFsbG9jYXRpb25Db2VmBSN0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZkFicwAABQZTQ0FMRTgEEmFtb3VudFRvSW52ZXN0bWVudAkAawMFFWRvbmF0aW9uUHJvZml0UGFydFJhdwMJAGYCBSB0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZgAABSN0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZkFicwAABQZTQ0FMRTgEEmRvbmF0aW9uUHJvZml0UGFydAkAZAIJAGUCBRVkb25hdGlvblByb2ZpdFBhcnRSYXcFEmFtb3VudFRvSW52ZXN0bWVudAUQYW1vdW50VG9Eb25hdGlvbgQUaW52ZXN0bWVudFByb2ZpdFBhcnQJAGQCCQBlAgUXaW52ZXN0bWVudFByb2ZpdFBhcnRSYXcFEGFtb3VudFRvRG9uYXRpb24FEmFtb3VudFRvSW52ZXN0bWVudAQYZG9uYXRlZFdhdmVzQW1vdW50TmV3UmF3CQBkAgUSZG9uYXRlZFdhdmVzQW1vdW50BRJkb25hdGlvblByb2ZpdFBhcnQEGWludmVzdGVkV2F2ZXNBbW91bnROZXdSYXcJAGQCBRNpbnZlc3RlZFdhdmVzQW1vdW50BRRpbnZlc3RtZW50UHJvZml0UGFydAQPZG9uYXRlZFBhcnREZWJ0CQCXAwEJAMwIAgAACQDMCAIFGGRvbmF0ZWRXYXZlc0Ftb3VudE5ld1JhdwUDbmlsBBBpbnZlc3RlZFBhcnREZWJ0CQCXAwEJAMwIAgAACQDMCAIFGWludmVzdGVkV2F2ZXNBbW91bnROZXdSYXcFA25pbAQVZG9uYXRlZFdhdmVzQW1vdW50TmV3CQBkAgkAlgMBCQDMCAIAAAkAzAgCBRhkb25hdGVkV2F2ZXNBbW91bnROZXdSYXcFA25pbAUQaW52ZXN0ZWRQYXJ0RGVidAQWaW52ZXN0ZWRXYXZlc0Ftb3VudE5ldwkAZAIJAJYDAQkAzAgCAAAJAMwIAgUZaW52ZXN0ZWRXYXZlc0Ftb3VudE5ld1JhdwUDbmlsBQ9kb25hdGVkUGFydERlYnQED2xwQXNzZXRRdWFudGl0eQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQ9scEFzc2V0SWRPckZhaWwJAQd3cmFwRXJyAQIUaW52YWxpZCBscEFzc2V0IGluZm8IcXVhbnRpdHkECG5ld1ByaWNlCQBrAwUWaW52ZXN0ZWRXYXZlc0Ftb3VudE5ldwUGU0NBTEU4BQ9scEFzc2V0UXVhbnRpdHkEE2NoZWNrSWZQcmljZU5vdFplcm8DCQECIT0CBQhuZXdQcmljZQAABgkBCHRocm93RXJyAQIUTFAgcHJpY2UgY2Fubm90IGJlIDADCQAAAgUTY2hlY2tJZlByaWNlTm90WmVybwUTY2hlY2tJZlByaWNlTm90WmVybwQTbHBBc3NldEFtb3VudFRvQnVybgkBC3ZhbHVlT3JFbHNlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBDWtleVdpdGhkcmF3YWwAAAAEEHBheW1lbnRBbW91bnRNaW4JAJYDAQkAzAgCAAAJAMwIAgkAawMFE2xwQXNzZXRBbW91bnRUb0J1cm4FCG5ld1ByaWNlBQZTQ0FMRTgFA25pbAQYZmluYWxJbnZlc3RlZFdhdmVzQW1vdW50CQBlAgUWaW52ZXN0ZWRXYXZlc0Ftb3VudE5ldwUQcGF5bWVudEFtb3VudE1pbgQUbHBBc3NldEZpbmFsUXVhbnRpdHkJAGUCBQ9scEFzc2V0UXVhbnRpdHkFE2xwQXNzZXRBbW91bnRUb0J1cm4JAJgKBgUQcGF5bWVudEFtb3VudE1pbgUYZmluYWxJbnZlc3RlZFdhdmVzQW1vdW50BRVkb25hdGVkV2F2ZXNBbW91bnROZXcFCG5ld1ByaWNlBRNscEFzc2V0QW1vdW50VG9CdXJuBRRscEFzc2V0RmluYWxRdWFudGl0eQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLggBaQEHY2xhaW1MUAEQdXNlckFkZHJlc3NCeXRlcwQLY2hlY2tDYWxsZXIJAQtvbmx5RmFjdG9yeQEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBAt1c2VyQWRkcmVzcwkBB0FkZHJlc3MBBRB1c2VyQWRkcmVzc0J5dGVzBAlhdmFpbGFibGUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQxrZXlBdmFpbGFibGUBBQt1c2VyQWRkcmVzcwAABAdjbGFpbWVkCQELdmFsdWVPckVsc2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEKa2V5Q2xhaW1lZAEFC3VzZXJBZGRyZXNzAAAEDmZhY3RvcnlBY3Rpb25zAwkAZgIFCWF2YWlsYWJsZQAACQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCDXRyYW5zZmVyQXNzZXQJAMwIAgUQdXNlckFkZHJlc3NCeXRlcwkAzAgCBQlhdmFpbGFibGUJAMwIAgUPbHBBc3NldElkT3JGYWlsBQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBDGtleUF2YWlsYWJsZQEFC3VzZXJBZGRyZXNzCQDMCAIAAAUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIMaW50ZWdlckVudHJ5CQDMCAIJAQprZXlDbGFpbWVkAQULdXNlckFkZHJlc3MJAMwIAgkAZAIFB2NsYWltZWQFCWF2YWlsYWJsZQUDbmlsBQNuaWwFA25pbAkBCHRocm93RXJyAQIQbm90aGluZyB0byBjbGFpbQkAlAoCBQNuaWwFDmZhY3RvcnlBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCGZpbmFsaXplBBB1c2VyQWRkcmVzc0J5dGVzGG5ld1RyZWFzdXJ5Vm9sdW1lSW5XYXZlcxdwd3JNYW5hZ2Vyc0JvbnVzSW5XYXZlcyB0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZgQLY2hlY2tDYWxsZXIJAQtvbmx5RmFjdG9yeQEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBBNjdXJyZW50UGVyaW9kT3JGYWlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJARBrZXlDdXJyZW50UGVyaW9kAAkBB3dyYXBFcnIBAg5pbnZhbGlkIHBlcmlvZAQMcGVyaW9kTGVuZ3RoCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQ9rZXlQZXJpb2RMZW5ndGgACQEHd3JhcEVycgECFWludmFsaWQgcGVyaW9kIGxlbmd0aAQSY3VycmVudFN0YXJ0SGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQ5rZXlTdGFydEhlaWdodAEFE2N1cnJlbnRQZXJpb2RPckZhaWwJAQd3cmFwRXJyAQIUaW52YWxpZCBzdGFydCBoZWlnaHQEEmN1cnJlbnRQcmljZU9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQERa2V5UHJpY2VGb3JQZXJpb2QBBRNjdXJyZW50UGVyaW9kT3JGYWlsCQEHd3JhcEVycgECDWludmFsaWQgcHJpY2UEEm5leHRCbG9ja1RvUHJvY2VzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEVa2V5TmV4dEJsb2NrVG9Qcm9jZXNzAAkBB3dyYXBFcnIBAh1pbnZhbGlkIG5leHQgYmxvY2sgdG8gcHJvY2VzcwQPcGVyaW9kRW5kSGVpZ2h0CQBlAgkAZAIFEmN1cnJlbnRTdGFydEhlaWdodAUMcGVyaW9kTGVuZ3RoAAEEBmNoZWNrcwkAzAgCAwkAAAIIBQFpDG9yaWdpbkNhbGxlcgUZbWFpblRyZWFzdXJ5QWRkcmVzc09yRmFpbAYJAQh0aHJvd0VycgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIDCQBmAgUSbmV4dEJsb2NrVG9Qcm9jZXNzBQ9wZXJpb2RFbmRIZWlnaHQGCQEIdGhyb3dFcnIBAhJ1bnByb2Nlc3NlZCBibG9ja3MJAMwIAgMJAGcCBRhuZXdUcmVhc3VyeVZvbHVtZUluV2F2ZXMAAAYJAQh0aHJvd0VycgECG2ludmFsaWQgbmV3IHRyZWFzdXJ5IHZvbHVtZQkAzAgCAwkAZwIFF3B3ck1hbmFnZXJzQm9udXNJbldhdmVzAAAGCQEIdGhyb3dFcnIBAhppbnZhbGlkIFBXUiBtYW5hZ2VycyBib251cwkAzAgCAwMJAGcCBSB0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZgkBAS0BBQZTQ0FMRTgJAGcCBQZTQ0FMRTgFIHRyZWFzdXJ5Vm9sdW1lRGlmZkFsbG9jYXRpb25Db2VmBwYJAQh0aHJvd0VycgECM2ludmFsaWQgdHJlYXN1cnkgdm9sdW1lIGRpZmYgYWxsb2NhdGlvbiBjb2VmZmljaWVudAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBA0kdDAxMDc4MzExMDQzCQEQZmluYWxpemVJTlRFUk5BTAMFGG5ld1RyZWFzdXJ5Vm9sdW1lSW5XYXZlcwUXcHdyTWFuYWdlcnNCb251c0luV2F2ZXMFIHRyZWFzdXJ5Vm9sdW1lRGlmZkFsbG9jYXRpb25Db2VmBBBwYXltZW50QW1vdW50TWluCAUNJHQwMTA3ODMxMTA0MwJfMQQYZmluYWxJbnZlc3RlZFdhdmVzQW1vdW50CAUNJHQwMTA3ODMxMTA0MwJfMgQVZG9uYXRlZFdhdmVzQW1vdW50TmV3CAUNJHQwMTA3ODMxMTA0MwJfMwQIbmV3UHJpY2UIBQ0kdDAxMDc4MzExMDQzAl80BBNscEFzc2V0QW1vdW50VG9CdXJuCAUNJHQwMTA3ODMxMTA0MwJfNQQUbHBBc3NldEZpbmFsUXVhbnRpdHkIBQ0kdDAxMDc4MzExMDQzAl82BAluZXdQZXJpb2QJAGQCBRNjdXJyZW50UGVyaW9kT3JGYWlsAAEKAQxhZGROZXdBY3Rpb24CB2FjdGlvbnMHcGF5bWVudAQNJHQwMTExOTExMTI1MwUHYWN0aW9ucwQPc2NyaXB0VHJhbnNmZXJzCAUNJHQwMTExOTExMTI1MwJfMQQOYXNzZXRJZHNTdHJpbmcIBQ0kdDAxMTE5MTExMjUzAl8yBA1hbW91bnRzU3RyaW5nCAUNJHQwMTExOTExMTI1MwJfMwQNcGF5bWVudEFtb3VudAgFB3BheW1lbnQGYW1vdW50BA5wYXltZW50QXNzZXRJZAgFB3BheW1lbnQHYXNzZXRJZAQRbmV3QXNzZXRJZHNTdHJpbmcJAKwCAgICJXMJALkJAgkAzAgCBQ5hc3NldElkc1N0cmluZwkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQUOcGF5bWVudEFzc2V0SWQFA25pbAUDU0VQBBBuZXdBbW91bnRzU3RyaW5nCQCsAgICAiVkCQC5CQIJAMwIAgUNYW1vdW50c1N0cmluZwkAzAgCCQCkAwEFDXBheW1lbnRBbW91bnQFA25pbAUDU0VQBBFuZXdTY3JpcHRUcmFuc2ZlcgkBDlNjcmlwdFRyYW5zZmVyAwUUZmFjdG9yeUFkZHJlc3NPckZhaWwFDXBheW1lbnRBbW91bnQFDnBheW1lbnRBc3NldElkCQCVCgMJAM0IAgUPc2NyaXB0VHJhbnNmZXJzBRFuZXdTY3JpcHRUcmFuc2ZlcgURbmV3QXNzZXRJZHNTdHJpbmcFEG5ld0Ftb3VudHNTdHJpbmcEDSR0MDExNzEzMTE4MDQKAAIkbAgFAWkIcGF5bWVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAIAAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGFkZE5ld0FjdGlvbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQPc2NyaXB0VHJhbnNmZXJzCAUNJHQwMTE3MTMxMTgwNAJfMQQIQXNzZXRJZHMIBQ0kdDAxMTcxMzExODA0Al8yBAdBbW91bnRzCAUNJHQwMTE3MTMxMTgwNAJfMwQOZmFjdG9yeUFjdGlvbnMJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIMaW50ZWdlckVudHJ5CQDMCAIJARRrZXlQb3dlck1hbmFnZXJCb251cwEFE2N1cnJlbnRQZXJpb2RPckZhaWwJAMwIAgUXcHdyTWFuYWdlcnNCb251c0luV2F2ZXMFA25pbAUDbmlsCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCDGludGVnZXJFbnRyeQkAzAgCCQEQa2V5Q3VycmVudFBlcmlvZAAJAMwIAgUJbmV3UGVyaW9kBQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBEWtleVByaWNlRm9yUGVyaW9kAQUJbmV3UGVyaW9kCQDMCAIFCG5ld1ByaWNlBQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBDmtleVN0YXJ0SGVpZ2h0AQUJbmV3UGVyaW9kCQDMCAIJAGQCBQ9wZXJpb2RFbmRIZWlnaHQAAQUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIEYnVybgkAzAgCBRNscEFzc2V0QW1vdW50VG9CdXJuBQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBDWtleVdpdGhkcmF3YWwACQDMCAIAAAUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIMaW50ZWdlckVudHJ5CQDMCAIJAQtrZXlJbnZlc3RlZAEFBHVuaXQJAMwIAgUYZmluYWxJbnZlc3RlZFdhdmVzQW1vdW50BQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBCmtleURvbmF0ZWQBBQR1bml0CQDMCAIFFWRvbmF0ZWRXYXZlc0Ftb3VudE5ldwUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAILc3RyaW5nRW50cnkJAMwIAgkBG2tleVBlcmlvZFdpdGhkcmF3YWxBc3NldElkcwEFCW5ld1BlcmlvZAkAzAgCBQhBc3NldElkcwUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAILc3RyaW5nRW50cnkJAMwIAgkBGmtleVBlcmlvZFdpdGhkcmF3YWxBbW91bnRzAQUJbmV3UGVyaW9kCQDMCAIFB0Ftb3VudHMFA25pbAUDbmlsBQNuaWwJAJQKAgUPc2NyaXB0VHJhbnNmZXJzBQ5mYWN0b3J5QWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBmaW5hbGl6ZVJFQURPTkxZAxhuZXdUcmVhc3VyeVZvbHVtZUluV2F2ZXMXcHdyTWFuYWdlcnNCb251c0luV2F2ZXMgdHJlYXN1cnlWb2x1bWVEaWZmQWxsb2NhdGlvbkNvZWYEE2N1cnJlbnRQZXJpb2RPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBEGtleUN1cnJlbnRQZXJpb2QACQEHd3JhcEVycgECDmludmFsaWQgcGVyaW9kBAxwZXJpb2RMZW5ndGgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBD2tleVBlcmlvZExlbmd0aAAJAQd3cmFwRXJyAQIVaW52YWxpZCBwZXJpb2QgbGVuZ3RoBBJjdXJyZW50U3RhcnRIZWlnaHQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBDmtleVN0YXJ0SGVpZ2h0AQUTY3VycmVudFBlcmlvZE9yRmFpbAkBB3dyYXBFcnIBAhRpbnZhbGlkIHN0YXJ0IGhlaWdodAQSY3VycmVudFByaWNlT3JGYWlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJARFrZXlQcmljZUZvclBlcmlvZAEFE2N1cnJlbnRQZXJpb2RPckZhaWwJAQd3cmFwRXJyAQINaW52YWxpZCBwcmljZQQSbmV4dEJsb2NrVG9Qcm9jZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJARVrZXlOZXh0QmxvY2tUb1Byb2Nlc3MACQEHd3JhcEVycgECHWludmFsaWQgbmV4dCBibG9jayB0byBwcm9jZXNzBA9wZXJpb2RFbmRIZWlnaHQJAGUCCQBkAgUSY3VycmVudFN0YXJ0SGVpZ2h0BQxwZXJpb2RMZW5ndGgAAQQGY2hlY2tzCQDMCAIDCQBmAgUSbmV4dEJsb2NrVG9Qcm9jZXNzBQ9wZXJpb2RFbmRIZWlnaHQGCQEIdGhyb3dFcnIBAhJ1bnByb2Nlc3NlZCBibG9ja3MJAMwIAgMJAGcCBRhuZXdUcmVhc3VyeVZvbHVtZUluV2F2ZXMAAAYJAQh0aHJvd0VycgECG2ludmFsaWQgbmV3IHRyZWFzdXJ5IHZvbHVtZQkAzAgCAwkAZwIFF3B3ck1hbmFnZXJzQm9udXNJbldhdmVzAAAGCQEIdGhyb3dFcnIBAhppbnZhbGlkIFBXUiBtYW5hZ2VycyBib251cwkAzAgCAwMJAGcCBSB0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZgkBAS0BBQZTQ0FMRTgJAGcCBQZTQ0FMRTgFIHRyZWFzdXJ5Vm9sdW1lRGlmZkFsbG9jYXRpb25Db2VmBwYJAQh0aHJvd0VycgECM2ludmFsaWQgdHJlYXN1cnkgdm9sdW1lIGRpZmYgYWxsb2NhdGlvbiBjb2VmZmljaWVudAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzCQCUCgIFA25pbAkBEGZpbmFsaXplSU5URVJOQUwDBRhuZXdUcmVhc3VyeVZvbHVtZUluV2F2ZXMFF3B3ck1hbmFnZXJzQm9udXNJbldhdmVzBSB0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQZpbnZlc3QBEHVzZXJBZGRyZXNzQnl0ZXMEC2NoZWNrQ2FsbGVyCQELb25seUZhY3RvcnkBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQLdXNlckFkZHJlc3MJAQdBZGRyZXNzAQUQdXNlckFkZHJlc3NCeXRlcwQTY3VycmVudFBlcmlvZE9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEQa2V5Q3VycmVudFBlcmlvZAAJAQd3cmFwRXJyAQIOaW52YWxpZCBwZXJpb2QEEmN1cnJlbnRQcmljZU9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQERa2V5UHJpY2VGb3JQZXJpb2QBBRNjdXJyZW50UGVyaW9kT3JGYWlsCQEHd3JhcEVycgECDWludmFsaWQgcHJpY2UEB3BheW1lbnQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAAJAQh0aHJvd0VycgECEGludmFsaWQgcGF5bWVudHMEDSR0MDE1Mjg1MTU0NjIDAwkAAAIIBQdwYXltZW50B2Fzc2V0SWQFBHVuaXQJAGYCCAUHcGF5bWVudAZhbW91bnQAAAcJAJQKAggFB3BheW1lbnQGYW1vdW50CAUHcGF5bWVudAdhc3NldElkCQEIdGhyb3dFcnIBAhZpbnZhbGlkIHBheW1lbnQgYW1vdW50BA1wYXltZW50QW1vdW50CAUNJHQwMTUyODUxNTQ2MgJfMQQOcGF5bWVudEFzc2V0SWQIBQ0kdDAxNTI4NTE1NDYyAl8yBA1scEFzc2V0QW1vdW50AwkAZgIFEmN1cnJlbnRQcmljZU9yRmFpbAAACQBrAwUNcGF5bWVudEFtb3VudAUGU0NBTEU4BRJjdXJyZW50UHJpY2VPckZhaWwAAAQIaW52ZXN0ZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQtrZXlJbnZlc3RlZAEFBHVuaXQAAAQHYWN0aW9ucwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRltYWluVHJlYXN1cnlBZGRyZXNzT3JGYWlsBQ1wYXltZW50QW1vdW50BQ5wYXltZW50QXNzZXRJZAUDbmlsBA5mYWN0b3J5QWN0aW9ucwkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBC2tleUludmVzdGVkAQUEdW5pdAkAzAgCCQBkAgUIaW52ZXN0ZWQFDXBheW1lbnRBbW91bnQFA25pbAUDbmlsCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCB3JlaXNzdWUJAMwIAgUNbHBBc3NldEFtb3VudAUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAINdHJhbnNmZXJBc3NldAkAzAgCBRB1c2VyQWRkcmVzc0J5dGVzCQDMCAIFDWxwQXNzZXRBbW91bnQJAMwIAgUPbHBBc3NldElkT3JGYWlsBQNuaWwFA25pbAUDbmlsCQCUCgIFB2FjdGlvbnMFDmZhY3RvcnlBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCHdpdGhkcmF3ARB1c2VyQWRkcmVzc0J5dGVzBAtjaGVja0NhbGxlcgkBC29ubHlGYWN0b3J5AQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIEC3VzZXJBZGRyZXNzCQEHQWRkcmVzcwEFEHVzZXJBZGRyZXNzQnl0ZXMEE2N1cnJlbnRQZXJpb2RPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBEGtleUN1cnJlbnRQZXJpb2QACQEHd3JhcEVycgECDmludmFsaWQgcGVyaW9kBAdwYXltZW50AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAACQEIdGhyb3dFcnIBCQEHd3JhcEVycgECEGludmFsaWQgcGF5bWVudHMEDnBheW1lbnRBc3NldElkAwkAAAIIBQdwYXltZW50B2Fzc2V0SWQFD2xwQXNzZXRJZE9yRmFpbAUPbHBBc3NldElkT3JGYWlsCQEIdGhyb3dFcnIBAhVpbnZhbGlkIHBheW1lbnQgYXNzZXQEDXBheW1lbnRBbW91bnQDCQBmAggFB3BheW1lbnQGYW1vdW50AAAIBQdwYXltZW50BmFtb3VudAkBCHRocm93RXJyAQIWaW52YWxpZCBwYXltZW50IGFtb3VudAQKd2l0aGRyYXdhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBDWtleVdpdGhkcmF3YWwAAAAEB2FjdGlvbnMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUUZmFjdG9yeUFkZHJlc3NPckZhaWwFDXBheW1lbnRBbW91bnQFDnBheW1lbnRBc3NldElkBQNuaWwEDmZhY3RvcnlBY3Rpb25zCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCDGludGVnZXJFbnRyeQkAzAgCCQENa2V5V2l0aGRyYXdhbAAJAMwIAgkAZAIFCndpdGhkcmF3YWwFDXBheW1lbnRBbW91bnQFA25pbAUDbmlsCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCC3N0cmluZ0VudHJ5CQDMCAIJARRrZXlXaXRoZHJhd2FsUmVxdWVzdAIFC3VzZXJBZGRyZXNzCAUBaQ10cmFuc2FjdGlvbklkCQDMCAIJARZ2YWx1ZVdpdGhkcmF3YWxSZXF1ZXN0BAUHUEVORElORwUNcGF5bWVudEFtb3VudAkAZAIFE2N1cnJlbnRQZXJpb2RPckZhaWwAAQUEdW5pdAUDbmlsBQNuaWwFA25pbAMJAAACBQ5mYWN0b3J5QWN0aW9ucwUOZmFjdG9yeUFjdGlvbnMJAJQKAgUHYWN0aW9ucwUOZmFjdG9yeUFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOY2FuY2VsV2l0aGRyYXcCEHVzZXJBZGRyZXNzQnl0ZXMEdHhJZAQLY2hlY2tDYWxsZXIJAQtvbmx5RmFjdG9yeQEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBAt1c2VyQWRkcmVzcwkBB0FkZHJlc3MBBRB1c2VyQWRkcmVzc0J5dGVzBBd3aXRoZHJhd2FsUmVxdWVzdE9wdGlvbgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEUa2V5V2l0aGRyYXdhbFJlcXVlc3QCBQt1c2VyQWRkcmVzcwUEdHhJZAkBB3dyYXBFcnIBAhppbnZhbGlkIHdpdGhkcmF3YWwgcmVxdWVzdAQTY3VycmVudFBlcmlvZE9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEQa2V5Q3VycmVudFBlcmlvZAAJAQd3cmFwRXJyAQIOaW52YWxpZCBwZXJpb2QEDSR0MDE3ODY5MTc5ODIJASFwYXJzZVdpdGhkcmF3YWxSZXF1ZXN0VmFsdWVPckZhaWwBBRd3aXRoZHJhd2FsUmVxdWVzdE9wdGlvbgQGc3RhdHVzCAUNJHQwMTc4NjkxNzk4MgJfMQQNbHBBc3NldEFtb3VudAgFDSR0MDE3ODY5MTc5ODICXzIEDHRhcmdldFBlcmlvZAgFDSR0MDE3ODY5MTc5ODICXzMECWNsYWltVHhJZAgFDSR0MDE3ODY5MTc5ODICXzQEBmNoZWNrcwkAzAgCAwkAAAIFBnN0YXR1cwUHUEVORElORwYJAQh0aHJvd0VycgECIWludmFsaWQgd2l0aGRyYXdhbCByZXF1ZXN0IHN0YXR1cwkAzAgCAwkAZgIFDHRhcmdldFBlcmlvZAUTY3VycmVudFBlcmlvZE9yRmFpbAYJAQh0aHJvd0VycgECIWludmFsaWQgd2l0aGRyYXdhbCByZXF1ZXN0IHBlcmlvZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAp3aXRoZHJhd2FsCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQ1rZXlXaXRoZHJhd2FsAAkBB3dyYXBFcnIBAh9pbnZhbGlkIHRvdGFsIHdpdGhkcmF3YWwgYW1vdW50BA5mYWN0b3J5QWN0aW9ucwkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBDWtleVdpdGhkcmF3YWwACQDMCAIDCQBnAgUKd2l0aGRyYXdhbAUNbHBBc3NldEFtb3VudAkAZQIFCndpdGhkcmF3YWwFDWxwQXNzZXRBbW91bnQJAQh0aHJvd0VycgECGWludmFsaWQgd2l0aGRyYXdhbCBhbW91bnQFA25pbAUDbmlsCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCC2RlbGV0ZUVudHJ5CQDMCAIJARRrZXlXaXRoZHJhd2FsUmVxdWVzdAIFC3VzZXJBZGRyZXNzBQR0eElkBQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAg10cmFuc2ZlckFzc2V0CQDMCAIFEHVzZXJBZGRyZXNzQnl0ZXMJAMwIAgUNbHBBc3NldEFtb3VudAkAzAgCBQ9scEFzc2V0SWRPckZhaWwFA25pbAUDbmlsBQNuaWwDCQAAAgUOZmFjdG9yeUFjdGlvbnMFDmZhY3RvcnlBY3Rpb25zCQCUCgIFA25pbAUOZmFjdG9yeUFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPY2xhaW1Db2xsYXRlcmFsAhB1c2VyQWRkcmVzc0J5dGVzBHR4SWQEC2NoZWNrQ2FsbGVyCQELb25seUZhY3RvcnkBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQLdXNlckFkZHJlc3MJAQdBZGRyZXNzAQUQdXNlckFkZHJlc3NCeXRlcwQTY3VycmVudFBlcmlvZE9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEQa2V5Q3VycmVudFBlcmlvZAAJAQd3cmFwRXJyAQIOaW52YWxpZCBwZXJpb2QEF3dpdGhkcmF3YWxSZXF1ZXN0T3B0aW9uCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJARRrZXlXaXRoZHJhd2FsUmVxdWVzdAIFC3VzZXJBZGRyZXNzBQR0eElkCQEHd3JhcEVycgECGmludmFsaWQgd2l0aGRyYXdhbCByZXF1ZXN0BA0kdDAxOTMxOTE5NDMyCQEhcGFyc2VXaXRoZHJhd2FsUmVxdWVzdFZhbHVlT3JGYWlsAQUXd2l0aGRyYXdhbFJlcXVlc3RPcHRpb24EBnN0YXR1cwgFDSR0MDE5MzE5MTk0MzICXzEEDWxwQXNzZXRBbW91bnQIBQ0kdDAxOTMxOTE5NDMyAl8yBAx0YXJnZXRQZXJpb2QIBQ0kdDAxOTMxOTE5NDMyAl8zBAljbGFpbVR4SWQIBQ0kdDAxOTMxOTE5NDMyAl80AwkAAAIFBnN0YXR1cwUIRklOSVNIRUQJAQh0aHJvd0VycgECIWludmFsaWQgd2l0aGRyYXdhbCByZXF1ZXN0IHN0YXR1cwMJAGYCBQx0YXJnZXRQZXJpb2QFE2N1cnJlbnRQZXJpb2RPckZhaWwJAQh0aHJvd0VycgECIWludmFsaWQgd2l0aGRyYXdhbCByZXF1ZXN0IHBlcmlvZAQLcHJpY2VPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBEWtleVByaWNlRm9yUGVyaW9kAQUMdGFyZ2V0UGVyaW9kCQEHd3JhcEVycgECDWludmFsaWQgcHJpY2UEBmFtb3VudAMJAGYCBQtwcmljZU9yRmFpbAAACQBrAwUNbHBBc3NldEFtb3VudAULcHJpY2VPckZhaWwFBlNDQUxFOAAABA5mYWN0b3J5QWN0aW9ucwkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgtzdHJpbmdFbnRyeQkAzAgCCQEUa2V5V2l0aGRyYXdhbFJlcXVlc3QCBQt1c2VyQWRkcmVzcwUEdHhJZAkAzAgCCQEWdmFsdWVXaXRoZHJhd2FsUmVxdWVzdAQFCEZJTklTSEVEBQ1scEFzc2V0QW1vdW50BQx0YXJnZXRQZXJpb2QIBQFpDXRyYW5zYWN0aW9uSWQFA25pbAUDbmlsCQDMCAIECmFzc2V0c0xpc3QJANEIAgkAvQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBG2tleVBlcmlvZFdpdGhkcmF3YWxBc3NldElkcwEFE2N1cnJlbnRQZXJpb2RPckZhaWwFA1NFUAAABAthbW91bnRzTGlzdAkA0QgCCQC9CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEaa2V5UGVyaW9kV2l0aGRyYXdhbEFtb3VudHMBBRNjdXJyZW50UGVyaW9kT3JGYWlsBQNTRVAAAAkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIOdHJhbnNmZXJBc3NldHMJAMwIAgUQdXNlckFkZHJlc3NCeXRlcwkAzAgCBQphc3NldHNMaXN0CQDMCAIFC2Ftb3VudHNMaXN0BQNuaWwFA25pbAUDbmlsCQCUCgIFA25pbAUOZmFjdG9yeUFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENcHJvY2Vzc0Jsb2NrcwEQdXNlckFkZHJlc3NCeXRlcwQLY2hlY2tDYWxsZXIJAQtvbmx5RmFjdG9yeQEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBAt1c2VyQWRkcmVzcwkBB0FkZHJlc3MBBRB1c2VyQWRkcmVzc0J5dGVzBBNjdXJyZW50UGVyaW9kT3JGYWlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJARBrZXlDdXJyZW50UGVyaW9kAAkBB3dyYXBFcnIBAg5pbnZhbGlkIHBlcmlvZAQMcGVyaW9kTGVuZ3RoCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQ9rZXlQZXJpb2RMZW5ndGgACQEHd3JhcEVycgECFWludmFsaWQgcGVyaW9kIGxlbmd0aAQSY3VycmVudFN0YXJ0SGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQ5rZXlTdGFydEhlaWdodAEFE2N1cnJlbnRQZXJpb2RPckZhaWwJAQd3cmFwRXJyAQIUaW52YWxpZCBzdGFydCBoZWlnaHQEEmN1cnJlbnRQcmljZU9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQERa2V5UHJpY2VGb3JQZXJpb2QBBRNjdXJyZW50UGVyaW9kT3JGYWlsCQEHd3JhcEVycgECDWludmFsaWQgcHJpY2UEEm5leHRCbG9ja1RvUHJvY2VzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEVa2V5TmV4dEJsb2NrVG9Qcm9jZXNzAAkBB3dyYXBFcnIBAh1pbnZhbGlkIG5leHQgYmxvY2sgdG8gcHJvY2VzcwQPcGVyaW9kRW5kSGVpZ2h0CQBlAgkAZAIFEmN1cnJlbnRTdGFydEhlaWdodAUMcGVyaW9kTGVuZ3RoAAEEHGJsb2Nrc1Byb2Nlc3NpbmdCYXRjaFNpemVNYXgAKAQZYmxvY2tzUHJvY2Vzc2luZ0JhdGNoU2l6ZQMDAwkAZwIFBmhlaWdodAUSbmV4dEJsb2NrVG9Qcm9jZXNzAwkAZwIFEm5leHRCbG9ja1RvUHJvY2VzcwUSY3VycmVudFN0YXJ0SGVpZ2h0BgkAAAIFE2N1cnJlbnRQZXJpb2RPckZhaWwAAAcJAGcCBQ9wZXJpb2RFbmRIZWlnaHQFEm5leHRCbG9ja1RvUHJvY2VzcwcJAJcDAQkAzAgCCQBkAgkAZQIFD3BlcmlvZEVuZEhlaWdodAUSbmV4dEJsb2NrVG9Qcm9jZXNzAAEJAMwIAgUcYmxvY2tzUHJvY2Vzc2luZ0JhdGNoU2l6ZU1heAUDbmlsCQEIdGhyb3dFcnIBCQEHd3JhcEVycgECFGludmFsaWQgdGFyZ2V0IGJsb2NrBBVibG9ja1Byb2Nlc3NpbmdSZXdhcmQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBGGtleUJsb2NrUHJvY2Vzc2luZ1Jld2FyZAAJAQd3cmFwRXJyAQIfaW52YWxpZCBibG9jayBwcm9jZXNzaW5nIHJld2FyZAQgYmxvY2tQcm9jZXNzaW5nUmV3YXJkQnlHZW5lcmF0b3IJAGkCBRVibG9ja1Byb2Nlc3NpbmdSZXdhcmQFGWJsb2Nrc1Byb2Nlc3NpbmdCYXRjaFNpemUEKWJsb2NrUHJvY2Vzc2luZ1Jld2FyZEJ5R2VuZXJhdG9yUmVtYWluZGVyCQBlAgUVYmxvY2tQcm9jZXNzaW5nUmV3YXJkCQBoAgUgYmxvY2tQcm9jZXNzaW5nUmV3YXJkQnlHZW5lcmF0b3IFGWJsb2Nrc1Byb2Nlc3NpbmdCYXRjaFNpemUKAQNtYXACA2FjYwNpbmMDCQBnAgUDaW5jBRlibG9ja3NQcm9jZXNzaW5nQmF0Y2hTaXplBQNhY2MEEXRhcmdldEJsb2NrSGVpZ2h0CQBkAgUSbmV4dEJsb2NrVG9Qcm9jZXNzBQNpbmMED3RhcmdldEJsb2NrSW5mbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDtBwEFEXRhcmdldEJsb2NrSGVpZ2h0CQEHd3JhcEVycgECEmludmFsaWQgYmxvY2sgaW5mbwQUdHJlYXN1cnlSZXdhcmRPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBD3Jld2FyZEZvck9wdGlvbgIIBQ90YXJnZXRCbG9ja0luZm8HcmV3YXJkcwUacHJveHlUcmVhc3VyeUFkZHJlc3NPckZhaWwJAQd3cmFwRXJyAQkArAICAiNpbnZhbGlkIHRyZWFzdXJ5IHJld2FyZCBmb3IgaGVpZ2h0IAkApAMBBRF0YXJnZXRCbG9ja0hlaWdodAQJZ2VuZXJhdG9yCAUPdGFyZ2V0QmxvY2tJbmZvCWdlbmVyYXRvcgQJYXZhaWxhYmxlCQELdmFsdWVPckVsc2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEMa2V5QXZhaWxhYmxlAQUJZ2VuZXJhdG9yAAAEDGNhbGxlclJld2FyZAMJAAACBQNpbmMJAGUCBRlibG9ja3NQcm9jZXNzaW5nQmF0Y2hTaXplAAEJAGQCBSBibG9ja1Byb2Nlc3NpbmdSZXdhcmRCeUdlbmVyYXRvcgUpYmxvY2tQcm9jZXNzaW5nUmV3YXJkQnlHZW5lcmF0b3JSZW1haW5kZXIFIGJsb2NrUHJvY2Vzc2luZ1Jld2FyZEJ5R2VuZXJhdG9yBA1scEFzc2V0QW1vdW50AwkAZgIFEmN1cnJlbnRQcmljZU9yRmFpbAAACQBrAwkAZQIFFHRyZWFzdXJ5UmV3YXJkT3JGYWlsBQxjYWxsZXJSZXdhcmQFBlNDQUxFOAUSY3VycmVudFByaWNlT3JGYWlsAAAEFGZhY3RvcnlBY3Rpb25zU2luZ2xlCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCC3N0cmluZ0VudHJ5CQDMCAIJARFrZXlCbG9ja1Byb2Nlc3NlZAEFEXRhcmdldEJsb2NrSGVpZ2h0CQDMCAIJALkJAgkAzAgCCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJAMwIAgkApAMBBRNjdXJyZW50UGVyaW9kT3JGYWlsCQDMCAIJAKUIAQUJZ2VuZXJhdG9yCQDMCAIJANgEAQUQdXNlckFkZHJlc3NCeXRlcwkAzAgCCQCkAwEFFHRyZWFzdXJ5UmV3YXJkT3JGYWlsCQDMCAIJAKQDAQUMY2FsbGVyUmV3YXJkCQDMCAIJAKQDAQUNbHBBc3NldEFtb3VudAUDbmlsBQNTRVAFA25pbAUDbmlsCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCDGludGVnZXJFbnRyeQkAzAgCCQEMa2V5QXZhaWxhYmxlAQUJZ2VuZXJhdG9yCQDMCAIJAGQCBQlhdmFpbGFibGUFDWxwQXNzZXRBbW91bnQFA25pbAUDbmlsBQNuaWwDCQAAAgUUZmFjdG9yeUFjdGlvbnNTaW5nbGUFFGZhY3RvcnlBY3Rpb25zU2luZ2xlBA0kdDAyNDAwMjI0MDM1BQNhY2MECmxwQXNzZXRBY2MIBQ0kdDAyNDAwMjI0MDM1Al8xBAlyZXdhcmRBY2MIBQ0kdDAyNDAwMjI0MDM1Al8yCQCUCgIJAGQCBQpscEFzc2V0QWNjBQ1scEFzc2V0QW1vdW50CQBkAgUJcmV3YXJkQWNjBRR0cmVhc3VyeVJld2FyZE9yRmFpbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQEbGlzdAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgkAzAgCAA8JAMwIAgAQCQDMCAIAEQkAzAgCABIJAMwIAgATCQDMCAIAFAkAzAgCABUJAMwIAgAWCQDMCAIAFwkAzAgCABgJAMwIAgAZCQDMCAIAGgkAzAgCABsJAMwIAgAcCQDMCAIAHQkAzAgCAB4JAMwIAgAfCQDMCAIAIAkAzAgCACEJAMwIAgAiCQDMCAIAIwkAzAgCACQJAMwIAgAlCQDMCAIAJgkAzAgCACcFA25pbAQNJHQwMjQzMDIyNDM3OAoAAiRsBQRsaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbWFwAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA0MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoAwkAAAIFDSR0MDI0MzAyMjQzNzgFDSR0MDI0MzAyMjQzNzgEEXJld2FyZEFtb3VudFRvdGFsCAUNJHQwMjQzMDIyNDM3OAJfMgQSbHBBc3NldEFtb3VudFRvdGFsCAUNJHQwMjQzMDIyNDM3OAJfMQQacmV3YXJkVG9NYWluVHJlYXN1cnlBbW91bnQJAGUCBRFyZXdhcmRBbW91bnRUb3RhbAUVYmxvY2tQcm9jZXNzaW5nUmV3YXJkBAhpbnZlc3RlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBC2tleUludmVzdGVkAQUEdW5pdAAABAdhY3Rpb25zCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCB3JlaXNzdWUJAMwIAgUSbHBBc3NldEFtb3VudFRvdGFsBQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBFWtleU5leHRCbG9ja1RvUHJvY2VzcwAJAMwIAgkAZAIFEm5leHRCbG9ja1RvUHJvY2VzcwUZYmxvY2tzUHJvY2Vzc2luZ0JhdGNoU2l6ZQUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIZdHJhbnNmZXJGcm9tUHJveHlUcmVhc3VyeQkAzAgCCAUZbWFpblRyZWFzdXJ5QWRkcmVzc09yRmFpbAVieXRlcwkAzAgCBRpyZXdhcmRUb01haW5UcmVhc3VyeUFtb3VudAUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIZdHJhbnNmZXJGcm9tUHJveHlUcmVhc3VyeQkAzAgCBRB1c2VyQWRkcmVzc0J5dGVzCQDMCAIFFWJsb2NrUHJvY2Vzc2luZ1Jld2FyZAUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIMaW50ZWdlckVudHJ5CQDMCAIJAQtrZXlJbnZlc3RlZAEFBHVuaXQJAMwIAgkAZAIFCGludmVzdGVkBRpyZXdhcmRUb01haW5UcmVhc3VyeUFtb3VudAUDbmlsBQNuaWwFA25pbAMJAAACBQdhY3Rpb25zBQdhY3Rpb25zCQCUCgIFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAECXB1YmxpY0tleQQHJG1hdGNoMAkBGWdldE1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEA3B1YgUHJG1hdGNoMAUDcHViCAUCdHgPc2VuZGVyUHVibGljS2V5CQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQlwdWJsaWNLZXl3O/N/", "height": 2684188, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CK4sYcu67kpWrryazaT54bguTXR2LWzHnenFWnhhvLGn Next: 5Ckarhp8XofjGwC1C3A8iQ5HomdERTtzi2SvuwSa8tEb Diff:
Old | New | Differences | |
---|---|---|---|
1 | - | {-# STDLIB_VERSION | |
1 | + | {-# STDLIB_VERSION 7 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "__" | |
5 | 5 | ||
6 | - | let b = | |
6 | + | let b = "calculator.ride" | |
7 | 7 | ||
8 | - | func c (d) = makeString(["voting_verified_v2.ride:", d], " ") | |
8 | + | let c = 100000000 | |
9 | + | ||
10 | + | let d = "PENDING" | |
11 | + | ||
12 | + | let e = "FINISHED" | |
13 | + | ||
14 | + | let f = "WAVES" | |
15 | + | ||
16 | + | func g (h) = ((b + ": ") + h) | |
9 | 17 | ||
10 | 18 | ||
11 | - | func | |
19 | + | func i (h) = throw(g(h)) | |
12 | 20 | ||
13 | 21 | ||
14 | - | func | |
15 | - | let | |
16 | - | if ($isInstanceOf( | |
22 | + | func j (k) = { | |
23 | + | let l = k | |
24 | + | if ($isInstanceOf(l, "ByteVector")) | |
17 | 25 | then { | |
18 | - | let | |
19 | - | | |
26 | + | let m = l | |
27 | + | toBase58String(m) | |
20 | 28 | } | |
21 | - | else throw("Failed to cast into Integer") | |
29 | + | else if ($isInstanceOf(l, "Unit")) | |
30 | + | then f | |
31 | + | else throw("Match error") | |
22 | 32 | } | |
23 | 33 | ||
24 | 34 | ||
25 | - | func j (k,l) = valueOrElse(getInteger(k, l), 0) | |
35 | + | func n (h) = if ((h == f)) | |
36 | + | then unit | |
37 | + | else fromBase58String(h) | |
26 | 38 | ||
27 | 39 | ||
28 | - | func m (k,l) = valueOrErrorMessage(getInteger(k, l), c((l + " is not defined"))) | |
40 | + | func o (p) = if ((0 > p)) | |
41 | + | then -(p) | |
42 | + | else p | |
29 | 43 | ||
30 | 44 | ||
31 | - | func | |
45 | + | func q () = makeString(["%s", "factory"], a) | |
32 | 46 | ||
33 | 47 | ||
34 | - | func | |
48 | + | func r () = makeString(["%s", "managerPublicKey"], a) | |
35 | 49 | ||
36 | 50 | ||
37 | - | let p = makeString(["%s", "boostingContract"], a) | |
38 | - | ||
39 | - | let q = makeString(["%s", "emissionContract"], a) | |
40 | - | ||
41 | - | let r = makeString(["%s", "assetsStoreContract"], a) | |
42 | - | ||
43 | - | let s = addressFromStringValue(getStringValue(p)) | |
44 | - | ||
45 | - | let t = addressFromStringValue(getStringValue(q)) | |
46 | - | ||
47 | - | let u = addressFromStringValue(getStringValue(r)) | |
48 | - | ||
49 | - | let v = makeString(["%s", "config"], a) | |
50 | - | ||
51 | - | let w = split(o(t, v), a)[1] | |
52 | - | ||
53 | - | let x = fromBase58String(w) | |
54 | - | ||
55 | - | let y = makeString(["%s%s", "votingThreshold", "add"], a) | |
56 | - | ||
57 | - | let z = makeString(["%s%s", "votingThreshold", "remove"], a) | |
58 | - | ||
59 | - | let A = makeString(["%s", "periodLengthRemove"], a) | |
60 | - | ||
61 | - | let B = makeString(["%s", "maxPeriodLength"], a) | |
62 | - | ||
63 | - | let C = makeString(["%s", "minPeriodLength"], a) | |
64 | - | ||
65 | - | func D (E,F) = makeString(["%s%s%d", "votingRewardAssetId", E, toString(F)], a) | |
51 | + | func s () = makeString(["%s", "lpAssetId"], a) | |
66 | 52 | ||
67 | 53 | ||
68 | - | func | |
54 | + | func t () = makeString(["%s", "proxyTreasury"], a) | |
69 | 55 | ||
70 | 56 | ||
71 | - | func | |
57 | + | func u () = makeString(["%s", "mainTreasury"], a) | |
72 | 58 | ||
73 | 59 | ||
74 | - | let J = makeString(["%s", "finalizeCallRewardAmount"], a) | |
75 | - | ||
76 | - | let K = makeString(["%s", "minSuggestRemoveBalance"], a) | |
77 | - | ||
78 | - | func L (E) = makeString(["%s%s", "currentIndex", E], a) | |
60 | + | func v (k) = makeString(["%s%s", "invested", j(k)], a) | |
79 | 61 | ||
80 | 62 | ||
81 | - | func | |
63 | + | func w (k) = makeString(["%s%s", "donated", j(k)], a) | |
82 | 64 | ||
83 | 65 | ||
84 | - | func | |
66 | + | func x (y) = makeString(["%s%s", "available", toString(y)], a) | |
85 | 67 | ||
86 | 68 | ||
87 | - | func | |
69 | + | func z (y) = makeString(["%s%s", "claimed", toString(y)], a) | |
88 | 70 | ||
89 | 71 | ||
90 | - | func | |
72 | + | func A () = makeString(["%s", "currentPeriod"], a) | |
91 | 73 | ||
92 | 74 | ||
93 | - | let T = makeString(["%s", "feePerBlock"], a) | |
94 | - | ||
95 | - | let U = m(this, T) | |
96 | - | ||
97 | - | let V = makeString(["%s", "wxMinForSuggestAddAmountRequired"], a) | |
98 | - | ||
99 | - | let W = makeString(["%s", "wxForSuggestRemoveAmountRequired"], a) | |
100 | - | ||
101 | - | func X (E,F) = makeString(["%s%s%d", "votingInfo", E, toString(F)], a) | |
75 | + | func B (C) = makeString(["%s%d", "price", toString(C)], a) | |
102 | 76 | ||
103 | 77 | ||
104 | - | func | |
78 | + | func D (C) = makeString(["%s%d", "startHeight", toString(C)], a) | |
105 | 79 | ||
106 | 80 | ||
107 | - | func | |
81 | + | func E (C) = makeString(["%s%d", "powerManagerBonus", toString(C)], a) | |
108 | 82 | ||
109 | 83 | ||
110 | - | func ak (H,al) = { | |
111 | - | let Q = invoke(s, "getUserGwxAmountAtHeightREADONLY", [H, al], nil) | |
112 | - | f(Q) | |
84 | + | func F () = "%s__periodLength" | |
85 | + | ||
86 | + | ||
87 | + | func G () = "%s__blockProcessingReward" | |
88 | + | ||
89 | + | ||
90 | + | func H () = "%s__nextBlockToProcess" | |
91 | + | ||
92 | + | ||
93 | + | func I (J) = makeString(["%s%d", "blockProcessed", toString(J)], a) | |
94 | + | ||
95 | + | ||
96 | + | func K () = "%s__withdrawal" | |
97 | + | ||
98 | + | ||
99 | + | func L (y,M) = makeString(["%s%s%s", "withdrawal", toString(y), toBase58String(M)], a) | |
100 | + | ||
101 | + | ||
102 | + | func N (O,P,Q,R) = { | |
103 | + | let S = { | |
104 | + | let l = R | |
105 | + | if ($isInstanceOf(l, "ByteVector")) | |
106 | + | then { | |
107 | + | let m = l | |
108 | + | toBase58String(m) | |
109 | + | } | |
110 | + | else if ($isInstanceOf(l, "Unit")) | |
111 | + | then "SOON" | |
112 | + | else throw("Match error") | |
113 | + | } | |
114 | + | makeString(["%s%d%d%s", O, toString(P), toString(Q), S], a) | |
113 | 115 | } | |
114 | 116 | ||
115 | 117 | ||
116 | - | func | |
118 | + | func T (C) = makeString(["%s%d", "periodReward", toString(C)], a) | |
117 | 119 | ||
118 | 120 | ||
119 | - | func | |
121 | + | func U (C) = makeString(["%s%d", "periodRewardAmount", toString(C)], a) | |
120 | 122 | ||
121 | 123 | ||
122 | - | func ao () = { | |
123 | - | let h = getString(am()) | |
124 | - | if ($isInstanceOf(h, "String")) | |
124 | + | let V = makeString(["%s", "minHeightForWithdraw"], a) | |
125 | + | ||
126 | + | let W = makeString(["%s", "maxHeightForWithdraw"], a) | |
127 | + | ||
128 | + | func X (h) = { | |
129 | + | let Y = split(h, a) | |
130 | + | if ((size(Y) == 5)) | |
125 | 131 | then { | |
126 | - | let ap = h | |
127 | - | addressFromStringValue(ap) | |
132 | + | let O = Y[1] | |
133 | + | let P = valueOrErrorMessage(parseInt(Y[2]), g("invalid lpAssetAmount")) | |
134 | + | let Q = valueOrErrorMessage(parseInt(Y[3]), g("invalid targetPeriod")) | |
135 | + | let R = Y[4] | |
136 | + | $Tuple4(O, P, Q, R) | |
128 | 137 | } | |
129 | - | else | |
138 | + | else i("invalid withdrawal request value") | |
130 | 139 | } | |
131 | 140 | ||
132 | 141 | ||
133 | - | func aq () = { | |
134 | - | let ar = ao() | |
135 | - | let h = getString(ar, an()) | |
136 | - | if ($isInstanceOf(h, "String")) | |
142 | + | let Z = { | |
143 | + | let l = getString(this, q()) | |
144 | + | if ($isInstanceOf(l, "String")) | |
137 | 145 | then { | |
138 | - | let | |
139 | - | | |
146 | + | let h = l | |
147 | + | addressFromString(h) | |
140 | 148 | } | |
141 | - | else if ($isInstanceOf( | |
149 | + | else if ($isInstanceOf(l, "Unit")) | |
142 | 150 | then unit | |
143 | 151 | else throw("Match error") | |
144 | 152 | } | |
145 | 153 | ||
154 | + | let aa = valueOrErrorMessage(Z, g("invalid factory address")) | |
146 | 155 | ||
147 | - | func as (at) = { | |
148 | - | let au = split(at, a) | |
149 | - | let av = au[1] | |
150 | - | let Z = if ((av == "true")) | |
151 | - | then true | |
152 | - | else false | |
153 | - | let aa = au[2] | |
154 | - | let ab = parseIntValue(au[3]) | |
155 | - | let ac = au[4] | |
156 | - | let ad = au[5] | |
157 | - | let ae = parseIntValue(au[6]) | |
158 | - | let af = parseIntValue(au[7]) | |
159 | - | let ag = parseIntValue(au[8]) | |
160 | - | let ah = parseIntValue(au[9]) | |
161 | - | let ai = parseIntValue(au[10]) | |
162 | - | $Tuple10(Z, aa, ab, ac, ad, ae, af, ag, ah, ai) | |
156 | + | let ab = { | |
157 | + | let l = Z | |
158 | + | if ($isInstanceOf(l, "Address")) | |
159 | + | then { | |
160 | + | let ac = l | |
161 | + | let ad = getString(ac, s()) | |
162 | + | if ($isInstanceOf(ad, "String")) | |
163 | + | then { | |
164 | + | let h = ad | |
165 | + | fromBase58String(h) | |
166 | + | } | |
167 | + | else if ($isInstanceOf(ad, "Unit")) | |
168 | + | then unit | |
169 | + | else throw("Match error") | |
170 | + | } | |
171 | + | else if ($isInstanceOf(l, "Unit")) | |
172 | + | then unit | |
173 | + | else throw("Match error") | |
174 | + | } | |
175 | + | ||
176 | + | let ae = valueOrErrorMessage(ab, g("invalid lpAssetId")) | |
177 | + | ||
178 | + | let af = { | |
179 | + | let l = Z | |
180 | + | if ($isInstanceOf(l, "Address")) | |
181 | + | then { | |
182 | + | let ac = l | |
183 | + | let ad = getString(ac, t()) | |
184 | + | if ($isInstanceOf(ad, "String")) | |
185 | + | then { | |
186 | + | let h = ad | |
187 | + | addressFromString(h) | |
188 | + | } | |
189 | + | else if ($isInstanceOf(ad, "Unit")) | |
190 | + | then unit | |
191 | + | else throw("Match error") | |
192 | + | } | |
193 | + | else if ($isInstanceOf(l, "Unit")) | |
194 | + | then unit | |
195 | + | else throw("Match error") | |
196 | + | } | |
197 | + | ||
198 | + | let ag = valueOrErrorMessage(af, g("invalid proxy treasury address")) | |
199 | + | ||
200 | + | let ah = { | |
201 | + | let l = Z | |
202 | + | if ($isInstanceOf(l, "Address")) | |
203 | + | then { | |
204 | + | let ac = l | |
205 | + | let ad = getString(ac, u()) | |
206 | + | if ($isInstanceOf(ad, "String")) | |
207 | + | then { | |
208 | + | let h = ad | |
209 | + | addressFromString(h) | |
210 | + | } | |
211 | + | else if ($isInstanceOf(ad, "Unit")) | |
212 | + | then unit | |
213 | + | else throw("Match error") | |
214 | + | } | |
215 | + | else if ($isInstanceOf(l, "Unit")) | |
216 | + | then unit | |
217 | + | else throw("Match error") | |
218 | + | } | |
219 | + | ||
220 | + | let ai = valueOrErrorMessage(ah, g("invalid main treasury address")) | |
221 | + | ||
222 | + | func aj () = { | |
223 | + | let l = Z | |
224 | + | if ($isInstanceOf(l, "Address")) | |
225 | + | then { | |
226 | + | let ak = l | |
227 | + | let ad = getString(ak, r()) | |
228 | + | if ($isInstanceOf(ad, "String")) | |
229 | + | then { | |
230 | + | let al = ad | |
231 | + | fromBase58String(al) | |
232 | + | } | |
233 | + | else unit | |
234 | + | } | |
235 | + | else unit | |
163 | 236 | } | |
164 | 237 | ||
165 | 238 | ||
166 | - | func aw (E,ax) = { | |
167 | - | let at = valueOrErrorMessage(getString(X(E, ax)), c("voting info not found")) | |
168 | - | let ay = split(at, a) | |
169 | - | let ad = ay[5] | |
170 | - | let af = valueOrErrorMessage(parseIntValue(ay[7]), c("voting start height not found")) | |
171 | - | let az = valueOrErrorMessage(getString(R(E, ax)), c("voting issuer not found")) | |
172 | - | let aA = [if ((ad == "inProgress")) | |
239 | + | func am (an,ao) = if ((an.caller == ao)) | |
240 | + | then true | |
241 | + | else i("permission denied") | |
242 | + | ||
243 | + | ||
244 | + | func ap (an) = am(an, aa) | |
245 | + | ||
246 | + | ||
247 | + | func aq (ar,as) = { | |
248 | + | let h = size(ar) | |
249 | + | let at = ar[0] | |
250 | + | let au = at._1 | |
251 | + | let av = at._2 | |
252 | + | let aw = ar[1] | |
253 | + | let ax = aw._1 | |
254 | + | let ay = aw._2 | |
255 | + | let az = ar[2] | |
256 | + | let aA = az._1 | |
257 | + | let aB = az._2 | |
258 | + | if (if ((h > 0)) | |
259 | + | then (au == as) | |
260 | + | else false) | |
261 | + | then av | |
262 | + | else if (if ((h > 1)) | |
263 | + | then (ax == as) | |
264 | + | else false) | |
265 | + | then ay | |
266 | + | else if (if ((h > 2)) | |
267 | + | then (aA == as) | |
268 | + | else false) | |
269 | + | then aB | |
270 | + | else unit | |
271 | + | } | |
272 | + | ||
273 | + | ||
274 | + | func aC (aD,aE,aF) = { | |
275 | + | let aG = valueOrElse(getInteger(aa, w(unit)), 0) | |
276 | + | let aH = valueOrElse(getInteger(aa, v(unit)), 0) | |
277 | + | let aI = (aG + aH) | |
278 | + | let aJ = (aD - aI) | |
279 | + | let aK = if (if ((aJ >= aE)) | |
173 | 280 | then true | |
174 | - | else e("no voting in progress"), if ((af > height)) | |
281 | + | else (aE == 0)) | |
282 | + | then aE | |
283 | + | else i("power bonus is more than profit") | |
284 | + | let aL = (aJ - aK) | |
285 | + | let aM = if ((aI > 0)) | |
286 | + | then fraction(aG, c, aI) | |
287 | + | else 0 | |
288 | + | let aN = fraction(aL, aM, c) | |
289 | + | let aO = (aL - aN) | |
290 | + | let aP = o(aF) | |
291 | + | let aQ = fraction(aO, if ((0 > aF)) | |
292 | + | then aP | |
293 | + | else 0, c) | |
294 | + | let aR = fraction(aN, if ((aF > 0)) | |
295 | + | then aP | |
296 | + | else 0, c) | |
297 | + | let aS = ((aN - aR) + aQ) | |
298 | + | let aT = ((aO - aQ) + aR) | |
299 | + | let aU = (aG + aS) | |
300 | + | let aV = (aH + aT) | |
301 | + | let aW = min([0, aU]) | |
302 | + | let aX = min([0, aV]) | |
303 | + | let aY = (max([0, aU]) + aX) | |
304 | + | let aZ = (max([0, aV]) + aW) | |
305 | + | let ba = valueOrErrorMessage(assetInfo(ae), g("invalid lpAsset info")).quantity | |
306 | + | let bb = fraction(aZ, c, ba) | |
307 | + | let bc = if ((bb != 0)) | |
175 | 308 | then true | |
176 | - | else e("voting expired")] | |
177 | - | if ((aA == aA)) | |
178 | - | then $Tuple3(ad, af, az) | |
309 | + | else i("LP price cannot be 0") | |
310 | + | if ((bc == bc)) | |
311 | + | then { | |
312 | + | let bd = valueOrElse(getInteger(aa, K()), 0) | |
313 | + | let be = max([0, fraction(bd, bb, c)]) | |
314 | + | let bf = (aZ - be) | |
315 | + | let bg = (ba - bd) | |
316 | + | $Tuple6(be, bf, aY, bb, bd, bg) | |
317 | + | } | |
179 | 318 | else throw("Strict value is not equal to itself.") | |
180 | 319 | } | |
181 | 320 | ||
182 | 321 | ||
183 | - | func aB (aC,E,F) = { | |
184 | - | let aD = M(E, F, aC) | |
185 | - | let aE = valueOrErrorMessage(getString(aD), c("you have not voted")) | |
186 | - | let aF = split(aE, a) | |
187 | - | let Q = parseIntValue(aF[2]) | |
188 | - | let aG = valueOrErrorMessage(getString(X(E, F)), c("voting info not found")) | |
189 | - | let aH = as(aG) | |
190 | - | let ah = aH._9 | |
191 | - | let ai = aH._10 | |
192 | - | let aI = fraction(Q, b, (ah + ai)) | |
193 | - | let aJ = valueOrElse(getInteger(I(E, F)), 0) | |
194 | - | let aK = fraction(aI, aJ, b, FLOOR) | |
195 | - | aK | |
196 | - | } | |
197 | - | ||
198 | - | ||
199 | - | @Callable(aL) | |
200 | - | func suggestAdd (E,aM,aN) = { | |
201 | - | let aO = aL.payments[0] | |
202 | - | let aP = value(aO.assetId) | |
203 | - | let aQ = value(aO.amount) | |
204 | - | let aR = getIntegerValue(C) | |
205 | - | let aS = getIntegerValue(B) | |
206 | - | let aT = { | |
207 | - | let aU = invoke(u, "isVerifiedREADONLY", [E], nil) | |
208 | - | if ($isInstanceOf(aU, "Boolean")) | |
209 | - | then aU | |
210 | - | else throw(($getType(aU) + " couldn't be cast to Boolean")) | |
211 | - | } | |
212 | - | let aA = [if (if ((aM >= aR)) | |
213 | - | then (aS >= aM) | |
214 | - | else false) | |
215 | - | then true | |
216 | - | else e("invalid periodLength"), if ((aT == false)) | |
217 | - | then true | |
218 | - | else e("token already verified"), if ((aQ > (aM * U))) | |
219 | - | then true | |
220 | - | else e("not enough wx for given period"), if ((aQ >= getIntegerValue(V))) | |
221 | - | then true | |
222 | - | else e("payment less then min for suggest")] | |
223 | - | if ((aA == aA)) | |
322 | + | @Callable(an) | |
323 | + | func claimLP (bh) = { | |
324 | + | let bi = ap(an) | |
325 | + | if ((bi == bi)) | |
224 | 326 | then { | |
225 | - | let aV = L(E) | |
226 | - | let ax = getInteger(aV) | |
227 | - | let aW = if (isDefined(ax)) | |
228 | - | then (value(ax) + 1) | |
229 | - | else 0 | |
230 | - | let aX = if ((size(aL.payments) > 1)) | |
231 | - | then { | |
232 | - | let aY = aL.payments[1] | |
233 | - | let aZ = toBase58String(value(aY.assetId)) | |
234 | - | let ba = value(aY.amount) | |
235 | - | $Tuple4(true, aZ, ba, [StringEntry(D(E, aW), aZ), IntegerEntry(I(E, aW), ba)]) | |
236 | - | } | |
237 | - | else $Tuple4(false, "EMPTY", 0, nil) | |
238 | - | let Z = aX._1 | |
239 | - | let aa = aX._2 | |
240 | - | let ab = aX._3 | |
241 | - | let bb = aX._4 | |
242 | - | let ag = valueOrErrorMessage(getInteger(y), c("votingThresholdAdd not set")) | |
243 | - | let at = Y(Z, aa, ab, "verification", "inProgress", height, (height + aM), ag, 0, 0) | |
244 | - | let bc = getIntegerValue(J) | |
245 | - | let bd = (aQ - bc) | |
246 | - | ([IntegerEntry(aV, aW), StringEntry(R(E, aW), toString(aL.caller)), StringEntry(X(E, aW), at), StringEntry(aj(E), aN), Burn(aP, bd)] ++ bb) | |
327 | + | let y = Address(bh) | |
328 | + | let bj = valueOrElse(getInteger(aa, x(y)), 0) | |
329 | + | let bk = valueOrElse(getInteger(aa, z(y)), 0) | |
330 | + | let bl = if ((bj > 0)) | |
331 | + | then [invoke(aa, "transferAsset", [bh, bj, ae], nil), invoke(aa, "integerEntry", [x(y), 0], nil), invoke(aa, "integerEntry", [z(y), (bk + bj)], nil)] | |
332 | + | else i("nothing to claim") | |
333 | + | $Tuple2(nil, bl) | |
247 | 334 | } | |
248 | 335 | else throw("Strict value is not equal to itself.") | |
249 | 336 | } | |
250 | 337 | ||
251 | 338 | ||
252 | 339 | ||
253 | - | @Callable(aL) | |
254 | - | func suggestRemove (E) = { | |
255 | - | let be = ak(toString(aL.caller), height) | |
256 | - | let bf = getIntegerValue(K) | |
257 | - | let aO = aL.payments[0] | |
258 | - | let aP = value(aO.assetId) | |
259 | - | let aQ = value(aO.amount) | |
260 | - | let aT = { | |
261 | - | let aU = invoke(u, "isVerifiedREADONLY", [E], nil) | |
262 | - | if ($isInstanceOf(aU, "Boolean")) | |
263 | - | then aU | |
264 | - | else throw(($getType(aU) + " couldn't be cast to Boolean")) | |
265 | - | } | |
266 | - | let aA = [if (aT) | |
267 | - | then true | |
268 | - | else e("token not verified"), if ((be >= bf)) | |
269 | - | then true | |
270 | - | else e("not enough gWXes"), if ((aQ >= getIntegerValue(W))) | |
271 | - | then true | |
272 | - | else e("payment less then min for suggest")] | |
273 | - | if ((aA == aA)) | |
340 | + | @Callable(an) | |
341 | + | func finalize (bh,aD,aE,aF) = { | |
342 | + | let bi = ap(an) | |
343 | + | if ((bi == bi)) | |
274 | 344 | then { | |
275 | - | let aV = L(E) | |
276 | - | let ax = getInteger(aV) | |
277 | - | let aW = if (isDefined(ax)) | |
278 | - | then (value(ax) + 1) | |
279 | - | else 0 | |
280 | - | let aM = valueOrErrorMessage(getInteger(A), c("periodLengthRemove not set")) | |
281 | - | let af = (height + aM) | |
282 | - | let ag = valueOrErrorMessage(getInteger(z), c("votingThresholdRemove not set")) | |
283 | - | let at = Y(false, "EMPTY", 0, "deverification", "inProgress", height, (height + aM), ag, 0, 0) | |
284 | - | [IntegerEntry(aV, aW), StringEntry(R(E, aW), toString(aL.caller)), StringEntry(X(E, aW), at)] | |
285 | - | } | |
286 | - | else throw("Strict value is not equal to itself.") | |
287 | - | } | |
345 | + | let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period")) | |
346 | + | let bn = valueOrErrorMessage(getInteger(aa, F()), g("invalid period length")) | |
347 | + | let bo = valueOrErrorMessage(getInteger(aa, D(bm)), g("invalid start height")) | |
348 | + | let bp = valueOrErrorMessage(getInteger(aa, B(bm)), g("invalid price")) | |
349 | + | let bq = valueOrErrorMessage(getInteger(aa, H()), g("invalid next block to process")) | |
350 | + | let br = ((bo + bn) - 1) | |
351 | + | let bs = [if ((an.originCaller == ai)) | |
352 | + | then true | |
353 | + | else i("permission denied"), if ((bq > br)) | |
354 | + | then true | |
355 | + | else i("unprocessed blocks"), if ((aD >= 0)) | |
356 | + | then true | |
357 | + | else i("invalid new treasury volume"), if ((aE >= 0)) | |
358 | + | then true | |
359 | + | else i("invalid PWR managers bonus"), if (if ((aF >= -(c))) | |
360 | + | then (c >= aF) | |
361 | + | else false) | |
362 | + | then true | |
363 | + | else i("invalid treasury volume diff allocation coefficient")] | |
364 | + | if ((bs == bs)) | |
365 | + | then { | |
366 | + | let bt = aC(aD, aE, aF) | |
367 | + | let be = bt._1 | |
368 | + | let bf = bt._2 | |
369 | + | let aY = bt._3 | |
370 | + | let bb = bt._4 | |
371 | + | let bd = bt._5 | |
372 | + | let bg = bt._6 | |
373 | + | let bu = (bm + 1) | |
374 | + | func bv (bw,bx) = { | |
375 | + | let by = bw | |
376 | + | let bz = by._1 | |
377 | + | let bA = by._2 | |
378 | + | let bB = by._3 | |
379 | + | let bC = bx.amount | |
380 | + | let bD = bx.assetId | |
381 | + | let bE = ("%s" + makeString([bA, j(bD)], a)) | |
382 | + | let bF = ("%d" + makeString([bB, toString(bC)], a)) | |
383 | + | let bG = ScriptTransfer(aa, bC, bD) | |
384 | + | $Tuple3((bz :+ bG), bE, bF) | |
385 | + | } | |
288 | 386 | ||
387 | + | let bH = { | |
388 | + | let bI = an.payments | |
389 | + | let bJ = size(bI) | |
390 | + | let bK = $Tuple3(nil, "", "") | |
391 | + | func bL (bM,bN) = if ((bN >= bJ)) | |
392 | + | then bM | |
393 | + | else bv(bM, bI[bN]) | |
289 | 394 | ||
395 | + | func bO (bM,bN) = if ((bN >= bJ)) | |
396 | + | then bM | |
397 | + | else throw("List size exceeds 10") | |
290 | 398 | ||
291 | - | @Callable(aL) | |
292 | - | func vote (E,P) = { | |
293 | - | let aV = L(E) | |
294 | - | let ax = valueOrErrorMessage(getInteger(aV), c("voting does not exist")) | |
295 | - | let at = aw(E, ax) | |
296 | - | if ((at == at)) | |
297 | - | then { | |
298 | - | let bg = at._2 | |
299 | - | let bh = ak(toString(aL.caller), bg) | |
300 | - | let aD = M(E, ax, aL.caller) | |
301 | - | let aA = [if ((getString(aD) == unit)) | |
302 | - | then true | |
303 | - | else e("You have already voted"), if ((bh > 0)) | |
304 | - | then true | |
305 | - | else throw("You'll not have gWX at the end of voting")] | |
306 | - | if ((aA == aA)) | |
307 | - | then { | |
308 | - | let aG = valueOrErrorMessage(getString(X(E, ax)), c("voting info not found")) | |
309 | - | let au = as(aG) | |
310 | - | let ah = au._9 | |
311 | - | let ai = au._10 | |
312 | - | let bi = if (P) | |
313 | - | then $Tuple2((ah + bh), ai) | |
314 | - | else $Tuple2(ah, (ai + bh)) | |
315 | - | let bj = bi._1 | |
316 | - | let bk = bi._2 | |
317 | - | let bl = Y(au._1, au._2, au._3, au._4, au._5, au._6, au._7, au._8, bj, bk) | |
318 | - | let bm = { | |
319 | - | let h = getString(D(E, ax)) | |
320 | - | if ($isInstanceOf(h, "String")) | |
321 | - | then { | |
322 | - | let bn = h | |
323 | - | [StringEntry(G(aL.caller, E, ax), O(P, bh))] | |
324 | - | } | |
325 | - | else if ($isInstanceOf(h, "Unit")) | |
326 | - | then nil | |
327 | - | else throw("Match error") | |
399 | + | bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
328 | 400 | } | |
329 | - | ([StringEntry(aD, O(P, bh)), StringEntry(X(E, ax), bl)] ++ bm) | |
401 | + | let bz = bH._1 | |
402 | + | let bP = bH._2 | |
403 | + | let bQ = bH._3 | |
404 | + | let bl = [invoke(aa, "integerEntry", [E(bm), aE], nil), invoke(aa, "integerEntry", [A(), bu], nil), invoke(aa, "integerEntry", [B(bu), bb], nil), invoke(aa, "integerEntry", [D(bu), (br + 1)], nil), invoke(aa, "burn", [bd], nil), invoke(aa, "integerEntry", [K(), 0], nil), invoke(aa, "integerEntry", [v(unit), bf], nil), invoke(aa, "integerEntry", [w(unit), aY], nil), invoke(aa, "stringEntry", [T(bu), bP], nil), invoke(aa, "stringEntry", [U(bu), bQ], nil)] | |
405 | + | $Tuple2(bz, bl) | |
330 | 406 | } | |
331 | 407 | else throw("Strict value is not equal to itself.") | |
332 | 408 | } | |
335 | 411 | ||
336 | 412 | ||
337 | 413 | ||
338 | - | @Callable(aL) | |
339 | - | func cancelVote (E) = { | |
340 | - | let aV = L(E) | |
341 | - | let ax = valueOrErrorMessage(getInteger(aV), c("voting does not exist")) | |
342 | - | let aD = M(E, ax, aL.caller) | |
343 | - | let aE = valueOrErrorMessage(getString(aD), c("you have not voted")) | |
344 | - | let aF = split(aE, a) | |
345 | - | let P = aF[1] | |
346 | - | let Q = parseIntValue(aF[2]) | |
347 | - | let at = aw(E, ax) | |
348 | - | if ((at == at)) | |
414 | + | @Callable(an) | |
415 | + | func finalizeREADONLY (aD,aE,aF) = { | |
416 | + | let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period")) | |
417 | + | let bn = valueOrErrorMessage(getInteger(aa, F()), g("invalid period length")) | |
418 | + | let bo = valueOrErrorMessage(getInteger(aa, D(bm)), g("invalid start height")) | |
419 | + | let bp = valueOrErrorMessage(getInteger(aa, B(bm)), g("invalid price")) | |
420 | + | let bq = valueOrErrorMessage(getInteger(aa, H()), g("invalid next block to process")) | |
421 | + | let br = ((bo + bn) - 1) | |
422 | + | let bs = [if ((bq > br)) | |
423 | + | then true | |
424 | + | else i("unprocessed blocks"), if ((aD >= 0)) | |
425 | + | then true | |
426 | + | else i("invalid new treasury volume"), if ((aE >= 0)) | |
427 | + | then true | |
428 | + | else i("invalid PWR managers bonus"), if (if ((aF >= -(c))) | |
429 | + | then (c >= aF) | |
430 | + | else false) | |
431 | + | then true | |
432 | + | else i("invalid treasury volume diff allocation coefficient")] | |
433 | + | if ((bs == bs)) | |
434 | + | then $Tuple2(nil, aC(aD, aE, aF)) | |
435 | + | else throw("Strict value is not equal to itself.") | |
436 | + | } | |
437 | + | ||
438 | + | ||
439 | + | ||
440 | + | @Callable(an) | |
441 | + | func invest (bh) = { | |
442 | + | let bi = ap(an) | |
443 | + | if ((bi == bi)) | |
349 | 444 | then { | |
350 | - | let aA = [if (if ((P == "true")) | |
445 | + | let y = Address(bh) | |
446 | + | let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period")) | |
447 | + | let bp = valueOrErrorMessage(getInteger(aa, B(bm)), g("invalid price")) | |
448 | + | let bx = if ((size(an.payments) == 1)) | |
449 | + | then an.payments[0] | |
450 | + | else i("invalid payments") | |
451 | + | let bR = if (if ((bx.assetId == unit)) | |
452 | + | then (bx.amount > 0) | |
453 | + | else false) | |
454 | + | then $Tuple2(bx.amount, bx.assetId) | |
455 | + | else i("invalid payment amount") | |
456 | + | let bC = bR._1 | |
457 | + | let bD = bR._2 | |
458 | + | let P = if ((bp > 0)) | |
459 | + | then fraction(bC, c, bp) | |
460 | + | else 0 | |
461 | + | let bS = valueOrElse(getInteger(aa, v(unit)), 0) | |
462 | + | let bw = [ScriptTransfer(ai, bC, bD)] | |
463 | + | let bl = [invoke(aa, "integerEntry", [v(unit), (bS + bC)], nil), invoke(aa, "reissue", [P], nil), invoke(aa, "transferAsset", [bh, P, ae], nil)] | |
464 | + | $Tuple2(bw, bl) | |
465 | + | } | |
466 | + | else throw("Strict value is not equal to itself.") | |
467 | + | } | |
468 | + | ||
469 | + | ||
470 | + | ||
471 | + | @Callable(an) | |
472 | + | func withdraw (bh) = { | |
473 | + | let bi = ap(an) | |
474 | + | if ((bi == bi)) | |
475 | + | then { | |
476 | + | let y = Address(bh) | |
477 | + | let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period")) | |
478 | + | let bx = if ((size(an.payments) == 1)) | |
479 | + | then an.payments[0] | |
480 | + | else i(g("invalid payments")) | |
481 | + | let bD = if ((bx.assetId == ae)) | |
482 | + | then ae | |
483 | + | else i("invalid payment asset") | |
484 | + | let bC = if ((bx.amount > 0)) | |
485 | + | then bx.amount | |
486 | + | else i("invalid payment amount") | |
487 | + | let bT = valueOrElse(getInteger(aa, K()), 0) | |
488 | + | let bw = [ScriptTransfer(aa, bC, bD)] | |
489 | + | let bl = [invoke(aa, "integerEntry", [K(), (bT + bC)], nil), invoke(aa, "stringEntry", [L(y, an.transactionId), N(d, bC, (bm + 1), unit)], nil)] | |
490 | + | if ((bl == bl)) | |
491 | + | then $Tuple2(bw, bl) | |
492 | + | else throw("Strict value is not equal to itself.") | |
493 | + | } | |
494 | + | else throw("Strict value is not equal to itself.") | |
495 | + | } | |
496 | + | ||
497 | + | ||
498 | + | ||
499 | + | @Callable(an) | |
500 | + | func cancelWithdraw (bh,M) = { | |
501 | + | let bi = ap(an) | |
502 | + | if ((bi == bi)) | |
503 | + | then { | |
504 | + | let y = Address(bh) | |
505 | + | let bU = valueOrErrorMessage(getString(aa, L(y, M)), g("invalid withdrawal request")) | |
506 | + | let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period")) | |
507 | + | let bV = X(bU) | |
508 | + | let O = bV._1 | |
509 | + | let P = bV._2 | |
510 | + | let Q = bV._3 | |
511 | + | let R = bV._4 | |
512 | + | let bs = [if ((O == d)) | |
351 | 513 | then true | |
352 | - | else ( | |
514 | + | else i("invalid withdrawal request status"), if ((Q > bm)) | |
353 | 515 | then true | |
354 | - | else | |
355 | - | if (( | |
516 | + | else i("invalid withdrawal request period")] | |
517 | + | if ((bs == bs)) | |
356 | 518 | then { | |
357 | - | let aG = valueOrErrorMessage(getString(X(E, ax)), c("voting info not found")) | |
358 | - | let au = as(aG) | |
359 | - | let ah = au._9 | |
360 | - | let ai = au._10 | |
361 | - | let bo = if ((P == "true")) | |
362 | - | then $Tuple2((ah - Q), ai) | |
363 | - | else $Tuple2(ah, (ai - Q)) | |
364 | - | let bj = bo._1 | |
365 | - | let bk = bo._2 | |
366 | - | let bl = Y(au._1, au._2, au._3, au._4, au._5, au._6, au._7, au._8, bj, bk) | |
367 | - | [StringEntry(X(E, ax), bl), DeleteEntry(aD), DeleteEntry(G(aL.caller, E, ax))] | |
519 | + | let bT = valueOrErrorMessage(getInteger(aa, K()), g("invalid total withdrawal amount")) | |
520 | + | let bl = [invoke(aa, "integerEntry", [K(), if ((bT >= P)) | |
521 | + | then (bT - P) | |
522 | + | else i("invalid withdrawal amount")], nil), invoke(aa, "deleteEntry", [L(y, M)], nil), invoke(aa, "transferAsset", [bh, P, ae], nil)] | |
523 | + | if ((bl == bl)) | |
524 | + | then $Tuple2(nil, bl) | |
525 | + | else throw("Strict value is not equal to itself.") | |
368 | 526 | } | |
369 | 527 | else throw("Strict value is not equal to itself.") | |
370 | 528 | } | |
373 | 531 | ||
374 | 532 | ||
375 | 533 | ||
376 | - | @Callable(aL) | |
377 | - | func finalize (E) = { | |
378 | - | let aV = L(E) | |
379 | - | let ax = valueOrElse(getInteger(aV), 0) | |
380 | - | let bp = valueOrErrorMessage(getInteger(y), c("votingThresholdAdd not set")) | |
381 | - | let bq = valueOrErrorMessage(getInteger(z), c("votingThresholdRemove not set")) | |
382 | - | let aG = valueOrErrorMessage(getString(X(E, ax)), c("voting info not found")) | |
383 | - | let au = as(aG) | |
384 | - | let ac = au._4 | |
385 | - | let ad = au._5 | |
386 | - | let af = au._7 | |
387 | - | let br = au._8 | |
388 | - | let ah = au._9 | |
389 | - | let ai = au._10 | |
390 | - | let aA = [if ((ad == "inProgress")) | |
391 | - | then true | |
392 | - | else e("voting not in progress"), if ((height >= af)) | |
393 | - | then true | |
394 | - | else e("voting not finished"), if (isDefined(getString(aj(E)))) | |
395 | - | then true | |
396 | - | else e("asset image not set")] | |
397 | - | if ((aA == aA)) | |
534 | + | @Callable(an) | |
535 | + | func claimCollateral (bh,M) = { | |
536 | + | let bi = ap(an) | |
537 | + | if ((bi == bi)) | |
398 | 538 | then { | |
399 | - | let bs = if (if (((ah + ai) >= br)) | |
400 | - | then (ah > ai) | |
539 | + | let y = Address(bh) | |
540 | + | let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period")) | |
541 | + | let bU = valueOrErrorMessage(getString(aa, L(y, M)), g("invalid withdrawal request")) | |
542 | + | let bW = X(bU) | |
543 | + | let O = bW._1 | |
544 | + | let P = bW._2 | |
545 | + | let Q = bW._3 | |
546 | + | let R = bW._4 | |
547 | + | if ((O == e)) | |
548 | + | then i("invalid withdrawal request status") | |
549 | + | else if ((Q > bm)) | |
550 | + | then i("invalid withdrawal request period") | |
551 | + | else { | |
552 | + | let bX = valueOrErrorMessage(getInteger(aa, B(Q)), g("invalid price")) | |
553 | + | let bY = if ((bX > 0)) | |
554 | + | then fraction(P, bX, c) | |
555 | + | else 0 | |
556 | + | let bl = [invoke(aa, "stringEntry", [L(y, M), N(e, P, Q, an.transactionId)], nil), { | |
557 | + | let bZ = removeByIndex(split_51C(getStringValue(aa, T(bm)), a), 0) | |
558 | + | let ca = removeByIndex(split_51C(getStringValue(aa, U(bm)), a), 0) | |
559 | + | invoke(aa, "transferAssets", [bh, bZ, ca], nil) | |
560 | + | }] | |
561 | + | $Tuple2(nil, bl) | |
562 | + | } | |
563 | + | } | |
564 | + | else throw("Strict value is not equal to itself.") | |
565 | + | } | |
566 | + | ||
567 | + | ||
568 | + | ||
569 | + | @Callable(an) | |
570 | + | func processBlocks (bh) = { | |
571 | + | let bi = ap(an) | |
572 | + | if ((bi == bi)) | |
573 | + | then { | |
574 | + | let y = Address(bh) | |
575 | + | let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period")) | |
576 | + | let bn = valueOrErrorMessage(getInteger(aa, F()), g("invalid period length")) | |
577 | + | let bo = valueOrErrorMessage(getInteger(aa, D(bm)), g("invalid start height")) | |
578 | + | let bp = valueOrErrorMessage(getInteger(aa, B(bm)), g("invalid price")) | |
579 | + | let bq = valueOrErrorMessage(getInteger(aa, H()), g("invalid next block to process")) | |
580 | + | let br = ((bo + bn) - 1) | |
581 | + | let cb = 40 | |
582 | + | let cc = if (if (if ((height >= bq)) | |
583 | + | then if ((bq >= bo)) | |
584 | + | then true | |
585 | + | else (bm == 0) | |
401 | 586 | else false) | |
402 | - | then true | |
403 | - | else false | |
404 | - | let bt = if (bs) | |
405 | - | then "accepted" | |
406 | - | else "rejected" | |
407 | - | let aN = getStringValue(aj(E)) | |
408 | - | let bu = if (bs) | |
587 | + | then (br >= bq) | |
588 | + | else false) | |
589 | + | then min([((br - bq) + 1), cb]) | |
590 | + | else i(g("invalid target block")) | |
591 | + | let cd = valueOrErrorMessage(getInteger(aa, G()), g("invalid block processing reward")) | |
592 | + | let ce = (cd / cc) | |
593 | + | let cf = (cd - (ce * cc)) | |
594 | + | func cg (ch,ci) = if ((ci >= cc)) | |
595 | + | then ch | |
596 | + | else { | |
597 | + | let cj = (bq + ci) | |
598 | + | let ck = valueOrErrorMessage(blockInfoByHeight(cj), g("invalid block info")) | |
599 | + | let cl = valueOrErrorMessage(aq(ck.rewards, ag), g(("invalid treasury reward for height " + toString(cj)))) | |
600 | + | let cm = ck.generator | |
601 | + | let bj = valueOrElse(getInteger(aa, x(cm)), 0) | |
602 | + | let cn = if ((ci == (cc - 1))) | |
603 | + | then (ce + cf) | |
604 | + | else ce | |
605 | + | let P = if ((bp > 0)) | |
606 | + | then fraction((cl - cn), c, bp) | |
607 | + | else 0 | |
608 | + | let co = [invoke(aa, "stringEntry", [I(cj), makeString([toBase58String(an.transactionId), toString(bm), toString(cm), toBase58String(bh), toString(cl), toString(cn), toString(P)], a)], nil), invoke(aa, "integerEntry", [x(cm), (bj + P)], nil)] | |
609 | + | if ((co == co)) | |
610 | + | then { | |
611 | + | let cp = ch | |
612 | + | let cq = cp._1 | |
613 | + | let cr = cp._2 | |
614 | + | $Tuple2((cq + P), (cr + cl)) | |
615 | + | } | |
616 | + | else throw("Strict value is not equal to itself.") | |
617 | + | } | |
618 | + | ||
619 | + | let cs = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39] | |
620 | + | let ct = { | |
621 | + | let bI = cs | |
622 | + | let bJ = size(bI) | |
623 | + | let bK = $Tuple2(0, 0) | |
624 | + | func bL (bM,bN) = if ((bN >= bJ)) | |
625 | + | then bM | |
626 | + | else cg(bM, bI[bN]) | |
627 | + | ||
628 | + | func bO (bM,bN) = if ((bN >= bJ)) | |
629 | + | then bM | |
630 | + | else throw("List size exceeds 40") | |
631 | + | ||
632 | + | bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40) | |
633 | + | } | |
634 | + | if ((ct == ct)) | |
409 | 635 | then { | |
410 | - | let bv = if ((ac == "verification")) | |
411 | - | then invoke(u, "createOrUpdate", [E, aN, true], nil) | |
412 | - | else invoke(u, "setVerified", [E, false], nil) | |
413 | - | bv | |
414 | - | } | |
415 | - | else nil | |
416 | - | if ((bu == bu)) | |
417 | - | then { | |
418 | - | let bl = Y(au._1, au._2, au._3, au._4, bt, au._6, au._7, au._8, au._9, au._10) | |
419 | - | let bc = getIntegerValue(J) | |
420 | - | [StringEntry(X(E, ax), bl), ScriptTransfer(aL.caller, bc, x)] | |
636 | + | let cu = ct._2 | |
637 | + | let cv = ct._1 | |
638 | + | let cw = (cu - cd) | |
639 | + | let bS = valueOrElse(getInteger(aa, v(unit)), 0) | |
640 | + | let bw = [invoke(aa, "reissue", [cv], nil), invoke(aa, "integerEntry", [H(), (bq + cc)], nil), invoke(aa, "transferFromProxyTreasury", [ai.bytes, cw], nil), invoke(aa, "transferFromProxyTreasury", [bh, cd], nil), invoke(aa, "integerEntry", [v(unit), (bS + cw)], nil)] | |
641 | + | if ((bw == bw)) | |
642 | + | then $Tuple2(nil, unit) | |
643 | + | else throw("Strict value is not equal to itself.") | |
421 | 644 | } | |
422 | 645 | else throw("Strict value is not equal to itself.") | |
423 | 646 | } | |
425 | 648 | } | |
426 | 649 | ||
427 | 650 | ||
428 | - | ||
429 | - | @Callable(aL) | |
430 | - | func claimREADONLY (E,F,bw) = { | |
431 | - | let H = valueOrErrorMessage(addressFromString(bw), c("invalid address")) | |
432 | - | let bx = getString(D(E, F)) | |
433 | - | let ab = if (isDefined(bx)) | |
434 | - | then aB(H, E, F) | |
435 | - | else 0 | |
436 | - | $Tuple2(nil, ab) | |
437 | - | } | |
438 | - | ||
439 | - | ||
440 | - | ||
441 | - | @Callable(aL) | |
442 | - | func claim (E,F) = { | |
443 | - | let by = aL.caller | |
444 | - | let bz = S(by, E, F) | |
445 | - | let bA = getInteger(bz) | |
446 | - | let aA = [if ((bA == unit)) | |
447 | - | then true | |
448 | - | else e("already claimed")] | |
449 | - | if ((aA == aA)) | |
450 | - | then { | |
451 | - | let ab = if ((aB(by, E, F) > 0)) | |
452 | - | then aB(by, E, F) | |
453 | - | else e("nothing to claim") | |
454 | - | let bx = getString(D(E, F)) | |
455 | - | let bB = if (isDefined(bx)) | |
456 | - | then { | |
457 | - | let bC = fromBase58String(value(bx)) | |
458 | - | [ScriptTransfer(by, ab, bC), IntegerEntry(bz, ab), DeleteEntry(G(by, E, F))] | |
459 | - | } | |
460 | - | else e("nothing to claim") | |
461 | - | bB | |
462 | - | } | |
463 | - | else throw("Strict value is not equal to itself.") | |
464 | - | } | |
465 | - | ||
466 | - | ||
467 | - | @Verifier(bD) | |
468 | - | func bE () = { | |
469 | - | let bF = { | |
470 | - | let h = aq() | |
471 | - | if ($isInstanceOf(h, "ByteVector")) | |
651 | + | @Verifier(cx) | |
652 | + | func cy () = { | |
653 | + | let cz = { | |
654 | + | let l = aj() | |
655 | + | if ($isInstanceOf(l, "ByteVector")) | |
472 | 656 | then { | |
473 | - | let | |
474 | - | | |
657 | + | let al = l | |
658 | + | al | |
475 | 659 | } | |
476 | - | else if ($isInstanceOf(h, "Unit")) | |
477 | - | then bD.senderPublicKey | |
478 | - | else throw("Match error") | |
660 | + | else cx.senderPublicKey | |
479 | 661 | } | |
480 | - | sigVerify( | |
662 | + | sigVerify(cx.bodyBytes, cx.proofs[0], cz) | |
481 | 663 | } | |
482 | 664 |
Old | New | Differences | |
---|---|---|---|
1 | - | {-# STDLIB_VERSION | |
1 | + | {-# STDLIB_VERSION 7 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "__" | |
5 | 5 | ||
6 | - | let b = | |
6 | + | let b = "calculator.ride" | |
7 | 7 | ||
8 | - | func c (d) = makeString(["voting_verified_v2.ride:", d], " ") | |
8 | + | let c = 100000000 | |
9 | + | ||
10 | + | let d = "PENDING" | |
11 | + | ||
12 | + | let e = "FINISHED" | |
13 | + | ||
14 | + | let f = "WAVES" | |
15 | + | ||
16 | + | func g (h) = ((b + ": ") + h) | |
9 | 17 | ||
10 | 18 | ||
11 | - | func | |
19 | + | func i (h) = throw(g(h)) | |
12 | 20 | ||
13 | 21 | ||
14 | - | func | |
15 | - | let | |
16 | - | if ($isInstanceOf( | |
22 | + | func j (k) = { | |
23 | + | let l = k | |
24 | + | if ($isInstanceOf(l, "ByteVector")) | |
17 | 25 | then { | |
18 | - | let | |
19 | - | | |
26 | + | let m = l | |
27 | + | toBase58String(m) | |
20 | 28 | } | |
21 | - | else throw("Failed to cast into Integer") | |
29 | + | else if ($isInstanceOf(l, "Unit")) | |
30 | + | then f | |
31 | + | else throw("Match error") | |
22 | 32 | } | |
23 | 33 | ||
24 | 34 | ||
25 | - | func j (k,l) = valueOrElse(getInteger(k, l), 0) | |
35 | + | func n (h) = if ((h == f)) | |
36 | + | then unit | |
37 | + | else fromBase58String(h) | |
26 | 38 | ||
27 | 39 | ||
28 | - | func m (k,l) = valueOrErrorMessage(getInteger(k, l), c((l + " is not defined"))) | |
40 | + | func o (p) = if ((0 > p)) | |
41 | + | then -(p) | |
42 | + | else p | |
29 | 43 | ||
30 | 44 | ||
31 | - | func | |
45 | + | func q () = makeString(["%s", "factory"], a) | |
32 | 46 | ||
33 | 47 | ||
34 | - | func | |
48 | + | func r () = makeString(["%s", "managerPublicKey"], a) | |
35 | 49 | ||
36 | 50 | ||
37 | - | let p = makeString(["%s", "boostingContract"], a) | |
38 | - | ||
39 | - | let q = makeString(["%s", "emissionContract"], a) | |
40 | - | ||
41 | - | let r = makeString(["%s", "assetsStoreContract"], a) | |
42 | - | ||
43 | - | let s = addressFromStringValue(getStringValue(p)) | |
44 | - | ||
45 | - | let t = addressFromStringValue(getStringValue(q)) | |
46 | - | ||
47 | - | let u = addressFromStringValue(getStringValue(r)) | |
48 | - | ||
49 | - | let v = makeString(["%s", "config"], a) | |
50 | - | ||
51 | - | let w = split(o(t, v), a)[1] | |
52 | - | ||
53 | - | let x = fromBase58String(w) | |
54 | - | ||
55 | - | let y = makeString(["%s%s", "votingThreshold", "add"], a) | |
56 | - | ||
57 | - | let z = makeString(["%s%s", "votingThreshold", "remove"], a) | |
58 | - | ||
59 | - | let A = makeString(["%s", "periodLengthRemove"], a) | |
60 | - | ||
61 | - | let B = makeString(["%s", "maxPeriodLength"], a) | |
62 | - | ||
63 | - | let C = makeString(["%s", "minPeriodLength"], a) | |
64 | - | ||
65 | - | func D (E,F) = makeString(["%s%s%d", "votingRewardAssetId", E, toString(F)], a) | |
51 | + | func s () = makeString(["%s", "lpAssetId"], a) | |
66 | 52 | ||
67 | 53 | ||
68 | - | func | |
54 | + | func t () = makeString(["%s", "proxyTreasury"], a) | |
69 | 55 | ||
70 | 56 | ||
71 | - | func | |
57 | + | func u () = makeString(["%s", "mainTreasury"], a) | |
72 | 58 | ||
73 | 59 | ||
74 | - | let J = makeString(["%s", "finalizeCallRewardAmount"], a) | |
75 | - | ||
76 | - | let K = makeString(["%s", "minSuggestRemoveBalance"], a) | |
77 | - | ||
78 | - | func L (E) = makeString(["%s%s", "currentIndex", E], a) | |
60 | + | func v (k) = makeString(["%s%s", "invested", j(k)], a) | |
79 | 61 | ||
80 | 62 | ||
81 | - | func | |
63 | + | func w (k) = makeString(["%s%s", "donated", j(k)], a) | |
82 | 64 | ||
83 | 65 | ||
84 | - | func | |
66 | + | func x (y) = makeString(["%s%s", "available", toString(y)], a) | |
85 | 67 | ||
86 | 68 | ||
87 | - | func | |
69 | + | func z (y) = makeString(["%s%s", "claimed", toString(y)], a) | |
88 | 70 | ||
89 | 71 | ||
90 | - | func | |
72 | + | func A () = makeString(["%s", "currentPeriod"], a) | |
91 | 73 | ||
92 | 74 | ||
93 | - | let T = makeString(["%s", "feePerBlock"], a) | |
94 | - | ||
95 | - | let U = m(this, T) | |
96 | - | ||
97 | - | let V = makeString(["%s", "wxMinForSuggestAddAmountRequired"], a) | |
98 | - | ||
99 | - | let W = makeString(["%s", "wxForSuggestRemoveAmountRequired"], a) | |
100 | - | ||
101 | - | func X (E,F) = makeString(["%s%s%d", "votingInfo", E, toString(F)], a) | |
75 | + | func B (C) = makeString(["%s%d", "price", toString(C)], a) | |
102 | 76 | ||
103 | 77 | ||
104 | - | func | |
78 | + | func D (C) = makeString(["%s%d", "startHeight", toString(C)], a) | |
105 | 79 | ||
106 | 80 | ||
107 | - | func | |
81 | + | func E (C) = makeString(["%s%d", "powerManagerBonus", toString(C)], a) | |
108 | 82 | ||
109 | 83 | ||
110 | - | func ak (H,al) = { | |
111 | - | let Q = invoke(s, "getUserGwxAmountAtHeightREADONLY", [H, al], nil) | |
112 | - | f(Q) | |
84 | + | func F () = "%s__periodLength" | |
85 | + | ||
86 | + | ||
87 | + | func G () = "%s__blockProcessingReward" | |
88 | + | ||
89 | + | ||
90 | + | func H () = "%s__nextBlockToProcess" | |
91 | + | ||
92 | + | ||
93 | + | func I (J) = makeString(["%s%d", "blockProcessed", toString(J)], a) | |
94 | + | ||
95 | + | ||
96 | + | func K () = "%s__withdrawal" | |
97 | + | ||
98 | + | ||
99 | + | func L (y,M) = makeString(["%s%s%s", "withdrawal", toString(y), toBase58String(M)], a) | |
100 | + | ||
101 | + | ||
102 | + | func N (O,P,Q,R) = { | |
103 | + | let S = { | |
104 | + | let l = R | |
105 | + | if ($isInstanceOf(l, "ByteVector")) | |
106 | + | then { | |
107 | + | let m = l | |
108 | + | toBase58String(m) | |
109 | + | } | |
110 | + | else if ($isInstanceOf(l, "Unit")) | |
111 | + | then "SOON" | |
112 | + | else throw("Match error") | |
113 | + | } | |
114 | + | makeString(["%s%d%d%s", O, toString(P), toString(Q), S], a) | |
113 | 115 | } | |
114 | 116 | ||
115 | 117 | ||
116 | - | func | |
118 | + | func T (C) = makeString(["%s%d", "periodReward", toString(C)], a) | |
117 | 119 | ||
118 | 120 | ||
119 | - | func | |
121 | + | func U (C) = makeString(["%s%d", "periodRewardAmount", toString(C)], a) | |
120 | 122 | ||
121 | 123 | ||
122 | - | func ao () = { | |
123 | - | let h = getString(am()) | |
124 | - | if ($isInstanceOf(h, "String")) | |
124 | + | let V = makeString(["%s", "minHeightForWithdraw"], a) | |
125 | + | ||
126 | + | let W = makeString(["%s", "maxHeightForWithdraw"], a) | |
127 | + | ||
128 | + | func X (h) = { | |
129 | + | let Y = split(h, a) | |
130 | + | if ((size(Y) == 5)) | |
125 | 131 | then { | |
126 | - | let ap = h | |
127 | - | addressFromStringValue(ap) | |
132 | + | let O = Y[1] | |
133 | + | let P = valueOrErrorMessage(parseInt(Y[2]), g("invalid lpAssetAmount")) | |
134 | + | let Q = valueOrErrorMessage(parseInt(Y[3]), g("invalid targetPeriod")) | |
135 | + | let R = Y[4] | |
136 | + | $Tuple4(O, P, Q, R) | |
128 | 137 | } | |
129 | - | else | |
138 | + | else i("invalid withdrawal request value") | |
130 | 139 | } | |
131 | 140 | ||
132 | 141 | ||
133 | - | func aq () = { | |
134 | - | let ar = ao() | |
135 | - | let h = getString(ar, an()) | |
136 | - | if ($isInstanceOf(h, "String")) | |
142 | + | let Z = { | |
143 | + | let l = getString(this, q()) | |
144 | + | if ($isInstanceOf(l, "String")) | |
137 | 145 | then { | |
138 | - | let | |
139 | - | | |
146 | + | let h = l | |
147 | + | addressFromString(h) | |
140 | 148 | } | |
141 | - | else if ($isInstanceOf( | |
149 | + | else if ($isInstanceOf(l, "Unit")) | |
142 | 150 | then unit | |
143 | 151 | else throw("Match error") | |
144 | 152 | } | |
145 | 153 | ||
154 | + | let aa = valueOrErrorMessage(Z, g("invalid factory address")) | |
146 | 155 | ||
147 | - | func as (at) = { | |
148 | - | let au = split(at, a) | |
149 | - | let av = au[1] | |
150 | - | let Z = if ((av == "true")) | |
151 | - | then true | |
152 | - | else false | |
153 | - | let aa = au[2] | |
154 | - | let ab = parseIntValue(au[3]) | |
155 | - | let ac = au[4] | |
156 | - | let ad = au[5] | |
157 | - | let ae = parseIntValue(au[6]) | |
158 | - | let af = parseIntValue(au[7]) | |
159 | - | let ag = parseIntValue(au[8]) | |
160 | - | let ah = parseIntValue(au[9]) | |
161 | - | let ai = parseIntValue(au[10]) | |
162 | - | $Tuple10(Z, aa, ab, ac, ad, ae, af, ag, ah, ai) | |
156 | + | let ab = { | |
157 | + | let l = Z | |
158 | + | if ($isInstanceOf(l, "Address")) | |
159 | + | then { | |
160 | + | let ac = l | |
161 | + | let ad = getString(ac, s()) | |
162 | + | if ($isInstanceOf(ad, "String")) | |
163 | + | then { | |
164 | + | let h = ad | |
165 | + | fromBase58String(h) | |
166 | + | } | |
167 | + | else if ($isInstanceOf(ad, "Unit")) | |
168 | + | then unit | |
169 | + | else throw("Match error") | |
170 | + | } | |
171 | + | else if ($isInstanceOf(l, "Unit")) | |
172 | + | then unit | |
173 | + | else throw("Match error") | |
174 | + | } | |
175 | + | ||
176 | + | let ae = valueOrErrorMessage(ab, g("invalid lpAssetId")) | |
177 | + | ||
178 | + | let af = { | |
179 | + | let l = Z | |
180 | + | if ($isInstanceOf(l, "Address")) | |
181 | + | then { | |
182 | + | let ac = l | |
183 | + | let ad = getString(ac, t()) | |
184 | + | if ($isInstanceOf(ad, "String")) | |
185 | + | then { | |
186 | + | let h = ad | |
187 | + | addressFromString(h) | |
188 | + | } | |
189 | + | else if ($isInstanceOf(ad, "Unit")) | |
190 | + | then unit | |
191 | + | else throw("Match error") | |
192 | + | } | |
193 | + | else if ($isInstanceOf(l, "Unit")) | |
194 | + | then unit | |
195 | + | else throw("Match error") | |
196 | + | } | |
197 | + | ||
198 | + | let ag = valueOrErrorMessage(af, g("invalid proxy treasury address")) | |
199 | + | ||
200 | + | let ah = { | |
201 | + | let l = Z | |
202 | + | if ($isInstanceOf(l, "Address")) | |
203 | + | then { | |
204 | + | let ac = l | |
205 | + | let ad = getString(ac, u()) | |
206 | + | if ($isInstanceOf(ad, "String")) | |
207 | + | then { | |
208 | + | let h = ad | |
209 | + | addressFromString(h) | |
210 | + | } | |
211 | + | else if ($isInstanceOf(ad, "Unit")) | |
212 | + | then unit | |
213 | + | else throw("Match error") | |
214 | + | } | |
215 | + | else if ($isInstanceOf(l, "Unit")) | |
216 | + | then unit | |
217 | + | else throw("Match error") | |
218 | + | } | |
219 | + | ||
220 | + | let ai = valueOrErrorMessage(ah, g("invalid main treasury address")) | |
221 | + | ||
222 | + | func aj () = { | |
223 | + | let l = Z | |
224 | + | if ($isInstanceOf(l, "Address")) | |
225 | + | then { | |
226 | + | let ak = l | |
227 | + | let ad = getString(ak, r()) | |
228 | + | if ($isInstanceOf(ad, "String")) | |
229 | + | then { | |
230 | + | let al = ad | |
231 | + | fromBase58String(al) | |
232 | + | } | |
233 | + | else unit | |
234 | + | } | |
235 | + | else unit | |
163 | 236 | } | |
164 | 237 | ||
165 | 238 | ||
166 | - | func aw (E,ax) = { | |
167 | - | let at = valueOrErrorMessage(getString(X(E, ax)), c("voting info not found")) | |
168 | - | let ay = split(at, a) | |
169 | - | let ad = ay[5] | |
170 | - | let af = valueOrErrorMessage(parseIntValue(ay[7]), c("voting start height not found")) | |
171 | - | let az = valueOrErrorMessage(getString(R(E, ax)), c("voting issuer not found")) | |
172 | - | let aA = [if ((ad == "inProgress")) | |
239 | + | func am (an,ao) = if ((an.caller == ao)) | |
240 | + | then true | |
241 | + | else i("permission denied") | |
242 | + | ||
243 | + | ||
244 | + | func ap (an) = am(an, aa) | |
245 | + | ||
246 | + | ||
247 | + | func aq (ar,as) = { | |
248 | + | let h = size(ar) | |
249 | + | let at = ar[0] | |
250 | + | let au = at._1 | |
251 | + | let av = at._2 | |
252 | + | let aw = ar[1] | |
253 | + | let ax = aw._1 | |
254 | + | let ay = aw._2 | |
255 | + | let az = ar[2] | |
256 | + | let aA = az._1 | |
257 | + | let aB = az._2 | |
258 | + | if (if ((h > 0)) | |
259 | + | then (au == as) | |
260 | + | else false) | |
261 | + | then av | |
262 | + | else if (if ((h > 1)) | |
263 | + | then (ax == as) | |
264 | + | else false) | |
265 | + | then ay | |
266 | + | else if (if ((h > 2)) | |
267 | + | then (aA == as) | |
268 | + | else false) | |
269 | + | then aB | |
270 | + | else unit | |
271 | + | } | |
272 | + | ||
273 | + | ||
274 | + | func aC (aD,aE,aF) = { | |
275 | + | let aG = valueOrElse(getInteger(aa, w(unit)), 0) | |
276 | + | let aH = valueOrElse(getInteger(aa, v(unit)), 0) | |
277 | + | let aI = (aG + aH) | |
278 | + | let aJ = (aD - aI) | |
279 | + | let aK = if (if ((aJ >= aE)) | |
173 | 280 | then true | |
174 | - | else e("no voting in progress"), if ((af > height)) | |
281 | + | else (aE == 0)) | |
282 | + | then aE | |
283 | + | else i("power bonus is more than profit") | |
284 | + | let aL = (aJ - aK) | |
285 | + | let aM = if ((aI > 0)) | |
286 | + | then fraction(aG, c, aI) | |
287 | + | else 0 | |
288 | + | let aN = fraction(aL, aM, c) | |
289 | + | let aO = (aL - aN) | |
290 | + | let aP = o(aF) | |
291 | + | let aQ = fraction(aO, if ((0 > aF)) | |
292 | + | then aP | |
293 | + | else 0, c) | |
294 | + | let aR = fraction(aN, if ((aF > 0)) | |
295 | + | then aP | |
296 | + | else 0, c) | |
297 | + | let aS = ((aN - aR) + aQ) | |
298 | + | let aT = ((aO - aQ) + aR) | |
299 | + | let aU = (aG + aS) | |
300 | + | let aV = (aH + aT) | |
301 | + | let aW = min([0, aU]) | |
302 | + | let aX = min([0, aV]) | |
303 | + | let aY = (max([0, aU]) + aX) | |
304 | + | let aZ = (max([0, aV]) + aW) | |
305 | + | let ba = valueOrErrorMessage(assetInfo(ae), g("invalid lpAsset info")).quantity | |
306 | + | let bb = fraction(aZ, c, ba) | |
307 | + | let bc = if ((bb != 0)) | |
175 | 308 | then true | |
176 | - | else e("voting expired")] | |
177 | - | if ((aA == aA)) | |
178 | - | then $Tuple3(ad, af, az) | |
309 | + | else i("LP price cannot be 0") | |
310 | + | if ((bc == bc)) | |
311 | + | then { | |
312 | + | let bd = valueOrElse(getInteger(aa, K()), 0) | |
313 | + | let be = max([0, fraction(bd, bb, c)]) | |
314 | + | let bf = (aZ - be) | |
315 | + | let bg = (ba - bd) | |
316 | + | $Tuple6(be, bf, aY, bb, bd, bg) | |
317 | + | } | |
179 | 318 | else throw("Strict value is not equal to itself.") | |
180 | 319 | } | |
181 | 320 | ||
182 | 321 | ||
183 | - | func aB (aC,E,F) = { | |
184 | - | let aD = M(E, F, aC) | |
185 | - | let aE = valueOrErrorMessage(getString(aD), c("you have not voted")) | |
186 | - | let aF = split(aE, a) | |
187 | - | let Q = parseIntValue(aF[2]) | |
188 | - | let aG = valueOrErrorMessage(getString(X(E, F)), c("voting info not found")) | |
189 | - | let aH = as(aG) | |
190 | - | let ah = aH._9 | |
191 | - | let ai = aH._10 | |
192 | - | let aI = fraction(Q, b, (ah + ai)) | |
193 | - | let aJ = valueOrElse(getInteger(I(E, F)), 0) | |
194 | - | let aK = fraction(aI, aJ, b, FLOOR) | |
195 | - | aK | |
196 | - | } | |
197 | - | ||
198 | - | ||
199 | - | @Callable(aL) | |
200 | - | func suggestAdd (E,aM,aN) = { | |
201 | - | let aO = aL.payments[0] | |
202 | - | let aP = value(aO.assetId) | |
203 | - | let aQ = value(aO.amount) | |
204 | - | let aR = getIntegerValue(C) | |
205 | - | let aS = getIntegerValue(B) | |
206 | - | let aT = { | |
207 | - | let aU = invoke(u, "isVerifiedREADONLY", [E], nil) | |
208 | - | if ($isInstanceOf(aU, "Boolean")) | |
209 | - | then aU | |
210 | - | else throw(($getType(aU) + " couldn't be cast to Boolean")) | |
211 | - | } | |
212 | - | let aA = [if (if ((aM >= aR)) | |
213 | - | then (aS >= aM) | |
214 | - | else false) | |
215 | - | then true | |
216 | - | else e("invalid periodLength"), if ((aT == false)) | |
217 | - | then true | |
218 | - | else e("token already verified"), if ((aQ > (aM * U))) | |
219 | - | then true | |
220 | - | else e("not enough wx for given period"), if ((aQ >= getIntegerValue(V))) | |
221 | - | then true | |
222 | - | else e("payment less then min for suggest")] | |
223 | - | if ((aA == aA)) | |
322 | + | @Callable(an) | |
323 | + | func claimLP (bh) = { | |
324 | + | let bi = ap(an) | |
325 | + | if ((bi == bi)) | |
224 | 326 | then { | |
225 | - | let aV = L(E) | |
226 | - | let ax = getInteger(aV) | |
227 | - | let aW = if (isDefined(ax)) | |
228 | - | then (value(ax) + 1) | |
229 | - | else 0 | |
230 | - | let aX = if ((size(aL.payments) > 1)) | |
231 | - | then { | |
232 | - | let aY = aL.payments[1] | |
233 | - | let aZ = toBase58String(value(aY.assetId)) | |
234 | - | let ba = value(aY.amount) | |
235 | - | $Tuple4(true, aZ, ba, [StringEntry(D(E, aW), aZ), IntegerEntry(I(E, aW), ba)]) | |
236 | - | } | |
237 | - | else $Tuple4(false, "EMPTY", 0, nil) | |
238 | - | let Z = aX._1 | |
239 | - | let aa = aX._2 | |
240 | - | let ab = aX._3 | |
241 | - | let bb = aX._4 | |
242 | - | let ag = valueOrErrorMessage(getInteger(y), c("votingThresholdAdd not set")) | |
243 | - | let at = Y(Z, aa, ab, "verification", "inProgress", height, (height + aM), ag, 0, 0) | |
244 | - | let bc = getIntegerValue(J) | |
245 | - | let bd = (aQ - bc) | |
246 | - | ([IntegerEntry(aV, aW), StringEntry(R(E, aW), toString(aL.caller)), StringEntry(X(E, aW), at), StringEntry(aj(E), aN), Burn(aP, bd)] ++ bb) | |
327 | + | let y = Address(bh) | |
328 | + | let bj = valueOrElse(getInteger(aa, x(y)), 0) | |
329 | + | let bk = valueOrElse(getInteger(aa, z(y)), 0) | |
330 | + | let bl = if ((bj > 0)) | |
331 | + | then [invoke(aa, "transferAsset", [bh, bj, ae], nil), invoke(aa, "integerEntry", [x(y), 0], nil), invoke(aa, "integerEntry", [z(y), (bk + bj)], nil)] | |
332 | + | else i("nothing to claim") | |
333 | + | $Tuple2(nil, bl) | |
247 | 334 | } | |
248 | 335 | else throw("Strict value is not equal to itself.") | |
249 | 336 | } | |
250 | 337 | ||
251 | 338 | ||
252 | 339 | ||
253 | - | @Callable(aL) | |
254 | - | func suggestRemove (E) = { | |
255 | - | let be = ak(toString(aL.caller), height) | |
256 | - | let bf = getIntegerValue(K) | |
257 | - | let aO = aL.payments[0] | |
258 | - | let aP = value(aO.assetId) | |
259 | - | let aQ = value(aO.amount) | |
260 | - | let aT = { | |
261 | - | let aU = invoke(u, "isVerifiedREADONLY", [E], nil) | |
262 | - | if ($isInstanceOf(aU, "Boolean")) | |
263 | - | then aU | |
264 | - | else throw(($getType(aU) + " couldn't be cast to Boolean")) | |
265 | - | } | |
266 | - | let aA = [if (aT) | |
267 | - | then true | |
268 | - | else e("token not verified"), if ((be >= bf)) | |
269 | - | then true | |
270 | - | else e("not enough gWXes"), if ((aQ >= getIntegerValue(W))) | |
271 | - | then true | |
272 | - | else e("payment less then min for suggest")] | |
273 | - | if ((aA == aA)) | |
340 | + | @Callable(an) | |
341 | + | func finalize (bh,aD,aE,aF) = { | |
342 | + | let bi = ap(an) | |
343 | + | if ((bi == bi)) | |
274 | 344 | then { | |
275 | - | let aV = L(E) | |
276 | - | let ax = getInteger(aV) | |
277 | - | let aW = if (isDefined(ax)) | |
278 | - | then (value(ax) + 1) | |
279 | - | else 0 | |
280 | - | let aM = valueOrErrorMessage(getInteger(A), c("periodLengthRemove not set")) | |
281 | - | let af = (height + aM) | |
282 | - | let ag = valueOrErrorMessage(getInteger(z), c("votingThresholdRemove not set")) | |
283 | - | let at = Y(false, "EMPTY", 0, "deverification", "inProgress", height, (height + aM), ag, 0, 0) | |
284 | - | [IntegerEntry(aV, aW), StringEntry(R(E, aW), toString(aL.caller)), StringEntry(X(E, aW), at)] | |
285 | - | } | |
286 | - | else throw("Strict value is not equal to itself.") | |
287 | - | } | |
345 | + | let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period")) | |
346 | + | let bn = valueOrErrorMessage(getInteger(aa, F()), g("invalid period length")) | |
347 | + | let bo = valueOrErrorMessage(getInteger(aa, D(bm)), g("invalid start height")) | |
348 | + | let bp = valueOrErrorMessage(getInteger(aa, B(bm)), g("invalid price")) | |
349 | + | let bq = valueOrErrorMessage(getInteger(aa, H()), g("invalid next block to process")) | |
350 | + | let br = ((bo + bn) - 1) | |
351 | + | let bs = [if ((an.originCaller == ai)) | |
352 | + | then true | |
353 | + | else i("permission denied"), if ((bq > br)) | |
354 | + | then true | |
355 | + | else i("unprocessed blocks"), if ((aD >= 0)) | |
356 | + | then true | |
357 | + | else i("invalid new treasury volume"), if ((aE >= 0)) | |
358 | + | then true | |
359 | + | else i("invalid PWR managers bonus"), if (if ((aF >= -(c))) | |
360 | + | then (c >= aF) | |
361 | + | else false) | |
362 | + | then true | |
363 | + | else i("invalid treasury volume diff allocation coefficient")] | |
364 | + | if ((bs == bs)) | |
365 | + | then { | |
366 | + | let bt = aC(aD, aE, aF) | |
367 | + | let be = bt._1 | |
368 | + | let bf = bt._2 | |
369 | + | let aY = bt._3 | |
370 | + | let bb = bt._4 | |
371 | + | let bd = bt._5 | |
372 | + | let bg = bt._6 | |
373 | + | let bu = (bm + 1) | |
374 | + | func bv (bw,bx) = { | |
375 | + | let by = bw | |
376 | + | let bz = by._1 | |
377 | + | let bA = by._2 | |
378 | + | let bB = by._3 | |
379 | + | let bC = bx.amount | |
380 | + | let bD = bx.assetId | |
381 | + | let bE = ("%s" + makeString([bA, j(bD)], a)) | |
382 | + | let bF = ("%d" + makeString([bB, toString(bC)], a)) | |
383 | + | let bG = ScriptTransfer(aa, bC, bD) | |
384 | + | $Tuple3((bz :+ bG), bE, bF) | |
385 | + | } | |
288 | 386 | ||
387 | + | let bH = { | |
388 | + | let bI = an.payments | |
389 | + | let bJ = size(bI) | |
390 | + | let bK = $Tuple3(nil, "", "") | |
391 | + | func bL (bM,bN) = if ((bN >= bJ)) | |
392 | + | then bM | |
393 | + | else bv(bM, bI[bN]) | |
289 | 394 | ||
395 | + | func bO (bM,bN) = if ((bN >= bJ)) | |
396 | + | then bM | |
397 | + | else throw("List size exceeds 10") | |
290 | 398 | ||
291 | - | @Callable(aL) | |
292 | - | func vote (E,P) = { | |
293 | - | let aV = L(E) | |
294 | - | let ax = valueOrErrorMessage(getInteger(aV), c("voting does not exist")) | |
295 | - | let at = aw(E, ax) | |
296 | - | if ((at == at)) | |
297 | - | then { | |
298 | - | let bg = at._2 | |
299 | - | let bh = ak(toString(aL.caller), bg) | |
300 | - | let aD = M(E, ax, aL.caller) | |
301 | - | let aA = [if ((getString(aD) == unit)) | |
302 | - | then true | |
303 | - | else e("You have already voted"), if ((bh > 0)) | |
304 | - | then true | |
305 | - | else throw("You'll not have gWX at the end of voting")] | |
306 | - | if ((aA == aA)) | |
307 | - | then { | |
308 | - | let aG = valueOrErrorMessage(getString(X(E, ax)), c("voting info not found")) | |
309 | - | let au = as(aG) | |
310 | - | let ah = au._9 | |
311 | - | let ai = au._10 | |
312 | - | let bi = if (P) | |
313 | - | then $Tuple2((ah + bh), ai) | |
314 | - | else $Tuple2(ah, (ai + bh)) | |
315 | - | let bj = bi._1 | |
316 | - | let bk = bi._2 | |
317 | - | let bl = Y(au._1, au._2, au._3, au._4, au._5, au._6, au._7, au._8, bj, bk) | |
318 | - | let bm = { | |
319 | - | let h = getString(D(E, ax)) | |
320 | - | if ($isInstanceOf(h, "String")) | |
321 | - | then { | |
322 | - | let bn = h | |
323 | - | [StringEntry(G(aL.caller, E, ax), O(P, bh))] | |
324 | - | } | |
325 | - | else if ($isInstanceOf(h, "Unit")) | |
326 | - | then nil | |
327 | - | else throw("Match error") | |
399 | + | bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
328 | 400 | } | |
329 | - | ([StringEntry(aD, O(P, bh)), StringEntry(X(E, ax), bl)] ++ bm) | |
401 | + | let bz = bH._1 | |
402 | + | let bP = bH._2 | |
403 | + | let bQ = bH._3 | |
404 | + | let bl = [invoke(aa, "integerEntry", [E(bm), aE], nil), invoke(aa, "integerEntry", [A(), bu], nil), invoke(aa, "integerEntry", [B(bu), bb], nil), invoke(aa, "integerEntry", [D(bu), (br + 1)], nil), invoke(aa, "burn", [bd], nil), invoke(aa, "integerEntry", [K(), 0], nil), invoke(aa, "integerEntry", [v(unit), bf], nil), invoke(aa, "integerEntry", [w(unit), aY], nil), invoke(aa, "stringEntry", [T(bu), bP], nil), invoke(aa, "stringEntry", [U(bu), bQ], nil)] | |
405 | + | $Tuple2(bz, bl) | |
330 | 406 | } | |
331 | 407 | else throw("Strict value is not equal to itself.") | |
332 | 408 | } | |
333 | 409 | else throw("Strict value is not equal to itself.") | |
334 | 410 | } | |
335 | 411 | ||
336 | 412 | ||
337 | 413 | ||
338 | - | @Callable(aL) | |
339 | - | func cancelVote (E) = { | |
340 | - | let aV = L(E) | |
341 | - | let ax = valueOrErrorMessage(getInteger(aV), c("voting does not exist")) | |
342 | - | let aD = M(E, ax, aL.caller) | |
343 | - | let aE = valueOrErrorMessage(getString(aD), c("you have not voted")) | |
344 | - | let aF = split(aE, a) | |
345 | - | let P = aF[1] | |
346 | - | let Q = parseIntValue(aF[2]) | |
347 | - | let at = aw(E, ax) | |
348 | - | if ((at == at)) | |
414 | + | @Callable(an) | |
415 | + | func finalizeREADONLY (aD,aE,aF) = { | |
416 | + | let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period")) | |
417 | + | let bn = valueOrErrorMessage(getInteger(aa, F()), g("invalid period length")) | |
418 | + | let bo = valueOrErrorMessage(getInteger(aa, D(bm)), g("invalid start height")) | |
419 | + | let bp = valueOrErrorMessage(getInteger(aa, B(bm)), g("invalid price")) | |
420 | + | let bq = valueOrErrorMessage(getInteger(aa, H()), g("invalid next block to process")) | |
421 | + | let br = ((bo + bn) - 1) | |
422 | + | let bs = [if ((bq > br)) | |
423 | + | then true | |
424 | + | else i("unprocessed blocks"), if ((aD >= 0)) | |
425 | + | then true | |
426 | + | else i("invalid new treasury volume"), if ((aE >= 0)) | |
427 | + | then true | |
428 | + | else i("invalid PWR managers bonus"), if (if ((aF >= -(c))) | |
429 | + | then (c >= aF) | |
430 | + | else false) | |
431 | + | then true | |
432 | + | else i("invalid treasury volume diff allocation coefficient")] | |
433 | + | if ((bs == bs)) | |
434 | + | then $Tuple2(nil, aC(aD, aE, aF)) | |
435 | + | else throw("Strict value is not equal to itself.") | |
436 | + | } | |
437 | + | ||
438 | + | ||
439 | + | ||
440 | + | @Callable(an) | |
441 | + | func invest (bh) = { | |
442 | + | let bi = ap(an) | |
443 | + | if ((bi == bi)) | |
349 | 444 | then { | |
350 | - | let aA = [if (if ((P == "true")) | |
445 | + | let y = Address(bh) | |
446 | + | let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period")) | |
447 | + | let bp = valueOrErrorMessage(getInteger(aa, B(bm)), g("invalid price")) | |
448 | + | let bx = if ((size(an.payments) == 1)) | |
449 | + | then an.payments[0] | |
450 | + | else i("invalid payments") | |
451 | + | let bR = if (if ((bx.assetId == unit)) | |
452 | + | then (bx.amount > 0) | |
453 | + | else false) | |
454 | + | then $Tuple2(bx.amount, bx.assetId) | |
455 | + | else i("invalid payment amount") | |
456 | + | let bC = bR._1 | |
457 | + | let bD = bR._2 | |
458 | + | let P = if ((bp > 0)) | |
459 | + | then fraction(bC, c, bp) | |
460 | + | else 0 | |
461 | + | let bS = valueOrElse(getInteger(aa, v(unit)), 0) | |
462 | + | let bw = [ScriptTransfer(ai, bC, bD)] | |
463 | + | let bl = [invoke(aa, "integerEntry", [v(unit), (bS + bC)], nil), invoke(aa, "reissue", [P], nil), invoke(aa, "transferAsset", [bh, P, ae], nil)] | |
464 | + | $Tuple2(bw, bl) | |
465 | + | } | |
466 | + | else throw("Strict value is not equal to itself.") | |
467 | + | } | |
468 | + | ||
469 | + | ||
470 | + | ||
471 | + | @Callable(an) | |
472 | + | func withdraw (bh) = { | |
473 | + | let bi = ap(an) | |
474 | + | if ((bi == bi)) | |
475 | + | then { | |
476 | + | let y = Address(bh) | |
477 | + | let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period")) | |
478 | + | let bx = if ((size(an.payments) == 1)) | |
479 | + | then an.payments[0] | |
480 | + | else i(g("invalid payments")) | |
481 | + | let bD = if ((bx.assetId == ae)) | |
482 | + | then ae | |
483 | + | else i("invalid payment asset") | |
484 | + | let bC = if ((bx.amount > 0)) | |
485 | + | then bx.amount | |
486 | + | else i("invalid payment amount") | |
487 | + | let bT = valueOrElse(getInteger(aa, K()), 0) | |
488 | + | let bw = [ScriptTransfer(aa, bC, bD)] | |
489 | + | let bl = [invoke(aa, "integerEntry", [K(), (bT + bC)], nil), invoke(aa, "stringEntry", [L(y, an.transactionId), N(d, bC, (bm + 1), unit)], nil)] | |
490 | + | if ((bl == bl)) | |
491 | + | then $Tuple2(bw, bl) | |
492 | + | else throw("Strict value is not equal to itself.") | |
493 | + | } | |
494 | + | else throw("Strict value is not equal to itself.") | |
495 | + | } | |
496 | + | ||
497 | + | ||
498 | + | ||
499 | + | @Callable(an) | |
500 | + | func cancelWithdraw (bh,M) = { | |
501 | + | let bi = ap(an) | |
502 | + | if ((bi == bi)) | |
503 | + | then { | |
504 | + | let y = Address(bh) | |
505 | + | let bU = valueOrErrorMessage(getString(aa, L(y, M)), g("invalid withdrawal request")) | |
506 | + | let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period")) | |
507 | + | let bV = X(bU) | |
508 | + | let O = bV._1 | |
509 | + | let P = bV._2 | |
510 | + | let Q = bV._3 | |
511 | + | let R = bV._4 | |
512 | + | let bs = [if ((O == d)) | |
351 | 513 | then true | |
352 | - | else ( | |
514 | + | else i("invalid withdrawal request status"), if ((Q > bm)) | |
353 | 515 | then true | |
354 | - | else | |
355 | - | if (( | |
516 | + | else i("invalid withdrawal request period")] | |
517 | + | if ((bs == bs)) | |
356 | 518 | then { | |
357 | - | let aG = valueOrErrorMessage(getString(X(E, ax)), c("voting info not found")) | |
358 | - | let au = as(aG) | |
359 | - | let ah = au._9 | |
360 | - | let ai = au._10 | |
361 | - | let bo = if ((P == "true")) | |
362 | - | then $Tuple2((ah - Q), ai) | |
363 | - | else $Tuple2(ah, (ai - Q)) | |
364 | - | let bj = bo._1 | |
365 | - | let bk = bo._2 | |
366 | - | let bl = Y(au._1, au._2, au._3, au._4, au._5, au._6, au._7, au._8, bj, bk) | |
367 | - | [StringEntry(X(E, ax), bl), DeleteEntry(aD), DeleteEntry(G(aL.caller, E, ax))] | |
519 | + | let bT = valueOrErrorMessage(getInteger(aa, K()), g("invalid total withdrawal amount")) | |
520 | + | let bl = [invoke(aa, "integerEntry", [K(), if ((bT >= P)) | |
521 | + | then (bT - P) | |
522 | + | else i("invalid withdrawal amount")], nil), invoke(aa, "deleteEntry", [L(y, M)], nil), invoke(aa, "transferAsset", [bh, P, ae], nil)] | |
523 | + | if ((bl == bl)) | |
524 | + | then $Tuple2(nil, bl) | |
525 | + | else throw("Strict value is not equal to itself.") | |
368 | 526 | } | |
369 | 527 | else throw("Strict value is not equal to itself.") | |
370 | 528 | } | |
371 | 529 | else throw("Strict value is not equal to itself.") | |
372 | 530 | } | |
373 | 531 | ||
374 | 532 | ||
375 | 533 | ||
376 | - | @Callable(aL) | |
377 | - | func finalize (E) = { | |
378 | - | let aV = L(E) | |
379 | - | let ax = valueOrElse(getInteger(aV), 0) | |
380 | - | let bp = valueOrErrorMessage(getInteger(y), c("votingThresholdAdd not set")) | |
381 | - | let bq = valueOrErrorMessage(getInteger(z), c("votingThresholdRemove not set")) | |
382 | - | let aG = valueOrErrorMessage(getString(X(E, ax)), c("voting info not found")) | |
383 | - | let au = as(aG) | |
384 | - | let ac = au._4 | |
385 | - | let ad = au._5 | |
386 | - | let af = au._7 | |
387 | - | let br = au._8 | |
388 | - | let ah = au._9 | |
389 | - | let ai = au._10 | |
390 | - | let aA = [if ((ad == "inProgress")) | |
391 | - | then true | |
392 | - | else e("voting not in progress"), if ((height >= af)) | |
393 | - | then true | |
394 | - | else e("voting not finished"), if (isDefined(getString(aj(E)))) | |
395 | - | then true | |
396 | - | else e("asset image not set")] | |
397 | - | if ((aA == aA)) | |
534 | + | @Callable(an) | |
535 | + | func claimCollateral (bh,M) = { | |
536 | + | let bi = ap(an) | |
537 | + | if ((bi == bi)) | |
398 | 538 | then { | |
399 | - | let bs = if (if (((ah + ai) >= br)) | |
400 | - | then (ah > ai) | |
539 | + | let y = Address(bh) | |
540 | + | let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period")) | |
541 | + | let bU = valueOrErrorMessage(getString(aa, L(y, M)), g("invalid withdrawal request")) | |
542 | + | let bW = X(bU) | |
543 | + | let O = bW._1 | |
544 | + | let P = bW._2 | |
545 | + | let Q = bW._3 | |
546 | + | let R = bW._4 | |
547 | + | if ((O == e)) | |
548 | + | then i("invalid withdrawal request status") | |
549 | + | else if ((Q > bm)) | |
550 | + | then i("invalid withdrawal request period") | |
551 | + | else { | |
552 | + | let bX = valueOrErrorMessage(getInteger(aa, B(Q)), g("invalid price")) | |
553 | + | let bY = if ((bX > 0)) | |
554 | + | then fraction(P, bX, c) | |
555 | + | else 0 | |
556 | + | let bl = [invoke(aa, "stringEntry", [L(y, M), N(e, P, Q, an.transactionId)], nil), { | |
557 | + | let bZ = removeByIndex(split_51C(getStringValue(aa, T(bm)), a), 0) | |
558 | + | let ca = removeByIndex(split_51C(getStringValue(aa, U(bm)), a), 0) | |
559 | + | invoke(aa, "transferAssets", [bh, bZ, ca], nil) | |
560 | + | }] | |
561 | + | $Tuple2(nil, bl) | |
562 | + | } | |
563 | + | } | |
564 | + | else throw("Strict value is not equal to itself.") | |
565 | + | } | |
566 | + | ||
567 | + | ||
568 | + | ||
569 | + | @Callable(an) | |
570 | + | func processBlocks (bh) = { | |
571 | + | let bi = ap(an) | |
572 | + | if ((bi == bi)) | |
573 | + | then { | |
574 | + | let y = Address(bh) | |
575 | + | let bm = valueOrErrorMessage(getInteger(aa, A()), g("invalid period")) | |
576 | + | let bn = valueOrErrorMessage(getInteger(aa, F()), g("invalid period length")) | |
577 | + | let bo = valueOrErrorMessage(getInteger(aa, D(bm)), g("invalid start height")) | |
578 | + | let bp = valueOrErrorMessage(getInteger(aa, B(bm)), g("invalid price")) | |
579 | + | let bq = valueOrErrorMessage(getInteger(aa, H()), g("invalid next block to process")) | |
580 | + | let br = ((bo + bn) - 1) | |
581 | + | let cb = 40 | |
582 | + | let cc = if (if (if ((height >= bq)) | |
583 | + | then if ((bq >= bo)) | |
584 | + | then true | |
585 | + | else (bm == 0) | |
401 | 586 | else false) | |
402 | - | then true | |
403 | - | else false | |
404 | - | let bt = if (bs) | |
405 | - | then "accepted" | |
406 | - | else "rejected" | |
407 | - | let aN = getStringValue(aj(E)) | |
408 | - | let bu = if (bs) | |
587 | + | then (br >= bq) | |
588 | + | else false) | |
589 | + | then min([((br - bq) + 1), cb]) | |
590 | + | else i(g("invalid target block")) | |
591 | + | let cd = valueOrErrorMessage(getInteger(aa, G()), g("invalid block processing reward")) | |
592 | + | let ce = (cd / cc) | |
593 | + | let cf = (cd - (ce * cc)) | |
594 | + | func cg (ch,ci) = if ((ci >= cc)) | |
595 | + | then ch | |
596 | + | else { | |
597 | + | let cj = (bq + ci) | |
598 | + | let ck = valueOrErrorMessage(blockInfoByHeight(cj), g("invalid block info")) | |
599 | + | let cl = valueOrErrorMessage(aq(ck.rewards, ag), g(("invalid treasury reward for height " + toString(cj)))) | |
600 | + | let cm = ck.generator | |
601 | + | let bj = valueOrElse(getInteger(aa, x(cm)), 0) | |
602 | + | let cn = if ((ci == (cc - 1))) | |
603 | + | then (ce + cf) | |
604 | + | else ce | |
605 | + | let P = if ((bp > 0)) | |
606 | + | then fraction((cl - cn), c, bp) | |
607 | + | else 0 | |
608 | + | let co = [invoke(aa, "stringEntry", [I(cj), makeString([toBase58String(an.transactionId), toString(bm), toString(cm), toBase58String(bh), toString(cl), toString(cn), toString(P)], a)], nil), invoke(aa, "integerEntry", [x(cm), (bj + P)], nil)] | |
609 | + | if ((co == co)) | |
610 | + | then { | |
611 | + | let cp = ch | |
612 | + | let cq = cp._1 | |
613 | + | let cr = cp._2 | |
614 | + | $Tuple2((cq + P), (cr + cl)) | |
615 | + | } | |
616 | + | else throw("Strict value is not equal to itself.") | |
617 | + | } | |
618 | + | ||
619 | + | let cs = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39] | |
620 | + | let ct = { | |
621 | + | let bI = cs | |
622 | + | let bJ = size(bI) | |
623 | + | let bK = $Tuple2(0, 0) | |
624 | + | func bL (bM,bN) = if ((bN >= bJ)) | |
625 | + | then bM | |
626 | + | else cg(bM, bI[bN]) | |
627 | + | ||
628 | + | func bO (bM,bN) = if ((bN >= bJ)) | |
629 | + | then bM | |
630 | + | else throw("List size exceeds 40") | |
631 | + | ||
632 | + | bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40) | |
633 | + | } | |
634 | + | if ((ct == ct)) | |
409 | 635 | then { | |
410 | - | let bv = if ((ac == "verification")) | |
411 | - | then invoke(u, "createOrUpdate", [E, aN, true], nil) | |
412 | - | else invoke(u, "setVerified", [E, false], nil) | |
413 | - | bv | |
414 | - | } | |
415 | - | else nil | |
416 | - | if ((bu == bu)) | |
417 | - | then { | |
418 | - | let bl = Y(au._1, au._2, au._3, au._4, bt, au._6, au._7, au._8, au._9, au._10) | |
419 | - | let bc = getIntegerValue(J) | |
420 | - | [StringEntry(X(E, ax), bl), ScriptTransfer(aL.caller, bc, x)] | |
636 | + | let cu = ct._2 | |
637 | + | let cv = ct._1 | |
638 | + | let cw = (cu - cd) | |
639 | + | let bS = valueOrElse(getInteger(aa, v(unit)), 0) | |
640 | + | let bw = [invoke(aa, "reissue", [cv], nil), invoke(aa, "integerEntry", [H(), (bq + cc)], nil), invoke(aa, "transferFromProxyTreasury", [ai.bytes, cw], nil), invoke(aa, "transferFromProxyTreasury", [bh, cd], nil), invoke(aa, "integerEntry", [v(unit), (bS + cw)], nil)] | |
641 | + | if ((bw == bw)) | |
642 | + | then $Tuple2(nil, unit) | |
643 | + | else throw("Strict value is not equal to itself.") | |
421 | 644 | } | |
422 | 645 | else throw("Strict value is not equal to itself.") | |
423 | 646 | } | |
424 | 647 | else throw("Strict value is not equal to itself.") | |
425 | 648 | } | |
426 | 649 | ||
427 | 650 | ||
428 | - | ||
429 | - | @Callable(aL) | |
430 | - | func claimREADONLY (E,F,bw) = { | |
431 | - | let H = valueOrErrorMessage(addressFromString(bw), c("invalid address")) | |
432 | - | let bx = getString(D(E, F)) | |
433 | - | let ab = if (isDefined(bx)) | |
434 | - | then aB(H, E, F) | |
435 | - | else 0 | |
436 | - | $Tuple2(nil, ab) | |
437 | - | } | |
438 | - | ||
439 | - | ||
440 | - | ||
441 | - | @Callable(aL) | |
442 | - | func claim (E,F) = { | |
443 | - | let by = aL.caller | |
444 | - | let bz = S(by, E, F) | |
445 | - | let bA = getInteger(bz) | |
446 | - | let aA = [if ((bA == unit)) | |
447 | - | then true | |
448 | - | else e("already claimed")] | |
449 | - | if ((aA == aA)) | |
450 | - | then { | |
451 | - | let ab = if ((aB(by, E, F) > 0)) | |
452 | - | then aB(by, E, F) | |
453 | - | else e("nothing to claim") | |
454 | - | let bx = getString(D(E, F)) | |
455 | - | let bB = if (isDefined(bx)) | |
456 | - | then { | |
457 | - | let bC = fromBase58String(value(bx)) | |
458 | - | [ScriptTransfer(by, ab, bC), IntegerEntry(bz, ab), DeleteEntry(G(by, E, F))] | |
459 | - | } | |
460 | - | else e("nothing to claim") | |
461 | - | bB | |
462 | - | } | |
463 | - | else throw("Strict value is not equal to itself.") | |
464 | - | } | |
465 | - | ||
466 | - | ||
467 | - | @Verifier(bD) | |
468 | - | func bE () = { | |
469 | - | let bF = { | |
470 | - | let h = aq() | |
471 | - | if ($isInstanceOf(h, "ByteVector")) | |
651 | + | @Verifier(cx) | |
652 | + | func cy () = { | |
653 | + | let cz = { | |
654 | + | let l = aj() | |
655 | + | if ($isInstanceOf(l, "ByteVector")) | |
472 | 656 | then { | |
473 | - | let | |
474 | - | | |
657 | + | let al = l | |
658 | + | al | |
475 | 659 | } | |
476 | - | else if ($isInstanceOf(h, "Unit")) | |
477 | - | then bD.senderPublicKey | |
478 | - | else throw("Match error") | |
660 | + | else cx.senderPublicKey | |
479 | 661 | } | |
480 | - | sigVerify( | |
662 | + | sigVerify(cx.bodyBytes, cx.proofs[0], cz) | |
481 | 663 | } | |
482 | 664 |
github/deemru/w8io/169f3d6 117.20 ms ◑![]()