tx · 54vbnaqZsxsDCEAu2RsW9izsjHKAH2ihSHeffkvyVwd2 3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J: -0.02600000 Waves 2023.03.28 07:50 [2509346] smart account 3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J > SELF 0.00000000 Waves
{ "type": 13, "id": "54vbnaqZsxsDCEAu2RsW9izsjHKAH2ihSHeffkvyVwd2", "fee": 2600000, "feeAssetId": null, "timestamp": 1679979009472, "version": 2, "chainId": 84, "sender": "3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J", "senderPublicKey": "4DthuG3xjZV9WtZ34Y66AummdAr67wRzwWsVQL4y2bob", "proofs": [ "7aHqa8YaJDiBMHAAhErjjKLqfupsRsFYWc7iWgNMps3h5voLWD5Gjtbx4aeiqsEsuopbxijFLtKyPvgsumMyFet", "3a7GW1sz4vQwAcm1c6gR1JZqcHNUrkg2dE1hhBkWt7Faz6WVJej6Dwvf2SSZNSkekFhTJxJy6CSixSYDXAfG4rb9", "5XnzNWA5J7yZWZ3TA8pQ422qFdgBC5Lf1hNnMChfCzV3mD3gcQ1apZF961nzp3T5pvMZW7UsNHYuRgdMrSuskthp" ], "script": "base64:BgIpCAISBwoFCAgBAQgSABIDCgEBEgASABIAEgMKAQgSBAoCCAESBAoCCAFUAAlzZXBhcmF0b3ICAl9fAANTRVACAl9fAAVNVUxUNgDAhD0ABU1VTFQ4AIDC1y8ABk1VTFRYNgkAtgIBBQVNVUxUNgAGTVVMVFg4CQC2AgEFBU1VTFQ4AAdNVUxUWDE4CQC2AgEAgICQu7rWrfANAApXQVZFU0lEU1RSAgVXQVZFUwAHV0FWRVNJRAkA2QQBBQpXQVZFU0lEU1RSAAlEQVlNSUxMSVMAgLiZKQAJTUFYQkFTS0VUAAkAGUlkeENvbnRyb2xDZmdOZXV0cmlub0RhcHAAAQAYSWR4Q29udHJvbENmZ0F1Y3Rpb25EYXBwAAIAFElkeENvbnRyb2xDZmdScGREYXBwAAMAFUlkeENvbnRyb2xDZmdNYXRoRGFwcAAEABxJZHhDb250cm9sQ2ZnTGlxdWlkYXRpb25EYXBwAAUAFUlkeENvbnRyb2xDZmdSZXN0RGFwcAAGAB1JZHhDb250cm9sQ2ZnTm9kZVJlZ2lzdHJ5RGFwcAAHABxJZHhDb250cm9sQ2ZnTnNidFN0YWtpbmdEYXBwAAgAGUlkeENvbnRyb2xDZmdNZWRpYXRvckRhcHAACQAbSWR4Q29udHJvbENmZ0dvdmVybmFuY2VEYXBwAA0BD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJAKwCAgkArAICCQCsAgIJAKwCAgIKbWFuZGF0b3J5IAkApQgBBQdhZGRyZXNzAgEuBQNrZXkCDyBpcyBub3QgZGVmaW5lZAERa2V5Q29udHJvbEFkZHJlc3MAAhwlcyVzX19jb25maWdfX2NvbnRyb2xBZGRyZXNzAQ1rZXlDb250cm9sQ2ZnAAIRJXNfX2NvbnRyb2xDb25maWcBFHJlYWRDb250cm9sQ2ZnT3JGYWlsAQdjb250cm9sCQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQdjb250cm9sCQENa2V5Q29udHJvbENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgpjb250cm9sQ2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUKY29udHJvbENmZwUDaWR4CQCsAgICLUNvbnRyb2wgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgAD2NvbnRyb2xDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQERa2V5Q29udHJvbEFkZHJlc3MAAiMzTjROUzdkNEpvOWE2RjE0TGlGVUtLWVZkVWtrZjJlUDRaeAAKY29udHJvbENmZwkBFHJlYWRDb250cm9sQ2ZnT3JGYWlsAQUPY29udHJvbENvbnRyYWN0AAxtYXRoQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQpjb250cm9sQ2ZnBRVJZHhDb250cm9sQ2ZnTWF0aERhcHAAEG5ldXRyaW5vQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQpjb250cm9sQ2ZnBRlJZHhDb250cm9sQ2ZnTmV1dHJpbm9EYXBwAA9hdWN0aW9uQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQpjb250cm9sQ2ZnBRhJZHhDb250cm9sQ2ZnQXVjdGlvbkRhcHAAC2dvdkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUKY29udHJvbENmZwUbSWR4Q29udHJvbENmZ0dvdmVybmFuY2VEYXBwAQxrZXlCb25kQXNzZXQAAg1ib25kX2Fzc2V0X2lkARdrZXlVc2VyR25zYnRSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIbJXMlc191c2VyR25zYnRSZWxlYXNlVGltZV9fBQh1c2VyQWRkcgEaa2V5TmV1dHJpbm9Db250cmFjdEFkZHJlc3MAAhslc19fbmV1dHJpbm9Db250cmFjdEFkZHJlc3MBFmtleU1hdGhDb250cmFjdEFkZHJlc3MAAhAlc19fbWF0aENvbnRyYWN0ARBrZXlNaW5Mb2NrQW1vdW50AAIRJXNfX21pbkxvY2tBbW91bnQBC2tleUhhbGZMaWZlAAIMJXNfX2hhbGZMaWZlARZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50AQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgtwYXJhbUJ5VXNlcgkAzAgCCQClCAEFC3VzZXJBZGRyZXNzCQDMCAICBmFtb3VudAUDbmlsBQlzZXBhcmF0b3IBFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICC3BhcmFtQnlVc2VyCQDMCAIJAKUIAQULdXNlckFkZHJlc3MJAMwIAgIFc3RhcnQFA25pbAUJc2VwYXJhdG9yARBrZXlIaXN0b3J5UmVjb3JkAwR0eXBlC3VzZXJBZGRyZXNzBHR4SWQJALkJAgkAzAgCAgglcyVzJXMlcwkAzAgCAgdoaXN0b3J5CQDMCAIFBHR5cGUJAMwIAgkApQgBBQt1c2VyQWRkcmVzcwkAzAgCCQDYBAEFBHR4SWQFA25pbAUJc2VwYXJhdG9yARdrZXlMb2NrUGFyYW1Ub3RhbEFtb3VudAAJALkJAgkAzAgCAgQlcyVzCQDMCAICBXN0YXRzCQDMCAICEWFjdGl2ZVRvdGFsTG9ja2VkBQNuaWwFCXNlcGFyYXRvcgESa2V5U3RhdHNMb2Nrc0NvdW50AAkAuQkCCQDMCAICBCVzJXMJAMwIAgIFc3RhdHMJAMwIAgIKbG9ja3NDb3VudAUDbmlsBQlzZXBhcmF0b3IBEmtleVN0YXRzVXNlcnNDb3VudAAJALkJAgkAzAgCAgQlcyVzCQDMCAICBXN0YXRzCQDMCAICEGFjdGl2ZVVzZXJzQ291bnQFA25pbAUJc2VwYXJhdG9yARdrZXlTdGF0c0RlcG9zaXRBbXRCeURheQEJdGltZXN0YW1wCQC5CQIJAMwIAgIGJXMlcyVkCQDMCAICBXN0YXRzCQDMCAICD2RlcG9zaXRBbXRCeURheQkAzAgCCQCkAwEFCXRpbWVzdGFtcAUDbmlsBQlzZXBhcmF0b3IBGGtleVN0YXRzRGVwb3NpdEFtdFRvdGFscwAJALkJAgkAzAgCAgYlcyVzJWQJAMwIAgIFc3RhdHMJAMwIAgIQZGVwb3NpdEFtdFRvdGFscwUDbmlsBQlzZXBhcmF0b3IBDWtleU5leHRQZXJpb2QAAg4lc19fbmV4dFBlcmlvZAEYa2V5U3VwcG9ydGVkUmV3YXJkQXNzZXRzAAIVc3VwcG9ydGVkUmV3YXJkQXNzZXRzARFrZXlEZXBvc2l0TnVtTGFzdAAJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIDZGVwCQDMCAICB2xhc3ROdW0FA25pbAUJc2VwYXJhdG9yARtrZXlVc2VyUmV3YXJkRnJvbURlcG9zaXROdW0BC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICEXVzZXJSd2RGcm9tRGVwTnVtCQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFCXNlcGFyYXRvcgEVa2V5UmV3YXJkUGVyTnNidFN1bUF0AgpkZXBvc2l0TnVtA3RrbgkAuQkCCQDMCAICBCVzJWQJAMwIAgIVcndkUGVyTnNidFN1bUJ5RGVwTnVtCQDMCAIJAKQDAQUKZGVwb3NpdE51bQkAzAgCBQN0a24FA25pbAUJc2VwYXJhdG9yAQlrZXlSZXdhcmQCC3VzZXJBZGRyZXNzA3RrbgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgNyd2QJAMwIAgULdXNlckFkZHJlc3MJAMwIAgUDdGtuBQNuaWwFCXNlcGFyYXRvcgEKa2V5Q2xhaW1lZAILdXNlckFkZHJlc3MDdGtuCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICA2NsbQkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCBQN0a24FA25pbAUJc2VwYXJhdG9yARdrZXlOb3REaXN0cmlidXRlZFJld2FyZAEDdGtuCQC5CQIJAMwIAgIEJXMlcwkAzAgCAg5ub3REaXN0cmlidXRlZAkAzAgCBQN0a24FA25pbAUJc2VwYXJhdG9yAQV0b1gxOAIHb3JpZ1ZhbAhvcmlnTXVsdAkAvAIDCQC2AgEFB29yaWdWYWwFB01VTFRYMTgFCG9yaWdNdWx0AQxnZXRJbnRPclplcm8BA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAEMZ2V0SW50T3JFbHNlAgNrZXkKZGVmYXVsdFZhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkFCmRlZmF1bHRWYWwBDGdldEludE9yRmFpbAEDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUDa2V5CQCsAgIJAKwCAgIPTWFuZGF0b3J5IHRoaXMuBQNrZXkCDyBpcyBub3QgZGVmaW5lZAEMZ2V0U3RyT3JFbHNlAgNrZXkKZGVmYXVsdFZhbAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQNrZXkFCmRlZmF1bHRWYWwBD3RvQWRkcmVzc09yRmFpbAEKYWRkcmVzc1N0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFCmFkZHJlc3NTdHIJAKwCAgIhY291bGRuJ3QgcGFyc2UgcGFzc2VkIGFkZHJlc3NTdHI9BQphZGRyZXNzU3RyAQt0b0Fzc2V0VmVjdAEIYXNzZXRTdHIDCQAAAgUIYXNzZXRTdHIFCldBVkVTSURTVFIFBHVuaXQJANkEAQUIYXNzZXRTdHIBBWFzSW50AQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAgNJbnQEBnZhbEludAUHJG1hdGNoMAUGdmFsSW50CQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50ARNmb3JtYXRIaXN0b3J5UmVjb3JkBAlvbGRBbW91bnQIb2xkU3RhcnQJbmV3QW1vdW50CG5ld1N0YXJ0CQC5CQIJAMwIAgIMJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQgFCWxhc3RCbG9jawZoZWlnaHQJAMwIAgkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQCkAwEFCW9sZEFtb3VudAkAzAgCCQCkAwEFCG9sZFN0YXJ0CQDMCAIJAKQDAQUJbmV3QW1vdW50CQDMCAIJAKQDAQUIbmV3U3RhcnQFA25pbAUJc2VwYXJhdG9yARhmb3JtYXRDbGFpbUhpc3RvcnlSZWNvcmQCBHVzZXIOY2xhaW1lZFJld2FyZHMJALkJAgkAzAgCAgglcyVkJWQlcwkAzAgCBQR1c2VyCQDMCAIJAKQDAQgFCWxhc3RCbG9jawZoZWlnaHQJAMwIAgkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCBQ5jbGFpbWVkUmV3YXJkcwUDbmlsBQlzZXBhcmF0b3IBEkhpc3RvcnlSZWNvcmRFbnRyeQcEdHlwZQt1c2VyQWRkcmVzcwR0eElkCW9sZEFtb3VudAhvbGRTdGFydAluZXdBbW91bnQIbmV3U3RhcnQJAQtTdHJpbmdFbnRyeQIJARBrZXlIaXN0b3J5UmVjb3JkAwUEdHlwZQULdXNlckFkZHJlc3MFBHR4SWQJARNmb3JtYXRIaXN0b3J5UmVjb3JkBAUJb2xkQW1vdW50BQhvbGRTdGFydAUJbmV3QW1vdW50BQhuZXdTdGFydAERQ2xhaW1IaXN0b3J5RW50cnkDC3VzZXJBZGRyZXNzBHR4SWQOY2xhaW1lZFJld2FyZHMJAQtTdHJpbmdFbnRyeQIJARBrZXlIaXN0b3J5UmVjb3JkAwIFY2xhaW0FC3VzZXJBZGRyZXNzBQR0eElkCQEYZm9ybWF0Q2xhaW1IaXN0b3J5UmVjb3JkAgkApQgBBQt1c2VyQWRkcmVzcwUOY2xhaW1lZFJld2FyZHMBC1N0YXRzUmVzdWx0Aw50b3RhbExvY2tlZEluYwxsb2NrQ291bnRJbmMNdXNlcnNDb3VudEluYwQKbG9ja3NDb3VudAkBDGdldEludE9yWmVybwEJARJrZXlTdGF0c0xvY2tzQ291bnQABAp1c2Vyc0NvdW50CQEMZ2V0SW50T3JaZXJvAQkBEmtleVN0YXRzVXNlcnNDb3VudAAEC3RvdGFsQW1vdW50CQEMZ2V0SW50T3JaZXJvAQkBF2tleUxvY2tQYXJhbVRvdGFsQW1vdW50AAQOdG90YWxBbW91bnROZXcJAGQCBQt0b3RhbEFtb3VudAUOdG90YWxMb2NrZWRJbmMJAJUKAwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleVN0YXRzTG9ja3NDb3VudAAJAGQCBQpsb2Nrc0NvdW50BQxsb2NrQ291bnRJbmMJAMwIAgkBDEludGVnZXJFbnRyeQIJARJrZXlTdGF0c1VzZXJzQ291bnQACQBkAgUKdXNlcnNDb3VudAUNdXNlcnNDb3VudEluYwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBF2tleUxvY2tQYXJhbVRvdGFsQW1vdW50AAUOdG90YWxBbW91bnROZXcFA25pbAULdG90YWxBbW91bnQFDnRvdGFsQW1vdW50TmV3AQ9Mb2NrUGFyYW1zRW50cnkDC3VzZXJBZGRyZXNzBmFtb3VudAVzdGFydAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleUxvY2tQYXJhbVVzZXJBbW91bnQBBQt1c2VyQWRkcmVzcwUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5TG9ja1BhcmFtU3RhcnRCbG9jawEFC3VzZXJBZGRyZXNzBQVzdGFydAUDbmlsAQ9nZXRQYXJhbXNPckZhaWwACQCVCgMJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUQbmV1dHJpbm9Db250cmFjdAkBDGtleUJvbmRBc3NldAAJAQxnZXRJbnRPckZhaWwBCQEQa2V5TWluTG9ja0Ftb3VudAAJAQxnZXRJbnRPckZhaWwBCQELa2V5SGFsZkxpZmUAAQxpc0FjdGl2ZVVzZXIBC3VzZXJBZGRyZXNzCQBmAgkBDGdldEludE9yRWxzZQIJARZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50AQULdXNlckFkZHJlc3MAAAAAARNnZXRVc2VyUGFyYW1zT3JVbml0AQt1c2VyQWRkcmVzcwMJAQxpc0FjdGl2ZVVzZXIBBQt1c2VyQWRkcmVzcwkAlQoDBwkBDGdldEludE9yRmFpbAEJARZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50AQULdXNlckFkZHJlc3MJAQxnZXRJbnRPckZhaWwBCQEWa2V5TG9ja1BhcmFtU3RhcnRCbG9jawEFC3VzZXJBZGRyZXNzBQR1bml0ARNnZXRVc2VyUGFyYW1zT3JGYWlsAQt1c2VyQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQETZ2V0VXNlclBhcmFtc09yVW5pdAEFC3VzZXJBZGRyZXNzCQCsAgIJAKwCAgIFVXNlciAJAKUIAQULdXNlckFkZHJlc3MCDyBpcyBub3QgZGVmaW5lZAASc3VwcG9ydGVkQXNzZXRzU3RyCQEMZ2V0U3RyT3JFbHNlAgkBGGtleVN1cHBvcnRlZFJld2FyZEFzc2V0cwACAAATc3VwcG9ydGVkQXNzZXRzTGlzdAkAtQkCBRJzdXBwb3J0ZWRBc3NldHNTdHICAV8BCmNhbGNSZXdhcmQFC3VzZXJBZGRyZXNzB2Fzc2V0SWQNc3Rha2VkQW1vdW50WA5kZXBvc2l0TnVtVXNlcg5kZXBvc2l0TnVtTGFzdAQXcmV3YXJkUGVyTnNidFN1bUxhc3RLRVkJARVrZXlSZXdhcmRQZXJOc2J0U3VtQXQCBQ5kZXBvc2l0TnVtTGFzdAUHYXNzZXRJZAQKc3VtTGFzdFgxOAkApwMBCQEMZ2V0U3RyT3JFbHNlAgkBFWtleVJld2FyZFBlck5zYnRTdW1BdAIFDmRlcG9zaXROdW1MYXN0BQdhc3NldElkAgEwBApzdW1Vc2VyWDE4CQCnAwEJAQxnZXRTdHJPckVsc2UCCQEVa2V5UmV3YXJkUGVyTnNidFN1bUF0AgUOZGVwb3NpdE51bVVzZXIFB2Fzc2V0SWQCATAEEXJld2FyZER5bmFtaWNQYXJ0CQCgAwEJALwCAwkAuAICBQpzdW1MYXN0WDE4BQpzdW1Vc2VyWDE4BQ1zdGFrZWRBbW91bnRYBQdNVUxUWDE4BBNyZXdhcmRDYWNoZWRQYXJ0S0VZCQEJa2V5UmV3YXJkAgULdXNlckFkZHJlc3MFB2Fzc2V0SWQEEHJld2FyZENhY2hlZFBhcnQJAQxnZXRJbnRPckVsc2UCBRNyZXdhcmRDYWNoZWRQYXJ0S0VZAAAJAJYKBAkAZAIFEHJld2FyZENhY2hlZFBhcnQFEXJld2FyZER5bmFtaWNQYXJ0BRByZXdhcmRDYWNoZWRQYXJ0BRFyZXdhcmREeW5hbWljUGFydAUTcmV3YXJkQ2FjaGVkUGFydEtFWQEMdG9TdGFydE9mRGF5AQl0aW1lc3RhbXAJAGgCCQBpAgUJdGltZXN0YW1wBQlEQVlNSUxMSVMFCURBWU1JTExJUwETZmluZEVsZW1lbnRQb3NpdGlvbgMDc3JjB2VsZW1lbnQDc2VwBAxlbGVtZW50U3RhcnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAswkCBQNzcmMFB2VsZW1lbnQJAKwCAgkArAICCQCsAgICFnRoZXJlIGlzIG5vIHN1YnN0cmluZyAFB2VsZW1lbnQCBCBpbiAFA3NyYwMJAAACBQxlbGVtZW50U3RhcnQAAAAABARsZWZ0CQCvAgIFA3NyYwUMZWxlbWVudFN0YXJ0CQBlAgkAkAMBCQC1CQIFBGxlZnQFA3NlcAABABNEZXBvc2l0VG90YWxzUFJFRklYAiQlZCVkJWQlZCVkJWQlZCVkJWQlZCVkJWQlZCVkJWQlZCVkJWQAEWRlZmF1bHRUb3RhbHNEQVRBCQCsAgIFE0RlcG9zaXRUb3RhbHNQUkVGSVgCNl9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMF9fMAEHcGFkTGlzdAECaW4ECGN1cnJTaXplCQBlAgkAkAMBBQJpbgABCgEKbGlzdFBhZGRlcgIDYWNjA2lkeAMJAGYCBQhjdXJyU2l6ZQUDaWR4BQNhY2MJAM0IAgUDYWNjAgEwCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4JAMwIAgAPCQDMCAIAEAkAzAgCABEFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFAmluCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpsaXN0UGFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxOAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgEJcGFkU3RyaW5nAQJpbgQIY3VyclNpemUJAGUCCQCQAwEJALwJAgUCaW4FA1NFUAABCgEJc3RyUGFkZGVyAgNhY2MDaWR4AwkAZgIFCGN1cnJTaXplBQNpZHgFA2FjYwkArAICBQNhY2MCA19fMAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOCQDMCAIADwkAzAgCABAJAMwIAgARBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQJpbgoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJc3RyUGFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxOAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgENUmV3YXJkRW50cmllcwMJaXNOZXdVc2VyC3VzZXJBZGRyZXNzDHN0YWtlZEFtb3VudAQNc3Rha2VkQW1vdW50WAkAtgIBBQxzdGFrZWRBbW91bnQEG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQkBG2tleVVzZXJSZXdhcmRGcm9tRGVwb3NpdE51bQEFC3VzZXJBZGRyZXNzBA5kZXBvc2l0TnVtVXNlcgkBDGdldEludE9yRWxzZQIFG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQD///////////8BBA5kZXBvc2l0TnVtTGFzdAkBDGdldEludE9yRWxzZQIJARFrZXlEZXBvc2l0TnVtTGFzdAAA////////////AQoBG2ZvckVhY2hBc3NldENhY2hlVXNlclJld2FyZAIFYWNjdW0FYXNzZXQEDSR0MDEwMjYwMTAzOTUJAQpjYWxjUmV3YXJkBQULdXNlckFkZHJlc3MFBWFzc2V0BQ1zdGFrZWRBbW91bnRYBQ5kZXBvc2l0TnVtVXNlcgUOZGVwb3NpdE51bUxhc3QEC3Jld2FyZFRvdGFsCAUNJHQwMTAyNjAxMDM5NQJfMQQGY2FjaGVkCAUNJHQwMTAyNjAxMDM5NQJfMgQHZHluYW1pYwgFDSR0MDEwMjYwMTAzOTUCXzMEE3Jld2FyZENhY2hlZFBhcnRLRVkIBQ0kdDAxMDI2MDEwMzk1Al80CQDNCAIFBWFjY3VtCQEMSW50ZWdlckVudHJ5AgUTcmV3YXJkQ2FjaGVkUGFydEtFWQULcmV3YXJkVG90YWwDAwkAAAIFDmRlcG9zaXROdW1MYXN0AP///////////wEJAAACBQ5kZXBvc2l0TnVtVXNlcgD///////////8BBwUDbmlsAwMJAAACBQ5kZXBvc2l0TnVtTGFzdAD///////////8BCQBmAgUOZGVwb3NpdE51bVVzZXIA////////////AQcJAAIBAi9pbnZhbGlkIGRlcG9zaXROdW1MYXN0IGFuZCBkZXBvc2l0TnVtVXNlciBzdGF0ZQMDCQBmAgUOZGVwb3NpdE51bUxhc3QA////////////AQkAZwIFDmRlcG9zaXROdW1Vc2VyAP///////////wEHAwUJaXNOZXdVc2VyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRt1c2VyUmV3YXJkRnJvbURlcG9zaXROdW1LRVkFDmRlcG9zaXROdW1MYXN0BQNuaWwJAM0IAgoAAiRsBRNzdXBwb3J0ZWRBc3NldHNMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARtmb3JFYWNoQXNzZXRDYWNoZVVzZXJSZXdhcmQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDkJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkJAQxJbnRlZ2VyRW50cnkCBRt1c2VyUmV3YXJkRnJvbURlcG9zaXROdW1LRVkFDmRlcG9zaXROdW1MYXN0CQACAQkArAICCQCsAgIJAKwCAgIkdW5jb3ZlcmVkIGNvbmRpdGlvbjogZGVwb3NpdE51bUxhc3Q9CQCkAwEFDmRlcG9zaXROdW1MYXN0AhAgZGVwb3NpdE51bVVzZXI9CQCkAwEFDmRlcG9zaXROdW1Vc2VyASJJbmNyZW1lbnROb3REaXN0cmlidXRlZFJld2FyZEVudHJ5AgN0a24JYW1vdW50SW5jBBdub3REaXN0cmlidXRlZFJld2FyZEtFWQkBF2tleU5vdERpc3RyaWJ1dGVkUmV3YXJkAQUDdGtuBBRub3REaXN0cmlidXRlZFJld2FyZAkBDGdldEludE9yRWxzZQIFF25vdERpc3RyaWJ1dGVkUmV3YXJkS0VZAAAJAQxJbnRlZ2VyRW50cnkCBRdub3REaXN0cmlidXRlZFJld2FyZEtFWQkAZAIFFG5vdERpc3RyaWJ1dGVkUmV3YXJkBQlhbW91bnRJbmMBC2NvbW1vbkNsYWltAgt1c2VyQWRkcmVzcwFpBA51c2VyQWRkcmVzc1N0cgkApQgBBQt1c2VyQWRkcmVzcwMJAGYCCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhlwYXltZW50cyBhcmUgbm90IGFjY2VwdGVkBA0kdDAxMzMzNjEzNDQxCQELdmFsdWVPckVsc2UCCQETZ2V0VXNlclBhcmFtc09yVW5pdAEFC3VzZXJBZGRyZXNzCQCVCgMGAAAAAAQJaXNOZXdVc2VyCAUNJHQwMTMzMzYxMzQ0MQJfMQQMc3Rha2VkQW1vdW50CAUNJHQwMTMzMzYxMzQ0MQJfMgQMc3Rha2luZ1N0YXJ0CAUNJHQwMTMzMzYxMzQ0MQJfMwQNc3Rha2VkQW1vdW50WAkAtgIBBQxzdGFrZWRBbW91bnQEG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQkBG2tleVVzZXJSZXdhcmRGcm9tRGVwb3NpdE51bQEFDnVzZXJBZGRyZXNzU3RyBA5kZXBvc2l0TnVtVXNlcgkBDGdldEludE9yRWxzZQIFG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQD///////////8BBA5kZXBvc2l0TnVtTGFzdAkBDGdldEludE9yRWxzZQIJARFrZXlEZXBvc2l0TnVtTGFzdAAA////////////AQoBH2ZvckVhY2hBc3NldENhbGNVbmNsYWltZWRSZXdhcmQCBWFjY3VtBWFzc2V0BA0kdDAxMzgxMjEzOTUwCQEKY2FsY1Jld2FyZAUFDnVzZXJBZGRyZXNzU3RyBQVhc3NldAUNc3Rha2VkQW1vdW50WAUOZGVwb3NpdE51bVVzZXIFDmRlcG9zaXROdW1MYXN0BAtyZXdhcmRUb3RhbAgFDSR0MDEzODEyMTM5NTACXzEEBmNhY2hlZAgFDSR0MDEzODEyMTM5NTACXzIEB2R5bmFtaWMIBQ0kdDAxMzgxMjEzOTUwAl8zBBNyZXdhcmRDYWNoZWRQYXJ0S0VZCAUNJHQwMTM4MTIxMzk1MAJfNAQKY2xhaW1lZEtFWQkBCmtleUNsYWltZWQCBQ51c2VyQWRkcmVzc1N0cgUFYXNzZXQEDSR0MDE0MDEwMTQwNDcFBWFjY3VtBARkYXRhCAUNJHQwMTQwMTAxNDA0NwJfMQQRY2xhaW1lZEFtdEJ5QXNzZXQIBQ0kdDAxNDAxMDE0MDQ3Al8yBAduZXdQYXJ0CQC5CQIJAMwIAgUFYXNzZXQJAMwIAgkApAMBBQtyZXdhcmRUb3RhbAUDbmlsAgE6BBRjbGFpbWVkQW10QnlBc3NldE5ldwkAuQkCCQDMCAIFEWNsYWltZWRBbXRCeUFzc2V0CQDMCAIFB25ld1BhcnQFA25pbAIBXwMJAGcCAAAFC3Jld2FyZFRvdGFsCQCUCgIFBGRhdGEFFGNsYWltZWRBbXRCeUFzc2V0TmV3CQCUCgIJAM0IAgkAzQgCCQDNCAIFBGRhdGEJAQ5TY3JpcHRUcmFuc2ZlcgMFC3VzZXJBZGRyZXNzBQtyZXdhcmRUb3RhbAkBC3RvQXNzZXRWZWN0AQUFYXNzZXQJAQxJbnRlZ2VyRW50cnkCBQpjbGFpbWVkS0VZCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQpjbGFpbWVkS0VZAAAFC3Jld2FyZFRvdGFsCQEMSW50ZWdlckVudHJ5AgUTcmV3YXJkQ2FjaGVkUGFydEtFWQAABRRjbGFpbWVkQW10QnlBc3NldE5ldwQNJHQwMTQ1MDcxNDYyMAoAAiRsBRNzdXBwb3J0ZWRBc3NldHNMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwCAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEfZm9yRWFjaEFzc2V0Q2FsY1VuY2xhaW1lZFJld2FyZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQQJdHJhbnNmZXJzCAUNJHQwMTQ1MDcxNDYyMAJfMQQXY2xhaW1lZEFtdEJ5QXNzZXRSZXN1bHQIBQ0kdDAxNDUwNzE0NjIwAl8yAwkAZwIAAAkAkAMBBQl0cmFuc2ZlcnMJAJQKAgUDbmlsAAAJAJQKAgkAzQgCCQDNCAIFCXRyYW5zZmVycwkBDEludGVnZXJFbnRyeQIFG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQUOZGVwb3NpdE51bUxhc3QJARFDbGFpbUhpc3RvcnlFbnRyeQMFC3VzZXJBZGRyZXNzCAUBaQ10cmFuc2FjdGlvbklkCQCwAgIFF2NsYWltZWRBbXRCeUFzc2V0UmVzdWx0AAEJAJADAQUJdHJhbnNmZXJzCQFpAQ1jb25zdHJ1Y3RvclYxBRduZXV0cmlub0NvbnRyYWN0QWRkcmVzcxNtYXRoQ29udHJhY3RBZGRyZXNzDW1pbkxvY2tBbW91bnQIaGFsZkxpZmUVc3VwcG9ydGVkUmV3YXJkQXNzZXRzAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGmtleU5ldXRyaW5vQ29udHJhY3RBZGRyZXNzAAUXbmV1dHJpbm9Db250cmFjdEFkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFmtleU1hdGhDb250cmFjdEFkZHJlc3MABRNtYXRoQ29udHJhY3RBZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEQa2V5TWluTG9ja0Ftb3VudAAFDW1pbkxvY2tBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQtrZXlIYWxmTGlmZQAFCGhhbGZMaWZlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARhrZXlTdXBwb3J0ZWRSZXdhcmRBc3NldHMABRVzdXBwb3J0ZWRSZXdhcmRBc3NldHMFA25pbAFpAQVzdGFrZQAEDSR0MDE1NDcxMTU1MzMJAQ9nZXRQYXJhbXNPckZhaWwABAtib25kQXNzZXRJZAgFDSR0MDE1NDcxMTU1MzMCXzEEDW1pbkxvY2tBbW91bnQIBQ0kdDAxNTQ3MTE1NTMzAl8yBAhoYWxmTGlmZQgFDSR0MDE1NDcxMTU1MzMCXzMDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhVJbnZhbGlkIHBheW1lbnRzIHNpemUEB3BheW1lbnQJAJEDAggFAWkIcGF5bWVudHMAAAQGYW1vdW50CAUHcGF5bWVudAZhbW91bnQEE2ludmFsaWRBc3NldE1lc3NhZ2UJAKwCAgkArAICAg9JbnZhbGlkIGFzc2V0LiAJANgEAQULYm9uZEFzc2V0SWQCDCBpcyBleHBlY3RlZAQHYXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUHcGF5bWVudAdhc3NldElkBRNpbnZhbGlkQXNzZXRNZXNzYWdlAwkBAiE9AgUHYXNzZXRJZAULYm9uZEFzc2V0SWQJAAIBBRNpbnZhbGlkQXNzZXRNZXNzYWdlBAt1c2VyQWRkcmVzcwgFAWkGY2FsbGVyBA51c2VyQWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIEDSR0MDE2MDc1MTYxODIJAQt2YWx1ZU9yRWxzZQIJARNnZXRVc2VyUGFyYW1zT3JVbml0AQULdXNlckFkZHJlc3MJAJUKAwYAAAD///////////8BBAlpc05ld1VzZXIIBQ0kdDAxNjA3NTE2MTgyAl8xBApsb2NrQW1vdW50CAUNJHQwMTYwNzUxNjE4MgJfMgQPbG9ja1N0YXJ0SGVpZ2h0CAUNJHQwMTYwNzUxNjE4MgJfMwQMbWVyZ2VkQW1vdW50AwUJaXNOZXdVc2VyBQZhbW91bnQJAGQCBQZhbW91bnQFCmxvY2tBbW91bnQEEW1lcmdlZFN0YXJ0SGVpZ2h0AwUJaXNOZXdVc2VyBQZoZWlnaHQJAQVhc0ludAEJAPwHBAUMbWF0aENvbnRyYWN0AhNtZXJnZVN0YWtlc1JFQURPTkxZCQDMCAIFBmFtb3VudAkAzAgCBQZoZWlnaHQJAMwIAgUKbG9ja0Ftb3VudAkAzAgCBQ9sb2NrU3RhcnRIZWlnaHQJAMwIAgUIaGFsZkxpZmUFA25pbAUDbmlsAwkAZgIFDW1pbkxvY2tBbW91bnQFDG1lcmdlZEFtb3VudAkAAgEJAKwCAgITTWluIGxvY2sgYW1vdW50IGlzIAkApAMBBQ1taW5Mb2NrQW1vdW50BA0kdDAxNjU0MzE2NjQ1CQELU3RhdHNSZXN1bHQDBQZhbW91bnQAAQMFCWlzTmV3VXNlcgABAAAEDHN0YXRzRW50cmllcwgFDSR0MDE2NTQzMTY2NDUCXzEEC3RvdGFsU3Rha2VkCAUNJHQwMTY1NDMxNjY0NQJfMgQOdG90YWxTdGFrZWROZXcIBQ0kdDAxNjU0MzE2NjQ1Al8zCQDOCAIJAM4IAgkAzggCCQDMCAIJARJIaXN0b3J5UmVjb3JkRW50cnkHAgVzdGFrZQULdXNlckFkZHJlc3MIBQFpDXRyYW5zYWN0aW9uSWQFCmxvY2tBbW91bnQFD2xvY2tTdGFydEhlaWdodAUMbWVyZ2VkQW1vdW50BRFtZXJnZWRTdGFydEhlaWdodAUDbmlsCQENUmV3YXJkRW50cmllcwMFCWlzTmV3VXNlcgUOdXNlckFkZHJlc3NTdHIFCmxvY2tBbW91bnQJAQ9Mb2NrUGFyYW1zRW50cnkDBQt1c2VyQWRkcmVzcwUMbWVyZ2VkQW1vdW50BRFtZXJnZWRTdGFydEhlaWdodAUMc3RhdHNFbnRyaWVzAWkBB3Vuc3Rha2UBBmFtb3VudAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECI3Vuc3Rha2UgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50BAt1c2VyQWRkcmVzcwgFAWkGY2FsbGVyBA51c2VyQWRkcmVzc1N0cgkApQgBBQt1c2VyQWRkcmVzcwQNJHQwMTcxMzExNzE5MwkBD2dldFBhcmFtc09yRmFpbAAEC2JvbmRBc3NldElkCAUNJHQwMTcxMzExNzE5MwJfMQQNbWluTG9ja0Ftb3VudAgFDSR0MDE3MTMxMTcxOTMCXzIECGhhbGZMaWZlCAUNJHQwMTcxMzExNzE5MwJfMwQNJHQwMTcxOTYxNzI3MAkBE2dldFVzZXJQYXJhbXNPckZhaWwBBQt1c2VyQWRkcmVzcwQJaXNOZXdVc2VyCAUNJHQwMTcxOTYxNzI3MAJfMQQKbG9ja0Ftb3VudAgFDSR0MDE3MTk2MTcyNzACXzIECWxvY2tTdGFydAgFDSR0MDE3MTk2MTcyNzACXzMDCQBnAgAABQpsb2NrQW1vdW50CQACAQISTm90aGluZyB0byB1bnN0YWtlAwkAZgIFBmFtb3VudAUKbG9ja0Ftb3VudAkAAgEJAKwCAgkArAICCQCsAgICClJlcXVlc3RlZCAJAKQDAQUGYW1vdW50AhIsIGJ1dCBzdGFrZWQgb25seSAJAKQDAQUKbG9ja0Ftb3VudAQBdAgJAQV2YWx1ZQEJAO0HAQUGaGVpZ2h0CXRpbWVzdGFtcAQLcmVsZWFzZVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgULZ292Q29udHJhY3QJARdrZXlVc2VyR25zYnRSZWxlYXNlVGltZQEFDnVzZXJBZGRyZXNzU3RyAAADCQBnAgULcmVsZWFzZVRpbWUFAXQJAAIBCQCsAgICO1lvdXIgZ05zYnQgYXJlIHRha2luZyBwYXJ0IGluIHZvdGluZywgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFC3JlbGVhc2VUaW1lBA9jb21pc3Npb25BbW91bnQJAQVhc0ludAEJAPwHBAUMbWF0aENvbnRyYWN0AiFnZXRVbnN0YWtlQ29taXNzaW9uQW1vdW50UkVBRE9OTFkJAMwIAgUGYW1vdW50CQDMCAIFCWxvY2tTdGFydAkAzAgCBQhoYWxmTGlmZQUDbmlsBQNuaWwEDSR0MDE3OTExMTgwNjUJAQtTdGF0c1Jlc3VsdAMJAQEtAQUGYW1vdW50AwkAAAIFBmFtb3VudAUKbG9ja0Ftb3VudAD///////////8BAAADCQAAAgUGYW1vdW50BQpsb2NrQW1vdW50AP///////////wEAAAQMc3RhdHNFbnRyaWVzCAUNJHQwMTc5MTExODA2NQJfMQQLdG90YWxTdGFrZWQIBQ0kdDAxNzkxMTE4MDY1Al8yBA50b3RhbFN0YWtlZE5ldwgFDSR0MDE3OTExMTgwNjUCXzMJAM4IAgkAzggCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwULdXNlckFkZHJlc3MJAGUCBQZhbW91bnQFD2NvbWlzc2lvbkFtb3VudAULYm9uZEFzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPYXVjdGlvbkNvbnRyYWN0BQ9jb21pc3Npb25BbW91bnQFC2JvbmRBc3NldElkCQDMCAIJARJIaXN0b3J5UmVjb3JkRW50cnkHAgd1bnN0YWtlBQt1c2VyQWRkcmVzcwgFAWkNdHJhbnNhY3Rpb25JZAUKbG9ja0Ftb3VudAUJbG9ja1N0YXJ0CQBlAgUKbG9ja0Ftb3VudAUGYW1vdW50BQlsb2NrU3RhcnQFA25pbAkBDVJld2FyZEVudHJpZXMDBwUOdXNlckFkZHJlc3NTdHIFCmxvY2tBbW91bnQJAQ9Mb2NrUGFyYW1zRW50cnkDBQt1c2VyQWRkcmVzcwkAZQIFCmxvY2tBbW91bnQFBmFtb3VudAUJbG9ja1N0YXJ0BQxzdGF0c0VudHJpZXMBaQEHZGVwb3NpdAAEC3RvdGFsU3Rha2VkCQEMZ2V0SW50T3JFbHNlAgkBF2tleUxvY2tQYXJhbVRvdGFsQW1vdW50AAAAAwkAZgIAAAULdG90YWxTdGFrZWQJAAIBAhtUT0RPOiBjYXNlIGlzIG5vdCBzdXBwb3J0ZWQEEWRlcG9zaXROdW1MYXN0S0VZCQERa2V5RGVwb3NpdE51bUxhc3QABA5kZXBvc2l0TnVtTGFzdAkBDGdldEludE9yRWxzZQIFEWRlcG9zaXROdW1MYXN0S0VZAP///////////wEEDWRlcG9zaXROdW1OZXcJAGQCBQ5kZXBvc2l0TnVtTGFzdAABBAl0b3RhbHNLRVkJARhrZXlTdGF0c0RlcG9zaXRBbXRUb3RhbHMABAhieURheUtFWQkBF2tleVN0YXRzRGVwb3NpdEFtdEJ5RGF5AQkBDHRvU3RhcnRPZkRheQEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBApjdXJyVG90YWxzCQEHcGFkTGlzdAEJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQl0b3RhbHNLRVkFEWRlZmF1bHRUb3RhbHNEQVRBBQNTRVAKAQNkZXACA2FjYwNwbXQEBmFtb3VudAgFA3BtdAZhbW91bnQEDXBtdEFzc2V0SWRTdHIJANgEAQkBC3ZhbHVlT3JFbHNlAggFA3BtdAdhc3NldElkBQdXQVZFU0lEAwkBASEBCQEIY29udGFpbnMCBRJzdXBwb3J0ZWRBc3NldHNTdHIFDXBtdEFzc2V0SWRTdHIJAAIBCQCsAgIJAKwCAgUSc3VwcG9ydGVkQXNzZXRzU3RyAhEgZG9lc24ndCBjb250YWluIAUNcG10QXNzZXRJZFN0cgMJAAACBQt0b3RhbFN0YWtlZAAACQCWCgQJAM0IAggFA2FjYwJfMQkBIkluY3JlbWVudE5vdERpc3RyaWJ1dGVkUmV3YXJkRW50cnkCBQ1wbXRBc3NldElkU3RyBQZhbW91bnQJAM0IAggFA2FjYwJfMgUNcG10QXNzZXRJZFN0cgkAzQgCCAUDYWNjAl8zCQC2AgEAAAkAzQgCCAUDYWNjAl80BQZhbW91bnQEEHJld2FyZFBlck5zYnRYMTgJALwCAwkAtgIBBQZhbW91bnQFB01VTFRYMTgJALYCAQULdG90YWxTdGFrZWQJAJYKBAgFA2FjYwJfMQkAzQgCCAUDYWNjAl8yBQ1wbXRBc3NldElkU3RyCQDNCAIIBQNhY2MCXzMFEHJld2FyZFBlck5zYnRYMTgJAM0IAggFA2FjYwJfNAUGYW1vdW50BApwbXRzUmVzdWx0CgACJGwIBQFpCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEBQNuaWwFA25pbAUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA2RlcAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgoBGXJlZnJlc2hSZXdhcmRVcGRhdGVUb3RhbHMCBWFjY3VtCW5leHRBc3NldAQBawgFBWFjY3VtAl8zBApzdW1MYXN0U3RyCQEMZ2V0U3RyT3JFbHNlAgkBFWtleVJld2FyZFBlck5zYnRTdW1BdAIFDmRlcG9zaXROdW1MYXN0BQluZXh0QXNzZXQCATAEA2lkeAkAzwgCCAUKcG10c1Jlc3VsdAJfMgUJbmV4dEFzc2V0BANzdW0DCQEJaXNEZWZpbmVkAQUDaWR4BAFqCQEFdmFsdWUBBQNpZHgECnN0YXRzRGVsdGEJAJEDAggFCnBtdHNSZXN1bHQCXzQFAWoJAJQKAgkApgMBCQC3AgIJAKcDAQUKc3VtTGFzdFN0cgkAkQMCCAUKcG10c1Jlc3VsdAJfMwUBagkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmN1cnJUb3RhbHMJAGQCBQFrAAEFCnN0YXRzRGVsdGEJAJQKAgUKc3VtTGFzdFN0cgkAkQMCBQpjdXJyVG90YWxzCQBkAgUBawABCQCVCgMJAM0IAggFBWFjY3VtAl8xCQELU3RyaW5nRW50cnkCCQEVa2V5UmV3YXJkUGVyTnNidFN1bUF0AgUNZGVwb3NpdE51bU5ldwUJbmV4dEFzc2V0CAUDc3VtAl8xCQCsAgIJAKwCAggFBWFjY3VtAl8yBQNTRVAIBQNzdW0CXzIJAGQCBQFrAAEEDGFzc2V0c1Jlc3VsdAoAAiRsBRNzdXBwb3J0ZWRBc3NldHNMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFE0RlcG9zaXRUb3RhbHNQUkVGSVgAAAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEZcmVmcmVzaFJld2FyZFVwZGF0ZVRvdGFscwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOQkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQQGdG90YWxzCQEJcGFkU3RyaW5nAQgFDGFzc2V0c1Jlc3VsdAJfMgkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQpwbXRzUmVzdWx0Al8xCAUMYXNzZXRzUmVzdWx0Al8xCQEMSW50ZWdlckVudHJ5AgURZGVwb3NpdE51bUxhc3RLRVkFDWRlcG9zaXROdW1OZXcJAQtTdHJpbmdFbnRyeQIFCXRvdGFsc0tFWQUGdG90YWxzCQELU3RyaW5nRW50cnkCBQhieURheUtFWQUGdG90YWxzBQ1kZXBvc2l0TnVtTmV3AWkBDGNsYWltUmV3YXJkcwAJAQtjb21tb25DbGFpbQIIBQFpBmNhbGxlcgUBaQFpARpjbGFpbVJld2FyZHNCeU9yaWdpbkNhbGxlcgAJAQtjb21tb25DbGFpbQIIBQFpDG9yaWdpbkNhbGxlcgUBaQFpARh1bmNsYWltZWRSZXdhcmRzUkVBRE9OTFkBDnVzZXJBZGRyZXNzU3RyCgEWZm9yRWFjaEFzc2V0WmVyb1Jld2FyZAIFYWNjdW0FYXNzZXQJAKwCAgkArAICBQVhY2N1bQkAuQkCCQDMCAIFBWFzc2V0CQDMCAICATAJAMwIAgIBMAUDbmlsAgE6AgFfBBJ1bmNsYWltZWRSZXdhcmRTdHIDCQAAAgUOdXNlckFkZHJlc3NTdHICAAoAAiRsBRNzdXBwb3J0ZWRBc3NldHNMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAIACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARZmb3JFYWNoQXNzZXRaZXJvUmV3YXJkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA5CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJBAt1c2VyQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUOdXNlckFkZHJlc3NTdHIEDSR0MDIxOTE0MjIwMTkJAQt2YWx1ZU9yRWxzZQIJARNnZXRVc2VyUGFyYW1zT3JVbml0AQULdXNlckFkZHJlc3MJAJUKAwYAAAAABAlpc05ld1VzZXIIBQ0kdDAyMTkxNDIyMDE5Al8xBAxzdGFrZWRBbW91bnQIBQ0kdDAyMTkxNDIyMDE5Al8yBAxzdGFraW5nU3RhcnQIBQ0kdDAyMTkxNDIyMDE5Al8zBA1zdGFrZWRBbW91bnRYCQC2AgEFDHN0YWtlZEFtb3VudAQbdXNlclJld2FyZEZyb21EZXBvc2l0TnVtS0VZCQEba2V5VXNlclJld2FyZEZyb21EZXBvc2l0TnVtAQUOdXNlckFkZHJlc3NTdHIEDmRlcG9zaXROdW1Vc2VyCQEMZ2V0SW50T3JFbHNlAgUbdXNlclJld2FyZEZyb21EZXBvc2l0TnVtS0VZAP///////////wEEDmRlcG9zaXROdW1MYXN0CQEMZ2V0SW50T3JFbHNlAgkBEWtleURlcG9zaXROdW1MYXN0AAD///////////8BCgEfZm9yRWFjaEFzc2V0Q2FsY1VuY2xhaW1lZFJld2FyZAIFYWNjdW0FYXNzZXQEDSR0MDIyMzY1MjI1MDMJAQpjYWxjUmV3YXJkBQUOdXNlckFkZHJlc3NTdHIFBWFzc2V0BQ1zdGFrZWRBbW91bnRYBQ5kZXBvc2l0TnVtVXNlcgUOZGVwb3NpdE51bUxhc3QEC3Jld2FyZFRvdGFsCAUNJHQwMjIzNjUyMjUwMwJfMQQGY2FjaGVkCAUNJHQwMjIzNjUyMjUwMwJfMgQHZHluYW1pYwgFDSR0MDIyMzY1MjI1MDMCXzMEE3Jld2FyZENhY2hlZFBhcnRLRVkIBQ0kdDAyMjM2NTIyNTAzAl80BAdjbGFpbWVkCQELdmFsdWVPckVsc2UCCQCfCAEJAQprZXlDbGFpbWVkAgUOdXNlckFkZHJlc3NTdHIFBWFzc2V0AAAJAKwCAgkArAICBQVhY2N1bQkAuQkCCQDMCAIFBWFzc2V0CQDMCAIJAKQDAQULcmV3YXJkVG90YWwJAMwIAgkApAMBBQdjbGFpbWVkBQNuaWwCAToCAV8KAAIkbAUTc3VwcG9ydGVkQXNzZXRzTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEfZm9yRWFjaEFzc2V0Q2FsY1VuY2xhaW1lZFJld2FyZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQkAlAoCBQNuaWwJALMCAgUSdW5jbGFpbWVkUmV3YXJkU3RyAAEBaQEYbnNidFVuc3Rha2luZ1NZU1JFQURPTkxZAhV1c2VyQWRkcmVzc1N0ck9yRW1wdHkLdW5zdGFrZUFtdFAEC3Jlc3VsdEFycmF5AwkAAAIFFXVzZXJBZGRyZXNzU3RyT3JFbXB0eQIACQDMCAIAAAkAzAgCAAAJAMwIAgAACQDMCAIAAAUDbmlsBAt1c2VyQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUVdXNlckFkZHJlc3NTdHJPckVtcHR5BAdjZmdEQVRBCQEPZ2V0UGFyYW1zT3JGYWlsAAQLbnNidEFzc2V0SWQIBQdjZmdEQVRBAl8xBA1taW5Mb2NrQW1vdW50CAUHY2ZnREFUQQJfMgQIaGFsZkxpZmUIBQdjZmdEQVRBAl8zBAh1c2VyREFUQQkBC3ZhbHVlT3JFbHNlAgkBE2dldFVzZXJQYXJhbXNPclVuaXQBBQt1c2VyQWRkcmVzcwkAlQoDBgAAAAAECWlzTmV3VXNlcggFCHVzZXJEQVRBAl8xBAxzdGFrZWRBbW91bnQIBQh1c2VyREFUQQJfMgQJbG9ja1N0YXJ0CAUIdXNlckRBVEECXzMECnVuc3Rha2VBbXQDCQBmAgULdW5zdGFrZUFtdFAFDHN0YWtlZEFtb3VudAUMc3Rha2VkQW1vdW50BQt1bnN0YWtlQW10UAQPc3Rha2VkQW1vdW50TkVXCQBlAgUMc3Rha2VkQW1vdW50BQp1bnN0YWtlQW10BA9jb21pc3Npb25BbW91bnQDCQAAAgUKdW5zdGFrZUFtdAAAAAAJAQVhc0ludAEJAPwHBAUMbWF0aENvbnRyYWN0AiFnZXRVbnN0YWtlQ29taXNzaW9uQW1vdW50UkVBRE9OTFkJAMwIAgUKdW5zdGFrZUFtdAkAzAgCBQlsb2NrU3RhcnQJAMwIAgUIaGFsZkxpZmUFA25pbAUDbmlsBA1yZWNlaXZlQW1vdW50CQBlAgUKdW5zdGFrZUFtdAUPY29taXNzaW9uQW1vdW50CQDMCAIFDHN0YWtlZEFtb3VudAkAzAgCBQ9zdGFrZWRBbW91bnRORVcJAMwIAgUNcmVjZWl2ZUFtb3VudAkAzAgCBQ9jb21pc3Npb25BbW91bnQFA25pbAkAlAoCBQNuaWwFC3Jlc3VsdEFycmF5AWkBFm5zYnRTdGFraW5nU1lTUkVBRE9OTFkCDnVzZXJBZGRyZXNzU3RyCG5zYnREaWZmBAx0b3RhbE5zYnRBbXQJAQxnZXRJbnRPckVsc2UCCQEXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQAAAADCQAAAgUOdXNlckFkZHJlc3NTdHICAAkAlAoCBQNuaWwJAMwIAgAACQDMCAIFDHRvdGFsTnNidEFtdAkAzAgCAAAFA25pbAQLdXNlckFkZHJlc3MJAQ90b0FkZHJlc3NPckZhaWwBBQ51c2VyQWRkcmVzc1N0cgQNJHQwMjQxODEyNDI4NQkBC3ZhbHVlT3JFbHNlAgkBE2dldFVzZXJQYXJhbXNPclVuaXQBBQt1c2VyQWRkcmVzcwkAlQoDBgAAAAAECWlzTmV3VXNlcggFDSR0MDI0MTgxMjQyODUCXzEEC3VzZXJOc2J0QW10CAUNJHQwMjQxODEyNDI4NQJfMgQMc3Rha2luZ1N0YXJ0CAUNJHQwMjQxODEyNDI4NQJfMwkAlAoCBQNuaWwJAMwIAgULdXNlck5zYnRBbXQJAMwIAgUMdG90YWxOc2J0QW10CQDMCAIFDHN0YWtpbmdTdGFydAUDbmlsAQJ0eAEGdmVyaWZ5AAQTcHViS2V5QWRtaW5zTGlzdFN0cgkAuQkCCQDMCAICLEV4dEVFSzE5bm1LajltQ3BuV3l2RUVKRllBVExNY1ZFTXZvaGhVSGt5SE5tCQDMCAICLEV2NXB5NUZmQlFYOWNacFlLbmZRclRCNDlCeWY4UW1wWldlRFZSaW00eVY3CQDMCAICLERVdXVMalh1OThuQndaYzdmcXdDVGp0QTNublJ3Z1Ria01TcjVTVTJObURSCQDMCAICLERVdXVMalh1OThuQndaYzdmcXdDVGp0QTNublJ3Z1Ria01TcjVTVTJObURSBQNuaWwFA1NFUAQQcHViS2V5QWRtaW5zTGlzdAkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD2NvbnRyb2xDb250cmFjdAIMJXNfX211bHRpc2lnBRNwdWJLZXlBZG1pbnNMaXN0U3RyBQNTRVAEBWNvdW50CQBkAgkAZAIJAGQCAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkA2QQBCQCRAwIFEHB1YktleUFkbWluc0xpc3QAAAABAAADCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABCQDZBAEJAJEDAgUQcHViS2V5QWRtaW5zTGlzdAABAAEAAAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIJANkEAQkAkQMCBRBwdWJLZXlBZG1pbnNMaXN0AAIAAQAAAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAwkA2QQBCQCRAwIFEHB1YktleUFkbWluc0xpc3QAAwACAAAJAGcCBQVjb3VudAADPesTaA==", "height": 2509346, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 32JFwnf7GdUEubdXkiaZAtk2NbjLGeR7u62jk65CWptU Next: E9gAqUH1Z8mkHbm3WA7PuJ6LcJtfqf8YPasCL2gwpmhC Diff:
Old | New | Differences | |
---|---|---|---|
21 | 21 | ||
22 | 22 | let j = 86400000 | |
23 | 23 | ||
24 | - | let k = | |
24 | + | let k = 9 | |
25 | 25 | ||
26 | - | let l = | |
26 | + | let l = 1 | |
27 | 27 | ||
28 | - | let m = | |
28 | + | let m = 2 | |
29 | 29 | ||
30 | - | let n = | |
30 | + | let n = 3 | |
31 | 31 | ||
32 | - | let o = | |
32 | + | let o = 4 | |
33 | 33 | ||
34 | - | let p = | |
34 | + | let p = 5 | |
35 | 35 | ||
36 | - | let q = | |
36 | + | let q = 6 | |
37 | 37 | ||
38 | - | let r = | |
38 | + | let r = 7 | |
39 | 39 | ||
40 | - | let s = | |
40 | + | let s = 8 | |
41 | 41 | ||
42 | - | let t = | |
42 | + | let t = 9 | |
43 | 43 | ||
44 | - | func u (v,w) = valueOrErrorMessage(getString(v, w), (((("mandatory " + toString(v)) + ".") + w) + " is not defined")) | |
44 | + | let u = 13 | |
45 | + | ||
46 | + | func v (w,x) = valueOrErrorMessage(getString(w, x), (((("mandatory " + toString(w)) + ".") + x) + " is not defined")) | |
45 | 47 | ||
46 | 48 | ||
47 | - | func | |
49 | + | func y () = "%s%s__config__controlAddress" | |
48 | 50 | ||
49 | 51 | ||
50 | - | func | |
52 | + | func z () = "%s__controlConfig" | |
51 | 53 | ||
52 | 54 | ||
53 | - | func | |
55 | + | func A (B) = split_4C(v(B, z()), b) | |
54 | 56 | ||
55 | 57 | ||
56 | - | func | |
58 | + | func C (D,E) = valueOrErrorMessage(addressFromString(D[E]), ("Control cfg doesn't contain address at index " + toString(E))) | |
57 | 59 | ||
58 | 60 | ||
59 | - | let | |
61 | + | let F = addressFromStringValue(valueOrElse(getString(this, y()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx")) | |
60 | 62 | ||
61 | - | let | |
63 | + | let D = A(F) | |
62 | 64 | ||
63 | - | let | |
65 | + | let G = C(D, o) | |
64 | 66 | ||
65 | - | let | |
67 | + | let H = C(D, l) | |
66 | 68 | ||
67 | - | let | |
69 | + | let I = C(D, m) | |
68 | 70 | ||
69 | - | let | |
71 | + | let J = C(D, u) | |
70 | 72 | ||
71 | - | func | |
73 | + | func K () = "bond_asset_id" | |
72 | 74 | ||
73 | 75 | ||
74 | - | func | |
76 | + | func L (M) = ("%s%s_userGnsbtReleaseTime__" + M) | |
75 | 77 | ||
76 | 78 | ||
77 | - | func | |
79 | + | func N () = "%s__neutrinoContractAddress" | |
78 | 80 | ||
79 | 81 | ||
80 | - | func | |
82 | + | func O () = "%s__mathContract" | |
81 | 83 | ||
82 | 84 | ||
83 | - | func | |
85 | + | func P () = "%s__minLockAmount" | |
84 | 86 | ||
85 | 87 | ||
86 | - | func | |
88 | + | func Q () = "%s__halfLife" | |
87 | 89 | ||
88 | 90 | ||
89 | - | func | |
91 | + | func R (S) = makeString(["%s%s%s", "paramByUser", toString(S), "amount"], a) | |
90 | 92 | ||
91 | 93 | ||
92 | - | func | |
94 | + | func T (S) = makeString(["%s%s%s", "paramByUser", toString(S), "start"], a) | |
93 | 95 | ||
94 | 96 | ||
95 | - | func | |
97 | + | func U (V,S,W) = makeString(["%s%s%s%s", "history", V, toString(S), toBase58String(W)], a) | |
96 | 98 | ||
97 | 99 | ||
98 | - | func | |
100 | + | func X () = makeString(["%s%s", "stats", "activeTotalLocked"], a) | |
99 | 101 | ||
100 | 102 | ||
101 | - | func | |
103 | + | func Y () = makeString(["%s%s", "stats", "locksCount"], a) | |
102 | 104 | ||
103 | 105 | ||
104 | - | func | |
106 | + | func Z () = makeString(["%s%s", "stats", "activeUsersCount"], a) | |
105 | 107 | ||
106 | 108 | ||
107 | - | func | |
109 | + | func aa (ab) = makeString(["%s%s%d", "stats", "depositAmtByDay", toString(ab)], a) | |
108 | 110 | ||
109 | 111 | ||
110 | - | func | |
112 | + | func ac () = makeString(["%s%s%d", "stats", "depositAmtTotals"], a) | |
111 | 113 | ||
112 | 114 | ||
113 | - | func | |
115 | + | func ad () = "%s__nextPeriod" | |
114 | 116 | ||
115 | 117 | ||
116 | - | func | |
118 | + | func ae () = "supportedRewardAssets" | |
117 | 119 | ||
118 | 120 | ||
119 | - | func | |
121 | + | func af () = makeString(["%s%s%s", "dep", "lastNum"], a) | |
120 | 122 | ||
121 | 123 | ||
122 | - | func | |
124 | + | func ag (S) = makeString(["%s%s%s", "userRwdFromDepNum", S], a) | |
123 | 125 | ||
124 | 126 | ||
125 | - | func | |
127 | + | func ah (ai,aj) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(ai), aj], a) | |
126 | 128 | ||
127 | 129 | ||
128 | - | func | |
130 | + | func ak (S,aj) = makeString(["%s%s%s", "rwd", S, aj], a) | |
129 | 131 | ||
130 | 132 | ||
131 | - | func | |
133 | + | func al (S,aj) = makeString(["%s%s%s", "clm", S, aj], a) | |
132 | 134 | ||
133 | 135 | ||
134 | - | func | |
136 | + | func am (aj) = makeString(["%s%s", "notDistributed", aj], a) | |
135 | 137 | ||
136 | 138 | ||
137 | - | func | |
139 | + | func an (ao,ap) = fraction(toBigInt(ao), g, ap) | |
138 | 140 | ||
139 | 141 | ||
140 | - | func | |
142 | + | func aq (x) = valueOrElse(getInteger(this, x), 0) | |
141 | 143 | ||
142 | 144 | ||
143 | - | func | |
145 | + | func ar (x,as) = valueOrElse(getInteger(this, x), as) | |
144 | 146 | ||
145 | 147 | ||
146 | - | func | |
148 | + | func at (x) = valueOrErrorMessage(getInteger(this, x), (("Mandatory this." + x) + " is not defined")) | |
147 | 149 | ||
148 | 150 | ||
149 | - | func | |
151 | + | func au (x,as) = valueOrElse(getString(this, x), as) | |
150 | 152 | ||
151 | 153 | ||
152 | - | func | |
154 | + | func av (aw) = valueOrErrorMessage(addressFromString(aw), ("couldn't parse passed addressStr=" + aw)) | |
153 | 155 | ||
154 | 156 | ||
155 | - | func | |
157 | + | func ax (ay) = if ((ay == h)) | |
156 | 158 | then unit | |
157 | - | else fromBase58String( | |
159 | + | else fromBase58String(ay) | |
158 | 160 | ||
159 | 161 | ||
160 | - | func | |
161 | - | let | |
162 | - | if ($isInstanceOf( | |
162 | + | func az (aA) = { | |
163 | + | let aB = aA | |
164 | + | if ($isInstanceOf(aB, "Int")) | |
163 | 165 | then { | |
164 | - | let | |
165 | - | | |
166 | + | let aC = aB | |
167 | + | aC | |
166 | 168 | } | |
167 | 169 | else throw("fail to cast into Int") | |
168 | 170 | } | |
169 | 171 | ||
170 | 172 | ||
171 | - | func | |
173 | + | func aD (aE,aF,aG,aH) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aE), toString(aF), toString(aG), toString(aH)], a) | |
172 | 174 | ||
173 | 175 | ||
174 | - | func | |
176 | + | func aI (aJ,aK) = makeString(["%s%d%d%s", aJ, toString(lastBlock.height), toString(lastBlock.timestamp), aK], a) | |
175 | 177 | ||
176 | 178 | ||
177 | - | func | |
179 | + | func aL (V,S,W,aE,aF,aG,aH) = StringEntry(U(V, S, W), aD(aE, aF, aG, aH)) | |
178 | 180 | ||
179 | 181 | ||
180 | - | func | |
182 | + | func aM (S,W,aK) = StringEntry(U("claim", S, W), aI(toString(S), aK)) | |
181 | 183 | ||
182 | 184 | ||
183 | - | func | |
184 | - | let | |
185 | - | let | |
186 | - | let | |
187 | - | let | |
188 | - | $Tuple3([ | |
185 | + | func aN (aO,aP,aQ) = { | |
186 | + | let aR = aq(Y()) | |
187 | + | let aS = aq(Z()) | |
188 | + | let aT = aq(X()) | |
189 | + | let aU = (aT + aO) | |
190 | + | $Tuple3([IntegerEntry(Y(), (aR + aP)), IntegerEntry(Z(), (aS + aQ)), IntegerEntry(X(), aU)], aT, aU) | |
189 | 191 | } | |
190 | 192 | ||
191 | 193 | ||
192 | - | func | |
194 | + | func aV (S,aW,aX) = [IntegerEntry(R(S), aW), IntegerEntry(T(S), aX)] | |
193 | 195 | ||
194 | 196 | ||
195 | - | func | |
197 | + | func aY () = $Tuple3(fromBase58String(getStringValue(H, K())), at(P()), at(Q())) | |
196 | 198 | ||
197 | 199 | ||
198 | - | func | |
200 | + | func aZ (S) = (ar(R(S), 0) > 0) | |
199 | 201 | ||
200 | 202 | ||
201 | - | func | |
202 | - | then $Tuple3(false, | |
203 | + | func ba (S) = if (aZ(S)) | |
204 | + | then $Tuple3(false, at(R(S)), at(T(S))) | |
203 | 205 | else unit | |
204 | 206 | ||
205 | 207 | ||
206 | - | func | |
208 | + | func bb (S) = valueOrErrorMessage(ba(S), (("User " + toString(S)) + " is not defined")) | |
207 | 209 | ||
208 | 210 | ||
209 | - | let | |
211 | + | let bc = au(ae(), "") | |
210 | 212 | ||
211 | - | let | |
213 | + | let bd = split(bc, "_") | |
212 | 214 | ||
213 | - | func | |
214 | - | let | |
215 | - | let | |
216 | - | let | |
217 | - | let | |
218 | - | let | |
219 | - | let | |
220 | - | $Tuple4(( | |
215 | + | func be (S,bf,bg,bh,bi) = { | |
216 | + | let bj = ah(bi, bf) | |
217 | + | let bk = parseBigIntValue(au(ah(bi, bf), "0")) | |
218 | + | let bl = parseBigIntValue(au(ah(bh, bf), "0")) | |
219 | + | let bm = toInt(fraction((bk - bl), bg, g)) | |
220 | + | let bn = ak(S, bf) | |
221 | + | let bo = ar(bn, 0) | |
222 | + | $Tuple4((bo + bm), bo, bm, bn) | |
221 | 223 | } | |
222 | 224 | ||
223 | 225 | ||
224 | - | func | |
226 | + | func bp (ab) = ((ab / j) * j) | |
225 | 227 | ||
226 | 228 | ||
227 | - | func | |
228 | - | let | |
229 | - | if (( | |
229 | + | func bq (br,bs,bt) = { | |
230 | + | let bu = valueOrErrorMessage(indexOf(br, bs), ((("there is no substring " + bs) + " in ") + br)) | |
231 | + | if ((bu == 0)) | |
230 | 232 | then 0 | |
231 | 233 | else { | |
232 | - | let | |
233 | - | (size(split( | |
234 | + | let bv = take(br, bu) | |
235 | + | (size(split(bv, bt)) - 1) | |
234 | 236 | } | |
235 | 237 | } | |
236 | 238 | ||
237 | 239 | ||
238 | - | let | |
240 | + | let bw = "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d" | |
239 | 241 | ||
240 | - | let | |
242 | + | let bx = (bw + "__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0") | |
241 | 243 | ||
242 | - | func bx (by,R,bz) = { | |
243 | - | let bf = toBigInt(bz) | |
244 | - | let bA = af(R) | |
245 | - | let bg = aq(bA, -1) | |
246 | - | let bh = aq(ae(), -1) | |
247 | - | func bB (bC,bD) = { | |
248 | - | let bE = bd(R, bD, bf, bg, bh) | |
249 | - | let bF = bE._1 | |
250 | - | let bG = bE._2 | |
251 | - | let bH = bE._3 | |
252 | - | let bm = bE._4 | |
253 | - | (bC :+ IntegerEntry(bm, bF)) | |
254 | - | } | |
244 | + | func by (bz) = { | |
245 | + | let bA = (size(bz) - 1) | |
246 | + | func bB (bC,E) = if ((bA > E)) | |
247 | + | then bC | |
248 | + | else (bC :+ "0") | |
255 | 249 | ||
256 | - | if (if ((bh == -1)) | |
257 | - | then (bg == -1) | |
258 | - | else false) | |
259 | - | then nil | |
260 | - | else if (if ((bh == -1)) | |
261 | - | then (bg > -1) | |
262 | - | else false) | |
263 | - | then throw("invalid depositNumLast and depositNumUser state") | |
264 | - | else if (if ((bh > -1)) | |
265 | - | then (bg >= -1) | |
266 | - | else false) | |
267 | - | then if (by) | |
268 | - | then [IntegerEntry(bA, bh)] | |
269 | - | else ({ | |
270 | - | let bI = bc | |
271 | - | let bJ = size(bI) | |
272 | - | let bK = nil | |
273 | - | func bL (bM,bN) = if ((bN >= bJ)) | |
274 | - | then bM | |
275 | - | else bB(bM, bI[bN]) | |
250 | + | let bD = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] | |
251 | + | let bE = size(bD) | |
252 | + | let bF = bz | |
253 | + | func bG (bH,bI) = if ((bI >= bE)) | |
254 | + | then bH | |
255 | + | else bB(bH, bD[bI]) | |
276 | 256 | ||
277 | - | ||
278 | - | ||
279 | - | ||
257 | + | func bJ (bH,bI) = if ((bI >= bE)) | |
258 | + | then bH | |
259 | + | else throw("List size exceeds 18") | |
280 | 260 | ||
281 | - | bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9) | |
282 | - | } :+ IntegerEntry(bA, bh)) | |
283 | - | else throw(((("uncovered condition: depositNumLast=" + toString(bh)) + " depositNumUser=") + toString(bg))) | |
261 | + | bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18) | |
284 | 262 | } | |
285 | 263 | ||
286 | 264 | ||
287 | - | func bP (ai,bQ) = { | |
288 | - | let bR = al(ai) | |
289 | - | let bS = aq(bR, 0) | |
290 | - | IntegerEntry(bR, (bS + bQ)) | |
265 | + | func bK (bz) = { | |
266 | + | let bA = (size(split_4C(bz, b)) - 1) | |
267 | + | func bL (bC,E) = if ((bA > E)) | |
268 | + | then bC | |
269 | + | else (bC + "__0") | |
270 | + | ||
271 | + | let bD = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] | |
272 | + | let bE = size(bD) | |
273 | + | let bF = bz | |
274 | + | func bG (bH,bI) = if ((bI >= bE)) | |
275 | + | then bH | |
276 | + | else bL(bH, bD[bI]) | |
277 | + | ||
278 | + | func bJ (bH,bI) = if ((bI >= bE)) | |
279 | + | then bH | |
280 | + | else throw("List size exceeds 18") | |
281 | + | ||
282 | + | bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18) | |
291 | 283 | } | |
292 | 284 | ||
293 | 285 | ||
294 | - | func bT (R,bU) = { | |
295 | - | let bV = toString(R) | |
296 | - | if ((size(bU.payments) > 0)) | |
286 | + | func bM (bN,S,bO) = { | |
287 | + | let bg = toBigInt(bO) | |
288 | + | let bP = ag(S) | |
289 | + | let bh = ar(bP, -1) | |
290 | + | let bi = ar(af(), -1) | |
291 | + | func bQ (bR,bS) = { | |
292 | + | let bT = be(S, bS, bg, bh, bi) | |
293 | + | let bU = bT._1 | |
294 | + | let bV = bT._2 | |
295 | + | let bW = bT._3 | |
296 | + | let bn = bT._4 | |
297 | + | (bR :+ IntegerEntry(bn, bU)) | |
298 | + | } | |
299 | + | ||
300 | + | if (if ((bi == -1)) | |
301 | + | then (bh == -1) | |
302 | + | else false) | |
303 | + | then nil | |
304 | + | else if (if ((bi == -1)) | |
305 | + | then (bh > -1) | |
306 | + | else false) | |
307 | + | then throw("invalid depositNumLast and depositNumUser state") | |
308 | + | else if (if ((bi > -1)) | |
309 | + | then (bh >= -1) | |
310 | + | else false) | |
311 | + | then if (bN) | |
312 | + | then [IntegerEntry(bP, bi)] | |
313 | + | else ({ | |
314 | + | let bD = bd | |
315 | + | let bE = size(bD) | |
316 | + | let bF = nil | |
317 | + | func bG (bH,bI) = if ((bI >= bE)) | |
318 | + | then bH | |
319 | + | else bQ(bH, bD[bI]) | |
320 | + | ||
321 | + | func bJ (bH,bI) = if ((bI >= bE)) | |
322 | + | then bH | |
323 | + | else throw("List size exceeds 9") | |
324 | + | ||
325 | + | bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9) | |
326 | + | } :+ IntegerEntry(bP, bi)) | |
327 | + | else throw(((("uncovered condition: depositNumLast=" + toString(bi)) + " depositNumUser=") + toString(bh))) | |
328 | + | } | |
329 | + | ||
330 | + | ||
331 | + | func bX (aj,bY) = { | |
332 | + | let bZ = am(aj) | |
333 | + | let ca = ar(bZ, 0) | |
334 | + | IntegerEntry(bZ, (ca + bY)) | |
335 | + | } | |
336 | + | ||
337 | + | ||
338 | + | func cb (S,cc) = { | |
339 | + | let cd = toString(S) | |
340 | + | if ((size(cc.payments) > 0)) | |
297 | 341 | then throw("payments are not accepted") | |
298 | 342 | else { | |
299 | - | let | |
300 | - | let | |
301 | - | let | |
302 | - | let | |
303 | - | let | |
304 | - | let | |
305 | - | let | |
306 | - | let | |
307 | - | func | |
308 | - | let | |
309 | - | let | |
310 | - | let | |
311 | - | let | |
312 | - | let | |
313 | - | let | |
314 | - | let | |
315 | - | let | |
316 | - | let | |
317 | - | let | |
318 | - | let | |
319 | - | if ((0 >= | |
320 | - | then $Tuple2( | |
321 | - | else $Tuple2(((( | |
343 | + | let ce = valueOrElse(ba(S), $Tuple3(true, 0, 0)) | |
344 | + | let bN = ce._1 | |
345 | + | let bO = ce._2 | |
346 | + | let cf = ce._3 | |
347 | + | let bg = toBigInt(bO) | |
348 | + | let bP = ag(cd) | |
349 | + | let bh = ar(bP, -1) | |
350 | + | let bi = ar(af(), -1) | |
351 | + | func cg (bR,bS) = { | |
352 | + | let ch = be(cd, bS, bg, bh, bi) | |
353 | + | let bU = ch._1 | |
354 | + | let bV = ch._2 | |
355 | + | let bW = ch._3 | |
356 | + | let bn = ch._4 | |
357 | + | let ci = al(cd, bS) | |
358 | + | let cj = bR | |
359 | + | let ck = cj._1 | |
360 | + | let cl = cj._2 | |
361 | + | let cm = makeString([bS, toString(bU)], ":") | |
362 | + | let cn = makeString([cl, cm], "_") | |
363 | + | if ((0 >= bU)) | |
364 | + | then $Tuple2(ck, cn) | |
365 | + | else $Tuple2((((ck :+ ScriptTransfer(S, bU, ax(bS))) :+ IntegerEntry(ci, (valueOrElse(getInteger(ci), 0) + bU))) :+ IntegerEntry(bn, 0)), cn) | |
322 | 366 | } | |
323 | 367 | ||
324 | - | let | |
325 | - | let | |
326 | - | let | |
327 | - | let | |
328 | - | func | |
329 | - | then | |
330 | - | else | |
368 | + | let co = { | |
369 | + | let bD = bd | |
370 | + | let bE = size(bD) | |
371 | + | let bF = $Tuple2(nil, "") | |
372 | + | func bG (bH,bI) = if ((bI >= bE)) | |
373 | + | then bH | |
374 | + | else cg(bH, bD[bI]) | |
331 | 375 | ||
332 | - | func | |
333 | - | then | |
376 | + | func bJ (bH,bI) = if ((bI >= bE)) | |
377 | + | then bH | |
334 | 378 | else throw("List size exceeds 9") | |
335 | 379 | ||
336 | - | | |
380 | + | bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9) | |
337 | 381 | } | |
338 | - | let | |
339 | - | let | |
340 | - | if ((0 >= size( | |
382 | + | let cp = co._1 | |
383 | + | let cq = co._2 | |
384 | + | if ((0 >= size(cp))) | |
341 | 385 | then $Tuple2(nil, 0) | |
342 | - | else $Tuple2((( | |
386 | + | else $Tuple2(((cp :+ IntegerEntry(bP, bi)) :+ aM(S, cc.transactionId, drop(cq, 1))), size(cp)) | |
343 | 387 | } | |
344 | 388 | } | |
345 | 389 | ||
346 | 390 | ||
347 | - | @Callable( | |
348 | - | func constructorV1 ( | |
391 | + | @Callable(cc) | |
392 | + | func constructorV1 (cr,cs,ct,cu,cv) = if ((cc.caller != this)) | |
349 | 393 | then throw("Permission denied") | |
350 | - | else [StringEntry( | |
394 | + | else [StringEntry(N(), cr), StringEntry(O(), cs), IntegerEntry(P(), ct), IntegerEntry(Q(), cu), StringEntry(ae(), cv)] | |
351 | 395 | ||
352 | 396 | ||
353 | 397 | ||
354 | - | @Callable( | |
398 | + | @Callable(cc) | |
355 | 399 | func stake () = { | |
356 | - | let | |
357 | - | let | |
358 | - | let | |
359 | - | let | |
360 | - | if ((size( | |
400 | + | let cw = aY() | |
401 | + | let cx = cw._1 | |
402 | + | let ct = cw._2 | |
403 | + | let cu = cw._3 | |
404 | + | if ((size(cc.payments) != 1)) | |
361 | 405 | then throw("Invalid payments size") | |
362 | 406 | else { | |
363 | - | let | |
364 | - | let | |
365 | - | let | |
366 | - | let | |
367 | - | if (( | |
368 | - | then throw( | |
407 | + | let cy = cc.payments[0] | |
408 | + | let aW = cy.amount | |
409 | + | let cz = (("Invalid asset. " + toBase58String(cx)) + " is expected") | |
410 | + | let bf = valueOrErrorMessage(cy.assetId, cz) | |
411 | + | if ((bf != cx)) | |
412 | + | then throw(cz) | |
369 | 413 | else { | |
370 | - | let | |
371 | - | let | |
372 | - | let | |
373 | - | let | |
374 | - | let | |
375 | - | let | |
376 | - | let | |
377 | - | then | |
378 | - | else ( | |
379 | - | let | |
414 | + | let S = cc.caller | |
415 | + | let cd = toString(cc.caller) | |
416 | + | let cA = valueOrElse(ba(S), $Tuple3(true, 0, -1)) | |
417 | + | let bN = cA._1 | |
418 | + | let cB = cA._2 | |
419 | + | let cC = cA._3 | |
420 | + | let cD = if (bN) | |
421 | + | then aW | |
422 | + | else (aW + cB) | |
423 | + | let cE = if (bN) | |
380 | 424 | then height | |
381 | - | else | |
382 | - | if (( | |
383 | - | then throw(("Min lock amount is " + toString( | |
425 | + | else az(invoke(G, "mergeStakesREADONLY", [aW, height, cB, cC, cu], nil)) | |
426 | + | if ((ct > cD)) | |
427 | + | then throw(("Min lock amount is " + toString(ct))) | |
384 | 428 | else { | |
385 | - | let | |
429 | + | let cF = aN(aW, 1, if (bN) | |
386 | 430 | then 1 | |
387 | 431 | else 0) | |
388 | - | let | |
389 | - | let | |
390 | - | let | |
391 | - | ((([ | |
432 | + | let cG = cF._1 | |
433 | + | let cH = cF._2 | |
434 | + | let cI = cF._3 | |
435 | + | ((([aL("stake", S, cc.transactionId, cB, cC, cD, cE)] ++ bM(bN, cd, cB)) ++ aV(S, cD, cE)) ++ cG) | |
392 | 436 | } | |
393 | 437 | } | |
394 | 438 | } | |
396 | 440 | ||
397 | 441 | ||
398 | 442 | ||
399 | - | @Callable( | |
400 | - | func unstake ( | |
443 | + | @Callable(cc) | |
444 | + | func unstake (aW) = if ((size(cc.payments) != 0)) | |
401 | 445 | then throw("unstake doesn't require any payment") | |
402 | 446 | else { | |
403 | - | let | |
404 | - | let | |
405 | - | let | |
406 | - | let | |
407 | - | let | |
408 | - | let | |
409 | - | let | |
410 | - | let | |
411 | - | let | |
412 | - | let | |
413 | - | if ((0 >= | |
447 | + | let S = cc.caller | |
448 | + | let cd = toString(S) | |
449 | + | let cJ = aY() | |
450 | + | let cx = cJ._1 | |
451 | + | let ct = cJ._2 | |
452 | + | let cu = cJ._3 | |
453 | + | let cK = bb(S) | |
454 | + | let bN = cK._1 | |
455 | + | let cB = cK._2 | |
456 | + | let cL = cK._3 | |
457 | + | if ((0 >= cB)) | |
414 | 458 | then throw("Nothing to unstake") | |
415 | - | else if (( | |
416 | - | then throw(((("Requested " + toString( | |
459 | + | else if ((aW > cB)) | |
460 | + | then throw(((("Requested " + toString(aW)) + ", but staked only ") + toString(cB))) | |
417 | 461 | else { | |
418 | - | let | |
419 | - | let | |
420 | - | if (( | |
421 | - | then throw(("Your gNsbt are taking part in voting, cannot unstake until " + toString( | |
462 | + | let cM = value(blockInfoByHeight(height)).timestamp | |
463 | + | let cN = valueOrElse(getInteger(J, L(cd)), 0) | |
464 | + | if ((cN >= cM)) | |
465 | + | then throw(("Your gNsbt are taking part in voting, cannot unstake until " + toString(cN))) | |
422 | 466 | else { | |
423 | - | let | |
424 | - | let | |
467 | + | let cO = az(invoke(G, "getUnstakeComissionAmountREADONLY", [aW, cL, cu], nil)) | |
468 | + | let cP = aN(-(aW), if ((aW == cB)) | |
425 | 469 | then -1 | |
426 | - | else 0, if (( | |
470 | + | else 0, if ((aW == cB)) | |
427 | 471 | then -1 | |
428 | 472 | else 0) | |
429 | - | let | |
430 | - | let | |
431 | - | let | |
432 | - | ((([ScriptTransfer( | |
473 | + | let cG = cP._1 | |
474 | + | let cH = cP._2 | |
475 | + | let cI = cP._3 | |
476 | + | ((([ScriptTransfer(S, (aW - cO), cx), ScriptTransfer(I, cO, cx), aL("unstake", S, cc.transactionId, cB, cL, (cB - aW), cL)] ++ bM(false, cd, cB)) ++ aV(S, (cB - aW), cL)) ++ cG) | |
433 | 477 | } | |
434 | 478 | } | |
435 | 479 | } | |
436 | 480 | ||
437 | 481 | ||
438 | 482 | ||
439 | - | @Callable( | |
483 | + | @Callable(cc) | |
440 | 484 | func deposit () = { | |
441 | - | let | |
442 | - | if ((0 > | |
485 | + | let cH = ar(X(), 0) | |
486 | + | if ((0 > cH)) | |
443 | 487 | then throw("TODO: case is not supported") | |
444 | 488 | else { | |
445 | - | let cI = ae() | |
446 | - | let bh = aq(cI, -1) | |
447 | - | let cJ = (bh + 1) | |
448 | - | let cK = ab() | |
449 | - | let cL = Z(bo(lastBlock.timestamp)) | |
450 | - | let cM = split(valueOrElse(getString(cK), bw), b) | |
451 | - | let cN = split(valueOrElse(getString(cL), bw), b) | |
452 | - | func cO (cP,cQ) = { | |
453 | - | let aV = cQ.amount | |
454 | - | let cR = toBase58String(valueOrElse(cQ.assetId, i)) | |
455 | - | if (!(contains(bb, cR))) | |
456 | - | then throw(((bb + " doesn't contain ") + cR)) | |
457 | - | else if ((cz == 0)) | |
458 | - | then $Tuple4((cP._1 :+ bP(cR, aV)), (cP._2 :+ cR), (cP._3 :+ toBigInt(0)), (cP._4 :+ aV)) | |
489 | + | let cQ = af() | |
490 | + | let bi = ar(cQ, -1) | |
491 | + | let cR = (bi + 1) | |
492 | + | let cS = ac() | |
493 | + | let cT = aa(bp(lastBlock.timestamp)) | |
494 | + | let cU = by(split(valueOrElse(getString(cS), bx), b)) | |
495 | + | func cV (bC,cW) = { | |
496 | + | let aW = cW.amount | |
497 | + | let cX = toBase58String(valueOrElse(cW.assetId, i)) | |
498 | + | if (!(contains(bc, cX))) | |
499 | + | then throw(((bc + " doesn't contain ") + cX)) | |
500 | + | else if ((cH == 0)) | |
501 | + | then $Tuple4((bC._1 :+ bX(cX, aW)), (bC._2 :+ cX), (bC._3 :+ toBigInt(0)), (bC._4 :+ aW)) | |
459 | 502 | else { | |
460 | - | let | |
461 | - | $Tuple4( | |
503 | + | let cY = fraction(toBigInt(aW), g, toBigInt(cH)) | |
504 | + | $Tuple4(bC._1, (bC._2 :+ cX), (bC._3 :+ cY), (bC._4 :+ aW)) | |
462 | 505 | } | |
463 | 506 | } | |
464 | 507 | ||
465 | - | let | |
466 | - | let | |
467 | - | let | |
468 | - | let | |
469 | - | func | |
470 | - | then | |
471 | - | else | |
508 | + | let cZ = { | |
509 | + | let bD = cc.payments | |
510 | + | let bE = size(bD) | |
511 | + | let bF = $Tuple4(nil, nil, nil, nil) | |
512 | + | func bG (bH,bI) = if ((bI >= bE)) | |
513 | + | then bH | |
514 | + | else cV(bH, bD[bI]) | |
472 | 515 | ||
473 | - | func | |
474 | - | then | |
516 | + | func bJ (bH,bI) = if ((bI >= bE)) | |
517 | + | then bH | |
475 | 518 | else throw("List size exceeds 10") | |
476 | 519 | ||
477 | - | | |
520 | + | bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
478 | 521 | } | |
479 | - | func | |
480 | - | let | |
481 | - | let | |
482 | - | let | |
483 | - | let | |
522 | + | func da (bR,db) = { | |
523 | + | let dc = bR._3 | |
524 | + | let dd = au(ah(bi, db), "0") | |
525 | + | let E = indexOf(cZ._2, db) | |
526 | + | let de = if (isDefined(E)) | |
484 | 527 | then { | |
485 | - | let | |
486 | - | let | |
487 | - | $ | |
528 | + | let df = value(E) | |
529 | + | let dg = cZ._4[df] | |
530 | + | $Tuple2(toString((parseBigIntValue(dd) + cZ._3[df])), toString((parseIntValue(cU[(dc + 1)]) + dg))) | |
488 | 531 | } | |
489 | - | else $ | |
490 | - | $ | |
532 | + | else $Tuple2(dd, cU[(dc + 1)]) | |
533 | + | $Tuple3((bR._1 :+ StringEntry(ah(cR, db), de._1)), ((bR._2 + b) + de._2), (dc + 1)) | |
491 | 534 | } | |
492 | 535 | ||
493 | - | let | |
494 | - | let | |
495 | - | let | |
496 | - | let | |
497 | - | func | |
498 | - | then | |
499 | - | else | |
536 | + | let dh = { | |
537 | + | let bD = bd | |
538 | + | let bE = size(bD) | |
539 | + | let bF = $Tuple3(nil, bw, 0) | |
540 | + | func di (bH,bI) = if ((bI >= bE)) | |
541 | + | then bH | |
542 | + | else da(bH, bD[bI]) | |
500 | 543 | ||
501 | - | func | |
502 | - | then | |
544 | + | func dj (bH,bI) = if ((bI >= bE)) | |
545 | + | then bH | |
503 | 546 | else throw("List size exceeds 9") | |
504 | 547 | ||
505 | - | | |
548 | + | dj(di(di(di(di(di(di(di(di(di(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9) | |
506 | 549 | } | |
507 | - | $Tuple2(((((cT._1 ++ db._1) :+ IntegerEntry(cI, cJ)) :+ StringEntry(cK, db._2)) :+ StringEntry(cL, db._3)), cJ) | |
550 | + | let dk = bK(dh._2) | |
551 | + | $Tuple2(((((cZ._1 ++ dh._1) :+ IntegerEntry(cQ, cR)) :+ StringEntry(cS, dk)) :+ StringEntry(cT, dk)), cR) | |
508 | 552 | } | |
509 | 553 | } | |
510 | 554 | ||
511 | 555 | ||
512 | 556 | ||
513 | - | @Callable( | |
514 | - | func claimRewards () = | |
557 | + | @Callable(cc) | |
558 | + | func claimRewards () = cb(cc.caller, cc) | |
515 | 559 | ||
516 | 560 | ||
517 | 561 | ||
518 | - | @Callable( | |
519 | - | func claimRewardsByOriginCaller () = | |
562 | + | @Callable(cc) | |
563 | + | func claimRewardsByOriginCaller () = cb(cc.originCaller, cc) | |
520 | 564 | ||
521 | 565 | ||
522 | 566 | ||
523 | - | @Callable( | |
524 | - | func unclaimedRewardsREADONLY ( | |
525 | - | func | |
567 | + | @Callable(cc) | |
568 | + | func unclaimedRewardsREADONLY (cd) = { | |
569 | + | func dl (bR,bS) = ((bR + makeString([bS, "0", "0"], ":")) + "_") | |
526 | 570 | ||
527 | - | let | |
571 | + | let dm = if ((cd == "")) | |
528 | 572 | then { | |
529 | - | let | |
530 | - | let | |
531 | - | let | |
532 | - | func | |
533 | - | then | |
534 | - | else | |
573 | + | let bD = bd | |
574 | + | let bE = size(bD) | |
575 | + | let bF = "" | |
576 | + | func bG (bH,bI) = if ((bI >= bE)) | |
577 | + | then bH | |
578 | + | else dl(bH, bD[bI]) | |
535 | 579 | ||
536 | - | func | |
537 | - | then | |
580 | + | func bJ (bH,bI) = if ((bI >= bE)) | |
581 | + | then bH | |
538 | 582 | else throw("List size exceeds 9") | |
539 | 583 | ||
540 | - | | |
584 | + | bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9) | |
541 | 585 | } | |
542 | 586 | else { | |
543 | - | let | |
544 | - | let | |
545 | - | let | |
546 | - | let | |
547 | - | let | |
548 | - | let | |
549 | - | let | |
550 | - | let | |
551 | - | let | |
552 | - | func | |
553 | - | let | |
554 | - | let | |
555 | - | let | |
556 | - | let | |
557 | - | let | |
558 | - | let | |
559 | - | (( | |
587 | + | let S = addressFromStringValue(cd) | |
588 | + | let dn = valueOrElse(ba(S), $Tuple3(true, 0, 0)) | |
589 | + | let bN = dn._1 | |
590 | + | let bO = dn._2 | |
591 | + | let cf = dn._3 | |
592 | + | let bg = toBigInt(bO) | |
593 | + | let bP = ag(cd) | |
594 | + | let bh = ar(bP, -1) | |
595 | + | let bi = ar(af(), -1) | |
596 | + | func cg (bR,bS) = { | |
597 | + | let do = be(cd, bS, bg, bh, bi) | |
598 | + | let bU = do._1 | |
599 | + | let bV = do._2 | |
600 | + | let bW = do._3 | |
601 | + | let bn = do._4 | |
602 | + | let dp = valueOrElse(getInteger(al(cd, bS)), 0) | |
603 | + | ((bR + makeString([bS, toString(bU), toString(dp)], ":")) + "_") | |
560 | 604 | } | |
561 | 605 | ||
562 | - | let | |
563 | - | let | |
564 | - | let | |
565 | - | func | |
566 | - | then | |
567 | - | else | |
606 | + | let bD = bd | |
607 | + | let bE = size(bD) | |
608 | + | let bF = "" | |
609 | + | func bG (bH,bI) = if ((bI >= bE)) | |
610 | + | then bH | |
611 | + | else cg(bH, bD[bI]) | |
568 | 612 | ||
569 | - | func | |
570 | - | then | |
613 | + | func bJ (bH,bI) = if ((bI >= bE)) | |
614 | + | then bH | |
571 | 615 | else throw("List size exceeds 9") | |
572 | 616 | ||
573 | - | | |
617 | + | bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9) | |
574 | 618 | } | |
575 | - | $Tuple2(nil, dropRight( | |
619 | + | $Tuple2(nil, dropRight(dm, 1)) | |
576 | 620 | } | |
577 | 621 | ||
578 | 622 | ||
579 | 623 | ||
580 | - | @Callable( | |
581 | - | func nsbtUnstakingSYSREADONLY ( | |
582 | - | let | |
624 | + | @Callable(cc) | |
625 | + | func nsbtUnstakingSYSREADONLY (dq,dr) = { | |
626 | + | let ds = if ((dq == "")) | |
583 | 627 | then [0, 0, 0, 0] | |
584 | 628 | else { | |
585 | - | let | |
586 | - | let | |
587 | - | let | |
588 | - | let | |
589 | - | let | |
590 | - | let | |
591 | - | let | |
592 | - | let | |
593 | - | let | |
594 | - | let | |
595 | - | then | |
596 | - | else | |
597 | - | let | |
598 | - | let | |
629 | + | let S = addressFromStringValue(dq) | |
630 | + | let dt = aY() | |
631 | + | let du = dt._1 | |
632 | + | let ct = dt._2 | |
633 | + | let cu = dt._3 | |
634 | + | let dv = valueOrElse(ba(S), $Tuple3(true, 0, 0)) | |
635 | + | let bN = dv._1 | |
636 | + | let bO = dv._2 | |
637 | + | let cL = dv._3 | |
638 | + | let dw = if ((dr > bO)) | |
639 | + | then bO | |
640 | + | else dr | |
641 | + | let dx = (bO - dw) | |
642 | + | let cO = if ((dw == 0)) | |
599 | 643 | then 0 | |
600 | - | else | |
601 | - | let | |
602 | - | [ | |
644 | + | else az(invoke(G, "getUnstakeComissionAmountREADONLY", [dw, cL, cu], nil)) | |
645 | + | let dy = (dw - cO) | |
646 | + | [bO, dx, dy, cO] | |
603 | 647 | } | |
604 | - | $Tuple2(nil, | |
648 | + | $Tuple2(nil, ds) | |
605 | 649 | } | |
606 | 650 | ||
607 | 651 | ||
608 | 652 | ||
609 | - | @Callable( | |
610 | - | func nsbtStakingSYSREADONLY ( | |
611 | - | let | |
612 | - | if (( | |
613 | - | then $Tuple2(nil, [0, | |
653 | + | @Callable(cc) | |
654 | + | func nsbtStakingSYSREADONLY (cd,dz) = { | |
655 | + | let dA = ar(X(), 0) | |
656 | + | if ((cd == "")) | |
657 | + | then $Tuple2(nil, [0, dA, 0]) | |
614 | 658 | else { | |
615 | - | let | |
616 | - | let | |
617 | - | let | |
618 | - | let | |
619 | - | let | |
620 | - | $Tuple2(nil, [ | |
659 | + | let S = av(cd) | |
660 | + | let dB = valueOrElse(ba(S), $Tuple3(true, 0, 0)) | |
661 | + | let bN = dB._1 | |
662 | + | let dC = dB._2 | |
663 | + | let cf = dB._3 | |
664 | + | $Tuple2(nil, [dC, dA, cf]) | |
621 | 665 | } | |
622 | 666 | } | |
623 | 667 | ||
624 | 668 | ||
625 | - | @Verifier( | |
626 | - | func | |
627 | - | let | |
628 | - | let | |
629 | - | let | |
669 | + | @Verifier(dD) | |
670 | + | func dE () = { | |
671 | + | let dF = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], b) | |
672 | + | let dG = split(valueOrElse(getString(F, "%s__multisig"), dF), b) | |
673 | + | let dH = ((((if (sigVerify(dD.bodyBytes, dD.proofs[0], fromBase58String(dG[0]))) | |
630 | 674 | then 1 | |
631 | - | else 0) + (if (sigVerify( | |
675 | + | else 0) + (if (sigVerify(dD.bodyBytes, dD.proofs[1], fromBase58String(dG[1]))) | |
632 | 676 | then 1 | |
633 | - | else 0)) + (if (sigVerify( | |
677 | + | else 0)) + (if (sigVerify(dD.bodyBytes, dD.proofs[2], fromBase58String(dG[2]))) | |
634 | 678 | then 1 | |
635 | - | else 0)) + (if (sigVerify( | |
679 | + | else 0)) + (if (sigVerify(dD.bodyBytes, dD.proofs[3], fromBase58String(dG[3]))) | |
636 | 680 | then 2 | |
637 | 681 | else 0)) | |
638 | - | ( | |
682 | + | (dH >= 3) | |
639 | 683 | } | |
640 | 684 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "__" | |
5 | 5 | ||
6 | 6 | let b = "__" | |
7 | 7 | ||
8 | 8 | let c = 1000000 | |
9 | 9 | ||
10 | 10 | let d = 100000000 | |
11 | 11 | ||
12 | 12 | let e = toBigInt(c) | |
13 | 13 | ||
14 | 14 | let f = toBigInt(d) | |
15 | 15 | ||
16 | 16 | let g = toBigInt(1000000000000000000) | |
17 | 17 | ||
18 | 18 | let h = "WAVES" | |
19 | 19 | ||
20 | 20 | let i = fromBase58String(h) | |
21 | 21 | ||
22 | 22 | let j = 86400000 | |
23 | 23 | ||
24 | - | let k = | |
24 | + | let k = 9 | |
25 | 25 | ||
26 | - | let l = | |
26 | + | let l = 1 | |
27 | 27 | ||
28 | - | let m = | |
28 | + | let m = 2 | |
29 | 29 | ||
30 | - | let n = | |
30 | + | let n = 3 | |
31 | 31 | ||
32 | - | let o = | |
32 | + | let o = 4 | |
33 | 33 | ||
34 | - | let p = | |
34 | + | let p = 5 | |
35 | 35 | ||
36 | - | let q = | |
36 | + | let q = 6 | |
37 | 37 | ||
38 | - | let r = | |
38 | + | let r = 7 | |
39 | 39 | ||
40 | - | let s = | |
40 | + | let s = 8 | |
41 | 41 | ||
42 | - | let t = | |
42 | + | let t = 9 | |
43 | 43 | ||
44 | - | func u (v,w) = valueOrErrorMessage(getString(v, w), (((("mandatory " + toString(v)) + ".") + w) + " is not defined")) | |
44 | + | let u = 13 | |
45 | + | ||
46 | + | func v (w,x) = valueOrErrorMessage(getString(w, x), (((("mandatory " + toString(w)) + ".") + x) + " is not defined")) | |
45 | 47 | ||
46 | 48 | ||
47 | - | func | |
49 | + | func y () = "%s%s__config__controlAddress" | |
48 | 50 | ||
49 | 51 | ||
50 | - | func | |
52 | + | func z () = "%s__controlConfig" | |
51 | 53 | ||
52 | 54 | ||
53 | - | func | |
55 | + | func A (B) = split_4C(v(B, z()), b) | |
54 | 56 | ||
55 | 57 | ||
56 | - | func | |
58 | + | func C (D,E) = valueOrErrorMessage(addressFromString(D[E]), ("Control cfg doesn't contain address at index " + toString(E))) | |
57 | 59 | ||
58 | 60 | ||
59 | - | let | |
61 | + | let F = addressFromStringValue(valueOrElse(getString(this, y()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx")) | |
60 | 62 | ||
61 | - | let | |
63 | + | let D = A(F) | |
62 | 64 | ||
63 | - | let | |
65 | + | let G = C(D, o) | |
64 | 66 | ||
65 | - | let | |
67 | + | let H = C(D, l) | |
66 | 68 | ||
67 | - | let | |
69 | + | let I = C(D, m) | |
68 | 70 | ||
69 | - | let | |
71 | + | let J = C(D, u) | |
70 | 72 | ||
71 | - | func | |
73 | + | func K () = "bond_asset_id" | |
72 | 74 | ||
73 | 75 | ||
74 | - | func | |
76 | + | func L (M) = ("%s%s_userGnsbtReleaseTime__" + M) | |
75 | 77 | ||
76 | 78 | ||
77 | - | func | |
79 | + | func N () = "%s__neutrinoContractAddress" | |
78 | 80 | ||
79 | 81 | ||
80 | - | func | |
82 | + | func O () = "%s__mathContract" | |
81 | 83 | ||
82 | 84 | ||
83 | - | func | |
85 | + | func P () = "%s__minLockAmount" | |
84 | 86 | ||
85 | 87 | ||
86 | - | func | |
88 | + | func Q () = "%s__halfLife" | |
87 | 89 | ||
88 | 90 | ||
89 | - | func | |
91 | + | func R (S) = makeString(["%s%s%s", "paramByUser", toString(S), "amount"], a) | |
90 | 92 | ||
91 | 93 | ||
92 | - | func | |
94 | + | func T (S) = makeString(["%s%s%s", "paramByUser", toString(S), "start"], a) | |
93 | 95 | ||
94 | 96 | ||
95 | - | func | |
97 | + | func U (V,S,W) = makeString(["%s%s%s%s", "history", V, toString(S), toBase58String(W)], a) | |
96 | 98 | ||
97 | 99 | ||
98 | - | func | |
100 | + | func X () = makeString(["%s%s", "stats", "activeTotalLocked"], a) | |
99 | 101 | ||
100 | 102 | ||
101 | - | func | |
103 | + | func Y () = makeString(["%s%s", "stats", "locksCount"], a) | |
102 | 104 | ||
103 | 105 | ||
104 | - | func | |
106 | + | func Z () = makeString(["%s%s", "stats", "activeUsersCount"], a) | |
105 | 107 | ||
106 | 108 | ||
107 | - | func | |
109 | + | func aa (ab) = makeString(["%s%s%d", "stats", "depositAmtByDay", toString(ab)], a) | |
108 | 110 | ||
109 | 111 | ||
110 | - | func | |
112 | + | func ac () = makeString(["%s%s%d", "stats", "depositAmtTotals"], a) | |
111 | 113 | ||
112 | 114 | ||
113 | - | func | |
115 | + | func ad () = "%s__nextPeriod" | |
114 | 116 | ||
115 | 117 | ||
116 | - | func | |
118 | + | func ae () = "supportedRewardAssets" | |
117 | 119 | ||
118 | 120 | ||
119 | - | func | |
121 | + | func af () = makeString(["%s%s%s", "dep", "lastNum"], a) | |
120 | 122 | ||
121 | 123 | ||
122 | - | func | |
124 | + | func ag (S) = makeString(["%s%s%s", "userRwdFromDepNum", S], a) | |
123 | 125 | ||
124 | 126 | ||
125 | - | func | |
127 | + | func ah (ai,aj) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(ai), aj], a) | |
126 | 128 | ||
127 | 129 | ||
128 | - | func | |
130 | + | func ak (S,aj) = makeString(["%s%s%s", "rwd", S, aj], a) | |
129 | 131 | ||
130 | 132 | ||
131 | - | func | |
133 | + | func al (S,aj) = makeString(["%s%s%s", "clm", S, aj], a) | |
132 | 134 | ||
133 | 135 | ||
134 | - | func | |
136 | + | func am (aj) = makeString(["%s%s", "notDistributed", aj], a) | |
135 | 137 | ||
136 | 138 | ||
137 | - | func | |
139 | + | func an (ao,ap) = fraction(toBigInt(ao), g, ap) | |
138 | 140 | ||
139 | 141 | ||
140 | - | func | |
142 | + | func aq (x) = valueOrElse(getInteger(this, x), 0) | |
141 | 143 | ||
142 | 144 | ||
143 | - | func | |
145 | + | func ar (x,as) = valueOrElse(getInteger(this, x), as) | |
144 | 146 | ||
145 | 147 | ||
146 | - | func | |
148 | + | func at (x) = valueOrErrorMessage(getInteger(this, x), (("Mandatory this." + x) + " is not defined")) | |
147 | 149 | ||
148 | 150 | ||
149 | - | func | |
151 | + | func au (x,as) = valueOrElse(getString(this, x), as) | |
150 | 152 | ||
151 | 153 | ||
152 | - | func | |
154 | + | func av (aw) = valueOrErrorMessage(addressFromString(aw), ("couldn't parse passed addressStr=" + aw)) | |
153 | 155 | ||
154 | 156 | ||
155 | - | func | |
157 | + | func ax (ay) = if ((ay == h)) | |
156 | 158 | then unit | |
157 | - | else fromBase58String( | |
159 | + | else fromBase58String(ay) | |
158 | 160 | ||
159 | 161 | ||
160 | - | func | |
161 | - | let | |
162 | - | if ($isInstanceOf( | |
162 | + | func az (aA) = { | |
163 | + | let aB = aA | |
164 | + | if ($isInstanceOf(aB, "Int")) | |
163 | 165 | then { | |
164 | - | let | |
165 | - | | |
166 | + | let aC = aB | |
167 | + | aC | |
166 | 168 | } | |
167 | 169 | else throw("fail to cast into Int") | |
168 | 170 | } | |
169 | 171 | ||
170 | 172 | ||
171 | - | func | |
173 | + | func aD (aE,aF,aG,aH) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aE), toString(aF), toString(aG), toString(aH)], a) | |
172 | 174 | ||
173 | 175 | ||
174 | - | func | |
176 | + | func aI (aJ,aK) = makeString(["%s%d%d%s", aJ, toString(lastBlock.height), toString(lastBlock.timestamp), aK], a) | |
175 | 177 | ||
176 | 178 | ||
177 | - | func | |
179 | + | func aL (V,S,W,aE,aF,aG,aH) = StringEntry(U(V, S, W), aD(aE, aF, aG, aH)) | |
178 | 180 | ||
179 | 181 | ||
180 | - | func | |
182 | + | func aM (S,W,aK) = StringEntry(U("claim", S, W), aI(toString(S), aK)) | |
181 | 183 | ||
182 | 184 | ||
183 | - | func | |
184 | - | let | |
185 | - | let | |
186 | - | let | |
187 | - | let | |
188 | - | $Tuple3([ | |
185 | + | func aN (aO,aP,aQ) = { | |
186 | + | let aR = aq(Y()) | |
187 | + | let aS = aq(Z()) | |
188 | + | let aT = aq(X()) | |
189 | + | let aU = (aT + aO) | |
190 | + | $Tuple3([IntegerEntry(Y(), (aR + aP)), IntegerEntry(Z(), (aS + aQ)), IntegerEntry(X(), aU)], aT, aU) | |
189 | 191 | } | |
190 | 192 | ||
191 | 193 | ||
192 | - | func | |
194 | + | func aV (S,aW,aX) = [IntegerEntry(R(S), aW), IntegerEntry(T(S), aX)] | |
193 | 195 | ||
194 | 196 | ||
195 | - | func | |
197 | + | func aY () = $Tuple3(fromBase58String(getStringValue(H, K())), at(P()), at(Q())) | |
196 | 198 | ||
197 | 199 | ||
198 | - | func | |
200 | + | func aZ (S) = (ar(R(S), 0) > 0) | |
199 | 201 | ||
200 | 202 | ||
201 | - | func | |
202 | - | then $Tuple3(false, | |
203 | + | func ba (S) = if (aZ(S)) | |
204 | + | then $Tuple3(false, at(R(S)), at(T(S))) | |
203 | 205 | else unit | |
204 | 206 | ||
205 | 207 | ||
206 | - | func | |
208 | + | func bb (S) = valueOrErrorMessage(ba(S), (("User " + toString(S)) + " is not defined")) | |
207 | 209 | ||
208 | 210 | ||
209 | - | let | |
211 | + | let bc = au(ae(), "") | |
210 | 212 | ||
211 | - | let | |
213 | + | let bd = split(bc, "_") | |
212 | 214 | ||
213 | - | func | |
214 | - | let | |
215 | - | let | |
216 | - | let | |
217 | - | let | |
218 | - | let | |
219 | - | let | |
220 | - | $Tuple4(( | |
215 | + | func be (S,bf,bg,bh,bi) = { | |
216 | + | let bj = ah(bi, bf) | |
217 | + | let bk = parseBigIntValue(au(ah(bi, bf), "0")) | |
218 | + | let bl = parseBigIntValue(au(ah(bh, bf), "0")) | |
219 | + | let bm = toInt(fraction((bk - bl), bg, g)) | |
220 | + | let bn = ak(S, bf) | |
221 | + | let bo = ar(bn, 0) | |
222 | + | $Tuple4((bo + bm), bo, bm, bn) | |
221 | 223 | } | |
222 | 224 | ||
223 | 225 | ||
224 | - | func | |
226 | + | func bp (ab) = ((ab / j) * j) | |
225 | 227 | ||
226 | 228 | ||
227 | - | func | |
228 | - | let | |
229 | - | if (( | |
229 | + | func bq (br,bs,bt) = { | |
230 | + | let bu = valueOrErrorMessage(indexOf(br, bs), ((("there is no substring " + bs) + " in ") + br)) | |
231 | + | if ((bu == 0)) | |
230 | 232 | then 0 | |
231 | 233 | else { | |
232 | - | let | |
233 | - | (size(split( | |
234 | + | let bv = take(br, bu) | |
235 | + | (size(split(bv, bt)) - 1) | |
234 | 236 | } | |
235 | 237 | } | |
236 | 238 | ||
237 | 239 | ||
238 | - | let | |
240 | + | let bw = "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d" | |
239 | 241 | ||
240 | - | let | |
242 | + | let bx = (bw + "__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0") | |
241 | 243 | ||
242 | - | func bx (by,R,bz) = { | |
243 | - | let bf = toBigInt(bz) | |
244 | - | let bA = af(R) | |
245 | - | let bg = aq(bA, -1) | |
246 | - | let bh = aq(ae(), -1) | |
247 | - | func bB (bC,bD) = { | |
248 | - | let bE = bd(R, bD, bf, bg, bh) | |
249 | - | let bF = bE._1 | |
250 | - | let bG = bE._2 | |
251 | - | let bH = bE._3 | |
252 | - | let bm = bE._4 | |
253 | - | (bC :+ IntegerEntry(bm, bF)) | |
254 | - | } | |
244 | + | func by (bz) = { | |
245 | + | let bA = (size(bz) - 1) | |
246 | + | func bB (bC,E) = if ((bA > E)) | |
247 | + | then bC | |
248 | + | else (bC :+ "0") | |
255 | 249 | ||
256 | - | if (if ((bh == -1)) | |
257 | - | then (bg == -1) | |
258 | - | else false) | |
259 | - | then nil | |
260 | - | else if (if ((bh == -1)) | |
261 | - | then (bg > -1) | |
262 | - | else false) | |
263 | - | then throw("invalid depositNumLast and depositNumUser state") | |
264 | - | else if (if ((bh > -1)) | |
265 | - | then (bg >= -1) | |
266 | - | else false) | |
267 | - | then if (by) | |
268 | - | then [IntegerEntry(bA, bh)] | |
269 | - | else ({ | |
270 | - | let bI = bc | |
271 | - | let bJ = size(bI) | |
272 | - | let bK = nil | |
273 | - | func bL (bM,bN) = if ((bN >= bJ)) | |
274 | - | then bM | |
275 | - | else bB(bM, bI[bN]) | |
250 | + | let bD = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] | |
251 | + | let bE = size(bD) | |
252 | + | let bF = bz | |
253 | + | func bG (bH,bI) = if ((bI >= bE)) | |
254 | + | then bH | |
255 | + | else bB(bH, bD[bI]) | |
276 | 256 | ||
277 | - | ||
278 | - | ||
279 | - | ||
257 | + | func bJ (bH,bI) = if ((bI >= bE)) | |
258 | + | then bH | |
259 | + | else throw("List size exceeds 18") | |
280 | 260 | ||
281 | - | bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9) | |
282 | - | } :+ IntegerEntry(bA, bh)) | |
283 | - | else throw(((("uncovered condition: depositNumLast=" + toString(bh)) + " depositNumUser=") + toString(bg))) | |
261 | + | bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18) | |
284 | 262 | } | |
285 | 263 | ||
286 | 264 | ||
287 | - | func bP (ai,bQ) = { | |
288 | - | let bR = al(ai) | |
289 | - | let bS = aq(bR, 0) | |
290 | - | IntegerEntry(bR, (bS + bQ)) | |
265 | + | func bK (bz) = { | |
266 | + | let bA = (size(split_4C(bz, b)) - 1) | |
267 | + | func bL (bC,E) = if ((bA > E)) | |
268 | + | then bC | |
269 | + | else (bC + "__0") | |
270 | + | ||
271 | + | let bD = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] | |
272 | + | let bE = size(bD) | |
273 | + | let bF = bz | |
274 | + | func bG (bH,bI) = if ((bI >= bE)) | |
275 | + | then bH | |
276 | + | else bL(bH, bD[bI]) | |
277 | + | ||
278 | + | func bJ (bH,bI) = if ((bI >= bE)) | |
279 | + | then bH | |
280 | + | else throw("List size exceeds 18") | |
281 | + | ||
282 | + | bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18) | |
291 | 283 | } | |
292 | 284 | ||
293 | 285 | ||
294 | - | func bT (R,bU) = { | |
295 | - | let bV = toString(R) | |
296 | - | if ((size(bU.payments) > 0)) | |
286 | + | func bM (bN,S,bO) = { | |
287 | + | let bg = toBigInt(bO) | |
288 | + | let bP = ag(S) | |
289 | + | let bh = ar(bP, -1) | |
290 | + | let bi = ar(af(), -1) | |
291 | + | func bQ (bR,bS) = { | |
292 | + | let bT = be(S, bS, bg, bh, bi) | |
293 | + | let bU = bT._1 | |
294 | + | let bV = bT._2 | |
295 | + | let bW = bT._3 | |
296 | + | let bn = bT._4 | |
297 | + | (bR :+ IntegerEntry(bn, bU)) | |
298 | + | } | |
299 | + | ||
300 | + | if (if ((bi == -1)) | |
301 | + | then (bh == -1) | |
302 | + | else false) | |
303 | + | then nil | |
304 | + | else if (if ((bi == -1)) | |
305 | + | then (bh > -1) | |
306 | + | else false) | |
307 | + | then throw("invalid depositNumLast and depositNumUser state") | |
308 | + | else if (if ((bi > -1)) | |
309 | + | then (bh >= -1) | |
310 | + | else false) | |
311 | + | then if (bN) | |
312 | + | then [IntegerEntry(bP, bi)] | |
313 | + | else ({ | |
314 | + | let bD = bd | |
315 | + | let bE = size(bD) | |
316 | + | let bF = nil | |
317 | + | func bG (bH,bI) = if ((bI >= bE)) | |
318 | + | then bH | |
319 | + | else bQ(bH, bD[bI]) | |
320 | + | ||
321 | + | func bJ (bH,bI) = if ((bI >= bE)) | |
322 | + | then bH | |
323 | + | else throw("List size exceeds 9") | |
324 | + | ||
325 | + | bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9) | |
326 | + | } :+ IntegerEntry(bP, bi)) | |
327 | + | else throw(((("uncovered condition: depositNumLast=" + toString(bi)) + " depositNumUser=") + toString(bh))) | |
328 | + | } | |
329 | + | ||
330 | + | ||
331 | + | func bX (aj,bY) = { | |
332 | + | let bZ = am(aj) | |
333 | + | let ca = ar(bZ, 0) | |
334 | + | IntegerEntry(bZ, (ca + bY)) | |
335 | + | } | |
336 | + | ||
337 | + | ||
338 | + | func cb (S,cc) = { | |
339 | + | let cd = toString(S) | |
340 | + | if ((size(cc.payments) > 0)) | |
297 | 341 | then throw("payments are not accepted") | |
298 | 342 | else { | |
299 | - | let | |
300 | - | let | |
301 | - | let | |
302 | - | let | |
303 | - | let | |
304 | - | let | |
305 | - | let | |
306 | - | let | |
307 | - | func | |
308 | - | let | |
309 | - | let | |
310 | - | let | |
311 | - | let | |
312 | - | let | |
313 | - | let | |
314 | - | let | |
315 | - | let | |
316 | - | let | |
317 | - | let | |
318 | - | let | |
319 | - | if ((0 >= | |
320 | - | then $Tuple2( | |
321 | - | else $Tuple2(((( | |
343 | + | let ce = valueOrElse(ba(S), $Tuple3(true, 0, 0)) | |
344 | + | let bN = ce._1 | |
345 | + | let bO = ce._2 | |
346 | + | let cf = ce._3 | |
347 | + | let bg = toBigInt(bO) | |
348 | + | let bP = ag(cd) | |
349 | + | let bh = ar(bP, -1) | |
350 | + | let bi = ar(af(), -1) | |
351 | + | func cg (bR,bS) = { | |
352 | + | let ch = be(cd, bS, bg, bh, bi) | |
353 | + | let bU = ch._1 | |
354 | + | let bV = ch._2 | |
355 | + | let bW = ch._3 | |
356 | + | let bn = ch._4 | |
357 | + | let ci = al(cd, bS) | |
358 | + | let cj = bR | |
359 | + | let ck = cj._1 | |
360 | + | let cl = cj._2 | |
361 | + | let cm = makeString([bS, toString(bU)], ":") | |
362 | + | let cn = makeString([cl, cm], "_") | |
363 | + | if ((0 >= bU)) | |
364 | + | then $Tuple2(ck, cn) | |
365 | + | else $Tuple2((((ck :+ ScriptTransfer(S, bU, ax(bS))) :+ IntegerEntry(ci, (valueOrElse(getInteger(ci), 0) + bU))) :+ IntegerEntry(bn, 0)), cn) | |
322 | 366 | } | |
323 | 367 | ||
324 | - | let | |
325 | - | let | |
326 | - | let | |
327 | - | let | |
328 | - | func | |
329 | - | then | |
330 | - | else | |
368 | + | let co = { | |
369 | + | let bD = bd | |
370 | + | let bE = size(bD) | |
371 | + | let bF = $Tuple2(nil, "") | |
372 | + | func bG (bH,bI) = if ((bI >= bE)) | |
373 | + | then bH | |
374 | + | else cg(bH, bD[bI]) | |
331 | 375 | ||
332 | - | func | |
333 | - | then | |
376 | + | func bJ (bH,bI) = if ((bI >= bE)) | |
377 | + | then bH | |
334 | 378 | else throw("List size exceeds 9") | |
335 | 379 | ||
336 | - | | |
380 | + | bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9) | |
337 | 381 | } | |
338 | - | let | |
339 | - | let | |
340 | - | if ((0 >= size( | |
382 | + | let cp = co._1 | |
383 | + | let cq = co._2 | |
384 | + | if ((0 >= size(cp))) | |
341 | 385 | then $Tuple2(nil, 0) | |
342 | - | else $Tuple2((( | |
386 | + | else $Tuple2(((cp :+ IntegerEntry(bP, bi)) :+ aM(S, cc.transactionId, drop(cq, 1))), size(cp)) | |
343 | 387 | } | |
344 | 388 | } | |
345 | 389 | ||
346 | 390 | ||
347 | - | @Callable( | |
348 | - | func constructorV1 ( | |
391 | + | @Callable(cc) | |
392 | + | func constructorV1 (cr,cs,ct,cu,cv) = if ((cc.caller != this)) | |
349 | 393 | then throw("Permission denied") | |
350 | - | else [StringEntry( | |
394 | + | else [StringEntry(N(), cr), StringEntry(O(), cs), IntegerEntry(P(), ct), IntegerEntry(Q(), cu), StringEntry(ae(), cv)] | |
351 | 395 | ||
352 | 396 | ||
353 | 397 | ||
354 | - | @Callable( | |
398 | + | @Callable(cc) | |
355 | 399 | func stake () = { | |
356 | - | let | |
357 | - | let | |
358 | - | let | |
359 | - | let | |
360 | - | if ((size( | |
400 | + | let cw = aY() | |
401 | + | let cx = cw._1 | |
402 | + | let ct = cw._2 | |
403 | + | let cu = cw._3 | |
404 | + | if ((size(cc.payments) != 1)) | |
361 | 405 | then throw("Invalid payments size") | |
362 | 406 | else { | |
363 | - | let | |
364 | - | let | |
365 | - | let | |
366 | - | let | |
367 | - | if (( | |
368 | - | then throw( | |
407 | + | let cy = cc.payments[0] | |
408 | + | let aW = cy.amount | |
409 | + | let cz = (("Invalid asset. " + toBase58String(cx)) + " is expected") | |
410 | + | let bf = valueOrErrorMessage(cy.assetId, cz) | |
411 | + | if ((bf != cx)) | |
412 | + | then throw(cz) | |
369 | 413 | else { | |
370 | - | let | |
371 | - | let | |
372 | - | let | |
373 | - | let | |
374 | - | let | |
375 | - | let | |
376 | - | let | |
377 | - | then | |
378 | - | else ( | |
379 | - | let | |
414 | + | let S = cc.caller | |
415 | + | let cd = toString(cc.caller) | |
416 | + | let cA = valueOrElse(ba(S), $Tuple3(true, 0, -1)) | |
417 | + | let bN = cA._1 | |
418 | + | let cB = cA._2 | |
419 | + | let cC = cA._3 | |
420 | + | let cD = if (bN) | |
421 | + | then aW | |
422 | + | else (aW + cB) | |
423 | + | let cE = if (bN) | |
380 | 424 | then height | |
381 | - | else | |
382 | - | if (( | |
383 | - | then throw(("Min lock amount is " + toString( | |
425 | + | else az(invoke(G, "mergeStakesREADONLY", [aW, height, cB, cC, cu], nil)) | |
426 | + | if ((ct > cD)) | |
427 | + | then throw(("Min lock amount is " + toString(ct))) | |
384 | 428 | else { | |
385 | - | let | |
429 | + | let cF = aN(aW, 1, if (bN) | |
386 | 430 | then 1 | |
387 | 431 | else 0) | |
388 | - | let | |
389 | - | let | |
390 | - | let | |
391 | - | ((([ | |
432 | + | let cG = cF._1 | |
433 | + | let cH = cF._2 | |
434 | + | let cI = cF._3 | |
435 | + | ((([aL("stake", S, cc.transactionId, cB, cC, cD, cE)] ++ bM(bN, cd, cB)) ++ aV(S, cD, cE)) ++ cG) | |
392 | 436 | } | |
393 | 437 | } | |
394 | 438 | } | |
395 | 439 | } | |
396 | 440 | ||
397 | 441 | ||
398 | 442 | ||
399 | - | @Callable( | |
400 | - | func unstake ( | |
443 | + | @Callable(cc) | |
444 | + | func unstake (aW) = if ((size(cc.payments) != 0)) | |
401 | 445 | then throw("unstake doesn't require any payment") | |
402 | 446 | else { | |
403 | - | let | |
404 | - | let | |
405 | - | let | |
406 | - | let | |
407 | - | let | |
408 | - | let | |
409 | - | let | |
410 | - | let | |
411 | - | let | |
412 | - | let | |
413 | - | if ((0 >= | |
447 | + | let S = cc.caller | |
448 | + | let cd = toString(S) | |
449 | + | let cJ = aY() | |
450 | + | let cx = cJ._1 | |
451 | + | let ct = cJ._2 | |
452 | + | let cu = cJ._3 | |
453 | + | let cK = bb(S) | |
454 | + | let bN = cK._1 | |
455 | + | let cB = cK._2 | |
456 | + | let cL = cK._3 | |
457 | + | if ((0 >= cB)) | |
414 | 458 | then throw("Nothing to unstake") | |
415 | - | else if (( | |
416 | - | then throw(((("Requested " + toString( | |
459 | + | else if ((aW > cB)) | |
460 | + | then throw(((("Requested " + toString(aW)) + ", but staked only ") + toString(cB))) | |
417 | 461 | else { | |
418 | - | let | |
419 | - | let | |
420 | - | if (( | |
421 | - | then throw(("Your gNsbt are taking part in voting, cannot unstake until " + toString( | |
462 | + | let cM = value(blockInfoByHeight(height)).timestamp | |
463 | + | let cN = valueOrElse(getInteger(J, L(cd)), 0) | |
464 | + | if ((cN >= cM)) | |
465 | + | then throw(("Your gNsbt are taking part in voting, cannot unstake until " + toString(cN))) | |
422 | 466 | else { | |
423 | - | let | |
424 | - | let | |
467 | + | let cO = az(invoke(G, "getUnstakeComissionAmountREADONLY", [aW, cL, cu], nil)) | |
468 | + | let cP = aN(-(aW), if ((aW == cB)) | |
425 | 469 | then -1 | |
426 | - | else 0, if (( | |
470 | + | else 0, if ((aW == cB)) | |
427 | 471 | then -1 | |
428 | 472 | else 0) | |
429 | - | let | |
430 | - | let | |
431 | - | let | |
432 | - | ((([ScriptTransfer( | |
473 | + | let cG = cP._1 | |
474 | + | let cH = cP._2 | |
475 | + | let cI = cP._3 | |
476 | + | ((([ScriptTransfer(S, (aW - cO), cx), ScriptTransfer(I, cO, cx), aL("unstake", S, cc.transactionId, cB, cL, (cB - aW), cL)] ++ bM(false, cd, cB)) ++ aV(S, (cB - aW), cL)) ++ cG) | |
433 | 477 | } | |
434 | 478 | } | |
435 | 479 | } | |
436 | 480 | ||
437 | 481 | ||
438 | 482 | ||
439 | - | @Callable( | |
483 | + | @Callable(cc) | |
440 | 484 | func deposit () = { | |
441 | - | let | |
442 | - | if ((0 > | |
485 | + | let cH = ar(X(), 0) | |
486 | + | if ((0 > cH)) | |
443 | 487 | then throw("TODO: case is not supported") | |
444 | 488 | else { | |
445 | - | let cI = ae() | |
446 | - | let bh = aq(cI, -1) | |
447 | - | let cJ = (bh + 1) | |
448 | - | let cK = ab() | |
449 | - | let cL = Z(bo(lastBlock.timestamp)) | |
450 | - | let cM = split(valueOrElse(getString(cK), bw), b) | |
451 | - | let cN = split(valueOrElse(getString(cL), bw), b) | |
452 | - | func cO (cP,cQ) = { | |
453 | - | let aV = cQ.amount | |
454 | - | let cR = toBase58String(valueOrElse(cQ.assetId, i)) | |
455 | - | if (!(contains(bb, cR))) | |
456 | - | then throw(((bb + " doesn't contain ") + cR)) | |
457 | - | else if ((cz == 0)) | |
458 | - | then $Tuple4((cP._1 :+ bP(cR, aV)), (cP._2 :+ cR), (cP._3 :+ toBigInt(0)), (cP._4 :+ aV)) | |
489 | + | let cQ = af() | |
490 | + | let bi = ar(cQ, -1) | |
491 | + | let cR = (bi + 1) | |
492 | + | let cS = ac() | |
493 | + | let cT = aa(bp(lastBlock.timestamp)) | |
494 | + | let cU = by(split(valueOrElse(getString(cS), bx), b)) | |
495 | + | func cV (bC,cW) = { | |
496 | + | let aW = cW.amount | |
497 | + | let cX = toBase58String(valueOrElse(cW.assetId, i)) | |
498 | + | if (!(contains(bc, cX))) | |
499 | + | then throw(((bc + " doesn't contain ") + cX)) | |
500 | + | else if ((cH == 0)) | |
501 | + | then $Tuple4((bC._1 :+ bX(cX, aW)), (bC._2 :+ cX), (bC._3 :+ toBigInt(0)), (bC._4 :+ aW)) | |
459 | 502 | else { | |
460 | - | let | |
461 | - | $Tuple4( | |
503 | + | let cY = fraction(toBigInt(aW), g, toBigInt(cH)) | |
504 | + | $Tuple4(bC._1, (bC._2 :+ cX), (bC._3 :+ cY), (bC._4 :+ aW)) | |
462 | 505 | } | |
463 | 506 | } | |
464 | 507 | ||
465 | - | let | |
466 | - | let | |
467 | - | let | |
468 | - | let | |
469 | - | func | |
470 | - | then | |
471 | - | else | |
508 | + | let cZ = { | |
509 | + | let bD = cc.payments | |
510 | + | let bE = size(bD) | |
511 | + | let bF = $Tuple4(nil, nil, nil, nil) | |
512 | + | func bG (bH,bI) = if ((bI >= bE)) | |
513 | + | then bH | |
514 | + | else cV(bH, bD[bI]) | |
472 | 515 | ||
473 | - | func | |
474 | - | then | |
516 | + | func bJ (bH,bI) = if ((bI >= bE)) | |
517 | + | then bH | |
475 | 518 | else throw("List size exceeds 10") | |
476 | 519 | ||
477 | - | | |
520 | + | bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
478 | 521 | } | |
479 | - | func | |
480 | - | let | |
481 | - | let | |
482 | - | let | |
483 | - | let | |
522 | + | func da (bR,db) = { | |
523 | + | let dc = bR._3 | |
524 | + | let dd = au(ah(bi, db), "0") | |
525 | + | let E = indexOf(cZ._2, db) | |
526 | + | let de = if (isDefined(E)) | |
484 | 527 | then { | |
485 | - | let | |
486 | - | let | |
487 | - | $ | |
528 | + | let df = value(E) | |
529 | + | let dg = cZ._4[df] | |
530 | + | $Tuple2(toString((parseBigIntValue(dd) + cZ._3[df])), toString((parseIntValue(cU[(dc + 1)]) + dg))) | |
488 | 531 | } | |
489 | - | else $ | |
490 | - | $ | |
532 | + | else $Tuple2(dd, cU[(dc + 1)]) | |
533 | + | $Tuple3((bR._1 :+ StringEntry(ah(cR, db), de._1)), ((bR._2 + b) + de._2), (dc + 1)) | |
491 | 534 | } | |
492 | 535 | ||
493 | - | let | |
494 | - | let | |
495 | - | let | |
496 | - | let | |
497 | - | func | |
498 | - | then | |
499 | - | else | |
536 | + | let dh = { | |
537 | + | let bD = bd | |
538 | + | let bE = size(bD) | |
539 | + | let bF = $Tuple3(nil, bw, 0) | |
540 | + | func di (bH,bI) = if ((bI >= bE)) | |
541 | + | then bH | |
542 | + | else da(bH, bD[bI]) | |
500 | 543 | ||
501 | - | func | |
502 | - | then | |
544 | + | func dj (bH,bI) = if ((bI >= bE)) | |
545 | + | then bH | |
503 | 546 | else throw("List size exceeds 9") | |
504 | 547 | ||
505 | - | | |
548 | + | dj(di(di(di(di(di(di(di(di(di(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9) | |
506 | 549 | } | |
507 | - | $Tuple2(((((cT._1 ++ db._1) :+ IntegerEntry(cI, cJ)) :+ StringEntry(cK, db._2)) :+ StringEntry(cL, db._3)), cJ) | |
550 | + | let dk = bK(dh._2) | |
551 | + | $Tuple2(((((cZ._1 ++ dh._1) :+ IntegerEntry(cQ, cR)) :+ StringEntry(cS, dk)) :+ StringEntry(cT, dk)), cR) | |
508 | 552 | } | |
509 | 553 | } | |
510 | 554 | ||
511 | 555 | ||
512 | 556 | ||
513 | - | @Callable( | |
514 | - | func claimRewards () = | |
557 | + | @Callable(cc) | |
558 | + | func claimRewards () = cb(cc.caller, cc) | |
515 | 559 | ||
516 | 560 | ||
517 | 561 | ||
518 | - | @Callable( | |
519 | - | func claimRewardsByOriginCaller () = | |
562 | + | @Callable(cc) | |
563 | + | func claimRewardsByOriginCaller () = cb(cc.originCaller, cc) | |
520 | 564 | ||
521 | 565 | ||
522 | 566 | ||
523 | - | @Callable( | |
524 | - | func unclaimedRewardsREADONLY ( | |
525 | - | func | |
567 | + | @Callable(cc) | |
568 | + | func unclaimedRewardsREADONLY (cd) = { | |
569 | + | func dl (bR,bS) = ((bR + makeString([bS, "0", "0"], ":")) + "_") | |
526 | 570 | ||
527 | - | let | |
571 | + | let dm = if ((cd == "")) | |
528 | 572 | then { | |
529 | - | let | |
530 | - | let | |
531 | - | let | |
532 | - | func | |
533 | - | then | |
534 | - | else | |
573 | + | let bD = bd | |
574 | + | let bE = size(bD) | |
575 | + | let bF = "" | |
576 | + | func bG (bH,bI) = if ((bI >= bE)) | |
577 | + | then bH | |
578 | + | else dl(bH, bD[bI]) | |
535 | 579 | ||
536 | - | func | |
537 | - | then | |
580 | + | func bJ (bH,bI) = if ((bI >= bE)) | |
581 | + | then bH | |
538 | 582 | else throw("List size exceeds 9") | |
539 | 583 | ||
540 | - | | |
584 | + | bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9) | |
541 | 585 | } | |
542 | 586 | else { | |
543 | - | let | |
544 | - | let | |
545 | - | let | |
546 | - | let | |
547 | - | let | |
548 | - | let | |
549 | - | let | |
550 | - | let | |
551 | - | let | |
552 | - | func | |
553 | - | let | |
554 | - | let | |
555 | - | let | |
556 | - | let | |
557 | - | let | |
558 | - | let | |
559 | - | (( | |
587 | + | let S = addressFromStringValue(cd) | |
588 | + | let dn = valueOrElse(ba(S), $Tuple3(true, 0, 0)) | |
589 | + | let bN = dn._1 | |
590 | + | let bO = dn._2 | |
591 | + | let cf = dn._3 | |
592 | + | let bg = toBigInt(bO) | |
593 | + | let bP = ag(cd) | |
594 | + | let bh = ar(bP, -1) | |
595 | + | let bi = ar(af(), -1) | |
596 | + | func cg (bR,bS) = { | |
597 | + | let do = be(cd, bS, bg, bh, bi) | |
598 | + | let bU = do._1 | |
599 | + | let bV = do._2 | |
600 | + | let bW = do._3 | |
601 | + | let bn = do._4 | |
602 | + | let dp = valueOrElse(getInteger(al(cd, bS)), 0) | |
603 | + | ((bR + makeString([bS, toString(bU), toString(dp)], ":")) + "_") | |
560 | 604 | } | |
561 | 605 | ||
562 | - | let | |
563 | - | let | |
564 | - | let | |
565 | - | func | |
566 | - | then | |
567 | - | else | |
606 | + | let bD = bd | |
607 | + | let bE = size(bD) | |
608 | + | let bF = "" | |
609 | + | func bG (bH,bI) = if ((bI >= bE)) | |
610 | + | then bH | |
611 | + | else cg(bH, bD[bI]) | |
568 | 612 | ||
569 | - | func | |
570 | - | then | |
613 | + | func bJ (bH,bI) = if ((bI >= bE)) | |
614 | + | then bH | |
571 | 615 | else throw("List size exceeds 9") | |
572 | 616 | ||
573 | - | | |
617 | + | bJ(bG(bG(bG(bG(bG(bG(bG(bG(bG(bF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9) | |
574 | 618 | } | |
575 | - | $Tuple2(nil, dropRight( | |
619 | + | $Tuple2(nil, dropRight(dm, 1)) | |
576 | 620 | } | |
577 | 621 | ||
578 | 622 | ||
579 | 623 | ||
580 | - | @Callable( | |
581 | - | func nsbtUnstakingSYSREADONLY ( | |
582 | - | let | |
624 | + | @Callable(cc) | |
625 | + | func nsbtUnstakingSYSREADONLY (dq,dr) = { | |
626 | + | let ds = if ((dq == "")) | |
583 | 627 | then [0, 0, 0, 0] | |
584 | 628 | else { | |
585 | - | let | |
586 | - | let | |
587 | - | let | |
588 | - | let | |
589 | - | let | |
590 | - | let | |
591 | - | let | |
592 | - | let | |
593 | - | let | |
594 | - | let | |
595 | - | then | |
596 | - | else | |
597 | - | let | |
598 | - | let | |
629 | + | let S = addressFromStringValue(dq) | |
630 | + | let dt = aY() | |
631 | + | let du = dt._1 | |
632 | + | let ct = dt._2 | |
633 | + | let cu = dt._3 | |
634 | + | let dv = valueOrElse(ba(S), $Tuple3(true, 0, 0)) | |
635 | + | let bN = dv._1 | |
636 | + | let bO = dv._2 | |
637 | + | let cL = dv._3 | |
638 | + | let dw = if ((dr > bO)) | |
639 | + | then bO | |
640 | + | else dr | |
641 | + | let dx = (bO - dw) | |
642 | + | let cO = if ((dw == 0)) | |
599 | 643 | then 0 | |
600 | - | else | |
601 | - | let | |
602 | - | [ | |
644 | + | else az(invoke(G, "getUnstakeComissionAmountREADONLY", [dw, cL, cu], nil)) | |
645 | + | let dy = (dw - cO) | |
646 | + | [bO, dx, dy, cO] | |
603 | 647 | } | |
604 | - | $Tuple2(nil, | |
648 | + | $Tuple2(nil, ds) | |
605 | 649 | } | |
606 | 650 | ||
607 | 651 | ||
608 | 652 | ||
609 | - | @Callable( | |
610 | - | func nsbtStakingSYSREADONLY ( | |
611 | - | let | |
612 | - | if (( | |
613 | - | then $Tuple2(nil, [0, | |
653 | + | @Callable(cc) | |
654 | + | func nsbtStakingSYSREADONLY (cd,dz) = { | |
655 | + | let dA = ar(X(), 0) | |
656 | + | if ((cd == "")) | |
657 | + | then $Tuple2(nil, [0, dA, 0]) | |
614 | 658 | else { | |
615 | - | let | |
616 | - | let | |
617 | - | let | |
618 | - | let | |
619 | - | let | |
620 | - | $Tuple2(nil, [ | |
659 | + | let S = av(cd) | |
660 | + | let dB = valueOrElse(ba(S), $Tuple3(true, 0, 0)) | |
661 | + | let bN = dB._1 | |
662 | + | let dC = dB._2 | |
663 | + | let cf = dB._3 | |
664 | + | $Tuple2(nil, [dC, dA, cf]) | |
621 | 665 | } | |
622 | 666 | } | |
623 | 667 | ||
624 | 668 | ||
625 | - | @Verifier( | |
626 | - | func | |
627 | - | let | |
628 | - | let | |
629 | - | let | |
669 | + | @Verifier(dD) | |
670 | + | func dE () = { | |
671 | + | let dF = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], b) | |
672 | + | let dG = split(valueOrElse(getString(F, "%s__multisig"), dF), b) | |
673 | + | let dH = ((((if (sigVerify(dD.bodyBytes, dD.proofs[0], fromBase58String(dG[0]))) | |
630 | 674 | then 1 | |
631 | - | else 0) + (if (sigVerify( | |
675 | + | else 0) + (if (sigVerify(dD.bodyBytes, dD.proofs[1], fromBase58String(dG[1]))) | |
632 | 676 | then 1 | |
633 | - | else 0)) + (if (sigVerify( | |
677 | + | else 0)) + (if (sigVerify(dD.bodyBytes, dD.proofs[2], fromBase58String(dG[2]))) | |
634 | 678 | then 1 | |
635 | - | else 0)) + (if (sigVerify( | |
679 | + | else 0)) + (if (sigVerify(dD.bodyBytes, dD.proofs[3], fromBase58String(dG[3]))) | |
636 | 680 | then 2 | |
637 | 681 | else 0)) | |
638 | - | ( | |
682 | + | (dH >= 3) | |
639 | 683 | } | |
640 | 684 |
github/deemru/w8io/169f3d6 270.62 ms ◑