tx · HAKq5ZPxuNdEToBdxVMkftzGhJnyUaW8BhJUy82p8QWi

3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy:  -0.03700000 Waves

2023.09.07 12:34 [2744795] smart account 3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy > SELF 0.00000000 Waves

{ "type": 13, "id": "HAKq5ZPxuNdEToBdxVMkftzGhJnyUaW8BhJUy82p8QWi", "fee": 3700000, "feeAssetId": null, "timestamp": 1694079257487, "version": 2, "chainId": 84, "sender": "3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy", "senderPublicKey": "9W33iCCNfmFxUbiC6XZcH5x7f6xfwC7Jb3BoExT5q2PV", "proofs": [ "fJEAPkgeTEhbTC8HyDLL7QuFy1gJZSqA25WKXieDQVfXaqs8hnD5kTfpTp7UYU62A38tFtjhMkKeUzBxcwm3M1c" ], "script": "base64:BgJfCAISCAoGCAgBAQEIEgUKAwEIAhIDCgEBEgMKAQESBAoCCAgSBAoCCAgSAwoBCBIDCgEIEgMKAQgSBAoCCAESABIAEgUKAwgIBBIDCgEIEgMKAQgSBAoCCAgSBAoCCAiLAQADU0VQAgJfXwAGU0NBTEU4AAgABU1VTFQ4AIDC1y8ADlBPT0xXRUlHSFRNVUxUBQVNVUxUOAEHd3JhcEVycgEDbXNnCQC5CQIJAMwIAgIOYm9vc3RpbmcucmlkZToJAMwIAgUDbXNnBQNuaWwCASABCHRocm93RXJyAQNtc2cJAAIBCQEHd3JhcEVycgEFA21zZwEEc3RyZgIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJAQd3cmFwRXJyAQkArAICCQCsAgICD21hbmRhdG9yeSB0aGlzLgUDa2V5Ag8gaXMgbm90IGRlZmluZWQBA2lvegIHYWRkcmVzcwNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUHYWRkcmVzcwUDa2V5AAABA2lvZAMHYWRkcmVzcwNrZXkKZGVmYXVsdFZhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQdhZGRyZXNzBQNrZXkFCmRlZmF1bHRWYWwBA2lvZgIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQdhZGRyZXNzBQNrZXkJAQd3cmFwRXJyAQkArAICCQCsAgICD21hbmRhdG9yeSB0aGlzLgUDa2V5Ag8gaXMgbm90IGRlZmluZWQBA2FicwEDdmFsAwkAZgIAAAUDdmFsCQEBLQEFA3ZhbAUDdmFsAQNhYWwBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQKdmFsQW55THlzdAUHJG1hdGNoMAUKdmFsQW55THlzdAkBCHRocm93RXJyAQIbZmFpbCB0byBjYXN0IGludG8gTGlzdFtBbnldAQJhaQEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIDSW50BAZ2YWxJbnQFByRtYXRjaDAFBnZhbEludAkBCHRocm93RXJyAQIVZmFpbCB0byBjYXN0IGludG8gSW50ARtrZXlSZWZlcnJhbHNDb250cmFjdEFkZHJlc3MACQC5CQIJAMwIAgIEJXMlcwkAzAgCAgZjb25maWcJAMwIAgIYcmVmZXJyYWxzQ29udHJhY3RBZGRyZXNzBQNuaWwFA1NFUAAecmVmZXJyYWxzQ29udHJhY3RBZGRyZXNzT3JGYWlsCQERQGV4dHJOYXRpdmUoMTA2MikBCQEEc3RyZgIFBHRoaXMJARtrZXlSZWZlcnJhbHNDb250cmFjdEFkZHJlc3MAABZrZXlSZWZlcnJhbFByb2dyYW1OYW1lCQC5CQIJAMwIAgIEJXMlcwkAzAgCAghyZWZlcnJhbAkAzAgCAgtwcm9ncmFtTmFtZQUDbmlsBQNTRVAAGnJlZmVycmFsUHJvZ3JhbU5hbWVEZWZhdWx0AgZ3eGxvY2sAE3JlZmVycmFsUHJvZ3JhbU5hbWUJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUWa2V5UmVmZXJyYWxQcm9ncmFtTmFtZQUacmVmZXJyYWxQcm9ncmFtTmFtZURlZmF1bHQBEWtleUZhY3RvcnlBZGRyZXNzAAIcJXMlc19fY29uZmlnX19mYWN0b3J5QWRkcmVzcwAYSWR4RmFjdG9yeUNmZ1N0YWtpbmdEYXBwAAEAGUlkeEZhY3RvcnlDZmdCb29zdGluZ0RhcHAAAgAUSWR4RmFjdG9yeUNmZ0lkb0RhcHAAAwAVSWR4RmFjdG9yeUNmZ1RlYW1EYXBwAAQAGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHAABQAVSWR4RmFjdG9yeUNmZ1Jlc3REYXBwAAYAGUlkeEZhY3RvcnlDZmdTbGlwcGFnZURhcHAABwAUSWR4RmFjdG9yeUNmZ0Rhb0RhcHAACAAaSWR4RmFjdG9yeUNmZ01hcmtldGluZ0RhcHAACQAaSWR4RmFjdG9yeUNmZ0d3eFJld2FyZERhcHAACgAWSWR4RmFjdG9yeUNmZ0JpcmRzRGFwcAALAQ1rZXlGYWN0b3J5Q2ZnAAIRJXNfX2ZhY3RvcnlDb25maWcBEGtleUZhY3RvcnlMcExpc3QAAhAlc19fbHBUb2tlbnNMaXN0ASZrZXlGYWN0b3J5THBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwEKbHBBc3NldFN0cgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQpscEFzc2V0U3RyCQDMCAICHm1hcHBpbmdzX19scEFzc2V0MlBvb2xDb250cmFjdAUDbmlsBQNTRVABFGtleUZhY3RvcnlQb29sV2VpZ2h0AQ9jb250cmFjdEFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICCnBvb2xXZWlnaHQJAMwIAgUPY29udHJhY3RBZGRyZXNzBQNuaWwFA1NFUAEba2V5RmFjdG9yeVBvb2xXZWlnaHRIaXN0b3J5Agtwb29sQWRkcmVzcwNudW0JAKwCAgkArAICCQCsAgICEiVzJXNfX3Bvb2xXZWlnaHRfXwULcG9vbEFkZHJlc3MCAl9fCQCkAwEFA251bQEYcmVhZEZhY3RvcnlBZGRyZXNzT3JGYWlsAAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBHN0cmYCBQR0aGlzCQERa2V5RmFjdG9yeUFkZHJlc3MAAQpyZWFkTHBMaXN0AAkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIJARhyZWFkRmFjdG9yeUFkZHJlc3NPckZhaWwACQEQa2V5RmFjdG9yeUxwTGlzdAACAAUDU0VQARRyZWFkRmFjdG9yeUNmZ09yRmFpbAEHZmFjdG9yeQkAtQkCCQEEc3RyZgIFB2ZhY3RvcnkJAQ1rZXlGYWN0b3J5Q2ZnAAUDU0VQARhnZXRCb29zdGluZ0FkZHJlc3NPckZhaWwBCmZhY3RvcnlDZmcJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUKZmFjdG9yeUNmZwUZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcAEYZ2V0RW1pc3Npb25BZGRyZXNzT3JGYWlsAQpmYWN0b3J5Q2ZnCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFCmZhY3RvcnlDZmcFGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHABF2dldFN0YWtpbmdBZGRyZXNzT3JGYWlsAQpmYWN0b3J5Q2ZnCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFCmZhY3RvcnlDZmcFGElkeEZhY3RvcnlDZmdTdGFraW5nRGFwcAEZZ2V0R3d4UmV3YXJkQWRkcmVzc09yRmFpbAEKZmFjdG9yeUNmZwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQpmYWN0b3J5Q2ZnBRpJZHhGYWN0b3J5Q2ZnR3d4UmV3YXJkRGFwcAETa2V5TWFuYWdlclB1YmxpY0tleQACFCVzX19tYW5hZ2VyUHVibGljS2V5ARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAIXJXNfX21hbmFnZXJWYXVsdEFkZHJlc3MBHmtleUVtaXNzaW9uUmF0ZVBlckJsb2NrQ3VycmVudAACGyVzJXNfX3JhdGVQZXJCbG9ja19fY3VycmVudAEha2V5RW1pc3Npb25SYXRlUGVyQmxvY2tNYXhDdXJyZW50AAIeJXMlc19fcmF0ZVBlckJsb2NrTWF4X19jdXJyZW50ARVrZXlFbWlzc2lvblN0YXJ0QmxvY2sAAholcyVzX19lbWlzc2lvbl9fc3RhcnRCbG9jawEda2V5Qm9vc3RpbmdWMkxhc3RVcGRhdGVIZWlnaHQAAhwlcyVzX19ib29zdGluZ1YyX19zdGFydEJsb2NrARVrZXlCb29zdGluZ1YySW50ZWdyYWwAAholcyVzX19ib29zdGluZ1YyX19pbnRlZ3JhbAEba2V5RW1pc3Npb25EdXJhdGlvbkluQmxvY2tzAAIYJXMlc19fZW1pc3Npb25fX2R1cmF0aW9uARNrZXlFbWlzc2lvbkVuZEJsb2NrAAIYJXMlc19fZW1pc3Npb25fX2VuZEJsb2NrAQ1rZXlOZXh0UGVyaW9kAAIOJXNfX25leHRQZXJpb2QBH2tleUd3eFJld2FyZEVtaXNzaW9uU3RhcnRIZWlnaHQAAiglcyVzX19nd3hSZXdhcmRFbWlzc2lvblBhcnRfX3N0YXJ0SGVpZ2h0AA1JZHhDZmdBc3NldElkAAEAE0lkeENmZ01pbkxvY2tBbW91bnQAAgAVSWR4Q2ZnTWluTG9ja0R1cmF0aW9uAAMAFUlkeENmZ01heExvY2tEdXJhdGlvbgAEABJJZHhDZmdNYXRoQ29udHJhY3QABQEJa2V5Q29uZmlnAAIKJXNfX2NvbmZpZwEVcmVhZENvbmZpZ0FycmF5T3JGYWlsAAkAtQkCCQEEc3RyZgIFBHRoaXMJAQlrZXlDb25maWcABQNTRVAADG1hdGhDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCCQEVcmVhZENvbmZpZ0FycmF5T3JGYWlsAAUSSWR4Q2ZnTWF0aENvbnRyYWN0AQ1mb3JtYXRDb25maWdTBQdhc3NldElkDW1pbkxvY2tBbW91bnQPbWluTG9ja0R1cmF0aW9uD21heExvY2tEdXJhdGlvbgxtYXRoQ29udHJhY3QJALkJAgkAzAgCAgglcyVkJWQlZAkAzAgCBQdhc3NldElkCQDMCAIFDW1pbkxvY2tBbW91bnQJAMwIAgUPbWluTG9ja0R1cmF0aW9uCQDMCAIFD21heExvY2tEdXJhdGlvbgkAzAgCBQxtYXRoQ29udHJhY3QFA25pbAUDU0VQAQxmb3JtYXRDb25maWcFB2Fzc2V0SWQNbWluTG9ja0Ftb3VudA9taW5Mb2NrRHVyYXRpb24PbWF4TG9ja0R1cmF0aW9uDG1hdGhDb250cmFjdAkBDWZvcm1hdENvbmZpZ1MFBQdhc3NldElkCQCkAwEFDW1pbkxvY2tBbW91bnQJAKQDAQUPbWluTG9ja0R1cmF0aW9uCQCkAwEFD21heExvY2tEdXJhdGlvbgUMbWF0aENvbnRyYWN0ARxnZXRNYW5hZ2VyVmF1bHRBZGRyZXNzT3JUaGlzAAQHJG1hdGNoMAkAoggBCQEWa2V5TWFuYWdlclZhdWx0QWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFzBQR0aGlzARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAQTbWFuYWdlclZhdWx0QWRkcmVzcwkBHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMABAckbWF0Y2gwCQCdCAIFE21hbmFnZXJWYXVsdEFkZHJlc3MJARNrZXlNYW5hZ2VyUHVibGljS2V5AAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJANkEAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBC211c3RNYW5hZ2VyAQFpBAJwZAkBCHRocm93RXJyAQIRUGVybWlzc2lvbiBkZW5pZWQEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrBgUCcGQDCQABAgUHJG1hdGNoMAIEVW5pdAMJAAACCAUBaQZjYWxsZXIFBHRoaXMGBQJwZAkAAgECC01hdGNoIGVycm9yAA5JZHhMb2NrVXNlck51bQABAA1JZHhMb2NrQW1vdW50AAIADElkeExvY2tTdGFydAADAA9JZHhMb2NrRHVyYXRpb24ABAANSWR4TG9ja1BhcmFtSwAFAA1JZHhMb2NrUGFyYW1CAAYBE2tleUxvY2tQYXJhbXNSZWNvcmQBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIKJXMlc19fbG9jawkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsBQNTRVABGnJlYWRMb2NrUGFyYW1zUmVjb3JkT3JGYWlsAQt1c2VyQWRkcmVzcwkAtQkCCQEEc3RyZgIFBHRoaXMJARNrZXlMb2NrUGFyYW1zUmVjb3JkAQULdXNlckFkZHJlc3MFA1NFUAEXZm9ybWF0TG9ja1BhcmFtc1JlY29yZFMIB3VzZXJOdW0GYW1vdW50BXN0YXJ0CGR1cmF0aW9uBnBhcmFtSwZwYXJhbUIQbGFzdFVwZFRpbWVzdGFtcAlnd3hBbW91bnQJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIFB3VzZXJOdW0JAMwIAgUGYW1vdW50CQDMCAIFBXN0YXJ0CQDMCAIFCGR1cmF0aW9uCQDMCAIFBnBhcmFtSwkAzAgCBQZwYXJhbUIJAMwIAgUQbGFzdFVwZFRpbWVzdGFtcAkAzAgCBQlnd3hBbW91bnQFA25pbAUDU0VQARZmb3JtYXRMb2NrUGFyYW1zUmVjb3JkBwd1c2VyTnVtBmFtb3VudAVzdGFydAhkdXJhdGlvbgZwYXJhbUsGcGFyYW1CCWd3eEFtb3VudAkBF2Zvcm1hdExvY2tQYXJhbXNSZWNvcmRTCAUHdXNlck51bQkApAMBBQZhbW91bnQJAKQDAQUFc3RhcnQJAKQDAQUIZHVyYXRpb24JAKQDAQUGcGFyYW1LCQCkAwEFBnBhcmFtQgkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkApAMBBQlnd3hBbW91bnQBDmtleU5leHRVc2VyTnVtAAIPJXNfX25leHRVc2VyTnVtARJrZXlVc2VyMk51bU1hcHBpbmcBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIZJXMlcyVzX19tYXBwaW5nX191c2VyMm51bQkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsBQNTRVABEmtleU51bTJVc2VyTWFwcGluZwEDbnVtCQC5CQIJAMwIAgIZJXMlcyVzX19tYXBwaW5nX19udW0ydXNlcgkAzAgCBQNudW0FA25pbAUDU0VQARZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50AQd1c2VyTnVtCQC5CQIJAMwIAgIWJXMlZCVzX19wYXJhbUJ5VXNlck51bQkAzAgCBQd1c2VyTnVtCQDMCAICBmFtb3VudAUDbmlsBQNTRVABFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sBB3VzZXJOdW0JALkJAgkAzAgCAhYlcyVkJXNfX3BhcmFtQnlVc2VyTnVtCQDMCAIFB3VzZXJOdW0JAMwIAgIFc3RhcnQFA25pbAUDU0VQARRrZXlMb2NrUGFyYW1EdXJhdGlvbgEHdXNlck51bQkAuQkCCQDMCAICFiVzJWQlc19fcGFyYW1CeVVzZXJOdW0JAMwIAgUHdXNlck51bQkAzAgCAghkdXJhdGlvbgUDbmlsBQNTRVABDWtleUxvY2tQYXJhbUsBB3VzZXJOdW0JALkJAgkAzAgCAhYlcyVkJXNfX3BhcmFtQnlVc2VyTnVtCQDMCAIFB3VzZXJOdW0JAMwIAgIBawUDbmlsBQNTRVABDWtleUxvY2tQYXJhbUIBB3VzZXJOdW0JALkJAgkAzAgCAhYlcyVkJXNfX3BhcmFtQnlVc2VyTnVtCQDMCAIFB3VzZXJOdW0JAMwIAgIBYgUDbmlsBQNTRVABFWtleUxvY2tQYXJhbUJ5UGVyaW9kSwIHdXNlck51bQZwZXJpb2QJALkJAgkAzAgCAhclcyVkJXMlZF9fcGFyYW1CeVBlcmlvZAkAzAgCBQd1c2VyTnVtCQDMCAICAWsJAMwIAgUGcGVyaW9kBQNuaWwFA1NFUAEVa2V5TG9ja1BhcmFtQnlQZXJpb2RCAgd1c2VyTnVtBnBlcmlvZAkAuQkCCQDMCAICFyVzJWQlcyVkX19wYXJhbUJ5UGVyaW9kCQDMCAIFB3VzZXJOdW0JAMwIAgIBYgkAzAgCBQZwZXJpb2QFA25pbAUDU0VQARdrZXlMb2NrUGFyYW1Ub3RhbEFtb3VudAACHiVzJXNfX3N0YXRzX19hY3RpdmVUb3RhbExvY2tlZAEga2V5U3RhdHNMb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3MAAiUlcyVzX19zdGF0c19fbG9ja3NEdXJhdGlvblN1bUluQmxvY2tzARJrZXlTdGF0c0xvY2tzQ291bnQAAhclcyVzX19zdGF0c19fbG9ja3NDb3VudAESa2V5U3RhdHNVc2Vyc0NvdW50AAIdJXMlc19fc3RhdHNfX2FjdGl2ZVVzZXJzQ291bnQBIGtleVVzZXJCb29zdEVtaXNzaW9uTGFzdElOVEVHUkFMAQd1c2VyTnVtCQC5CQIJAMwIAgIgJXMlZF9fdXNlckJvb3N0RW1pc3Npb25MYXN0SW50VjIJAMwIAgUHdXNlck51bQUDbmlsBQNTRVABImtleVVzZXJMcEJvb3N0RW1pc3Npb25MYXN0SU5URUdSQUwCB3VzZXJOdW0JbHBBc3NldElkCQC5CQIJAMwIAgIgJXMlZF9fdXNlckJvb3N0RW1pc3Npb25MYXN0SW50VjIJAMwIAgUHdXNlck51bQkAzAgCBQlscEFzc2V0SWQFA25pbAUDU0VQARdrZXlVc2VyTWF4Qm9vc3RJTlRFR1JBTAEHdXNlck51bQkAuQkCCQDMCAICESVzJWRfX21heEJvb3N0SW50CQDMCAIFB3VzZXJOdW0FA25pbAUDU0VQARhrZXlUb3RhbE1heEJvb3N0SU5URUdSQUwAAhglcyVzX19tYXhCb29zdEludF9fdG90YWwBIWtleVVzZXJCb29zdEF2YWxhaWJsZVRvQ2xhaW1Ub3RhbAEHdXNlck51bQkAuQkCCQDMCAICJCVzJWRfX3VzZXJCb29zdEF2YWxpYWJsZVRvQ2xhaW1Ub3RhbAkAzAgCBQd1c2VyTnVtBQNuaWwFA1NFUAETa2V5VXNlckJvb3N0Q2xhaW1lZAEHdXNlck51bQkAuQkCCQDMCAICFiVzJWRfX3VzZXJCb29zdENsYWltZWQJAMwIAgUHdXNlck51bQUDbmlsBQNTRVABEWtleVRvdGFsQ2FjaGVkR3d4AAIWJXMlc19fZ3d4Q2FjaGVkX190b3RhbAEba2V5VG90YWxDYWNoZWRHd3hDb3JyZWN0aXZlAAIcJXNfX2d3eENhY2hlZFRvdGFsQ29ycmVjdGl2ZQEHa2V5Vm90ZQQNYW1vdW50QXNzZXRJZAxwcmljZUFzc2V0SWQHYWRkcmVzcwVlcG9jaAkAuQkCCQDMCAICCiVzJXMlcyVzJWQJAMwIAgIEdm90ZQkAzAgCBQ1hbW91bnRBc3NldElkCQDMCAIFDHByaWNlQXNzZXRJZAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgkApAMBBQVlcG9jaAUDbmlsBQNTRVABFWtleVN0YXJ0SGVpZ2h0QnlFcG9jaAEFZXBvY2gJALkJAgkAzAgCAgQlcyVkCQDMCAICC3N0YXJ0SGVpZ2h0CQDMCAIJAKQDAQUFZXBvY2gFA25pbAUDU0VQARFrZXlDdXJyZW50RXBvY2hVaQAJALkJAgkAzAgCAgIlcwkAzAgCAg5jdXJyZW50RXBvY2hVaQUDbmlsBQNTRVABFWtleVZvdGluZ1Jlc3VsdFN0YWtlZAIMbHBBc3NldElkU3RyBWVwb2NoCQC5CQIJAMwIAgIGJXMlcyVkCQDMCAICEnZvdGluZ1Jlc3VsdFN0YWtlZAkAzAgCBQxscEFzc2V0SWRTdHIJAMwIAgkApAMBBQVlcG9jaAUDbmlsBQNTRVABHWtleVZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsAgxscEFzc2V0SWRTdHIFZXBvY2gJALkJAgkAzAgCAgYlcyVzJWQJAMwIAgIadm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwJAMwIAgUMbHBBc3NldElkU3RyCQDMCAIJAKQDAQUFZXBvY2gFA25pbAUDU0VQASVrZXlWb3RpbmdSZXN1bHRTdGFrZWRMYXN0VXBkYXRlSGVpZ2h0AgxscEFzc2V0SWRTdHIFZXBvY2gJALkJAgkAzAgCAgYlcyVzJWQJAMwIAgIqdm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxMYXN0VXBkYXRlSGVpZ2h0CQDMCAIFDGxwQXNzZXRJZFN0cgkAzAgCCQCkAwEFBWVwb2NoBQNuaWwFA1NFUAEha2V5Vm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxMYXN0AwxscEFzc2V0SWRTdHIHYWRkcmVzcwVlcG9jaAkAuQkCCQDMCAICCCVzJXMlcyVkCQDMCAICHnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsTGFzdAkAzAgCBQxscEFzc2V0SWRTdHIJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAIJAKQDAQUFZXBvY2gFA25pbAUDU0VQARVrZXlWb3RlU3Rha2VkSW50ZWdyYWwDDGxwQXNzZXRJZFN0cgdhZGRyZXNzBWVwb2NoCQC5CQIJAMwIAgIIJXMlcyVzJWQJAMwIAgISdm90ZVN0YWtlZEludGVncmFsCQDMCAIFDGxwQXNzZXRJZFN0cgkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgkApAMBBQVlcG9jaAUDbmlsBQNTRVABHWtleVZvdGVTdGFrZWRMYXN0VXBkYXRlSGVpZ2h0AwxscEFzc2V0SWRTdHIHYWRkcmVzcwVlcG9jaAkAuQkCCQDMCAICCCVzJXMlcyVkCQDMCAICInZvdGVTdGFrZWRJbnRlZ3JhbExhc3RVcGRhdGVIZWlnaHQJAMwIAgUMbHBBc3NldElkU3RyCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCCQCkAwEFBWVwb2NoBQNuaWwFA1NFUAEZa2V5Vm90ZVN0YWtlZEludGVncmFsTGFzdAMMbHBBc3NldElkU3RyB2FkZHJlc3MFZXBvY2gJALkJAgkAzAgCAgglcyVzJXMlZAkAzAgCAhZ2b3RlU3Rha2VkSW50ZWdyYWxMYXN0CQDMCAIFDGxwQXNzZXRJZFN0cgkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgkApAMBBQVlcG9jaAUDbmlsBQNTRVABD2tleVN0YWtlZEJ5VXNlcgIOdXNlckFkZHJlc3NTdHIMbHBBc3NldElkU3RyCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICBnN0YWtlZAkAzAgCBQ51c2VyQWRkcmVzc1N0cgkAzAgCBQxscEFzc2V0SWRTdHIFA25pbAUDU0VQAA9mYWN0b3J5Q29udHJhY3QJARhyZWFkRmFjdG9yeUFkZHJlc3NPckZhaWwAAApmYWN0b3J5Q2ZnCQEUcmVhZEZhY3RvcnlDZmdPckZhaWwBBQ9mYWN0b3J5Q29udHJhY3QAEGVtaXNzaW9uQ29udHJhY3QJARhnZXRFbWlzc2lvbkFkZHJlc3NPckZhaWwBBQpmYWN0b3J5Q2ZnAA9zdGFraW5nQ29udHJhY3QJARdnZXRTdGFraW5nQWRkcmVzc09yRmFpbAEFCmZhY3RvcnlDZmcAEWd3eFJld2FyZENvbnRyYWN0CQEZZ2V0R3d4UmV3YXJkQWRkcmVzc09yRmFpbAEFCmZhY3RvcnlDZmcAFmxwU3Rha2luZ1Bvb2xzQ29udHJhY3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkAuQkCCQDMCAICAiVzCQDMCAICFmxwU3Rha2luZ1Bvb2xzQ29udHJhY3QFA25pbAUDU0VQCQEHd3JhcEVycgECLmxwX3N0YWtpbmdfcG9vbHMgY29udHJhY3QgYWRkcmVzcyBpcyB1bmRlZmluZWQJAQd3cmFwRXJyAQIpaW52YWxpZCBscF9zdGFraW5nX3Bvb2xzIGNvbnRyYWN0IGFkZHJlc3MAGWtleVZvdGluZ0VtaXNzaW9uQ29udHJhY3QJALkJAgkAzAgCAgIlcwkAzAgCAhZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0BQNuaWwFA1NFUAAWdm90aW5nRW1pc3Npb25Db250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUPZmFjdG9yeUNvbnRyYWN0BRlrZXlWb3RpbmdFbWlzc2lvbkNvbnRyYWN0AApib29zdENvZWZmCgABQAkA/AcEBRBlbWlzc2lvbkNvbnRyYWN0AhVnZXRCb29zdENvZWZmUkVBRE9OTFkFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAERZ2V0VG90YWxDYWNoZWRHd3gBB2NvcnJlY3QEDmN1cnJlbnRFcG9jaFVpCQERQGV4dHJOYXRpdmUoMTA1MCkCBRZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0CQERa2V5Q3VycmVudEVwb2NoVWkABA5rZXlUYXJnZXRFcG9jaAkAuQkCCQDMCAICBCVzJXMJAMwIAgIpdG90YWxDYWNoZWRHd3hDb3JyZWN0aW9uX19hY3RpdmF0aW9uRXBvY2gFA25pbAUDU0VQBBF0YXJnZXRFcG9jaE9wdGlvbgkAmggCBQR0aGlzBQ5rZXlUYXJnZXRFcG9jaAQRdG90YWxDYWNoZWRHd3hSYXcJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBEWtleVRvdGFsQ2FjaGVkR3d4AAAABBVpc0NvcnJlY3Rpb25BY3RpdmF0ZWQDCQEJaXNEZWZpbmVkAQURdGFyZ2V0RXBvY2hPcHRpb24JAGcCBQ5jdXJyZW50RXBvY2hVaQkBBXZhbHVlAQURdGFyZ2V0RXBvY2hPcHRpb24HBApjb3JyZWN0aXZlAwMFFWlzQ29ycmVjdGlvbkFjdGl2YXRlZAUHY29ycmVjdAcJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBG2tleVRvdGFsQ2FjaGVkR3d4Q29ycmVjdGl2ZQAAAAAACQCWAwEJAMwIAgAACQDMCAIJAGQCBRF0b3RhbENhY2hlZEd3eFJhdwUKY29ycmVjdGl2ZQUDbmlsAQxIaXN0b3J5RW50cnkIBHR5cGUEdXNlcgZhbW91bnQJbG9ja1N0YXJ0CGR1cmF0aW9uAWsBYgFpBApoaXN0b3J5S0VZCQC5CQIJAMwIAgIRJXMlcyVzJXNfX2hpc3RvcnkJAMwIAgUEdHlwZQkAzAgCBQR1c2VyCQDMCAIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAUDbmlsBQNTRVAEC2hpc3RvcnlEQVRBCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBCAUJbGFzdEJsb2NrBmhlaWdodAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAKQDAQUGYW1vdW50CQDMCAIJAKQDAQUJbG9ja1N0YXJ0CQDMCAIJAKQDAQUIZHVyYXRpb24JAMwIAgkApAMBBQFrCQDMCAIJAKQDAQUBYgUDbmlsBQNTRVAJAQtTdHJpbmdFbnRyeQIFCmhpc3RvcnlLRVkFC2hpc3RvcnlEQVRBAQpTdGF0c0VudHJ5BA50b3RhbExvY2tlZEluYwtkdXJhdGlvbkluYwxsb2NrQ291bnRJbmMNdXNlcnNDb3VudEluYwQbbG9ja3NEdXJhdGlvblN1bUluQmxvY2tzS0VZCQEga2V5U3RhdHNMb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3MABA1sb2Nrc0NvdW50S0VZCQESa2V5U3RhdHNMb2Nrc0NvdW50AAQNdXNlcnNDb3VudEtFWQkBEmtleVN0YXRzVXNlcnNDb3VudAAEDnRvdGFsQW1vdW50S0VZCQEXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQABBhsb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3MJAQNpb3oCBQR0aGlzBRtsb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3NLRVkECmxvY2tzQ291bnQJAQNpb3oCBQR0aGlzBQ1sb2Nrc0NvdW50S0VZBAp1c2Vyc0NvdW50CQEDaW96AgUEdGhpcwUNdXNlcnNDb3VudEtFWQQLdG90YWxBbW91bnQJAQNpb3oCBQR0aGlzBQ50b3RhbEFtb3VudEtFWQkAzAgCCQEMSW50ZWdlckVudHJ5AgUbbG9ja3NEdXJhdGlvblN1bUluQmxvY2tzS0VZCQBkAgUYbG9ja3NEdXJhdGlvblN1bUluQmxvY2tzBQtkdXJhdGlvbkluYwkAzAgCCQEMSW50ZWdlckVudHJ5AgUNbG9ja3NDb3VudEtFWQkAZAIFCmxvY2tzQ291bnQFDGxvY2tDb3VudEluYwkAzAgCCQEMSW50ZWdlckVudHJ5AgUNdXNlcnNDb3VudEtFWQkAZAIFCnVzZXJzQ291bnQFDXVzZXJzQ291bnRJbmMJAMwIAgkBDEludGVnZXJFbnRyeQIFDnRvdGFsQW1vdW50S0VZCQBkAgULdG90YWxBbW91bnQFDnRvdGFsTG9ja2VkSW5jBQNuaWwBDWNhbGNHd3hBbW91bnQDBGtSYXcEYlJhdwFoBAVTQ0FMRQDoBwkAaQIJAGQCCQBoAgUEa1JhdwUBaAUEYlJhdwUFU0NBTEUBD0xvY2tQYXJhbXNFbnRyeQgLdXNlckFkZHJlc3MHdXNlck51bQZhbW91bnQFc3RhcnQIZHVyYXRpb24BawFiBnBlcmlvZAQNdXNlckFtb3VudEtFWQkBFmtleUxvY2tQYXJhbVVzZXJBbW91bnQBBQd1c2VyTnVtBA1zdGFydEJsb2NrS0VZCQEWa2V5TG9ja1BhcmFtU3RhcnRCbG9jawEFB3VzZXJOdW0EC2R1cmF0aW9uS0VZCQEUa2V5TG9ja1BhcmFtRHVyYXRpb24BBQd1c2VyTnVtBARrS0VZCQENa2V5TG9ja1BhcmFtSwEFB3VzZXJOdW0EBGJLRVkJAQ1rZXlMb2NrUGFyYW1CAQUHdXNlck51bQQMa0J5UGVyaW9kS0VZCQEVa2V5TG9ja1BhcmFtQnlQZXJpb2RLAgUHdXNlck51bQUGcGVyaW9kBAxiQnlQZXJpb2RLRVkJARVrZXlMb2NrUGFyYW1CeVBlcmlvZEICBQd1c2VyTnVtBQZwZXJpb2QECWd3eEFtb3VudAkBDWNhbGNHd3hBbW91bnQDBQFrBQFiBQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIFDXVzZXJBbW91bnRLRVkFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNc3RhcnRCbG9ja0tFWQUFc3RhcnQJAMwIAgkBDEludGVnZXJFbnRyeQIFC2R1cmF0aW9uS0VZBQhkdXJhdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUEa0tFWQUBawkAzAgCCQEMSW50ZWdlckVudHJ5AgUEYktFWQUBYgkAzAgCCQEMSW50ZWdlckVudHJ5AgUMa0J5UGVyaW9kS0VZBQFrCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxiQnlQZXJpb2RLRVkFAWIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBE2tleUxvY2tQYXJhbXNSZWNvcmQBBQt1c2VyQWRkcmVzcwkBFmZvcm1hdExvY2tQYXJhbXNSZWNvcmQHBQd1c2VyTnVtBQZhbW91bnQFBXN0YXJ0BQhkdXJhdGlvbgUBawUBYgUJZ3d4QW1vdW50BQNuaWwBImV4dHJhY3RPcHRpb25hbFBheW1lbnRBbW91bnRPckZhaWwCAWkPZXhwZWN0ZWRBc3NldElkAwkAZgIJAJADAQgFAWkIcGF5bWVudHMAAQkBCHRocm93RXJyAQIbb25seSBvbmUgcGF5bWVudCBpcyBhbGxvd2VkAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAAAABANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAUPZXhwZWN0ZWRBc3NldElkCQEIdGhyb3dFcnIBAhtpbnZhbGlkIGFzc2V0IGlkIGluIHBheW1lbnQIBQNwbXQGYW1vdW50ARljYWxjVXNlckd3eEFtb3VudEF0SGVpZ2h0Agt1c2VyQWRkcmVzcwx0YXJnZXRIZWlnaHQEBUVNUFRZAgVlbXB0eQQSdXNlcjJOdW1NYXBwaW5nS0VZCQESa2V5VXNlcjJOdW1NYXBwaW5nAQULdXNlckFkZHJlc3MEB3VzZXJOdW0JAQt2YWx1ZU9yRWxzZQIJAKIIAQUSdXNlcjJOdW1NYXBwaW5nS0VZBQVFTVBUWQQBawkBC3ZhbHVlT3JFbHNlAgkAnwgBCQENa2V5TG9ja1BhcmFtSwEFB3VzZXJOdW0AAAQBYgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQENa2V5TG9ja1BhcmFtQgEFB3VzZXJOdW0AAAQNZ3d4QW1vdW50Q2FsYwkBDWNhbGNHd3hBbW91bnQDBQFrBQFiBQx0YXJnZXRIZWlnaHQECWd3eEFtb3VudAMJAGYCAAAFDWd3eEFtb3VudENhbGMAAAUNZ3d4QW1vdW50Q2FsYwUJZ3d4QW1vdW50ARRjYWxjQ3VycmVudEd3eEFtb3VudAELdXNlckFkZHJlc3MJARljYWxjVXNlckd3eEFtb3VudEF0SGVpZ2h0AgULdXNlckFkZHJlc3MFBmhlaWdodAEaZ2V0Vm90aW5nRW1pc3Npb25FcG9jaEluZm8ABA0kdDAxNzE4NjE3NDc2BA5jdXJyZW50RXBvY2hVaQkBBXZhbHVlAQkAmggCBRZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0CQERa2V5Q3VycmVudEVwb2NoVWkABBJsYXN0RmluYWxpemVkRXBvY2gJAGUCBQ5jdXJyZW50RXBvY2hVaQABAwkAZgIAAAUSbGFzdEZpbmFsaXplZEVwb2NoCQEIdGhyb3dFcnIBAg1pbnZhbGlkIGVwb2NoCQCUCgIFDmN1cnJlbnRFcG9jaFVpBRJsYXN0RmluYWxpemVkRXBvY2gEDmN1cnJlbnRFcG9jaFVpCAUNJHQwMTcxODYxNzQ3NgJfMQQSbGFzdEZpbmFsaXplZEVwb2NoCAUNJHQwMTcxODYxNzQ3NgJfMgQXY3VycmVudEVwb2NoU3RhcnRIZWlnaHQJAQV2YWx1ZQEJAJoIAgUWdm90aW5nRW1pc3Npb25Db250cmFjdAkBFWtleVN0YXJ0SGVpZ2h0QnlFcG9jaAEFDmN1cnJlbnRFcG9jaFVpCQCUCgIFEmxhc3RGaW5hbGl6ZWRFcG9jaAUXY3VycmVudEVwb2NoU3RhcnRIZWlnaHQBGGdldFBvb2xBc3NldHNCeUxwQXNzZXRJZAEMbHBBc3NldElkU3RyBBBpZHhBbW91bnRBc3NldElkAAQED2lkeFByaWNlQXNzZXRJZAAFBAdwb29sQ2ZnCgABQAkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCIGdldFBvb2xDb25maWdCeUxwQXNzZXRJZFJFQURPTkxZCQDMCAIFDGxwQXNzZXRJZFN0cgUDbmlsBQNuaWwDCQABAgUBQAIJTGlzdFtBbnldBQFACQACAQkArAICCQADAQUBQAIeIGNvdWxkbid0IGJlIGNhc3QgdG8gTGlzdFtBbnldBA1hbW91bnRBc3NldElkCgABQAkAkQMCBQdwb29sQ2ZnBRBpZHhBbW91bnRBc3NldElkAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwQMcHJpY2VBc3NldElkCgABQAkAkQMCBQdwb29sQ2ZnBQ9pZHhQcmljZUFzc2V0SWQDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nCQCUCgIFDWFtb3VudEFzc2V0SWQFDHByaWNlQXNzZXRJZAEUZ2V0VXNlclZvdGVGaW5hbGl6ZWQCDGxwQXNzZXRJZFN0cg51c2VyQWRkcmVzc1N0cgQLdXNlckFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDnVzZXJBZGRyZXNzU3RyBA0kdDAxODE2NzE4MjQ3CQEaZ2V0Vm90aW5nRW1pc3Npb25FcG9jaEluZm8ABBJsYXN0RmluYWxpemVkRXBvY2gIBQ0kdDAxODE2NzE4MjQ3Al8xBBdjdXJyZW50RXBvY2hTdGFydEhlaWdodAgFDSR0MDE4MTY3MTgyNDcCXzIEDSR0MDE4MjUwMTgzMjUJARhnZXRQb29sQXNzZXRzQnlMcEFzc2V0SWQBBQxscEFzc2V0SWRTdHIEDWFtb3VudEFzc2V0SWQIBQ0kdDAxODI1MDE4MzI1Al8xBAxwcmljZUFzc2V0SWQIBQ0kdDAxODI1MDE4MzI1Al8yBAt1c2VyVm90ZUtleQkBB2tleVZvdGUEBQ1hbW91bnRBc3NldElkBQxwcmljZUFzc2V0SWQFC3VzZXJBZGRyZXNzBRJsYXN0RmluYWxpemVkRXBvY2gECHVzZXJWb3RlCQELdmFsdWVPckVsc2UCCQCaCAIFFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QFC3VzZXJWb3RlS2V5AAAFCHVzZXJWb3RlARFnZXRVc2VyVm90ZVN0YWtlZAIMbHBBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyBAxzdGFrZWRCeVVzZXIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5U3Rha2VkQnlVc2VyAgUOdXNlckFkZHJlc3NTdHIFDGxwQXNzZXRJZFN0cgAABAh1c2VyVm90ZQkBFGdldFVzZXJWb3RlRmluYWxpemVkAgUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgMJAAACBQxzdGFrZWRCeVVzZXIAAAAABQh1c2VyVm90ZQEVZ2V0Vm90aW5nUmVzdWx0U3Rha2VkAQxscEFzc2V0SWRTdHIEDSR0MDE4ODY5MTg5NDkJARpnZXRWb3RpbmdFbWlzc2lvbkVwb2NoSW5mbwAEEmxhc3RGaW5hbGl6ZWRFcG9jaAgFDSR0MDE4ODY5MTg5NDkCXzEEF2N1cnJlbnRFcG9jaFN0YXJ0SGVpZ2h0CAUNJHQwMTg4NjkxODk0OQJfMgQXdm90aW5nUmVzdWx0U3Rha2VkU3RhcnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUWdm90aW5nRW1pc3Npb25Db250cmFjdAkBFWtleVZvdGluZ1Jlc3VsdFN0YWtlZAIFDGxwQXNzZXRJZFN0cgUSbGFzdEZpbmFsaXplZEVwb2NoAAAEEnZvdGluZ1Jlc3VsdFN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEVa2V5Vm90aW5nUmVzdWx0U3Rha2VkAgUMbHBBc3NldElkU3RyBRJsYXN0RmluYWxpemVkRXBvY2gFF3ZvdGluZ1Jlc3VsdFN0YWtlZFN0YXJ0BRJ2b3RpbmdSZXN1bHRTdGFrZWQBHWdldFZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsAQxscEFzc2V0SWRTdHIEDSR0MDE5MzExMTkzOTEJARpnZXRWb3RpbmdFbWlzc2lvbkVwb2NoSW5mbwAEEmxhc3RGaW5hbGl6ZWRFcG9jaAgFDSR0MDE5MzExMTkzOTECXzEEF2N1cnJlbnRFcG9jaFN0YXJ0SGVpZ2h0CAUNJHQwMTkzMTExOTM5MQJfMgQSdm90aW5nUmVzdWx0U3Rha2VkCQEVZ2V0Vm90aW5nUmVzdWx0U3Rha2VkAQUMbHBBc3NldElkU3RyBB52b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbFByZXYJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBHWtleVZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsAgUMbHBBc3NldElkU3RyBRJsYXN0RmluYWxpemVkRXBvY2gAAAQidm90aW5nUmVzdWx0U3Rha2VkTGFzdFVwZGF0ZUhlaWdodAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEla2V5Vm90aW5nUmVzdWx0U3Rha2VkTGFzdFVwZGF0ZUhlaWdodAIFDGxwQXNzZXRJZFN0cgUSbGFzdEZpbmFsaXplZEVwb2NoBRdjdXJyZW50RXBvY2hTdGFydEhlaWdodAQcdm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxEaAkAZQIFBmhlaWdodAUidm90aW5nUmVzdWx0U3Rha2VkTGFzdFVwZGF0ZUhlaWdodAQadm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwJAGQCCQBoAgUcdm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxEaAUSdm90aW5nUmVzdWx0U3Rha2VkBR52b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbFByZXYFGnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsASFyZWZyZXNoVm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwCDGxwQXNzZXRJZFN0cg9zdGFrZWRWb3RlRGVsdGEEDSR0MDIwMjI4MjAzMDgJARpnZXRWb3RpbmdFbWlzc2lvbkVwb2NoSW5mbwAEEmxhc3RGaW5hbGl6ZWRFcG9jaAgFDSR0MDIwMjI4MjAzMDgCXzEEF2N1cnJlbnRFcG9jaFN0YXJ0SGVpZ2h0CAUNJHQwMjAyMjgyMDMwOAJfMgQSdm90aW5nUmVzdWx0U3Rha2VkCQEVZ2V0Vm90aW5nUmVzdWx0U3Rha2VkAQUMbHBBc3NldElkU3RyBBV2b3RpbmdSZXN1bHRTdGFrZWROZXcJAGQCBRJ2b3RpbmdSZXN1bHRTdGFrZWQFD3N0YWtlZFZvdGVEZWx0YQQadm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwJAR1nZXRWb3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbAEFDGxwQXNzZXRJZFN0cgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFWtleVZvdGluZ1Jlc3VsdFN0YWtlZAIFDGxwQXNzZXRJZFN0cgUSbGFzdEZpbmFsaXplZEVwb2NoBRV2b3RpbmdSZXN1bHRTdGFrZWROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJASVrZXlWb3RpbmdSZXN1bHRTdGFrZWRMYXN0VXBkYXRlSGVpZ2h0AgUMbHBBc3NldElkU3RyBRJsYXN0RmluYWxpemVkRXBvY2gFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHWtleVZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsAgUMbHBBc3NldElkU3RyBRJsYXN0RmluYWxpemVkRXBvY2gFGnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsBQNuaWwBGWdldFVzZXJWb3RlU3Rha2VkSW50ZWdyYWwCDGxwQXNzZXRJZFN0cg51c2VyQWRkcmVzc1N0cgQNJHQwMjA5MTkyMDk5OQkBGmdldFZvdGluZ0VtaXNzaW9uRXBvY2hJbmZvAAQSbGFzdEZpbmFsaXplZEVwb2NoCAUNJHQwMjA5MTkyMDk5OQJfMQQXY3VycmVudEVwb2NoU3RhcnRIZWlnaHQIBQ0kdDAyMDkxOTIwOTk5Al8yBAt1c2VyQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUOdXNlckFkZHJlc3NTdHIEDnVzZXJWb3RlU3Rha2VkCQERZ2V0VXNlclZvdGVTdGFrZWQCBQxscEFzc2V0SWRTdHIFDnVzZXJBZGRyZXNzU3RyBBp1c2VyVm90ZVN0YWtlZEludGVncmFsUHJldgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEVa2V5Vm90ZVN0YWtlZEludGVncmFsAwUMbHBBc3NldElkU3RyBQt1c2VyQWRkcmVzcwUSbGFzdEZpbmFsaXplZEVwb2NoAAAEHnVzZXJWb3RlU3Rha2VkTGFzdFVwZGF0ZUhlaWdodAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEda2V5Vm90ZVN0YWtlZExhc3RVcGRhdGVIZWlnaHQDBQxscEFzc2V0SWRTdHIFC3VzZXJBZGRyZXNzBRJsYXN0RmluYWxpemVkRXBvY2gFF2N1cnJlbnRFcG9jaFN0YXJ0SGVpZ2h0BBh1c2VyVm90ZVN0YWtlZEludGVncmFsRGgJAGUCBQZoZWlnaHQFHnVzZXJWb3RlU3Rha2VkTGFzdFVwZGF0ZUhlaWdodAQWdXNlclZvdGVTdGFrZWRJbnRlZ3JhbAkAZAIJAGgCBRh1c2VyVm90ZVN0YWtlZEludGVncmFsRGgFDnVzZXJWb3RlU3Rha2VkBRp1c2VyVm90ZVN0YWtlZEludGVncmFsUHJldgUWdXNlclZvdGVTdGFrZWRJbnRlZ3JhbAEZcmVmcmVzaFZvdGVTdGFrZWRJbnRlZ3JhbAMMbHBBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyBGVkZ2UEDSR0MDIxNzg3MjE4NjcJARpnZXRWb3RpbmdFbWlzc2lvbkVwb2NoSW5mbwAEEmxhc3RGaW5hbGl6ZWRFcG9jaAgFDSR0MDIxNzg3MjE4NjcCXzEEF2N1cnJlbnRFcG9jaFN0YXJ0SGVpZ2h0CAUNJHQwMjE3ODcyMTg2NwJfMgQLdXNlckFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDnVzZXJBZGRyZXNzU3RyBBF1c2VyVm90ZUZpbmFsaXplZAkBFGdldFVzZXJWb3RlRmluYWxpemVkAgUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgQHYWN0aW9ucwMJAAACBRF1c2VyVm90ZUZpbmFsaXplZAAABQNuaWwED3N0YWtlZFZvdGVEZWx0YQMFBGVkZ2UFEXVzZXJWb3RlRmluYWxpemVkCQEBLQEFEXVzZXJWb3RlRmluYWxpemVkBBN2b3RpbmdSZXN1bHRBY3Rpb25zCQEhcmVmcmVzaFZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsAgUMbHBBc3NldElkU3RyBQ9zdGFrZWRWb3RlRGVsdGEEFnVzZXJWb3RlU3Rha2VkSW50ZWdyYWwJARlnZXRVc2VyVm90ZVN0YWtlZEludGVncmFsAgUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgQLdm90ZUFjdGlvbnMJAMwIAgkBDEludGVnZXJFbnRyeQIJAR1rZXlWb3RlU3Rha2VkTGFzdFVwZGF0ZUhlaWdodAMFDGxwQXNzZXRJZFN0cgULdXNlckFkZHJlc3MFEmxhc3RGaW5hbGl6ZWRFcG9jaAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEVa2V5Vm90ZVN0YWtlZEludGVncmFsAwUMbHBBc3NldElkU3RyBQt1c2VyQWRkcmVzcwUSbGFzdEZpbmFsaXplZEVwb2NoBRZ1c2VyVm90ZVN0YWtlZEludGVncmFsBQNuaWwJAM4IAgUTdm90aW5nUmVzdWx0QWN0aW9ucwULdm90ZUFjdGlvbnMFB2FjdGlvbnMBG2dldFN0YWtlZFZvdGVzSW50ZWdyYWxzRGlmZgIMbHBBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyBA0kdDAyMjcyMTIyODAxCQEaZ2V0Vm90aW5nRW1pc3Npb25FcG9jaEluZm8ABBJsYXN0RmluYWxpemVkRXBvY2gIBQ0kdDAyMjcyMTIyODAxAl8xBBdjdXJyZW50RXBvY2hTdGFydEhlaWdodAgFDSR0MDIyNzIxMjI4MDECXzIEC3VzZXJBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBQ51c2VyQWRkcmVzc1N0cgQddXNlclZvdGVTdGFrZWRJbnRlZ3JhbExhc3RLZXkJARlrZXlWb3RlU3Rha2VkSW50ZWdyYWxMYXN0AwUMbHBBc3NldElkU3RyBQt1c2VyQWRkcmVzcwUSbGFzdEZpbmFsaXplZEVwb2NoBBp1c2VyVm90ZVN0YWtlZEludGVncmFsTGFzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBR11c2VyVm90ZVN0YWtlZEludGVncmFsTGFzdEtleQAABCF2b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbExhc3RLZXkJASFrZXlWb3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbExhc3QDBQxscEFzc2V0SWRTdHIFC3VzZXJBZGRyZXNzBRJsYXN0RmluYWxpemVkRXBvY2gEHnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsTGFzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBSF2b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbExhc3RLZXkAAAQWdXNlclZvdGVTdGFrZWRJbnRlZ3JhbAkBGWdldFVzZXJWb3RlU3Rha2VkSW50ZWdyYWwCBQxscEFzc2V0SWRTdHIFDnVzZXJBZGRyZXNzU3RyBBp2b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbAkBHWdldFZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsAQUMbHBBc3NldElkU3RyBBp1c2VyVm90ZVN0YWtlZEludGVncmFsRGlmZgkAZQIFFnVzZXJWb3RlU3Rha2VkSW50ZWdyYWwFGnVzZXJWb3RlU3Rha2VkSW50ZWdyYWxMYXN0BB52b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbERpZmYJAGUCBRp2b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbAUedm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxMYXN0CQCVCgMJAMwIAgkBDEludGVnZXJFbnRyeQIFHXVzZXJWb3RlU3Rha2VkSW50ZWdyYWxMYXN0S2V5BRZ1c2VyVm90ZVN0YWtlZEludGVncmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSF2b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbExhc3RLZXkFGnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsBQNuaWwFGnVzZXJWb3RlU3Rha2VkSW50ZWdyYWxEaWZmBR52b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbERpZmYBHHJlZnJlc2hCb29zdEVtaXNzaW9uSW50ZWdyYWwABBJ3eEVtaXNzaW9uUGVyQmxvY2sJAQNpb2YCBRBlbWlzc2lvbkNvbnRyYWN0CQEea2V5RW1pc3Npb25SYXRlUGVyQmxvY2tDdXJyZW50AAQgYm9vc3RpbmdWMkxhc3RVcGRhdGVIZWlnaHRPcHRpb24JAJoIAgUEdGhpcwkBHWtleUJvb3N0aW5nVjJMYXN0VXBkYXRlSGVpZ2h0AAQYYm9vc3RpbmdWMkluZ2VyZ2FsT3B0aW9uCQCaCAIFBHRoaXMJARVrZXlCb29zdGluZ1YySW50ZWdyYWwABAtlbWlzc2lvbkVuZAkBA2lvZgIFEGVtaXNzaW9uQ29udHJhY3QJARNrZXlFbWlzc2lvbkVuZEJsb2NrAAQBaAMJAGYCBQZoZWlnaHQFC2VtaXNzaW9uRW5kBQtlbWlzc2lvbkVuZAUGaGVpZ2h0BAJkaAQHJG1hdGNoMAUgYm9vc3RpbmdWMkxhc3RVcGRhdGVIZWlnaHRPcHRpb24DCQABAgUHJG1hdGNoMAIDSW50BBBsYXN0VXBkYXRlSGVpZ2h0BQckbWF0Y2gwCQCWAwEJAMwIAgkAZQIFAWgFEGxhc3RVcGRhdGVIZWlnaHQJAMwIAgAABQNuaWwDCQABAgUHJG1hdGNoMAIEVW5pdAAACQACAQILTWF0Y2ggZXJyb3IEFWJvb3N0RW1pc3Npb25QZXJCbG9jawkAaQIJAGgCBRJ3eEVtaXNzaW9uUGVyQmxvY2sJAGUCBQpib29zdENvZWZmAAEFCmJvb3N0Q29lZmYEGWJvb3N0RW1pc3Npb25JbnRlZ3JhbFByZXYJAQt2YWx1ZU9yRWxzZQIFGGJvb3N0aW5nVjJJbmdlcmdhbE9wdGlvbgAABBVib29zdEVtaXNzaW9uSW50ZWdyYWwJAGQCCQBoAgUVYm9vc3RFbWlzc2lvblBlckJsb2NrBQJkaAUZYm9vc3RFbWlzc2lvbkludGVncmFsUHJldgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEVa2V5Qm9vc3RpbmdWMkludGVncmFsAAUVYm9vc3RFbWlzc2lvbkludGVncmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEda2V5Qm9vc3RpbmdWMkxhc3RVcGRhdGVIZWlnaHQABQZoZWlnaHQFA25pbAUVYm9vc3RFbWlzc2lvbkludGVncmFsARRpbnRlcm5hbENsYWltV3hCb29zdAMMbHBBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyCHJlYWRPbmx5BBB1c2VyUmVjb3JkT3B0aW9uCQCdCAIFBHRoaXMJARNrZXlMb2NrUGFyYW1zUmVjb3JkAQUOdXNlckFkZHJlc3NTdHIDCQAAAgUQdXNlclJlY29yZE9wdGlvbgUEdW5pdAkAlQoDAAAFA25pbAIVdXNlclJlY29yZDo6aXM6OmVtcHR5BA91c2VyUmVjb3JkQXJyYXkJALUJAgkBBXZhbHVlAQUQdXNlclJlY29yZE9wdGlvbgUDU0VQBAp1c2VyTnVtU3RyCQCRAwIFD3VzZXJSZWNvcmRBcnJheQUOSWR4TG9ja1VzZXJOdW0ECEVNUFRZU1RSAgVlbXB0eQQKcG9vbFdlaWdodAMJAQIhPQIFDGxwQXNzZXRJZFN0cgUIRU1QVFlTVFIEDnBvb2xBZGRyZXNzU3RyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPZmFjdG9yeUNvbnRyYWN0CQEma2V5RmFjdG9yeUxwQXNzZXRUb1Bvb2xDb250cmFjdEFkZHJlc3MBBQxscEFzc2V0SWRTdHIJAQd3cmFwRXJyAQkArAICAhV1bnN1cHBvcnRlZCBscCBhc3NldCAFDGxwQXNzZXRJZFN0cgkBEUBleHRyTmF0aXZlKDEwNTApAgUPZmFjdG9yeUNvbnRyYWN0CQEUa2V5RmFjdG9yeVBvb2xXZWlnaHQBBQ5wb29sQWRkcmVzc1N0cgMFCHJlYWRPbmx5AAAJAQh0aHJvd0VycgEJAKwCAgIobm90IHJlYWRvbmx5IG1vZGU6IHVuc3VwcG9ydGVkIGxwIGFzc2V0IAUMbHBBc3NldElkU3RyBCJ1c2VyTHBCb29zdEVtaXNzaW9uTGFzdEludGVncmFsS0VZCQEia2V5VXNlckxwQm9vc3RFbWlzc2lvbkxhc3RJTlRFR1JBTAIFCnVzZXJOdW1TdHIFDGxwQXNzZXRJZFN0cgQgdXNlckJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWxLRVkJASBrZXlVc2VyQm9vc3RFbWlzc2lvbkxhc3RJTlRFR1JBTAEFCnVzZXJOdW1TdHIEHXVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFInVzZXJMcEJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWxLRVkJAQNpb3oCBQR0aGlzBSB1c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbEtFWQQVYm9vc3RFbWlzc2lvbkludGVncmFsCAkBHHJlZnJlc2hCb29zdEVtaXNzaW9uSW50ZWdyYWwAAl8yBBl1c2VyQm9vc3RFbWlzc2lvbkludGVncmFsCQBlAgUVYm9vc3RFbWlzc2lvbkludGVncmFsBR11c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbAMJAGYCAAAFGXVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwJAQh0aHJvd0VycgECEndyb25nIGNhbGN1bGF0aW9ucwQNJHQwMjY0MjAyNjU1OQkBG2dldFN0YWtlZFZvdGVzSW50ZWdyYWxzRGlmZgIFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIEG3N0YWtlZFZvdGVzSW50ZWdyYWxzQWN0aW9ucwgFDSR0MDI2NDIwMjY1NTkCXzEEFHVzZXJWb3RlSW50ZWdyYWxEaWZmCAUNJHQwMjY0MjAyNjU1OQJfMgQWdG90YWxWb3Rlc0ludGVncmFsRGlmZggFDSR0MDI2NDIwMjY1NTkCXzMEHXBvb2xVc2VyQm9vc3RFbWlzc2lvbkludGVncmFsCQBrAwUZdXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbAUKcG9vbFdlaWdodAUOUE9PTFdFSUdIVE1VTFQEIXVzZXJCb29zdEF2YWxpYWJsZVRvQ2xhaW1Ub3RhbE5ldwMJAAACBRZ0b3RhbFZvdGVzSW50ZWdyYWxEaWZmAAAAAAkAawMFHXBvb2xVc2VyQm9vc3RFbWlzc2lvbkludGVncmFsBRR1c2VyVm90ZUludGVncmFsRGlmZgUWdG90YWxWb3Rlc0ludGVncmFsRGlmZgQJZGF0YVN0YXRlCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFInVzZXJMcEJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWxLRVkFFWJvb3N0RW1pc3Npb25JbnRlZ3JhbAUDbmlsBRtzdGFrZWRWb3Rlc0ludGVncmFsc0FjdGlvbnMEBWRlYnVnCQC5CQIJAMwIAgkApAMBBR11c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbAkAzAgCCQCkAwEFGXVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwJAMwIAgkApAMBBQpwb29sV2VpZ2h0CQDMCAIJAKQDAQUUdXNlclZvdGVJbnRlZ3JhbERpZmYJAMwIAgkApAMBBRZ0b3RhbFZvdGVzSW50ZWdyYWxEaWZmBQNuaWwCAToJAJUKAwUhdXNlckJvb3N0QXZhbGlhYmxlVG9DbGFpbVRvdGFsTmV3BQlkYXRhU3RhdGUFBWRlYnVnAQtsb2NrQWN0aW9ucwIBaQhkdXJhdGlvbgQIY2ZnQXJyYXkJARVyZWFkQ29uZmlnQXJyYXlPckZhaWwABAphc3NldElkU3RyCQCRAwIFCGNmZ0FycmF5BQ1JZHhDZmdBc3NldElkBAdhc3NldElkCQDZBAEFCmFzc2V0SWRTdHIEDW1pbkxvY2tBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhjZmdBcnJheQUTSWR4Q2ZnTWluTG9ja0Ftb3VudAQPbWluTG9ja0R1cmF0aW9uCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIY2ZnQXJyYXkFFUlkeENmZ01pbkxvY2tEdXJhdGlvbgQPbWF4TG9ja0R1cmF0aW9uCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIY2ZnQXJyYXkFFUlkeENmZ01heExvY2tEdXJhdGlvbgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkBCHRocm93RXJyAQI0aW52YWxpZCBwYXltZW50IC0gZXhhY3Qgb25lIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAECXBtdEFtb3VudAgFA3BtdAZhbW91bnQDCQECIT0CBQdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQJAQh0aHJvd0VycgEJAKwCAgkArAICAh5pbnZhbGlkIGFzc2V0IGlzIGluIHBheW1lbnQgLSAFCmFzc2V0SWRTdHICDCBpcyBleHBlY3RlZAQObmV4dFVzZXJOdW1LRVkJAQ5rZXlOZXh0VXNlck51bQAEDnVzZXJBZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgQOdXNlcklzRXhpc3RpbmcJAQlpc0RlZmluZWQBCQCiCAEJARJrZXlVc2VyMk51bU1hcHBpbmcBBQ51c2VyQWRkcmVzc1N0cgQKdXNlck51bVN0cgMFDnVzZXJJc0V4aXN0aW5nCQEFdmFsdWUBCQCiCAEJARJrZXlVc2VyMk51bU1hcHBpbmcBBQ51c2VyQWRkcmVzc1N0cgkApAMBCQEDaW9mAgUEdGhpcwUObmV4dFVzZXJOdW1LRVkEB3VzZXJOdW0JAQ1wYXJzZUludFZhbHVlAQUKdXNlck51bVN0cgQJbG9ja1N0YXJ0BQZoZWlnaHQEDXN0YXJ0QmxvY2tLRVkJARZrZXlMb2NrUGFyYW1TdGFydEJsb2NrAQUKdXNlck51bVN0cgQLZHVyYXRpb25LRVkJARRrZXlMb2NrUGFyYW1EdXJhdGlvbgEFCnVzZXJOdW1TdHIEDXVzZXJBbW91bnRLRVkJARZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50AQUKdXNlck51bVN0cgMDCQBmAgUNbWluTG9ja0Ftb3VudAUJcG10QW1vdW50CQECIT0CCAUBaQZjYWxsZXIFFmxwU3Rha2luZ1Bvb2xzQ29udHJhY3QHCQEIdGhyb3dFcnIBCQCsAgICImFtb3VudCBpcyBsZXNzIHRoZW4gbWluTG9ja0Ftb3VudD0JAKQDAQUNbWluTG9ja0Ftb3VudAMJAGYCBQ9taW5Mb2NrRHVyYXRpb24FCGR1cmF0aW9uCQEIdGhyb3dFcnIBCQCsAgICLXBhc3NlZCBkdXJhdGlvbiBpcyBsZXNzIHRoZW4gbWluTG9ja0R1cmF0aW9uPQkApAMBBQ9taW5Mb2NrRHVyYXRpb24DCQBmAgUIZHVyYXRpb24FD21heExvY2tEdXJhdGlvbgkBCHRocm93RXJyAQkArAICAjBwYXNzZWQgZHVyYXRpb24gaXMgZ3JlYXRlciB0aGVuIG1heExvY2tEdXJhdGlvbj0JAKQDAQUPbWF4TG9ja0R1cmF0aW9uAwMFDnVzZXJJc0V4aXN0aW5nCQBnAgkAZAIJAQNpb2YCBQR0aGlzBQ1zdGFydEJsb2NrS0VZCQEDaW9mAgUEdGhpcwULZHVyYXRpb25LRVkFCWxvY2tTdGFydAcJAQh0aHJvd0VycgECNnRoZXJlIGlzIGFuIGFjdGl2ZSBsb2NrIC0gY29uc2lkZXIgdG8gdXNlIGluY3JlYXNlTG9jawMJAGYCCQEDaW96AgUEdGhpcwUNdXNlckFtb3VudEtFWQAACQEIdGhyb3dFcnIBCQCsAgICNHRoZXJlIGFyZSBsb2NrZWQgV1hzIC0gY29uc2lkZXIgdG8gdXNlIGluY3JlYXNlTG9jayAFDXVzZXJBbW91bnRLRVkEB2NvZWZmWDgJAGsDBQhkdXJhdGlvbgUFTVVMVDgFD21heExvY2tEdXJhdGlvbgQOZ1d4QW1vdW50U3RhcnQJAGsDBQlwbXRBbW91bnQFB2NvZWZmWDgFBU1VTFQ4BBNnV3hQYXJhbXNSZXN1bHRMaXN0CQEDYWFsAQkA/AcEBQxtYXRoQ29udHJhY3QCFWNhbGNHd3hQYXJhbXNSRUFET05MWQkAzAgCBQ5nV3hBbW91bnRTdGFydAkAzAgCBQlsb2NrU3RhcnQJAMwIAgUIZHVyYXRpb24FA25pbAUDbmlsBAFrCQECYWkBCQCRAwIFE2dXeFBhcmFtc1Jlc3VsdExpc3QAAAQBYgkBAmFpAQkAkQMCBRNnV3hQYXJhbXNSZXN1bHRMaXN0AAEEBnBlcmlvZAkApAMBCQECYWkBCQCRAwIFE2dXeFBhcmFtc1Jlc3VsdExpc3QAAgQRdG90YWxDYWNoZWRHd3hSYXcJARFnZXRUb3RhbENhY2hlZEd3eAEHBCB1c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbEtFWQkBIGtleVVzZXJCb29zdEVtaXNzaW9uTGFzdElOVEVHUkFMAQUKdXNlck51bVN0cgQVYm9vc3RFbWlzc2lvbkludGVncmFsCAkBHHJlZnJlc2hCb29zdEVtaXNzaW9uSW50ZWdyYWwAAl8yBANhcnIDBQ51c2VySXNFeGlzdGluZwUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5uZXh0VXNlck51bUtFWQkAZAIFB3VzZXJOdW0AAQkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5VXNlcjJOdW1NYXBwaW5nAQUOdXNlckFkZHJlc3NTdHIFCnVzZXJOdW1TdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEmtleU51bTJVc2VyTWFwcGluZwEFCnVzZXJOdW1TdHIFDnVzZXJBZGRyZXNzU3RyBQNuaWwJAJQKAgkAzggCCQDNCAIJAM4IAgkAzggCBQNhcnIJAQ9Mb2NrUGFyYW1zRW50cnkIBQ51c2VyQWRkcmVzc1N0cgUKdXNlck51bVN0cgUJcG10QW1vdW50BQlsb2NrU3RhcnQFCGR1cmF0aW9uBQFrBQFiBQZwZXJpb2QJAQpTdGF0c0VudHJ5BAUJcG10QW1vdW50BQhkdXJhdGlvbgABAwUOdXNlcklzRXhpc3RpbmcAAAABCQEMSGlzdG9yeUVudHJ5CAIEbG9jawUOdXNlckFkZHJlc3NTdHIFCXBtdEFtb3VudAUJbG9ja1N0YXJ0BQhkdXJhdGlvbgUBawUBYgUBaQkAzAgCCQEMSW50ZWdlckVudHJ5AgUgdXNlckJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWxLRVkFFWJvb3N0RW1pc3Npb25JbnRlZ3JhbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEWtleVRvdGFsQ2FjaGVkR3d4AAkAZAIFEXRvdGFsQ2FjaGVkR3d4UmF3BQ5nV3hBbW91bnRTdGFydAUDbmlsBQ5nV3hBbW91bnRTdGFydBEBaQELY29uc3RydWN0b3IGEWZhY3RvcnlBZGRyZXNzU3RyDmxvY2tBc3NldElkU3RyDW1pbkxvY2tBbW91bnQLbWluRHVyYXRpb24LbWF4RHVyYXRpb24MbWF0aENvbnRyYWN0BAtjaGVja0NhbGxlcgkBC211c3RNYW5hZ2VyAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDmtleU5leHRVc2VyTnVtAAAACQDMCAIJAQtTdHJpbmdFbnRyeQIJAQlrZXlDb25maWcACQEMZm9ybWF0Q29uZmlnBQUObG9ja0Fzc2V0SWRTdHIFDW1pbkxvY2tBbW91bnQFC21pbkR1cmF0aW9uBQttYXhEdXJhdGlvbgUMbWF0aENvbnRyYWN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlGYWN0b3J5QWRkcmVzcwAFEWZhY3RvcnlBZGRyZXNzU3RyBQNuaWwJAQpTdGF0c0VudHJ5BAAAAAAAAAAACQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB2xvY2tSZWYDCGR1cmF0aW9uD3JlZmVycmVyQWRkcmVzcwlzaWduYXR1cmUEDSR0MDMxMTcwMzEyMzUJAQtsb2NrQWN0aW9ucwIFAWkFCGR1cmF0aW9uBBFsb2NrQWN0aW9uc1Jlc3VsdAgFDSR0MDMxMTcwMzEyMzUCXzEEDmdXeEFtb3VudFN0YXJ0CAUNJHQwMzExNzAzMTIzNQJfMgQPcmVmZXJyYWxBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQGcmVmSW52AwMJAAACBQ9yZWZlcnJlckFkZHJlc3MCAAYJAAACBQlzaWduYXR1cmUBAAUEdW5pdAkA/AcEBR5yZWZlcnJhbHNDb250cmFjdEFkZHJlc3NPckZhaWwCCmNyZWF0ZVBhaXIJAMwIAgUTcmVmZXJyYWxQcm9ncmFtTmFtZQkAzAgCBQ9yZWZlcnJlckFkZHJlc3MJAMwIAgUPcmVmZXJyYWxBZGRyZXNzCQDMCAIFCXNpZ25hdHVyZQUDbmlsBQNuaWwDCQAAAgUGcmVmSW52BQZyZWZJbnYEEXVwZGF0ZVJlZkFjdGl2aXR5CQD8BwQFDG1hdGhDb250cmFjdAIWdXBkYXRlUmVmZXJyYWxBY3Rpdml0eQkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCBQ5nV3hBbW91bnRTdGFydAUDbmlsBQNuaWwDCQAAAgURdXBkYXRlUmVmQWN0aXZpdHkFEXVwZGF0ZVJlZkFjdGl2aXR5CQCUCgIFEWxvY2tBY3Rpb25zUmVzdWx0BQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBGxvY2sBCGR1cmF0aW9uBA0kdDAzMTY5MzMxNzU4CQELbG9ja0FjdGlvbnMCBQFpBQhkdXJhdGlvbgQRbG9ja0FjdGlvbnNSZXN1bHQIBQ0kdDAzMTY5MzMxNzU4Al8xBA5nV3hBbW91bnRTdGFydAgFDSR0MDMxNjkzMzE3NTgCXzIEEXVwZGF0ZVJlZkFjdGl2aXR5CQD8BwQFDG1hdGhDb250cmFjdAIWdXBkYXRlUmVmZXJyYWxBY3Rpdml0eQkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCBQ5nV3hBbW91bnRTdGFydAUDbmlsBQNuaWwDCQAAAgURdXBkYXRlUmVmQWN0aXZpdHkFEXVwZGF0ZVJlZkFjdGl2aXR5CQCUCgIFEWxvY2tBY3Rpb25zUmVzdWx0BQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDGluY3JlYXNlTG9jawENZGVsdGFEdXJhdGlvbgQIY2ZnQXJyYXkJARVyZWFkQ29uZmlnQXJyYXlPckZhaWwABAphc3NldElkU3RyCQCRAwIFCGNmZ0FycmF5BQ1JZHhDZmdBc3NldElkBAdhc3NldElkCQDZBAEFCmFzc2V0SWRTdHIED21pbkxvY2tEdXJhdGlvbgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGNmZ0FycmF5BRVJZHhDZmdNaW5Mb2NrRHVyYXRpb24ED21heExvY2tEdXJhdGlvbgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGNmZ0FycmF5BRVJZHhDZmdNYXhMb2NrRHVyYXRpb24ECXBtdEFtb3VudAkBImV4dHJhY3RPcHRpb25hbFBheW1lbnRBbW91bnRPckZhaWwCBQFpBQdhc3NldElkBA51c2VyQWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIED3VzZXJSZWNvcmRBcnJheQkBGnJlYWRMb2NrUGFyYW1zUmVjb3JkT3JGYWlsAQUOdXNlckFkZHJlc3NTdHIECnVzZXJOdW1TdHIJAJEDAgUPdXNlclJlY29yZEFycmF5BQ5JZHhMb2NrVXNlck51bQQKdXNlckFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD3VzZXJSZWNvcmRBcnJheQUNSWR4TG9ja0Ftb3VudAQJbG9ja1N0YXJ0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPdXNlclJlY29yZEFycmF5BQxJZHhMb2NrU3RhcnQEDGxvY2tEdXJhdGlvbgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD3VzZXJSZWNvcmRBcnJheQUPSWR4TG9ja0R1cmF0aW9uBAdsb2NrRW5kCQBkAgUJbG9ja1N0YXJ0BQxsb2NrRHVyYXRpb24EEXJlbWFpbmluZ0R1cmF0aW9uCQCWAwEJAMwIAgkAZQIFB2xvY2tFbmQFBmhlaWdodAkAzAgCAAAFA25pbAQNdXNlckFtb3VudE5ldwkAZAIFCnVzZXJBbW91bnQFCXBtdEFtb3VudAQPbG9ja0R1cmF0aW9uTmV3CQBkAgURcmVtYWluaW5nRHVyYXRpb24FDWRlbHRhRHVyYXRpb24DCQBmAgAABQ1kZWx0YUR1cmF0aW9uCQEIdGhyb3dFcnIBAhpkdXJhdGlvbiBpcyBsZXNzIHRoZW4gemVybwMJAGYCBQ9taW5Mb2NrRHVyYXRpb24FD2xvY2tEdXJhdGlvbk5ldwkBCHRocm93RXJyAQkArAICAi1sb2NrRHVyYXRpb25OZXcgaXMgbGVzcyB0aGVuIG1pbkxvY2tEdXJhdGlvbj0JAKQDAQUPbWluTG9ja0R1cmF0aW9uAwkAZgIFD2xvY2tEdXJhdGlvbk5ldwUPbWF4TG9ja0R1cmF0aW9uCQEIdGhyb3dFcnIBCQCsAgICRGRlbHRhRHVyYXRpb24gKyBleGlzdGVkTG9ja0R1cmF0aW9uIGlzIGdyZWF0ZXIgdGhlbiBtYXhMb2NrRHVyYXRpb249CQCkAwEFD21heExvY2tEdXJhdGlvbgQHY29lZmZYOAkAawMFD2xvY2tEdXJhdGlvbk5ldwUFTVVMVDgFD21heExvY2tEdXJhdGlvbgQOZ1d4QW1vdW50U3RhcnQJAGsDBQ11c2VyQW1vdW50TmV3BQdjb2VmZlg4BQVNVUxUOAQRdXBkYXRlUmVmQWN0aXZpdHkJAPwHBAUMbWF0aENvbnRyYWN0AhZ1cGRhdGVSZWZlcnJhbEFjdGl2aXR5CQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFDmdXeEFtb3VudFN0YXJ0BQNuaWwFA25pbAMJAAACBRF1cGRhdGVSZWZBY3Rpdml0eQURdXBkYXRlUmVmQWN0aXZpdHkEDGxvY2tTdGFydE5ldwUGaGVpZ2h0BBNnV3hQYXJhbXNSZXN1bHRMaXN0CQEDYWFsAQkA/AcEBQxtYXRoQ29udHJhY3QCFWNhbGNHd3hQYXJhbXNSRUFET05MWQkAzAgCBQ5nV3hBbW91bnRTdGFydAkAzAgCBQxsb2NrU3RhcnROZXcJAMwIAgUPbG9ja0R1cmF0aW9uTmV3BQNuaWwFA25pbAQBawkBAmFpAQkAkQMCBRNnV3hQYXJhbXNSZXN1bHRMaXN0AAAEAWIJAQJhaQEJAJEDAgUTZ1d4UGFyYW1zUmVzdWx0TGlzdAABBAZwZXJpb2QJAKQDAQkBAmFpAQkAkQMCBRNnV3hQYXJhbXNSZXN1bHRMaXN0AAIEC2N1cnJVc2VyR3d4CQEUY2FsY0N1cnJlbnRHd3hBbW91bnQBBQ51c2VyQWRkcmVzc1N0cgQHZ3d4RGlmZgkAZQIFDmdXeEFtb3VudFN0YXJ0BQtjdXJyVXNlckd3eAMJAGYCAAAFB2d3eERpZmYJAQh0aHJvd0VycgEJAKwCAgIYZ3d4RGlmZiBpcyBsZXNzIHRoZW4gMDogCQCkAwEFB2d3eERpZmYEEXRvdGFsQ2FjaGVkR3d4UmF3CQERZ2V0VG90YWxDYWNoZWRHd3gBBwQXdG90YWxDYWNoZWRHd3hDb3JyZWN0ZWQJARFnZXRUb3RhbENhY2hlZEd3eAEGCQDOCAIJAM0IAgkAzggCCQEPTG9ja1BhcmFtc0VudHJ5CAUOdXNlckFkZHJlc3NTdHIFCnVzZXJOdW1TdHIFDXVzZXJBbW91bnROZXcFDGxvY2tTdGFydE5ldwUPbG9ja0R1cmF0aW9uTmV3BQFrBQFiBQZwZXJpb2QJAQpTdGF0c0VudHJ5BAUJcG10QW1vdW50BQ1kZWx0YUR1cmF0aW9uAAAAAAkBDEhpc3RvcnlFbnRyeQgCBGxvY2sFDnVzZXJBZGRyZXNzU3RyBQlwbXRBbW91bnQFCWxvY2tTdGFydAUPbG9ja0R1cmF0aW9uTmV3BQFrBQFiBQFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQERa2V5VG90YWxDYWNoZWRHd3gACQBkAgURdG90YWxDYWNoZWRHd3hSYXcFB2d3eERpZmYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxjbGFpbVd4Qm9vc3QCDGxwQXNzZXRJZFN0cg51c2VyQWRkcmVzc1N0cgMJAQIhPQIFD3N0YWtpbmdDb250cmFjdAgFAWkGY2FsbGVyCQEIdGhyb3dFcnIBAhJwZXJtaXNzaW9ucyBkZW5pZWQEDSR0MDM0ODYzMzQ5NjUJARRpbnRlcm5hbENsYWltV3hCb29zdAMFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIHBBJ1c2VyQm9vc3RBdmFpbGFibGUIBQ0kdDAzNDg2MzM0OTY1Al8xBAlkYXRhU3RhdGUIBQ0kdDAzNDg2MzM0OTY1Al8yBAVkZWJ1ZwgFDSR0MDM0ODYzMzQ5NjUCXzMJAJQKAgUJZGF0YVN0YXRlCQDMCAIFEnVzZXJCb29zdEF2YWlsYWJsZQUDbmlsAWkBFGNsYWltV3hCb29zdFJFQURPTkxZAgxscEFzc2V0SWRTdHIOdXNlckFkZHJlc3NTdHIEDSR0MDM1MDk3MzUxOTgJARRpbnRlcm5hbENsYWltV3hCb29zdAMFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIGBBJ1c2VyQm9vc3RBdmFpbGFibGUIBQ0kdDAzNTA5NzM1MTk4Al8xBAlkYXRhU3RhdGUIBQ0kdDAzNTA5NzM1MTk4Al8yBAVkZWJ1ZwgFDSR0MDM1MDk3MzUxOTgCXzMJAJQKAgUDbmlsCQDMCAIFEnVzZXJCb29zdEF2YWlsYWJsZQkAzAgCBQVkZWJ1ZwUDbmlsAWkBBnVubG9jawELdXNlckFkZHJlc3MED3VzZXJSZWNvcmRBcnJheQkBGnJlYWRMb2NrUGFyYW1zUmVjb3JkT3JGYWlsAQULdXNlckFkZHJlc3MECnVzZXJOdW1TdHIJAJEDAgUPdXNlclJlY29yZEFycmF5BQ5JZHhMb2NrVXNlck51bQQKdXNlckFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD3VzZXJSZWNvcmRBcnJheQUNSWR4TG9ja0Ftb3VudAQJbG9ja1N0YXJ0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPdXNlclJlY29yZEFycmF5BQxJZHhMb2NrU3RhcnQEDGxvY2tEdXJhdGlvbgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD3VzZXJSZWNvcmRBcnJheQUPSWR4TG9ja0R1cmF0aW9uBAdsb2NrRW5kCQBkAgUJbG9ja1N0YXJ0BQxsb2NrRHVyYXRpb24ECGNmZ0FycmF5CQEVcmVhZENvbmZpZ0FycmF5T3JGYWlsAAQHYXNzZXRJZAkA2QQBCQCRAwIFCGNmZ0FycmF5BQ1JZHhDZmdBc3NldElkAwkAZwIFB2xvY2tFbmQFBmhlaWdodAkBCHRocm93RXJyAQkArAICCQCsAgICBXdhaXQgCQCkAwEFB2xvY2tFbmQCCiB0byB1bmxvY2sDCQBnAgAABQp1c2VyQW1vdW50CQEIdGhyb3dFcnIBAhFub3RoaW5nIHRvIHVubG9jawQGcGVyaW9kCQELdmFsdWVPckVsc2UCCQCaCAIFDG1hdGhDb250cmFjdAkBDWtleU5leHRQZXJpb2QAAAAJAM0IAgkAzQgCCQDOCAIJAQ9Mb2NrUGFyYW1zRW50cnkIBQt1c2VyQWRkcmVzcwUKdXNlck51bVN0cgAABQlsb2NrU3RhcnQFDGxvY2tEdXJhdGlvbgAAAAAJAKQDAQUGcGVyaW9kCQEKU3RhdHNFbnRyeQQJAQEtAQUKdXNlckFtb3VudAAAAAAA////////////AQkBDEhpc3RvcnlFbnRyeQgCBnVubG9jawULdXNlckFkZHJlc3MFCnVzZXJBbW91bnQFCWxvY2tTdGFydAUMbG9ja0R1cmF0aW9uAAAAAAUBaQkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQULdXNlckFkZHJlc3MFCnVzZXJBbW91bnQFB2Fzc2V0SWQBaQETZ3d4VXNlckluZm9SRUFET05MWQELdXNlckFkZHJlc3MECWd3eEFtb3VudAkBFGNhbGNDdXJyZW50R3d4QW1vdW50AQULdXNlckFkZHJlc3MJAJQKAgUDbmlsCQDMCAIFCWd3eEFtb3VudAUDbmlsAWkBF3VzZXJNYXhEdXJhdGlvblJFQURPTkxZAQ51c2VyQWRkcmVzc1N0cgQIY2ZnQXJyYXkJARVyZWFkQ29uZmlnQXJyYXlPckZhaWwABA9tYXhMb2NrRHVyYXRpb24JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhjZmdBcnJheQUVSWR4Q2ZnTWF4TG9ja0R1cmF0aW9uBBB1c2VyUmVjb3JkT3B0aW9uCQCdCAIFBHRoaXMJARNrZXlMb2NrUGFyYW1zUmVjb3JkAQUOdXNlckFkZHJlc3NTdHIDCQAAAgUQdXNlclJlY29yZE9wdGlvbgUEdW5pdAkAlAoCBQNuaWwJAJQKAgIEbG9jawUPbWF4TG9ja0R1cmF0aW9uBA91c2VyUmVjb3JkQXJyYXkJALUJAgkBBXZhbHVlAQUQdXNlclJlY29yZE9wdGlvbgUDU0VQBAlsb2NrU3RhcnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ91c2VyUmVjb3JkQXJyYXkFDElkeExvY2tTdGFydAQMbG9ja0R1cmF0aW9uCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPdXNlclJlY29yZEFycmF5BQ9JZHhMb2NrRHVyYXRpb24EB2xvY2tFbmQJAGQCBQlsb2NrU3RhcnQFDGxvY2tEdXJhdGlvbgQRcmVtYWluaW5nRHVyYXRpb24JAJYDAQkAzAgCCQBlAgUHbG9ja0VuZAUGaGVpZ2h0CQDMCAIAAAUDbmlsBBBtYXhEZWx0YUR1cmF0aW9uCQBlAgUPbWF4TG9ja0R1cmF0aW9uBRFyZW1haW5pbmdEdXJhdGlvbgkAlAoCBQNuaWwJAJQKAgIMaW5jcmVhc2VMb2NrBRBtYXhEZWx0YUR1cmF0aW9uAWkBIGdldFVzZXJHd3hBbW91bnRBdEhlaWdodFJFQURPTkxZAgt1c2VyQWRkcmVzcwx0YXJnZXRIZWlnaHQECWd3eEFtb3VudAkBGWNhbGNVc2VyR3d4QW1vdW50QXRIZWlnaHQCBQt1c2VyQWRkcmVzcwUMdGFyZ2V0SGVpZ2h0CQCUCgIFA25pbAUJZ3d4QW1vdW50AWkBGWdldFRvdGFsQ2FjaGVkR3d4UkVBRE9OTFkACQCUCgIFA25pbAkBEWdldFRvdGFsQ2FjaGVkR3d4AQYBaQEVb25Cb29zdEVtaXNzaW9uVXBkYXRlAAQLY2hlY2tDYWxsZXIDCQAAAggFAWkGY2FsbGVyBRBlbWlzc2lvbkNvbnRyYWN0BgkBC211c3RNYW5hZ2VyAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIJARxyZWZyZXNoQm9vc3RFbWlzc2lvbkludGVncmFsAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARJvblN0YWtlZFZvdGVVcGRhdGUDDGxwQXNzZXRJZFN0cg51c2VyQWRkcmVzc1N0cgRlZGdlBAtjaGVja0NhbGxlcgMJAAACCAUBaQZjYWxsZXIFD3N0YWtpbmdDb250cmFjdAYJAQttdXN0TWFuYWdlcgEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBAdhY3Rpb25zCQEZcmVmcmVzaFZvdGVTdGFrZWRJbnRlZ3JhbAMFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIFBGVkZ2UJAJQKAgUHYWN0aW9ucwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAR1nZXRWb3RpbmdSZXN1bHRTdGFrZWRSRUFET05MWQEMbHBBc3NldElkU3RyCQCUCgIFA25pbAkBFWdldFZvdGluZ1Jlc3VsdFN0YWtlZAEFDGxwQXNzZXRJZFN0cgFpASVnZXRWb3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbFJFQURPTkxZAQxscEFzc2V0SWRTdHIJAJQKAgUDbmlsCQEdZ2V0Vm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwBBQxscEFzc2V0SWRTdHIBaQEcZ2V0VXNlclZvdGVGaW5hbGl6ZWRSRUFET05MWQIMbHBBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyCQCUCgIFA25pbAkBFGdldFVzZXJWb3RlRmluYWxpemVkAgUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgFpASFnZXRVc2VyVm90ZVN0YWtlZEludGVncmFsUkVBRE9OTFkCDGxwQXNzZXRJZFN0cg51c2VyQWRkcmVzc1N0cgkAlAoCBQNuaWwJARlnZXRVc2VyVm90ZVN0YWtlZEludGVncmFsAgUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgECdHgBBnZlcmlmeQAED3RhcmdldFB1YmxpY0tleQQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwBQJwawMJAAECBQckbWF0Y2gwAgRVbml0CAUCdHgPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFD3RhcmdldFB1YmxpY0tleWagGTA=", "height": 2744795, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BRosojsJKoFNKPiYssrjPYHDcgvS1ykN9KP3HJKfmtD2 Next: 8JrUty75U58yfu7rr2J2387P6gY7SSoc5LSD9szLX2M2 Diff:
OldNewDifferences
99
1010 let d = c
1111
12-let e = "boosting.ride"
13-
14-let f = 18
15-
16-let g = 1000000000000000000
17-
18-let h = toBigInt(g)
19-
20-let i = 8
21-
22-func j (k) = makeString([e, ": ", k], "")
12+func e (f) = makeString(["boosting.ride:", f], " ")
2313
2414
25-func l (k) = throw(j(k))
15+func g (f) = throw(e(f))
2616
2717
28-func m (n,o) = valueOrErrorMessage(getString(n, o), j((("mandatory this." + o) + " is not defined")))
18+func h (i,j) = valueOrErrorMessage(getString(i, j), e((("mandatory this." + j) + " is not defined")))
2919
3020
31-func p (n,o) = valueOrElse(getInteger(n, o), 0)
21+func k (i,j) = valueOrElse(getInteger(i, j), 0)
3222
3323
34-func q (n,o,r) = valueOrElse(getInteger(n, o), r)
24+func l (i,j,m) = valueOrElse(getInteger(i, j), m)
3525
3626
37-func s (n,o) = valueOrErrorMessage(getInteger(n, o), j((("mandatory this." + o) + " is not defined")))
27+func n (i,j) = valueOrErrorMessage(getInteger(i, j), e((("mandatory this." + j) + " is not defined")))
3828
3929
40-func t (u) = if ((0 > u))
41- then -(u)
42- else u
30+func o (p) = if ((0 > p))
31+ then -(p)
32+ else p
4333
4434
45-func v (w,x) = if ((w >= 0))
46- then w
47- else l((valueOrElse(x, "value") + " should be positive"))
35+func q (p) = {
36+ let r = p
37+ if ($isInstanceOf(r, "List[Any]"))
38+ then {
39+ let s = r
40+ s
41+ }
42+ else g("fail to cast into List[Any]")
43+ }
4844
4945
50-func y () = makeString(["%s%s", "config", "referralsContractAddress"], a)
46+func t (p) = {
47+ let r = p
48+ if ($isInstanceOf(r, "Int"))
49+ then {
50+ let u = r
51+ u
52+ }
53+ else g("fail to cast into Int")
54+ }
5155
5256
53-let z = addressFromStringValue(m(this, y()))
54-
55-let A = makeString(["%s%s", "referral", "programName"], a)
56-
57-let B = "wxlock"
58-
59-let C = valueOrElse(getString(this, A), B)
60-
61-func D () = "%s%s__config__factoryAddress"
57+func v () = makeString(["%s%s", "config", "referralsContractAddress"], a)
6258
6359
64-let E = 1
60+let w = addressFromStringValue(h(this, v()))
6561
66-let F = 2
62+let x = makeString(["%s%s", "referral", "programName"], a)
6763
68-let G = 3
64+let y = "wxlock"
6965
70-let H = 4
66+let z = valueOrElse(getString(this, x), y)
7167
72-let I = 5
73-
74-let J = 6
75-
76-let K = 7
77-
78-let L = 8
79-
80-let M = 9
81-
82-let N = 10
83-
84-let O = 11
85-
86-func P () = "%s__factoryConfig"
68+func A () = "%s%s__config__factoryAddress"
8769
8870
89-func Q (R) = makeString(["%s%s%s", R, "mappings__lpAsset2PoolContract"], a)
71+let B = 1
72+
73+let C = 2
74+
75+let D = 3
76+
77+let E = 4
78+
79+let F = 5
80+
81+let G = 6
82+
83+let H = 7
84+
85+let I = 8
86+
87+let J = 9
88+
89+let K = 10
90+
91+let L = 11
92+
93+func M () = "%s__factoryConfig"
9094
9195
92-func S (T) = makeString(["%s%s", "poolWeight", T], a)
96+func N () = "%s__lpTokensList"
9397
9498
95-func U (V,W) = ((("%s%s__poolWeight__" + V) + "__") + toString(W))
99+func O (P) = makeString(["%s%s%s", P, "mappings__lpAsset2PoolContract"], a)
96100
97101
98-func X () = addressFromStringValue(m(this, D()))
102+func Q (R) = makeString(["%s%s", "poolWeight", R], a)
99103
100104
101-func Y (Z) = split(m(Z, P()), a)
105+func S (T,U) = ((("%s%s__poolWeight__" + T) + "__") + toString(U))
102106
103107
104-func aa (ab) = addressFromStringValue(ab[F])
108+func V () = addressFromStringValue(h(this, A()))
105109
106110
107-func ac (ab) = addressFromStringValue(ab[I])
111+func W () = split(valueOrElse(getString(V(), N()), ""), a)
108112
109113
110-func ad (ab) = addressFromStringValue(ab[E])
114+func X (Y) = split(h(Y, M()), a)
111115
112116
113-func ae (ab) = addressFromStringValue(ab[N])
117+func Z (aa) = addressFromStringValue(aa[C])
114118
115119
116-func af () = "%s__managerPublicKey"
120+func ab (aa) = addressFromStringValue(aa[F])
117121
118122
119-func ag () = "%s__managerVaultAddress"
123+func ac (aa) = addressFromStringValue(aa[B])
120124
121125
122-func ah () = "%s%s__ratePerBlock__current"
126+func ad (aa) = addressFromStringValue(aa[K])
123127
124128
125-func ai () = "%s%s__ratePerBlockMax__current"
129+func ae () = "%s__managerPublicKey"
126130
127131
128-func aj () = "%s%s__emission__startBlock"
132+func af () = "%s__managerVaultAddress"
129133
130134
131-func ak () = "%s%s__boostingV2__startBlock"
135+func ag () = "%s%s__ratePerBlock__current"
132136
133137
134-func al () = "%s%s__boostingV2__integral"
138+func ah () = "%s%s__ratePerBlockMax__current"
135139
136140
137-func am () = "%s%s__emission__duration"
141+func ai () = "%s%s__emission__startBlock"
138142
139143
140-func an () = "%s%s__emission__endBlock"
144+func aj () = "%s%s__boostingV2__startBlock"
141145
142146
143-let ao = 1
144-
145-let ap = 2
146-
147-let aq = 3
148-
149-let ar = 4
150-
151-let as = 5
152-
153-let at = 6
154-
155-let au = 7
156-
157-func av () = "%s__config"
147+func ak () = "%s%s__boostingV2__integral"
158148
159149
160-func aw () = split(m(this, av()), a)
150+func al () = "%s%s__emission__duration"
161151
162152
163-let ax = aw()
164-
165-let ay = fromBase58String(ax[ao])
166-
167-let az = valueOrErrorMessage(parseInt(ax[ap]), j("invalid min lock amount"))
168-
169-let aA = valueOrErrorMessage(parseInt(ax[aq]), j("invalid min lock duration"))
170-
171-let aB = valueOrErrorMessage(parseInt(ax[ar]), j("invalid max lock duration"))
172-
173-let aC = valueOrErrorMessage(addressFromString(ax[as]), j("invalid math contract address"))
174-
175-let aD = valueOrErrorMessage(parseInt(ax[at]), j("invalid blocks in period"))
176-
177-let aE = valueOrErrorMessage(parseInt(ax[au]), j("invalid lock step blocks"))
178-
179-let aF = "%s__suspension"
180-
181-let aG = valueOrElse(getBoolean(this, aF), false)
182-
183-func aH () = if (!(aG))
184- then true
185- else l("suspended")
153+func am () = "%s%s__emission__endBlock"
186154
187155
188-func aI () = {
189- let aJ = getString(ag())
190- if ($isInstanceOf(aJ, "String"))
156+func an () = "%s__nextPeriod"
157+
158+
159+func ao () = "%s%s__gwxRewardEmissionPart__startHeight"
160+
161+
162+let ap = 1
163+
164+let aq = 2
165+
166+let ar = 3
167+
168+let as = 4
169+
170+let at = 5
171+
172+func au () = "%s__config"
173+
174+
175+func av () = split(h(this, au()), a)
176+
177+
178+let aw = addressFromStringValue(av()[at])
179+
180+func ax (ay,az,aA,aB,aw) = makeString(["%s%d%d%d", ay, az, aA, aB, aw], a)
181+
182+
183+func aC (ay,az,aA,aB,aw) = ax(ay, toString(az), toString(aA), toString(aB), aw)
184+
185+
186+func aD () = {
187+ let r = getString(af())
188+ if ($isInstanceOf(r, "String"))
191189 then {
192- let aK = aJ
193- addressFromStringValue(aK)
190+ let aE = r
191+ addressFromStringValue(aE)
194192 }
195193 else this
196194 }
197195
198196
199-func aL () = {
200- let aM = aI()
201- let aJ = getString(aM, af())
202- if ($isInstanceOf(aJ, "String"))
197+func aF () = {
198+ let aG = aD()
199+ let r = getString(aG, ae())
200+ if ($isInstanceOf(r, "String"))
203201 then {
204- let aK = aJ
205- fromBase58String(aK)
202+ let aE = r
203+ fromBase58String(aE)
206204 }
207- else if ($isInstanceOf(aJ, "Unit"))
205+ else if ($isInstanceOf(r, "Unit"))
208206 then unit
209207 else throw("Match error")
210208 }
211209
212210
213-func aN (aO) = {
214- let aP = l("Permission denied")
215- let aJ = aL()
216- if ($isInstanceOf(aJ, "ByteVector"))
211+func aH (aI) = {
212+ let aJ = g("Permission denied")
213+ let r = aF()
214+ if ($isInstanceOf(r, "ByteVector"))
217215 then {
218- let aQ = aJ
219- if ((aO.callerPublicKey == aQ))
216+ let aK = r
217+ if ((aI.callerPublicKey == aK))
220218 then true
221- else aP
219+ else aJ
222220 }
223- else if ($isInstanceOf(aJ, "Unit"))
224- then if ((aO.caller == this))
221+ else if ($isInstanceOf(r, "Unit"))
222+ then if ((aI.caller == this))
225223 then true
226- else aP
224+ else aJ
227225 else throw("Match error")
228226 }
229227
230228
231-let aR = 1
229+let aL = 1
232230
233-let aS = 2
231+let aM = 2
234232
235-let aT = 3
233+let aN = 3
236234
237-let aU = 4
235+let aO = 4
238236
239-let aV = 5
237+let aP = 5
240238
241-let aW = 6
239+let aQ = 6
242240
243-func aX (aY,aZ) = makeString(["%s%s%s__lock", toString(aY), {
244- let aJ = aZ
245- if ($isInstanceOf(aJ, "ByteVector"))
246- then {
247- let ba = aJ
248- toBase58String(ba)
249- }
250- else if ($isInstanceOf(aJ, "Unit"))
251- then "legacy"
252- else throw("Match error")
253- }], a)
241+func aR (aS) = makeString(["%s%s__lock", aS], a)
254242
255243
256-func bb (aY,aZ) = split(m(this, aX(aY, aZ)), a)
244+func aT (aS) = split(h(this, aR(aS)), a)
257245
258246
259-func bc (aY) = makeString(["%s%s__gwxAmountTotal", toString(aY)], a)
247+func aU (aV,aW,aX,aY,aZ,ba,bb,bc) = makeString(["%d%d%d%d%d%d%d%d", aV, aW, aX, aY, aZ, ba, bb, bc], a)
260248
261249
262-func bd (be,bf,bg,bh,bi) = makeString(["%d%d%d%d%d%d", toString(be), toString(bf), toString(bg), toString(lastBlock.timestamp), toString(bh), toString(bi)], a)
250+func bd (aV,aW,aX,aY,aZ,ba,bc) = aU(aV, toString(aW), toString(aX), toString(aY), toString(aZ), toString(ba), toString(lastBlock.timestamp), toString(bc))
263251
264252
265-func bj () = "%s__nextUserNum"
253+func be () = "%s__nextUserNum"
266254
267255
268-func bk (aY) = makeString(["%s%s%s__mapping__user2num", aY], a)
256+func bf (aS) = makeString(["%s%s%s__mapping__user2num", aS], a)
269257
270258
271-func bl (W) = makeString(["%s%s%s__mapping__num2user", W], a)
259+func bg (U) = makeString(["%s%s%s__mapping__num2user", U], a)
272260
273261
274-func bm () = "%s%s__stats__activeTotalLocked"
262+func bh (aV) = makeString(["%s%d%s__paramByUserNum", aV, "amount"], a)
275263
276264
277-func bn () = "%s%s__stats__locksDurationSumInBlocks"
265+func bi (aV) = makeString(["%s%d%s__paramByUserNum", aV, "start"], a)
278266
279267
280-func bo () = "%s%s__stats__locksCount"
268+func bj (aV) = makeString(["%s%d%s__paramByUserNum", aV, "duration"], a)
281269
282270
283-func bp () = "%s%s__stats__activeUsersCount"
271+func bk (aV) = makeString(["%s%d%s__paramByUserNum", aV, "k"], a)
284272
285273
286-func bq (br) = makeString(["%s%d__userBoostEmissionLastIntV2", toString(br)], a)
274+func bl (aV) = makeString(["%s%d%s__paramByUserNum", aV, "b"], a)
287275
288276
289-func bs (br,bt) = makeString(["%s%d__userBoostEmissionLastIntV2", toString(br), bt], a)
277+func bm (aV,bn) = makeString(["%s%d%s%d__paramByPeriod", aV, "k", bn], a)
290278
291279
292-func bu (br) = makeString(["%s%d__maxBoostInt", toString(br)], a)
280+func bo (aV,bn) = makeString(["%s%d%s%d__paramByPeriod", aV, "b", bn], a)
293281
294282
295-func bv () = "%s%s__maxBoostInt__total"
283+func bp () = "%s%s__stats__activeTotalLocked"
296284
297285
298-func bw (br) = makeString(["%s%d__userBoostAvaliableToClaimTotal", toString(br)], a)
286+func bq () = "%s%s__stats__locksDurationSumInBlocks"
299287
300288
301-func bx (br) = makeString(["%s%d__userBoostClaimed", toString(br)], a)
289+func br () = "%s%s__stats__locksCount"
302290
303291
304-func by () = "%s%s__gwx__total"
292+func bs () = "%s%s__stats__activeUsersCount"
305293
306294
307-func bz (bA,bB,n,bC) = makeString(["%s%s%s%s%d", "vote", bA, bB, toString(n), toString(bC)], a)
295+func bt (aV) = makeString(["%s%d__userBoostEmissionLastIntV2", aV], a)
308296
309297
310-func bD (bC) = makeString(["%s%d", "startHeight", toString(bC)], a)
298+func bu (aV,bv) = makeString(["%s%d__userBoostEmissionLastIntV2", aV, bv], a)
311299
312300
313-func bE () = makeString(["%s", "currentEpochUi"], a)
301+func bw (aV) = makeString(["%s%d__maxBoostInt", aV], a)
314302
315303
316-func bF (bG,bC) = makeString(["%s%s%d", "votingResultStaked", bG, toString(bC)], a)
304+func bx () = "%s%s__maxBoostInt__total"
317305
318306
319-func bH (bG,bC) = makeString(["%s%s%d", "votingResultStakedIntegral", bG, toString(bC)], a)
307+func by (aV) = makeString(["%s%d__userBoostAvaliableToClaimTotal", aV], a)
320308
321309
322-func bI (bG,bC) = makeString(["%s%s%d", "votingResultStakedIntegralLastUpdateHeight", bG, toString(bC)], a)
310+func bz (aV) = makeString(["%s%d__userBoostClaimed", aV], a)
323311
324312
325-func bJ (bG,n,bC) = makeString(["%s%s%s%d", "votingResultStakedIntegralLast", bG, toString(n), toString(bC)], a)
313+func bA () = "%s%s__gwxCached__total"
326314
327315
328-func bK (bG,n,bC) = makeString(["%s%s%s%d", "voteStakedIntegral", bG, toString(n), toString(bC)], a)
316+func bB () = "%s__gwxCachedTotalCorrective"
329317
330318
331-func bL (bG,n,bC) = makeString(["%s%s%s%d", "voteStakedIntegralLastUpdateHeight", bG, toString(n), toString(bC)], a)
319+func bC (bD,bE,i,bF) = makeString(["%s%s%s%s%d", "vote", bD, bE, toString(i), toString(bF)], a)
332320
333321
334-func bM (bG,n,bC) = makeString(["%s%s%s%d", "voteStakedIntegralLast", bG, toString(n), toString(bC)], a)
322+func bG (bF) = makeString(["%s%d", "startHeight", toString(bF)], a)
335323
336324
337-func bN (bO,bG) = makeString(["%s%s%s", "staked", bO, bG], a)
325+func bH () = makeString(["%s", "currentEpochUi"], a)
338326
339327
340-let bP = X()
328+func bI (bJ,bF) = makeString(["%s%s%d", "votingResultStaked", bJ, toString(bF)], a)
341329
342-let ab = Y(bP)
343330
344-let bQ = ac(ab)
331+func bK (bJ,bF) = makeString(["%s%s%d", "votingResultStakedIntegral", bJ, toString(bF)], a)
345332
346-let bR = ad(ab)
347333
348-let bS = ae(ab)
334+func bL (bJ,bF) = makeString(["%s%s%d", "votingResultStakedIntegralLastUpdateHeight", bJ, toString(bF)], a)
349335
350-let bT = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], a)), j("lp_staking_pools contract address is undefined"))), j("invalid lp_staking_pools contract address"))
351336
352-let bU = makeString(["%s", "votingEmissionContract"], a)
337+func bM (bJ,i,bF) = makeString(["%s%s%s%d", "votingResultStakedIntegralLast", bJ, toString(i), toString(bF)], a)
353338
354-let bV = addressFromStringValue(getStringValue(bP, bU))
355339
356-let bW = makeString(["%s", "votingEmissionRateContract"], a)
340+func bN (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegral", bJ, toString(i), toString(bF)], a)
357341
358-let bX = {
359- let bY = invoke(bQ, "getBoostCoeffREADONLY", nil, nil)
360- if ($isInstanceOf(bY, "Int"))
361- then bY
362- else throw(($getType(bY) + " couldn't be cast to Int"))
342+
343+func bO (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegralLastUpdateHeight", bJ, toString(i), toString(bF)], a)
344+
345+
346+func bP (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegralLast", bJ, toString(i), toString(bF)], a)
347+
348+
349+func bQ (bR,bJ) = makeString(["%s%s%s", "staked", bR, bJ], a)
350+
351+
352+let bS = V()
353+
354+let aa = X(bS)
355+
356+let bT = ab(aa)
357+
358+let bU = ac(aa)
359+
360+let bV = ad(aa)
361+
362+let bW = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], a)), e("lp_staking_pools contract address is undefined"))), e("invalid lp_staking_pools contract address"))
363+
364+let bX = makeString(["%s", "votingEmissionContract"], a)
365+
366+let bY = addressFromStringValue(getStringValue(bS, bX))
367+
368+let bZ = {
369+ let ca = invoke(bT, "getBoostCoeffREADONLY", nil, nil)
370+ if ($isInstanceOf(ca, "Int"))
371+ then ca
372+ else throw(($getType(ca) + " couldn't be cast to Int"))
363373 }
364374
365-func bZ (aY) = {
366- let aJ = getString(this, bk(toString(aY)))
367- if ($isInstanceOf(aJ, "String"))
368- then {
369- let aK = aJ
370- valueOrErrorMessage(parseInt(aK), j("invalid user number"))
371- }
372- else if ($isInstanceOf(aJ, "Unit"))
373- then l("invalid user")
374- else throw("Match error")
375+func cb (cc) = {
376+ let cd = getIntegerValue(bY, bH())
377+ let ce = makeString(["%s%s", "totalCachedGwxCorrection__activationEpoch"], a)
378+ let cf = getInteger(this, ce)
379+ let cg = valueOrElse(getInteger(this, bA()), 0)
380+ let ch = if (isDefined(cf))
381+ then (cd >= value(cf))
382+ else false
383+ let ci = if (if (ch)
384+ then cc
385+ else false)
386+ then valueOrElse(getInteger(this, bB()), 0)
387+ else 0
388+ max([0, (cg + ci)])
375389 }
376390
377391
378-func ca () = valueOrElse(getInteger(this, by()), 0)
379-
380-
381-func cb (aY) = {
382- let cc = "getLockedGwxAmount"
383- let cd = valueOrErrorMessage({
384- let aJ = getString(bV, bW)
385- if ($isInstanceOf(aJ, "Unit"))
386- then unit
387- else if ($isInstanceOf(aJ, "String"))
388- then {
389- let aK = aJ
390- addressFromString(aK)
391- }
392- else throw("Match error")
393- }, j("invalid voting emission rate address"))
394- let ce = {
395- let bY = invoke(bV, cc, [toString(aY)], nil)
396- if ($isInstanceOf(bY, "Int"))
397- then bY
398- else throw(($getType(bY) + " couldn't be cast to Int"))
399- }
400- let cf = {
401- let bY = invoke(cd, cc, [toString(aY)], nil)
402- if ($isInstanceOf(bY, "Int"))
403- then bY
404- else throw(($getType(bY) + " couldn't be cast to Int"))
405- }
406- let cg = max([ce, cf])
407- cg
392+func cj (ck,cl,aW,cm,aY,cn,co,aI) = {
393+ let cp = makeString(["%s%s%s%s__history", ck, cl, toBase58String(aI.transactionId)], a)
394+ let cq = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aW), toString(cm), toString(aY), toString(cn), toString(co)], a)
395+ StringEntry(cp, cq)
408396 }
409397
410398
411-func ch (ci,cj,be,ck,bg,bh,aO) = {
412- let cl = makeString(["%s%s%s%s__history", ci, cj, toBase58String(aO.transactionId)], a)
413- let cm = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(be), toString(ck), toString(bg), toString(bh)], a)
414- StringEntry(cl, cm)
399+func cr (cs,ct,cu,cv) = {
400+ let cw = bq()
401+ let cx = br()
402+ let cy = bs()
403+ let cz = bp()
404+ let cA = k(this, cw)
405+ let cB = k(this, cx)
406+ let cC = k(this, cy)
407+ let cD = k(this, cz)
408+[IntegerEntry(cw, (cA + ct)), IntegerEntry(cx, (cB + cu)), IntegerEntry(cy, (cC + cv)), IntegerEntry(cz, (cD + cs))]
415409 }
416410
417411
418-func cn (co,cp,cq,cr) = {
419- let cs = bn()
420- let ct = bo()
421- let cu = bp()
422- let cv = bm()
423- let cw = p(this, cs)
424- let cx = p(this, ct)
425- let cy = p(this, cu)
426- let cz = p(this, cv)
427-[IntegerEntry(cs, (cw + cp)), IntegerEntry(ct, (cx + cq)), IntegerEntry(cu, (cy + cr)), IntegerEntry(cv, (cz + co))]
412+func cE (cF,cG,cH) = {
413+ let cI = 1000
414+ (((cF * cH) + cG) / cI)
428415 }
429416
430417
431-func cA (aY,aZ,be,bf,bg,bh,bi) = [StringEntry(aX(aY, aZ), bd(be, bf, bg, bh, bi))]
418+func cJ (aS,aV,aW,aX,aY,cn,co,bn) = {
419+ let cK = bh(aV)
420+ let cL = bi(aV)
421+ let cM = bj(aV)
422+ let cN = bk(aV)
423+ let cO = bl(aV)
424+ let cP = bm(aV, bn)
425+ let cQ = bo(aV, bn)
426+ let bc = cE(cn, co, height)
427+[IntegerEntry(cK, aW), IntegerEntry(cL, aX), IntegerEntry(cM, aY), IntegerEntry(cN, cn), IntegerEntry(cO, co), IntegerEntry(cP, cn), IntegerEntry(cQ, co), StringEntry(aR(aS), bd(aV, aW, aX, aY, cn, co, bc))]
428+ }
432429
433430
434-func cB (aO,cC) = if ((size(aO.payments) > 1))
435- then l("only one payment is allowed")
436- else if ((size(aO.payments) == 0))
431+func cR (aI,cS) = if ((size(aI.payments) > 1))
432+ then g("only one payment is allowed")
433+ else if ((size(aI.payments) == 0))
437434 then 0
438435 else {
439- let cD = aO.payments[0]
440- if ((value(cD.assetId) != cC))
441- then l("invalid asset id in payment")
442- else cD.amount
436+ let cT = aI.payments[0]
437+ if ((value(cT.assetId) != cS))
438+ then g("invalid asset id in payment")
439+ else cT.amount
443440 }
444441
445442
446-func cE (aY) = valueOrElse(getInteger(this, bc(aY)), 0)
447-
448-
449-func cF () = {
450- let cG = {
451- let cH = value(getInteger(bV, bE()))
452- let cI = (cH - 1)
453- if ((0 > cI))
454- then l("invalid epoch")
455- else $Tuple2(cH, cI)
456- }
457- let cH = cG._1
458- let cI = cG._2
459- let cJ = value(getInteger(bV, bD(cH)))
460- $Tuple2(cI, cJ)
443+func cU (aS,cV) = {
444+ let cW = "empty"
445+ let cX = bf(aS)
446+ let aV = valueOrElse(getString(cX), cW)
447+ let cn = valueOrElse(getInteger(bk(aV)), 0)
448+ let co = valueOrElse(getInteger(bl(aV)), 0)
449+ let cY = cE(cn, co, cV)
450+ let bc = if ((0 > cY))
451+ then 0
452+ else cY
453+ bc
461454 }
462455
463456
464-func cK (bG) = {
465- let cL = 4
466- let cM = 5
467- let cN = {
468- let bY = invoke(bP, "getPoolConfigByLpAssetIdREADONLY", [bG], nil)
469- if ($isInstanceOf(bY, "List[Any]"))
470- then bY
471- else throw(($getType(bY) + " couldn't be cast to List[Any]"))
457+func cZ (aS) = cU(aS, height)
458+
459+
460+func da () = {
461+ let db = {
462+ let cd = value(getInteger(bY, bH()))
463+ let dc = (cd - 1)
464+ if ((0 > dc))
465+ then g("invalid epoch")
466+ else $Tuple2(cd, dc)
472467 }
473- let bA = {
474- let bY = cN[cL]
475- if ($isInstanceOf(bY, "String"))
476- then bY
477- else throw(($getType(bY) + " couldn't be cast to String"))
478- }
479- let bB = {
480- let bY = cN[cM]
481- if ($isInstanceOf(bY, "String"))
482- then bY
483- else throw(($getType(bY) + " couldn't be cast to String"))
484- }
485- $Tuple2(bA, bB)
468+ let cd = db._1
469+ let dc = db._2
470+ let dd = value(getInteger(bY, bG(cd)))
471+ $Tuple2(dc, dd)
486472 }
487473
488474
489-func cO (bG,bO) = {
490- let aY = addressFromStringValue(bO)
491- let cP = cF()
492- let cI = cP._1
493- let cJ = cP._2
494- let cQ = cK(bG)
495- let bA = cQ._1
496- let bB = cQ._2
497- let cR = bz(bA, bB, aY, cI)
498- let cS = valueOrElse(getInteger(bV, cR), 0)
499- cS
475+func de (bJ) = {
476+ let df = 4
477+ let dg = 5
478+ let dh = {
479+ let ca = invoke(bS, "getPoolConfigByLpAssetIdREADONLY", [bJ], nil)
480+ if ($isInstanceOf(ca, "List[Any]"))
481+ then ca
482+ else throw(($getType(ca) + " couldn't be cast to List[Any]"))
483+ }
484+ let bD = {
485+ let ca = dh[df]
486+ if ($isInstanceOf(ca, "String"))
487+ then ca
488+ else throw(($getType(ca) + " couldn't be cast to String"))
489+ }
490+ let bE = {
491+ let ca = dh[dg]
492+ if ($isInstanceOf(ca, "String"))
493+ then ca
494+ else throw(($getType(ca) + " couldn't be cast to String"))
495+ }
496+ $Tuple2(bD, bE)
500497 }
501498
502499
503-func cT (bG,bO) = {
504- let cU = valueOrElse(getInteger(bR, bN(bO, bG)), 0)
505- let cS = cO(bG, bO)
506- if ((cU == 0))
507- then 0
508- else cS
500+func di (bJ,bR) = {
501+ let aS = addressFromStringValue(bR)
502+ let dj = da()
503+ let dc = dj._1
504+ let dd = dj._2
505+ let dk = de(bJ)
506+ let bD = dk._1
507+ let bE = dk._2
508+ let dl = bC(bD, bE, aS, dc)
509+ let dm = valueOrElse(getInteger(bY, dl), 0)
510+ dm
509511 }
510512
511513
512-func cV (bG) = {
513- let cW = cF()
514- let cI = cW._1
515- let cJ = cW._2
516- let cX = valueOrElse(getInteger(bV, bF(bG, cI)), 0)
517- let cY = valueOrElse(getInteger(this, bF(bG, cI)), cX)
518- cY
514+func dn (bJ,bR) = {
515+ let do = valueOrElse(getInteger(bU, bQ(bR, bJ)), 0)
516+ let dm = di(bJ, bR)
517+ if ((do == 0))
518+ then 0
519+ else dm
519520 }
520521
521522
522-func cZ (bG) = {
523- let da = cF()
524- let cI = da._1
525- let cJ = da._2
526- let cY = cV(bG)
527- let db = valueOrElse(getInteger(this, bH(bG, cI)), 0)
528- let dc = valueOrElse(getInteger(this, bI(bG, cI)), cJ)
529- let dd = (height - dc)
530- let de = ((dd * cY) + db)
531- de
523+func dp (bJ) = {
524+ let dq = da()
525+ let dc = dq._1
526+ let dd = dq._2
527+ let dr = valueOrElse(getInteger(bY, bI(bJ, dc)), 0)
528+ let ds = valueOrElse(getInteger(this, bI(bJ, dc)), dr)
529+ ds
532530 }
533531
534532
535-func df (bG,dg) = {
536- let dh = cF()
537- let cI = dh._1
538- let cJ = dh._2
539- let cY = cV(bG)
540- let di = (cY + dg)
541- let de = cZ(bG)
542-[IntegerEntry(bF(bG, cI), di), IntegerEntry(bI(bG, cI), height), IntegerEntry(bH(bG, cI), de)]
533+func dt (bJ) = {
534+ let du = da()
535+ let dc = du._1
536+ let dd = du._2
537+ let ds = dp(bJ)
538+ let dv = valueOrElse(getInteger(this, bK(bJ, dc)), 0)
539+ let dw = valueOrElse(getInteger(this, bL(bJ, dc)), dd)
540+ let dx = (height - dw)
541+ let dy = ((dx * ds) + dv)
542+ dy
543543 }
544544
545545
546-func dj (bG,bO) = {
547- let dk = cF()
548- let cI = dk._1
549- let cJ = dk._2
550- let aY = addressFromStringValue(bO)
551- let dl = cT(bG, bO)
552- let dm = valueOrElse(getInteger(this, bK(bG, aY, cI)), 0)
553- let dn = valueOrElse(getInteger(this, bL(bG, aY, cI)), cJ)
554- let do = (height - dn)
555- let dp = ((do * dl) + dm)
556- dp
546+func dz (bJ,dA) = {
547+ let dB = da()
548+ let dc = dB._1
549+ let dd = dB._2
550+ let ds = dp(bJ)
551+ let dC = (ds + dA)
552+ let dy = dt(bJ)
553+[IntegerEntry(bI(bJ, dc), dC), IntegerEntry(bL(bJ, dc), height), IntegerEntry(bK(bJ, dc), dy)]
557554 }
558555
559556
560-func dq (bG,bO,dr) = {
561- let ds = cF()
562- let cI = ds._1
563- let cJ = ds._2
564- let aY = addressFromStringValue(bO)
565- let dt = cO(bG, bO)
566- let du = if ((dt == 0))
567- then nil
568- else {
569- let dg = if (dr)
570- then dt
571- else -(dt)
572- let dv = df(bG, dg)
573- let dp = dj(bG, bO)
574- let dw = [IntegerEntry(bL(bG, aY, cI), height), IntegerEntry(bK(bG, aY, cI), dp)]
575- (dv ++ dw)
576- }
577- du
557+func dD (bJ,bR) = {
558+ let dE = da()
559+ let dc = dE._1
560+ let dd = dE._2
561+ let aS = addressFromStringValue(bR)
562+ let dF = dn(bJ, bR)
563+ let dG = valueOrElse(getInteger(this, bN(bJ, aS, dc)), 0)
564+ let dH = valueOrElse(getInteger(this, bO(bJ, aS, dc)), dd)
565+ let dI = (height - dH)
566+ let dJ = ((dI * dF) + dG)
567+ dJ
578568 }
579569
580570
581-func dx (bG,bO) = {
582- let dy = cF()
583- let cI = dy._1
584- let cJ = dy._2
585- let aY = addressFromStringValue(bO)
586- let dz = bM(bG, aY, cI)
587- let dA = valueOrElse(getInteger(this, dz), 0)
588- let dB = bJ(bG, aY, cI)
589- let dC = valueOrElse(getInteger(this, dB), 0)
590- let dp = dj(bG, bO)
591- let de = cZ(bG)
592- let dD = (dp - dA)
593- let dE = (de - dC)
594- $Tuple3([IntegerEntry(dz, dp), IntegerEntry(dB, de)], dD, dE)
571+func dK (bJ,bR,dL) = {
572+ let dM = da()
573+ let dc = dM._1
574+ let dd = dM._2
575+ let aS = addressFromStringValue(bR)
576+ let dN = di(bJ, bR)
577+ let dO = if ((dN == 0))
578+ then nil
579+ else {
580+ let dA = if (dL)
581+ then dN
582+ else -(dN)
583+ let dP = dz(bJ, dA)
584+ let dJ = dD(bJ, bR)
585+ let dQ = [IntegerEntry(bO(bJ, aS, dc), height), IntegerEntry(bN(bJ, aS, dc), dJ)]
586+ (dP ++ dQ)
587+ }
588+ dO
595589 }
596590
597591
598-func dF () = {
599- let dG = s(bQ, ah())
600- let dH = getInteger(this, ak())
601- let dI = getInteger(this, al())
602- let dJ = s(bQ, an())
603- let dK = if ((height > dJ))
604- then dJ
592+func dR (bJ,bR) = {
593+ let dS = da()
594+ let dc = dS._1
595+ let dd = dS._2
596+ let aS = addressFromStringValue(bR)
597+ let dT = bP(bJ, aS, dc)
598+ let dU = valueOrElse(getInteger(this, dT), 0)
599+ let dV = bM(bJ, aS, dc)
600+ let dW = valueOrElse(getInteger(this, dV), 0)
601+ let dJ = dD(bJ, bR)
602+ let dy = dt(bJ)
603+ let dX = (dJ - dU)
604+ let dY = (dy - dW)
605+ $Tuple3([IntegerEntry(dT, dJ), IntegerEntry(dV, dy)], dX, dY)
606+ }
607+
608+
609+func dZ () = {
610+ let ea = n(bT, ag())
611+ let eb = getInteger(this, aj())
612+ let ec = getInteger(this, ak())
613+ let ed = n(bT, am())
614+ let cH = if ((height > ed))
615+ then ed
605616 else height
606- let dL = {
607- let aJ = dH
608- if ($isInstanceOf(aJ, "Int"))
617+ let ee = {
618+ let r = eb
619+ if ($isInstanceOf(r, "Int"))
609620 then {
610- let dM = aJ
611- max([(dK - dM), 0])
621+ let ef = r
622+ max([(cH - ef), 0])
612623 }
613- else if ($isInstanceOf(aJ, "Unit"))
624+ else if ($isInstanceOf(r, "Unit"))
614625 then 0
615626 else throw("Match error")
616627 }
617- let dN = ((dG * (bX - 1)) / bX)
618- let dO = valueOrElse(dI, 0)
619- let dP = ((dN * dL) + dO)
620- $Tuple2([IntegerEntry(al(), dP), IntegerEntry(ak(), height)], dP)
628+ let eg = ((ea * (bZ - 1)) / bZ)
629+ let eh = valueOrElse(ec, 0)
630+ let ei = ((eg * ee) + eh)
631+ $Tuple2([IntegerEntry(ak(), ei), IntegerEntry(aj(), height)], ei)
621632 }
622633
623634
624-func dQ (bG,bO,dR) = {
625- let aY = valueOrErrorMessage(addressFromString(bO), j("invalid user address"))
626- let br = bZ(aY)
627- if ((br == br))
628- then {
629- let dS = "empty"
630- let dT = if ((bG != dS))
635+func ej (bJ,bR,ek) = {
636+ let el = getString(this, aR(bR))
637+ if ((el == unit))
638+ then $Tuple3(0, nil, "userRecord::is::empty")
639+ else {
640+ let em = split(value(el), a)
641+ let en = em[aL]
642+ let eo = "empty"
643+ let ep = if ((bJ != eo))
631644 then {
632- let dU = valueOrErrorMessage(getString(bP, Q(bG)), j(("unsupported lp asset " + bG)))
633- getIntegerValue(bP, S(dU))
645+ let eq = valueOrErrorMessage(getString(bS, O(bJ)), e(("unsupported lp asset " + bJ)))
646+ getIntegerValue(bS, Q(eq))
634647 }
635- else if (dR)
648+ else if (ek)
636649 then 0
637- else l(("not readonly mode: unsupported lp asset " + bG))
638- let dV = bs(br, bG)
639- let dW = bq(br)
640- let dX = valueOrElse(getInteger(this, dV), p(this, dW))
641- let dP = dF()._2
642- let dY = (dP - dX)
643- if ((0 > dY))
644- then l("wrong calculations")
650+ else g(("not readonly mode: unsupported lp asset " + bJ))
651+ let er = bu(en, bJ)
652+ let es = bt(en)
653+ let et = valueOrElse(getInteger(this, er), k(this, es))
654+ let ei = dZ()._2
655+ let eu = (ei - et)
656+ if ((0 > eu))
657+ then g("wrong calculations")
645658 else {
646- let dZ = dx(bG, bO)
647- let ea = dZ._1
648- let eb = dZ._2
649- let ec = dZ._3
650- let ed = fraction(dY, dT, d)
651- let ee = if ((ec == 0))
659+ let ev = dR(bJ, bR)
660+ let ew = ev._1
661+ let ex = ev._2
662+ let ey = ev._3
663+ let ez = fraction(eu, ep, d)
664+ let eA = if ((ey == 0))
652665 then 0
653- else fraction(ed, eb, ec)
654- let ef = ([IntegerEntry(dV, dP)] ++ ea)
655- let eg = makeString([toString(dX), toString(dY), toString(dT), toString(eb), toString(ec)], ":")
656- $Tuple3(ee, ef, eg)
657- }
658- }
659- else throw("Strict value is not equal to itself.")
660- }
661-
662-
663-func eh (aO,bg) = {
664- let ei = toBase58String(ay)
665- if ((size(aO.payments) != 1))
666- then l("invalid payment - exact one payment must be attached")
667- else {
668- let cD = aO.payments[0]
669- let ej = cD.amount
670- if ((ay != value(cD.assetId)))
671- then l((("invalid asset is in payment - " + ei) + " is expected"))
672- else {
673- let ek = bj()
674- let aY = aO.caller
675- let bO = toString(aY)
676- let el = isDefined(getString(bk(bO)))
677- let em = if (el)
678- then value(getString(bk(bO)))
679- else toString(s(this, ek))
680- let br = parseIntValue(em)
681- let ck = height
682- if (if ((az > ej))
683- then (aY != bT)
684- else false)
685- then l(("amount is less then minLockAmount=" + toString(az)))
686- else if ((aA > bg))
687- then l(("passed duration is less than minLockDuration=" + toString(aA)))
688- else if ((bg > aB))
689- then l(("passed duration is greater than maxLockDuration=" + toString(aB)))
690- else if (((bg % aE) != 0))
691- then l(("duration must be multiple of lockStepBlocks=" + toString(aE)))
692- else {
693- let en = fraction(ej, bg, aB)
694- let eo = ca()
695- let dW = bq(br)
696- let dP = dF()._2
697- let ep = cE(aY)
698- let eq = invoke(bS, "refreshUserReward", [aY.bytes, br], nil)
699- if ((eq == eq))
700- then {
701- let er = if (el)
702- then nil
703- else [IntegerEntry(ek, (br + 1)), StringEntry(bk(bO), em), StringEntry(bl(em), bO)]
704- $Tuple2(((((er ++ cA(aY, aO.transactionId, ej, ck, bg, en, 0)) ++ cn(ej, bg, 1, if (el)
705- then 0
706- else 1)) :+ ch("lock", bO, ej, ck, bg, en, aO)) ++ [IntegerEntry(dW, dP), IntegerEntry(by(), (eo + en)), IntegerEntry(bc(aY), (ep + en))]), en)
707- }
708- else throw("Strict value is not equal to itself.")
709- }
666+ else fraction(ez, ex, ey)
667+ let eB = ([IntegerEntry(er, ei)] ++ ew)
668+ let eC = makeString([toString(et), toString(eu), toString(ep), toString(ex), toString(ey)], ":")
669+ $Tuple3(eA, eB, eC)
710670 }
711671 }
712672 }
713673
714674
715-func es (aY,et) = {
716- let eu = bb(aY, et)
717- let ev = parseIntValue(eu[aR])
718- let ck = parseIntValue(eu[aS])
719- let ew = parseIntValue(eu[aT])
720- let ex = (ck + ew)
721- let bi = parseIntValue(eu[aW])
722- let ey = ((height - ck) / aD)
723- let ez = fraction(toBigInt(ey), (toBigInt((i * aD)) * h), toBigInt(ew))
724- let eA = if ((height > ex))
725- then ev
726- else toInt(fraction(toBigInt(ev), (h - pow(toBigInt(5), 1, ez, f, f, DOWN)), h))
727- let eB = (eA - bi)
728- eB
675+func eD (aI,aY) = {
676+ let eE = av()
677+ let eF = eE[ap]
678+ let ay = fromBase58String(eF)
679+ let az = parseIntValue(eE[aq])
680+ let aA = parseIntValue(eE[ar])
681+ let aB = parseIntValue(eE[as])
682+ if ((size(aI.payments) != 1))
683+ then g("invalid payment - exact one payment must be attached")
684+ else {
685+ let cT = aI.payments[0]
686+ let eG = cT.amount
687+ if ((ay != value(cT.assetId)))
688+ then g((("invalid asset is in payment - " + eF) + " is expected"))
689+ else {
690+ let eH = be()
691+ let bR = toString(aI.caller)
692+ let eI = isDefined(getString(bf(bR)))
693+ let en = if (eI)
694+ then value(getString(bf(bR)))
695+ else toString(n(this, eH))
696+ let aV = parseIntValue(en)
697+ let cm = height
698+ let cL = bi(en)
699+ let cM = bj(en)
700+ let cK = bh(en)
701+ if (if ((az > eG))
702+ then (aI.caller != bW)
703+ else false)
704+ then g(("amount is less then minLockAmount=" + toString(az)))
705+ else if ((aA > aY))
706+ then g(("passed duration is less then minLockDuration=" + toString(aA)))
707+ else if ((aY > aB))
708+ then g(("passed duration is greater then maxLockDuration=" + toString(aB)))
709+ else if (if (eI)
710+ then ((n(this, cL) + n(this, cM)) >= cm)
711+ else false)
712+ then g("there is an active lock - consider to use increaseLock")
713+ else if ((k(this, cK) > 0))
714+ then g(("there are locked WXs - consider to use increaseLock " + cK))
715+ else {
716+ let eJ = fraction(aY, c, aB)
717+ let eK = fraction(eG, eJ, c)
718+ let eL = q(invoke(aw, "calcGwxParamsREADONLY", [eK, cm, aY], nil))
719+ let cn = t(eL[0])
720+ let co = t(eL[1])
721+ let bn = toString(t(eL[2]))
722+ let cg = cb(false)
723+ let es = bt(en)
724+ let ei = dZ()._2
725+ let eM = if (eI)
726+ then nil
727+ else [IntegerEntry(eH, (aV + 1)), StringEntry(bf(bR), en), StringEntry(bg(en), bR)]
728+ $Tuple2(((((eM ++ cJ(bR, en, eG, cm, aY, cn, co, bn)) ++ cr(eG, aY, 1, if (eI)
729+ then 0
730+ else 1)) :+ cj("lock", bR, eG, cm, aY, cn, co, aI)) ++ [IntegerEntry(es, ei), IntegerEntry(bA(), (cg + eK))]), eK)
731+ }
732+ }
733+ }
729734 }
730735
731736
732-@Callable(aO)
733-func lockRef (bg,eC,eD) = {
734- let eE = aH()
735- if ((eE == eE))
737+@Callable(aI)
738+func constructor (eN,eO,az,eP,eQ,aw) = {
739+ let eR = aH(aI)
740+ if ((eR == eR))
741+ then ([IntegerEntry(be(), 0), StringEntry(au(), aC(eO, az, eP, eQ, aw)), StringEntry(A(), eN)] ++ cr(0, 0, 0, 0))
742+ else throw("Strict value is not equal to itself.")
743+ }
744+
745+
746+
747+@Callable(aI)
748+func lockRef (aY,eS,eT) = {
749+ let eU = eD(aI, aY)
750+ let eV = eU._1
751+ let eK = eU._2
752+ let eW = toString(aI.caller)
753+ let eX = if (if ((eS == ""))
754+ then true
755+ else (eT == base58''))
756+ then unit
757+ else invoke(w, "createPair", [z, eS, eW, eT], nil)
758+ if ((eX == eX))
736759 then {
737- let eF = eh(aO, bg)
738- let eG = eF._1
739- let en = eF._2
740- let eH = toString(aO.caller)
741- let eI = if (if ((eC == ""))
742- then true
743- else (eD == base58''))
744- then unit
745- else invoke(z, "createPair", [C, eC, eH, eD], nil)
746- if ((eI == eI))
747- then {
748- let eJ = invoke(aC, "updateReferralActivity", [toString(aO.caller), en], nil)
749- if ((eJ == eJ))
750- then $Tuple2(eG, unit)
751- else throw("Strict value is not equal to itself.")
752- }
760+ let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
761+ if ((eY == eY))
762+ then $Tuple2(eV, unit)
753763 else throw("Strict value is not equal to itself.")
754764 }
755765 else throw("Strict value is not equal to itself.")
757767
758768
759769
760-@Callable(aO)
761-func lock (bg) = {
762- let eE = aH()
763- if ((eE == eE))
770+@Callable(aI)
771+func lock (aY) = {
772+ let eZ = eD(aI, aY)
773+ let eV = eZ._1
774+ let eK = eZ._2
775+ let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
776+ if ((eY == eY))
777+ then $Tuple2(eV, unit)
778+ else throw("Strict value is not equal to itself.")
779+ }
780+
781+
782+
783+@Callable(aI)
784+func increaseLock (fa) = {
785+ let eE = av()
786+ let eF = eE[ap]
787+ let ay = fromBase58String(eF)
788+ let aA = parseIntValue(eE[ar])
789+ let aB = parseIntValue(eE[as])
790+ let eG = cR(aI, ay)
791+ let bR = toString(aI.caller)
792+ let em = aT(bR)
793+ let en = em[aL]
794+ let fb = parseIntValue(em[aM])
795+ let cm = parseIntValue(em[aN])
796+ let fc = parseIntValue(em[aO])
797+ let fd = (cm + fc)
798+ let fe = max([(fd - height), 0])
799+ let ff = (fb + eG)
800+ let fg = (fe + fa)
801+ if ((0 > fa))
802+ then g("duration is less then zero")
803+ else if ((aA > fg))
804+ then g(("lockDurationNew is less then minLockDuration=" + toString(aA)))
805+ else if ((fg > aB))
806+ then g(("deltaDuration + existedLockDuration is greater then maxLockDuration=" + toString(aB)))
807+ else {
808+ let eJ = fraction(fg, c, aB)
809+ let eK = fraction(ff, eJ, c)
810+ let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
811+ if ((eY == eY))
812+ then {
813+ let fh = height
814+ let eL = q(invoke(aw, "calcGwxParamsREADONLY", [eK, fh, fg], nil))
815+ let cn = t(eL[0])
816+ let co = t(eL[1])
817+ let bn = toString(t(eL[2]))
818+ let fi = cZ(bR)
819+ let fj = (eK - fi)
820+ if ((0 > fj))
821+ then g(("gwxDiff is less then 0: " + toString(fj)))
822+ else {
823+ let cg = cb(false)
824+ let fk = cb(true)
825+ (((cJ(bR, en, ff, fh, fg, cn, co, bn) ++ cr(eG, fa, 0, 0)) :+ cj("lock", bR, eG, cm, fg, cn, co, aI)) ++ [IntegerEntry(bA(), (cg + fj))])
826+ }
827+ }
828+ else throw("Strict value is not equal to itself.")
829+ }
830+ }
831+
832+
833+
834+@Callable(aI)
835+func claimWxBoost (bJ,bR) = if ((bU != aI.caller))
836+ then g("permissions denied")
837+ else {
838+ let fl = ej(bJ, bR, false)
839+ let fm = fl._1
840+ let eB = fl._2
841+ let eC = fl._3
842+ $Tuple2(eB, [fm])
843+ }
844+
845+
846+
847+@Callable(aI)
848+func claimWxBoostREADONLY (bJ,bR) = {
849+ let fn = ej(bJ, bR, true)
850+ let fm = fn._1
851+ let eB = fn._2
852+ let eC = fn._3
853+ $Tuple2(nil, [fm, eC])
854+ }
855+
856+
857+
858+@Callable(aI)
859+func unlock (aS) = {
860+ let em = aT(aS)
861+ let en = em[aL]
862+ let fb = parseIntValue(em[aM])
863+ let cm = parseIntValue(em[aN])
864+ let fc = parseIntValue(em[aO])
865+ let fd = (cm + fc)
866+ let eE = av()
867+ let ay = fromBase58String(eE[ap])
868+ if ((fd >= height))
869+ then g((("wait " + toString(fd)) + " to unlock"))
870+ else if ((0 >= fb))
871+ then g("nothing to unlock")
872+ else {
873+ let bn = valueOrElse(getInteger(aw, an()), 0)
874+ (((cJ(aS, en, 0, cm, fc, 0, 0, toString(bn)) ++ cr(-(fb), 0, 0, -1)) :+ cj("unlock", aS, fb, cm, fc, 0, 0, aI)) :+ ScriptTransfer(addressFromStringValue(aS), fb, ay))
875+ }
876+ }
877+
878+
879+
880+@Callable(aI)
881+func gwxUserInfoREADONLY (aS) = {
882+ let bc = cZ(aS)
883+ $Tuple2(nil, [bc])
884+ }
885+
886+
887+
888+@Callable(aI)
889+func userMaxDurationREADONLY (bR) = {
890+ let eE = av()
891+ let aB = parseIntValue(eE[as])
892+ let el = getString(this, aR(bR))
893+ if ((el == unit))
894+ then $Tuple2(nil, $Tuple2("lock", aB))
895+ else {
896+ let em = split(value(el), a)
897+ let cm = parseIntValue(em[aN])
898+ let fc = parseIntValue(em[aO])
899+ let fd = (cm + fc)
900+ let fe = max([(fd - height), 0])
901+ let fo = (aB - fe)
902+ $Tuple2(nil, $Tuple2("increaseLock", fo))
903+ }
904+ }
905+
906+
907+
908+@Callable(aI)
909+func getUserGwxAmountAtHeightREADONLY (aS,cV) = {
910+ let bc = cU(aS, cV)
911+ $Tuple2(nil, bc)
912+ }
913+
914+
915+
916+@Callable(aI)
917+func getTotalCachedGwxREADONLY () = $Tuple2(nil, cb(true))
918+
919+
920+
921+@Callable(aI)
922+func onBoostEmissionUpdate () = {
923+ let eR = if ((aI.caller == bT))
924+ then true
925+ else aH(aI)
926+ if ((eR == eR))
927+ then dZ()
928+ else throw("Strict value is not equal to itself.")
929+ }
930+
931+
932+
933+@Callable(aI)
934+func onStakedVoteUpdate (bJ,bR,dL) = {
935+ let eR = if ((aI.caller == bU))
936+ then true
937+ else aH(aI)
938+ if ((eR == eR))
764939 then {
765- let eK = eh(aO, bg)
766- let eG = eK._1
767- let en = eK._2
768- let eJ = invoke(aC, "updateReferralActivity", [toString(aO.caller), en], nil)
769- if ((eJ == eJ))
770- then $Tuple2(eG, unit)
771- else throw("Strict value is not equal to itself.")
940+ let dO = dK(bJ, bR, dL)
941+ $Tuple2(dO, unit)
772942 }
773943 else throw("Strict value is not equal to itself.")
774944 }
775945
776946
777947
778-@Callable(aO)
779-func claimWxBoost (bG,bO) = {
780- let eE = aH()
781- if ((eE == eE))
782- then if ((bR != aO.caller))
783- then l("permissions denied")
784- else {
785- let eL = dQ(bG, bO, false)
786- let eM = eL._1
787- let ef = eL._2
788- let eg = eL._3
789- $Tuple2(ef, [eM])
790- }
791- else throw("Strict value is not equal to itself.")
792- }
948+@Callable(aI)
949+func getVotingResultStakedREADONLY (bJ) = $Tuple2(nil, dp(bJ))
793950
794951
795952
796-@Callable(aO)
797-func claimWxBoostREADONLY (bG,bO) = {
798- let eN = dQ(bG, bO, true)
799- let eM = eN._1
800- let ef = eN._2
801- let eg = eN._3
802- $Tuple2(nil, [eM, eg])
803- }
953+@Callable(aI)
954+func getVotingResultStakedIntegralREADONLY (bJ) = $Tuple2(nil, dt(bJ))
804955
805956
806957
807-@Callable(aO)
808-func unlock (eO) = {
809- let eE = aH()
810- if ((eE == eE))
811- then {
812- let aY = aO.caller
813- let bO = toString(aY)
814- let et = if ((eO == ""))
815- then unit
816- else fromBase58String(eO)
817- let eu = bb(aY, et)
818- let ev = parseIntValue(eu[aR])
819- let ck = parseIntValue(eu[aS])
820- let ew = parseIntValue(eu[aT])
821- let bi = parseIntValue(eu[aW])
822- let bh = parseIntValue(eu[aV])
823- let ey = ((height - ck) / aD)
824- let eB = es(aY, et)
825- let eP = min([fraction(eB, ew, aB), bh])
826- let eQ = v((bh - eP), "gwxRemaining")
827- let eR = cb(aY)
828- if ((0 >= eB))
829- then l("nothing to unlock")
830- else {
831- let eo = ca()
832- let ep = cE(aY)
833- let eS = v((ep - eP), "userGwxAmountTotalNew")
834- if ((eR > eS))
835- then l(("locked gwx amount: " + toString(eR)))
836- else {
837- let br = parseIntValue(valueOrErrorMessage(getString(bk(bO)), j("invalid user number")))
838- let eq = invoke(bS, "refreshUserReward", [aY.bytes, br], nil)
839- if ((eq == eq))
840- then ((((cA(aY, et, ev, ck, ew, eQ, (bi + eB)) ++ cn(-(eB), 0, 0, 0)) :+ ch("unlock", bO, eB, ck, ew, eP, aO)) :+ ScriptTransfer(aY, eB, ay)) ++ [IntegerEntry(by(), v((eo - eP), "gwxTotal")), IntegerEntry(bc(aY), eS)])
841- else throw("Strict value is not equal to itself.")
842- }
843- }
844- }
845- else throw("Strict value is not equal to itself.")
846- }
958+@Callable(aI)
959+func getUserVoteFinalizedREADONLY (bJ,bR) = $Tuple2(nil, di(bJ, bR))
847960
848961
849962
850-@Callable(aO)
851-func gwxUserInfoREADONLY (bO) = {
852- let aY = valueOrErrorMessage(addressFromString(bO), j("invalid user address"))
853- let bh = cE(aY)
854- $Tuple2(nil, [bh])
855- }
963+@Callable(aI)
964+func getUserVoteStakedIntegralREADONLY (bJ,bR) = $Tuple2(nil, dD(bJ, bR))
856965
857966
858-
859-@Callable(aO)
860-func userMaxDurationREADONLY (bO) = $Tuple2(nil, $Tuple2("lock", aB))
861-
862-
863-
864-@Callable(aO)
865-func getUserGwxAmountAtHeightREADONLY (bO,eT) = {
866- let aY = valueOrErrorMessage(addressFromString(bO), j("invalid user address"))
867- let bh = cE(aY)
868- $Tuple2(nil, bh)
869- }
870-
871-
872-
873-@Callable(aO)
874-func getUserGwxAmount (bO) = {
875- let aY = valueOrErrorMessage(addressFromString(bO), j("invalid user address"))
876- let bh = cE(aY)
877- $Tuple2(nil, bh)
878- }
879-
880-
881-
882-@Callable(aO)
883-func getGwxTotalREADONLY () = $Tuple2(nil, ca())
884-
885-
886-
887-@Callable(aO)
888-func onBoostEmissionUpdate () = {
889- let eE = aH()
890- if ((eE == eE))
891- then {
892- let eU = if ((aO.caller == bQ))
893- then true
894- else aN(aO)
895- if ((eU == eU))
896- then dF()
897- else throw("Strict value is not equal to itself.")
898- }
899- else throw("Strict value is not equal to itself.")
900- }
901-
902-
903-
904-@Callable(aO)
905-func onStakedVoteUpdate (bG,bO,dr) = {
906- let eE = aH()
907- if ((eE == eE))
908- then {
909- let eU = if ((aO.caller == bR))
910- then true
911- else aN(aO)
912- if ((eU == eU))
913- then {
914- let du = dq(bG, bO, dr)
915- $Tuple2(du, unit)
916- }
917- else throw("Strict value is not equal to itself.")
918- }
919- else throw("Strict value is not equal to itself.")
920- }
921-
922-
923-
924-@Callable(aO)
925-func getVotingResultStakedREADONLY (bG) = $Tuple2(nil, cV(bG))
926-
927-
928-
929-@Callable(aO)
930-func getVotingResultStakedIntegralREADONLY (bG) = $Tuple2(nil, cZ(bG))
931-
932-
933-
934-@Callable(aO)
935-func getUserVoteFinalizedREADONLY (bG,bO) = $Tuple2(nil, cO(bG, bO))
936-
937-
938-
939-@Callable(aO)
940-func getUserVoteStakedIntegralREADONLY (bG,bO) = $Tuple2(nil, dj(bG, bO))
941-
942-
943-
944-@Callable(aO)
945-func suspend (w) = {
946- let eU = aN(aO)
947- if ((eU == eU))
948- then $Tuple2([BooleanEntry(aF, w)], w)
949- else throw("Strict value is not equal to itself.")
950- }
951-
952-
953-@Verifier(eV)
954-func eW () = {
955- let eX = {
956- let aJ = aL()
957- if ($isInstanceOf(aJ, "ByteVector"))
967+@Verifier(fp)
968+func fq () = {
969+ let fr = {
970+ let r = aF()
971+ if ($isInstanceOf(r, "ByteVector"))
958972 then {
959- let aQ = aJ
960- aQ
973+ let aK = r
974+ aK
961975 }
962- else if ($isInstanceOf(aJ, "Unit"))
963- then eV.senderPublicKey
976+ else if ($isInstanceOf(r, "Unit"))
977+ then fp.senderPublicKey
964978 else throw("Match error")
965979 }
966- sigVerify(eV.bodyBytes, eV.proofs[0], eX)
980+ sigVerify(fp.bodyBytes, fp.proofs[0], fr)
967981 }
968982
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = 8
77
88 let c = 100000000
99
1010 let d = c
1111
12-let e = "boosting.ride"
13-
14-let f = 18
15-
16-let g = 1000000000000000000
17-
18-let h = toBigInt(g)
19-
20-let i = 8
21-
22-func j (k) = makeString([e, ": ", k], "")
12+func e (f) = makeString(["boosting.ride:", f], " ")
2313
2414
25-func l (k) = throw(j(k))
15+func g (f) = throw(e(f))
2616
2717
28-func m (n,o) = valueOrErrorMessage(getString(n, o), j((("mandatory this." + o) + " is not defined")))
18+func h (i,j) = valueOrErrorMessage(getString(i, j), e((("mandatory this." + j) + " is not defined")))
2919
3020
31-func p (n,o) = valueOrElse(getInteger(n, o), 0)
21+func k (i,j) = valueOrElse(getInteger(i, j), 0)
3222
3323
34-func q (n,o,r) = valueOrElse(getInteger(n, o), r)
24+func l (i,j,m) = valueOrElse(getInteger(i, j), m)
3525
3626
37-func s (n,o) = valueOrErrorMessage(getInteger(n, o), j((("mandatory this." + o) + " is not defined")))
27+func n (i,j) = valueOrErrorMessage(getInteger(i, j), e((("mandatory this." + j) + " is not defined")))
3828
3929
40-func t (u) = if ((0 > u))
41- then -(u)
42- else u
30+func o (p) = if ((0 > p))
31+ then -(p)
32+ else p
4333
4434
45-func v (w,x) = if ((w >= 0))
46- then w
47- else l((valueOrElse(x, "value") + " should be positive"))
35+func q (p) = {
36+ let r = p
37+ if ($isInstanceOf(r, "List[Any]"))
38+ then {
39+ let s = r
40+ s
41+ }
42+ else g("fail to cast into List[Any]")
43+ }
4844
4945
50-func y () = makeString(["%s%s", "config", "referralsContractAddress"], a)
46+func t (p) = {
47+ let r = p
48+ if ($isInstanceOf(r, "Int"))
49+ then {
50+ let u = r
51+ u
52+ }
53+ else g("fail to cast into Int")
54+ }
5155
5256
53-let z = addressFromStringValue(m(this, y()))
54-
55-let A = makeString(["%s%s", "referral", "programName"], a)
56-
57-let B = "wxlock"
58-
59-let C = valueOrElse(getString(this, A), B)
60-
61-func D () = "%s%s__config__factoryAddress"
57+func v () = makeString(["%s%s", "config", "referralsContractAddress"], a)
6258
6359
64-let E = 1
60+let w = addressFromStringValue(h(this, v()))
6561
66-let F = 2
62+let x = makeString(["%s%s", "referral", "programName"], a)
6763
68-let G = 3
64+let y = "wxlock"
6965
70-let H = 4
66+let z = valueOrElse(getString(this, x), y)
7167
72-let I = 5
73-
74-let J = 6
75-
76-let K = 7
77-
78-let L = 8
79-
80-let M = 9
81-
82-let N = 10
83-
84-let O = 11
85-
86-func P () = "%s__factoryConfig"
68+func A () = "%s%s__config__factoryAddress"
8769
8870
89-func Q (R) = makeString(["%s%s%s", R, "mappings__lpAsset2PoolContract"], a)
71+let B = 1
72+
73+let C = 2
74+
75+let D = 3
76+
77+let E = 4
78+
79+let F = 5
80+
81+let G = 6
82+
83+let H = 7
84+
85+let I = 8
86+
87+let J = 9
88+
89+let K = 10
90+
91+let L = 11
92+
93+func M () = "%s__factoryConfig"
9094
9195
92-func S (T) = makeString(["%s%s", "poolWeight", T], a)
96+func N () = "%s__lpTokensList"
9397
9498
95-func U (V,W) = ((("%s%s__poolWeight__" + V) + "__") + toString(W))
99+func O (P) = makeString(["%s%s%s", P, "mappings__lpAsset2PoolContract"], a)
96100
97101
98-func X () = addressFromStringValue(m(this, D()))
102+func Q (R) = makeString(["%s%s", "poolWeight", R], a)
99103
100104
101-func Y (Z) = split(m(Z, P()), a)
105+func S (T,U) = ((("%s%s__poolWeight__" + T) + "__") + toString(U))
102106
103107
104-func aa (ab) = addressFromStringValue(ab[F])
108+func V () = addressFromStringValue(h(this, A()))
105109
106110
107-func ac (ab) = addressFromStringValue(ab[I])
111+func W () = split(valueOrElse(getString(V(), N()), ""), a)
108112
109113
110-func ad (ab) = addressFromStringValue(ab[E])
114+func X (Y) = split(h(Y, M()), a)
111115
112116
113-func ae (ab) = addressFromStringValue(ab[N])
117+func Z (aa) = addressFromStringValue(aa[C])
114118
115119
116-func af () = "%s__managerPublicKey"
120+func ab (aa) = addressFromStringValue(aa[F])
117121
118122
119-func ag () = "%s__managerVaultAddress"
123+func ac (aa) = addressFromStringValue(aa[B])
120124
121125
122-func ah () = "%s%s__ratePerBlock__current"
126+func ad (aa) = addressFromStringValue(aa[K])
123127
124128
125-func ai () = "%s%s__ratePerBlockMax__current"
129+func ae () = "%s__managerPublicKey"
126130
127131
128-func aj () = "%s%s__emission__startBlock"
132+func af () = "%s__managerVaultAddress"
129133
130134
131-func ak () = "%s%s__boostingV2__startBlock"
135+func ag () = "%s%s__ratePerBlock__current"
132136
133137
134-func al () = "%s%s__boostingV2__integral"
138+func ah () = "%s%s__ratePerBlockMax__current"
135139
136140
137-func am () = "%s%s__emission__duration"
141+func ai () = "%s%s__emission__startBlock"
138142
139143
140-func an () = "%s%s__emission__endBlock"
144+func aj () = "%s%s__boostingV2__startBlock"
141145
142146
143-let ao = 1
144-
145-let ap = 2
146-
147-let aq = 3
148-
149-let ar = 4
150-
151-let as = 5
152-
153-let at = 6
154-
155-let au = 7
156-
157-func av () = "%s__config"
147+func ak () = "%s%s__boostingV2__integral"
158148
159149
160-func aw () = split(m(this, av()), a)
150+func al () = "%s%s__emission__duration"
161151
162152
163-let ax = aw()
164-
165-let ay = fromBase58String(ax[ao])
166-
167-let az = valueOrErrorMessage(parseInt(ax[ap]), j("invalid min lock amount"))
168-
169-let aA = valueOrErrorMessage(parseInt(ax[aq]), j("invalid min lock duration"))
170-
171-let aB = valueOrErrorMessage(parseInt(ax[ar]), j("invalid max lock duration"))
172-
173-let aC = valueOrErrorMessage(addressFromString(ax[as]), j("invalid math contract address"))
174-
175-let aD = valueOrErrorMessage(parseInt(ax[at]), j("invalid blocks in period"))
176-
177-let aE = valueOrErrorMessage(parseInt(ax[au]), j("invalid lock step blocks"))
178-
179-let aF = "%s__suspension"
180-
181-let aG = valueOrElse(getBoolean(this, aF), false)
182-
183-func aH () = if (!(aG))
184- then true
185- else l("suspended")
153+func am () = "%s%s__emission__endBlock"
186154
187155
188-func aI () = {
189- let aJ = getString(ag())
190- if ($isInstanceOf(aJ, "String"))
156+func an () = "%s__nextPeriod"
157+
158+
159+func ao () = "%s%s__gwxRewardEmissionPart__startHeight"
160+
161+
162+let ap = 1
163+
164+let aq = 2
165+
166+let ar = 3
167+
168+let as = 4
169+
170+let at = 5
171+
172+func au () = "%s__config"
173+
174+
175+func av () = split(h(this, au()), a)
176+
177+
178+let aw = addressFromStringValue(av()[at])
179+
180+func ax (ay,az,aA,aB,aw) = makeString(["%s%d%d%d", ay, az, aA, aB, aw], a)
181+
182+
183+func aC (ay,az,aA,aB,aw) = ax(ay, toString(az), toString(aA), toString(aB), aw)
184+
185+
186+func aD () = {
187+ let r = getString(af())
188+ if ($isInstanceOf(r, "String"))
191189 then {
192- let aK = aJ
193- addressFromStringValue(aK)
190+ let aE = r
191+ addressFromStringValue(aE)
194192 }
195193 else this
196194 }
197195
198196
199-func aL () = {
200- let aM = aI()
201- let aJ = getString(aM, af())
202- if ($isInstanceOf(aJ, "String"))
197+func aF () = {
198+ let aG = aD()
199+ let r = getString(aG, ae())
200+ if ($isInstanceOf(r, "String"))
203201 then {
204- let aK = aJ
205- fromBase58String(aK)
202+ let aE = r
203+ fromBase58String(aE)
206204 }
207- else if ($isInstanceOf(aJ, "Unit"))
205+ else if ($isInstanceOf(r, "Unit"))
208206 then unit
209207 else throw("Match error")
210208 }
211209
212210
213-func aN (aO) = {
214- let aP = l("Permission denied")
215- let aJ = aL()
216- if ($isInstanceOf(aJ, "ByteVector"))
211+func aH (aI) = {
212+ let aJ = g("Permission denied")
213+ let r = aF()
214+ if ($isInstanceOf(r, "ByteVector"))
217215 then {
218- let aQ = aJ
219- if ((aO.callerPublicKey == aQ))
216+ let aK = r
217+ if ((aI.callerPublicKey == aK))
220218 then true
221- else aP
219+ else aJ
222220 }
223- else if ($isInstanceOf(aJ, "Unit"))
224- then if ((aO.caller == this))
221+ else if ($isInstanceOf(r, "Unit"))
222+ then if ((aI.caller == this))
225223 then true
226- else aP
224+ else aJ
227225 else throw("Match error")
228226 }
229227
230228
231-let aR = 1
229+let aL = 1
232230
233-let aS = 2
231+let aM = 2
234232
235-let aT = 3
233+let aN = 3
236234
237-let aU = 4
235+let aO = 4
238236
239-let aV = 5
237+let aP = 5
240238
241-let aW = 6
239+let aQ = 6
242240
243-func aX (aY,aZ) = makeString(["%s%s%s__lock", toString(aY), {
244- let aJ = aZ
245- if ($isInstanceOf(aJ, "ByteVector"))
246- then {
247- let ba = aJ
248- toBase58String(ba)
249- }
250- else if ($isInstanceOf(aJ, "Unit"))
251- then "legacy"
252- else throw("Match error")
253- }], a)
241+func aR (aS) = makeString(["%s%s__lock", aS], a)
254242
255243
256-func bb (aY,aZ) = split(m(this, aX(aY, aZ)), a)
244+func aT (aS) = split(h(this, aR(aS)), a)
257245
258246
259-func bc (aY) = makeString(["%s%s__gwxAmountTotal", toString(aY)], a)
247+func aU (aV,aW,aX,aY,aZ,ba,bb,bc) = makeString(["%d%d%d%d%d%d%d%d", aV, aW, aX, aY, aZ, ba, bb, bc], a)
260248
261249
262-func bd (be,bf,bg,bh,bi) = makeString(["%d%d%d%d%d%d", toString(be), toString(bf), toString(bg), toString(lastBlock.timestamp), toString(bh), toString(bi)], a)
250+func bd (aV,aW,aX,aY,aZ,ba,bc) = aU(aV, toString(aW), toString(aX), toString(aY), toString(aZ), toString(ba), toString(lastBlock.timestamp), toString(bc))
263251
264252
265-func bj () = "%s__nextUserNum"
253+func be () = "%s__nextUserNum"
266254
267255
268-func bk (aY) = makeString(["%s%s%s__mapping__user2num", aY], a)
256+func bf (aS) = makeString(["%s%s%s__mapping__user2num", aS], a)
269257
270258
271-func bl (W) = makeString(["%s%s%s__mapping__num2user", W], a)
259+func bg (U) = makeString(["%s%s%s__mapping__num2user", U], a)
272260
273261
274-func bm () = "%s%s__stats__activeTotalLocked"
262+func bh (aV) = makeString(["%s%d%s__paramByUserNum", aV, "amount"], a)
275263
276264
277-func bn () = "%s%s__stats__locksDurationSumInBlocks"
265+func bi (aV) = makeString(["%s%d%s__paramByUserNum", aV, "start"], a)
278266
279267
280-func bo () = "%s%s__stats__locksCount"
268+func bj (aV) = makeString(["%s%d%s__paramByUserNum", aV, "duration"], a)
281269
282270
283-func bp () = "%s%s__stats__activeUsersCount"
271+func bk (aV) = makeString(["%s%d%s__paramByUserNum", aV, "k"], a)
284272
285273
286-func bq (br) = makeString(["%s%d__userBoostEmissionLastIntV2", toString(br)], a)
274+func bl (aV) = makeString(["%s%d%s__paramByUserNum", aV, "b"], a)
287275
288276
289-func bs (br,bt) = makeString(["%s%d__userBoostEmissionLastIntV2", toString(br), bt], a)
277+func bm (aV,bn) = makeString(["%s%d%s%d__paramByPeriod", aV, "k", bn], a)
290278
291279
292-func bu (br) = makeString(["%s%d__maxBoostInt", toString(br)], a)
280+func bo (aV,bn) = makeString(["%s%d%s%d__paramByPeriod", aV, "b", bn], a)
293281
294282
295-func bv () = "%s%s__maxBoostInt__total"
283+func bp () = "%s%s__stats__activeTotalLocked"
296284
297285
298-func bw (br) = makeString(["%s%d__userBoostAvaliableToClaimTotal", toString(br)], a)
286+func bq () = "%s%s__stats__locksDurationSumInBlocks"
299287
300288
301-func bx (br) = makeString(["%s%d__userBoostClaimed", toString(br)], a)
289+func br () = "%s%s__stats__locksCount"
302290
303291
304-func by () = "%s%s__gwx__total"
292+func bs () = "%s%s__stats__activeUsersCount"
305293
306294
307-func bz (bA,bB,n,bC) = makeString(["%s%s%s%s%d", "vote", bA, bB, toString(n), toString(bC)], a)
295+func bt (aV) = makeString(["%s%d__userBoostEmissionLastIntV2", aV], a)
308296
309297
310-func bD (bC) = makeString(["%s%d", "startHeight", toString(bC)], a)
298+func bu (aV,bv) = makeString(["%s%d__userBoostEmissionLastIntV2", aV, bv], a)
311299
312300
313-func bE () = makeString(["%s", "currentEpochUi"], a)
301+func bw (aV) = makeString(["%s%d__maxBoostInt", aV], a)
314302
315303
316-func bF (bG,bC) = makeString(["%s%s%d", "votingResultStaked", bG, toString(bC)], a)
304+func bx () = "%s%s__maxBoostInt__total"
317305
318306
319-func bH (bG,bC) = makeString(["%s%s%d", "votingResultStakedIntegral", bG, toString(bC)], a)
307+func by (aV) = makeString(["%s%d__userBoostAvaliableToClaimTotal", aV], a)
320308
321309
322-func bI (bG,bC) = makeString(["%s%s%d", "votingResultStakedIntegralLastUpdateHeight", bG, toString(bC)], a)
310+func bz (aV) = makeString(["%s%d__userBoostClaimed", aV], a)
323311
324312
325-func bJ (bG,n,bC) = makeString(["%s%s%s%d", "votingResultStakedIntegralLast", bG, toString(n), toString(bC)], a)
313+func bA () = "%s%s__gwxCached__total"
326314
327315
328-func bK (bG,n,bC) = makeString(["%s%s%s%d", "voteStakedIntegral", bG, toString(n), toString(bC)], a)
316+func bB () = "%s__gwxCachedTotalCorrective"
329317
330318
331-func bL (bG,n,bC) = makeString(["%s%s%s%d", "voteStakedIntegralLastUpdateHeight", bG, toString(n), toString(bC)], a)
319+func bC (bD,bE,i,bF) = makeString(["%s%s%s%s%d", "vote", bD, bE, toString(i), toString(bF)], a)
332320
333321
334-func bM (bG,n,bC) = makeString(["%s%s%s%d", "voteStakedIntegralLast", bG, toString(n), toString(bC)], a)
322+func bG (bF) = makeString(["%s%d", "startHeight", toString(bF)], a)
335323
336324
337-func bN (bO,bG) = makeString(["%s%s%s", "staked", bO, bG], a)
325+func bH () = makeString(["%s", "currentEpochUi"], a)
338326
339327
340-let bP = X()
328+func bI (bJ,bF) = makeString(["%s%s%d", "votingResultStaked", bJ, toString(bF)], a)
341329
342-let ab = Y(bP)
343330
344-let bQ = ac(ab)
331+func bK (bJ,bF) = makeString(["%s%s%d", "votingResultStakedIntegral", bJ, toString(bF)], a)
345332
346-let bR = ad(ab)
347333
348-let bS = ae(ab)
334+func bL (bJ,bF) = makeString(["%s%s%d", "votingResultStakedIntegralLastUpdateHeight", bJ, toString(bF)], a)
349335
350-let bT = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], a)), j("lp_staking_pools contract address is undefined"))), j("invalid lp_staking_pools contract address"))
351336
352-let bU = makeString(["%s", "votingEmissionContract"], a)
337+func bM (bJ,i,bF) = makeString(["%s%s%s%d", "votingResultStakedIntegralLast", bJ, toString(i), toString(bF)], a)
353338
354-let bV = addressFromStringValue(getStringValue(bP, bU))
355339
356-let bW = makeString(["%s", "votingEmissionRateContract"], a)
340+func bN (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegral", bJ, toString(i), toString(bF)], a)
357341
358-let bX = {
359- let bY = invoke(bQ, "getBoostCoeffREADONLY", nil, nil)
360- if ($isInstanceOf(bY, "Int"))
361- then bY
362- else throw(($getType(bY) + " couldn't be cast to Int"))
342+
343+func bO (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegralLastUpdateHeight", bJ, toString(i), toString(bF)], a)
344+
345+
346+func bP (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegralLast", bJ, toString(i), toString(bF)], a)
347+
348+
349+func bQ (bR,bJ) = makeString(["%s%s%s", "staked", bR, bJ], a)
350+
351+
352+let bS = V()
353+
354+let aa = X(bS)
355+
356+let bT = ab(aa)
357+
358+let bU = ac(aa)
359+
360+let bV = ad(aa)
361+
362+let bW = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], a)), e("lp_staking_pools contract address is undefined"))), e("invalid lp_staking_pools contract address"))
363+
364+let bX = makeString(["%s", "votingEmissionContract"], a)
365+
366+let bY = addressFromStringValue(getStringValue(bS, bX))
367+
368+let bZ = {
369+ let ca = invoke(bT, "getBoostCoeffREADONLY", nil, nil)
370+ if ($isInstanceOf(ca, "Int"))
371+ then ca
372+ else throw(($getType(ca) + " couldn't be cast to Int"))
363373 }
364374
365-func bZ (aY) = {
366- let aJ = getString(this, bk(toString(aY)))
367- if ($isInstanceOf(aJ, "String"))
368- then {
369- let aK = aJ
370- valueOrErrorMessage(parseInt(aK), j("invalid user number"))
371- }
372- else if ($isInstanceOf(aJ, "Unit"))
373- then l("invalid user")
374- else throw("Match error")
375+func cb (cc) = {
376+ let cd = getIntegerValue(bY, bH())
377+ let ce = makeString(["%s%s", "totalCachedGwxCorrection__activationEpoch"], a)
378+ let cf = getInteger(this, ce)
379+ let cg = valueOrElse(getInteger(this, bA()), 0)
380+ let ch = if (isDefined(cf))
381+ then (cd >= value(cf))
382+ else false
383+ let ci = if (if (ch)
384+ then cc
385+ else false)
386+ then valueOrElse(getInteger(this, bB()), 0)
387+ else 0
388+ max([0, (cg + ci)])
375389 }
376390
377391
378-func ca () = valueOrElse(getInteger(this, by()), 0)
379-
380-
381-func cb (aY) = {
382- let cc = "getLockedGwxAmount"
383- let cd = valueOrErrorMessage({
384- let aJ = getString(bV, bW)
385- if ($isInstanceOf(aJ, "Unit"))
386- then unit
387- else if ($isInstanceOf(aJ, "String"))
388- then {
389- let aK = aJ
390- addressFromString(aK)
391- }
392- else throw("Match error")
393- }, j("invalid voting emission rate address"))
394- let ce = {
395- let bY = invoke(bV, cc, [toString(aY)], nil)
396- if ($isInstanceOf(bY, "Int"))
397- then bY
398- else throw(($getType(bY) + " couldn't be cast to Int"))
399- }
400- let cf = {
401- let bY = invoke(cd, cc, [toString(aY)], nil)
402- if ($isInstanceOf(bY, "Int"))
403- then bY
404- else throw(($getType(bY) + " couldn't be cast to Int"))
405- }
406- let cg = max([ce, cf])
407- cg
392+func cj (ck,cl,aW,cm,aY,cn,co,aI) = {
393+ let cp = makeString(["%s%s%s%s__history", ck, cl, toBase58String(aI.transactionId)], a)
394+ let cq = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aW), toString(cm), toString(aY), toString(cn), toString(co)], a)
395+ StringEntry(cp, cq)
408396 }
409397
410398
411-func ch (ci,cj,be,ck,bg,bh,aO) = {
412- let cl = makeString(["%s%s%s%s__history", ci, cj, toBase58String(aO.transactionId)], a)
413- let cm = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(be), toString(ck), toString(bg), toString(bh)], a)
414- StringEntry(cl, cm)
399+func cr (cs,ct,cu,cv) = {
400+ let cw = bq()
401+ let cx = br()
402+ let cy = bs()
403+ let cz = bp()
404+ let cA = k(this, cw)
405+ let cB = k(this, cx)
406+ let cC = k(this, cy)
407+ let cD = k(this, cz)
408+[IntegerEntry(cw, (cA + ct)), IntegerEntry(cx, (cB + cu)), IntegerEntry(cy, (cC + cv)), IntegerEntry(cz, (cD + cs))]
415409 }
416410
417411
418-func cn (co,cp,cq,cr) = {
419- let cs = bn()
420- let ct = bo()
421- let cu = bp()
422- let cv = bm()
423- let cw = p(this, cs)
424- let cx = p(this, ct)
425- let cy = p(this, cu)
426- let cz = p(this, cv)
427-[IntegerEntry(cs, (cw + cp)), IntegerEntry(ct, (cx + cq)), IntegerEntry(cu, (cy + cr)), IntegerEntry(cv, (cz + co))]
412+func cE (cF,cG,cH) = {
413+ let cI = 1000
414+ (((cF * cH) + cG) / cI)
428415 }
429416
430417
431-func cA (aY,aZ,be,bf,bg,bh,bi) = [StringEntry(aX(aY, aZ), bd(be, bf, bg, bh, bi))]
418+func cJ (aS,aV,aW,aX,aY,cn,co,bn) = {
419+ let cK = bh(aV)
420+ let cL = bi(aV)
421+ let cM = bj(aV)
422+ let cN = bk(aV)
423+ let cO = bl(aV)
424+ let cP = bm(aV, bn)
425+ let cQ = bo(aV, bn)
426+ let bc = cE(cn, co, height)
427+[IntegerEntry(cK, aW), IntegerEntry(cL, aX), IntegerEntry(cM, aY), IntegerEntry(cN, cn), IntegerEntry(cO, co), IntegerEntry(cP, cn), IntegerEntry(cQ, co), StringEntry(aR(aS), bd(aV, aW, aX, aY, cn, co, bc))]
428+ }
432429
433430
434-func cB (aO,cC) = if ((size(aO.payments) > 1))
435- then l("only one payment is allowed")
436- else if ((size(aO.payments) == 0))
431+func cR (aI,cS) = if ((size(aI.payments) > 1))
432+ then g("only one payment is allowed")
433+ else if ((size(aI.payments) == 0))
437434 then 0
438435 else {
439- let cD = aO.payments[0]
440- if ((value(cD.assetId) != cC))
441- then l("invalid asset id in payment")
442- else cD.amount
436+ let cT = aI.payments[0]
437+ if ((value(cT.assetId) != cS))
438+ then g("invalid asset id in payment")
439+ else cT.amount
443440 }
444441
445442
446-func cE (aY) = valueOrElse(getInteger(this, bc(aY)), 0)
447-
448-
449-func cF () = {
450- let cG = {
451- let cH = value(getInteger(bV, bE()))
452- let cI = (cH - 1)
453- if ((0 > cI))
454- then l("invalid epoch")
455- else $Tuple2(cH, cI)
456- }
457- let cH = cG._1
458- let cI = cG._2
459- let cJ = value(getInteger(bV, bD(cH)))
460- $Tuple2(cI, cJ)
443+func cU (aS,cV) = {
444+ let cW = "empty"
445+ let cX = bf(aS)
446+ let aV = valueOrElse(getString(cX), cW)
447+ let cn = valueOrElse(getInteger(bk(aV)), 0)
448+ let co = valueOrElse(getInteger(bl(aV)), 0)
449+ let cY = cE(cn, co, cV)
450+ let bc = if ((0 > cY))
451+ then 0
452+ else cY
453+ bc
461454 }
462455
463456
464-func cK (bG) = {
465- let cL = 4
466- let cM = 5
467- let cN = {
468- let bY = invoke(bP, "getPoolConfigByLpAssetIdREADONLY", [bG], nil)
469- if ($isInstanceOf(bY, "List[Any]"))
470- then bY
471- else throw(($getType(bY) + " couldn't be cast to List[Any]"))
457+func cZ (aS) = cU(aS, height)
458+
459+
460+func da () = {
461+ let db = {
462+ let cd = value(getInteger(bY, bH()))
463+ let dc = (cd - 1)
464+ if ((0 > dc))
465+ then g("invalid epoch")
466+ else $Tuple2(cd, dc)
472467 }
473- let bA = {
474- let bY = cN[cL]
475- if ($isInstanceOf(bY, "String"))
476- then bY
477- else throw(($getType(bY) + " couldn't be cast to String"))
478- }
479- let bB = {
480- let bY = cN[cM]
481- if ($isInstanceOf(bY, "String"))
482- then bY
483- else throw(($getType(bY) + " couldn't be cast to String"))
484- }
485- $Tuple2(bA, bB)
468+ let cd = db._1
469+ let dc = db._2
470+ let dd = value(getInteger(bY, bG(cd)))
471+ $Tuple2(dc, dd)
486472 }
487473
488474
489-func cO (bG,bO) = {
490- let aY = addressFromStringValue(bO)
491- let cP = cF()
492- let cI = cP._1
493- let cJ = cP._2
494- let cQ = cK(bG)
495- let bA = cQ._1
496- let bB = cQ._2
497- let cR = bz(bA, bB, aY, cI)
498- let cS = valueOrElse(getInteger(bV, cR), 0)
499- cS
475+func de (bJ) = {
476+ let df = 4
477+ let dg = 5
478+ let dh = {
479+ let ca = invoke(bS, "getPoolConfigByLpAssetIdREADONLY", [bJ], nil)
480+ if ($isInstanceOf(ca, "List[Any]"))
481+ then ca
482+ else throw(($getType(ca) + " couldn't be cast to List[Any]"))
483+ }
484+ let bD = {
485+ let ca = dh[df]
486+ if ($isInstanceOf(ca, "String"))
487+ then ca
488+ else throw(($getType(ca) + " couldn't be cast to String"))
489+ }
490+ let bE = {
491+ let ca = dh[dg]
492+ if ($isInstanceOf(ca, "String"))
493+ then ca
494+ else throw(($getType(ca) + " couldn't be cast to String"))
495+ }
496+ $Tuple2(bD, bE)
500497 }
501498
502499
503-func cT (bG,bO) = {
504- let cU = valueOrElse(getInteger(bR, bN(bO, bG)), 0)
505- let cS = cO(bG, bO)
506- if ((cU == 0))
507- then 0
508- else cS
500+func di (bJ,bR) = {
501+ let aS = addressFromStringValue(bR)
502+ let dj = da()
503+ let dc = dj._1
504+ let dd = dj._2
505+ let dk = de(bJ)
506+ let bD = dk._1
507+ let bE = dk._2
508+ let dl = bC(bD, bE, aS, dc)
509+ let dm = valueOrElse(getInteger(bY, dl), 0)
510+ dm
509511 }
510512
511513
512-func cV (bG) = {
513- let cW = cF()
514- let cI = cW._1
515- let cJ = cW._2
516- let cX = valueOrElse(getInteger(bV, bF(bG, cI)), 0)
517- let cY = valueOrElse(getInteger(this, bF(bG, cI)), cX)
518- cY
514+func dn (bJ,bR) = {
515+ let do = valueOrElse(getInteger(bU, bQ(bR, bJ)), 0)
516+ let dm = di(bJ, bR)
517+ if ((do == 0))
518+ then 0
519+ else dm
519520 }
520521
521522
522-func cZ (bG) = {
523- let da = cF()
524- let cI = da._1
525- let cJ = da._2
526- let cY = cV(bG)
527- let db = valueOrElse(getInteger(this, bH(bG, cI)), 0)
528- let dc = valueOrElse(getInteger(this, bI(bG, cI)), cJ)
529- let dd = (height - dc)
530- let de = ((dd * cY) + db)
531- de
523+func dp (bJ) = {
524+ let dq = da()
525+ let dc = dq._1
526+ let dd = dq._2
527+ let dr = valueOrElse(getInteger(bY, bI(bJ, dc)), 0)
528+ let ds = valueOrElse(getInteger(this, bI(bJ, dc)), dr)
529+ ds
532530 }
533531
534532
535-func df (bG,dg) = {
536- let dh = cF()
537- let cI = dh._1
538- let cJ = dh._2
539- let cY = cV(bG)
540- let di = (cY + dg)
541- let de = cZ(bG)
542-[IntegerEntry(bF(bG, cI), di), IntegerEntry(bI(bG, cI), height), IntegerEntry(bH(bG, cI), de)]
533+func dt (bJ) = {
534+ let du = da()
535+ let dc = du._1
536+ let dd = du._2
537+ let ds = dp(bJ)
538+ let dv = valueOrElse(getInteger(this, bK(bJ, dc)), 0)
539+ let dw = valueOrElse(getInteger(this, bL(bJ, dc)), dd)
540+ let dx = (height - dw)
541+ let dy = ((dx * ds) + dv)
542+ dy
543543 }
544544
545545
546-func dj (bG,bO) = {
547- let dk = cF()
548- let cI = dk._1
549- let cJ = dk._2
550- let aY = addressFromStringValue(bO)
551- let dl = cT(bG, bO)
552- let dm = valueOrElse(getInteger(this, bK(bG, aY, cI)), 0)
553- let dn = valueOrElse(getInteger(this, bL(bG, aY, cI)), cJ)
554- let do = (height - dn)
555- let dp = ((do * dl) + dm)
556- dp
546+func dz (bJ,dA) = {
547+ let dB = da()
548+ let dc = dB._1
549+ let dd = dB._2
550+ let ds = dp(bJ)
551+ let dC = (ds + dA)
552+ let dy = dt(bJ)
553+[IntegerEntry(bI(bJ, dc), dC), IntegerEntry(bL(bJ, dc), height), IntegerEntry(bK(bJ, dc), dy)]
557554 }
558555
559556
560-func dq (bG,bO,dr) = {
561- let ds = cF()
562- let cI = ds._1
563- let cJ = ds._2
564- let aY = addressFromStringValue(bO)
565- let dt = cO(bG, bO)
566- let du = if ((dt == 0))
567- then nil
568- else {
569- let dg = if (dr)
570- then dt
571- else -(dt)
572- let dv = df(bG, dg)
573- let dp = dj(bG, bO)
574- let dw = [IntegerEntry(bL(bG, aY, cI), height), IntegerEntry(bK(bG, aY, cI), dp)]
575- (dv ++ dw)
576- }
577- du
557+func dD (bJ,bR) = {
558+ let dE = da()
559+ let dc = dE._1
560+ let dd = dE._2
561+ let aS = addressFromStringValue(bR)
562+ let dF = dn(bJ, bR)
563+ let dG = valueOrElse(getInteger(this, bN(bJ, aS, dc)), 0)
564+ let dH = valueOrElse(getInteger(this, bO(bJ, aS, dc)), dd)
565+ let dI = (height - dH)
566+ let dJ = ((dI * dF) + dG)
567+ dJ
578568 }
579569
580570
581-func dx (bG,bO) = {
582- let dy = cF()
583- let cI = dy._1
584- let cJ = dy._2
585- let aY = addressFromStringValue(bO)
586- let dz = bM(bG, aY, cI)
587- let dA = valueOrElse(getInteger(this, dz), 0)
588- let dB = bJ(bG, aY, cI)
589- let dC = valueOrElse(getInteger(this, dB), 0)
590- let dp = dj(bG, bO)
591- let de = cZ(bG)
592- let dD = (dp - dA)
593- let dE = (de - dC)
594- $Tuple3([IntegerEntry(dz, dp), IntegerEntry(dB, de)], dD, dE)
571+func dK (bJ,bR,dL) = {
572+ let dM = da()
573+ let dc = dM._1
574+ let dd = dM._2
575+ let aS = addressFromStringValue(bR)
576+ let dN = di(bJ, bR)
577+ let dO = if ((dN == 0))
578+ then nil
579+ else {
580+ let dA = if (dL)
581+ then dN
582+ else -(dN)
583+ let dP = dz(bJ, dA)
584+ let dJ = dD(bJ, bR)
585+ let dQ = [IntegerEntry(bO(bJ, aS, dc), height), IntegerEntry(bN(bJ, aS, dc), dJ)]
586+ (dP ++ dQ)
587+ }
588+ dO
595589 }
596590
597591
598-func dF () = {
599- let dG = s(bQ, ah())
600- let dH = getInteger(this, ak())
601- let dI = getInteger(this, al())
602- let dJ = s(bQ, an())
603- let dK = if ((height > dJ))
604- then dJ
592+func dR (bJ,bR) = {
593+ let dS = da()
594+ let dc = dS._1
595+ let dd = dS._2
596+ let aS = addressFromStringValue(bR)
597+ let dT = bP(bJ, aS, dc)
598+ let dU = valueOrElse(getInteger(this, dT), 0)
599+ let dV = bM(bJ, aS, dc)
600+ let dW = valueOrElse(getInteger(this, dV), 0)
601+ let dJ = dD(bJ, bR)
602+ let dy = dt(bJ)
603+ let dX = (dJ - dU)
604+ let dY = (dy - dW)
605+ $Tuple3([IntegerEntry(dT, dJ), IntegerEntry(dV, dy)], dX, dY)
606+ }
607+
608+
609+func dZ () = {
610+ let ea = n(bT, ag())
611+ let eb = getInteger(this, aj())
612+ let ec = getInteger(this, ak())
613+ let ed = n(bT, am())
614+ let cH = if ((height > ed))
615+ then ed
605616 else height
606- let dL = {
607- let aJ = dH
608- if ($isInstanceOf(aJ, "Int"))
617+ let ee = {
618+ let r = eb
619+ if ($isInstanceOf(r, "Int"))
609620 then {
610- let dM = aJ
611- max([(dK - dM), 0])
621+ let ef = r
622+ max([(cH - ef), 0])
612623 }
613- else if ($isInstanceOf(aJ, "Unit"))
624+ else if ($isInstanceOf(r, "Unit"))
614625 then 0
615626 else throw("Match error")
616627 }
617- let dN = ((dG * (bX - 1)) / bX)
618- let dO = valueOrElse(dI, 0)
619- let dP = ((dN * dL) + dO)
620- $Tuple2([IntegerEntry(al(), dP), IntegerEntry(ak(), height)], dP)
628+ let eg = ((ea * (bZ - 1)) / bZ)
629+ let eh = valueOrElse(ec, 0)
630+ let ei = ((eg * ee) + eh)
631+ $Tuple2([IntegerEntry(ak(), ei), IntegerEntry(aj(), height)], ei)
621632 }
622633
623634
624-func dQ (bG,bO,dR) = {
625- let aY = valueOrErrorMessage(addressFromString(bO), j("invalid user address"))
626- let br = bZ(aY)
627- if ((br == br))
628- then {
629- let dS = "empty"
630- let dT = if ((bG != dS))
635+func ej (bJ,bR,ek) = {
636+ let el = getString(this, aR(bR))
637+ if ((el == unit))
638+ then $Tuple3(0, nil, "userRecord::is::empty")
639+ else {
640+ let em = split(value(el), a)
641+ let en = em[aL]
642+ let eo = "empty"
643+ let ep = if ((bJ != eo))
631644 then {
632- let dU = valueOrErrorMessage(getString(bP, Q(bG)), j(("unsupported lp asset " + bG)))
633- getIntegerValue(bP, S(dU))
645+ let eq = valueOrErrorMessage(getString(bS, O(bJ)), e(("unsupported lp asset " + bJ)))
646+ getIntegerValue(bS, Q(eq))
634647 }
635- else if (dR)
648+ else if (ek)
636649 then 0
637- else l(("not readonly mode: unsupported lp asset " + bG))
638- let dV = bs(br, bG)
639- let dW = bq(br)
640- let dX = valueOrElse(getInteger(this, dV), p(this, dW))
641- let dP = dF()._2
642- let dY = (dP - dX)
643- if ((0 > dY))
644- then l("wrong calculations")
650+ else g(("not readonly mode: unsupported lp asset " + bJ))
651+ let er = bu(en, bJ)
652+ let es = bt(en)
653+ let et = valueOrElse(getInteger(this, er), k(this, es))
654+ let ei = dZ()._2
655+ let eu = (ei - et)
656+ if ((0 > eu))
657+ then g("wrong calculations")
645658 else {
646- let dZ = dx(bG, bO)
647- let ea = dZ._1
648- let eb = dZ._2
649- let ec = dZ._3
650- let ed = fraction(dY, dT, d)
651- let ee = if ((ec == 0))
659+ let ev = dR(bJ, bR)
660+ let ew = ev._1
661+ let ex = ev._2
662+ let ey = ev._3
663+ let ez = fraction(eu, ep, d)
664+ let eA = if ((ey == 0))
652665 then 0
653- else fraction(ed, eb, ec)
654- let ef = ([IntegerEntry(dV, dP)] ++ ea)
655- let eg = makeString([toString(dX), toString(dY), toString(dT), toString(eb), toString(ec)], ":")
656- $Tuple3(ee, ef, eg)
657- }
658- }
659- else throw("Strict value is not equal to itself.")
660- }
661-
662-
663-func eh (aO,bg) = {
664- let ei = toBase58String(ay)
665- if ((size(aO.payments) != 1))
666- then l("invalid payment - exact one payment must be attached")
667- else {
668- let cD = aO.payments[0]
669- let ej = cD.amount
670- if ((ay != value(cD.assetId)))
671- then l((("invalid asset is in payment - " + ei) + " is expected"))
672- else {
673- let ek = bj()
674- let aY = aO.caller
675- let bO = toString(aY)
676- let el = isDefined(getString(bk(bO)))
677- let em = if (el)
678- then value(getString(bk(bO)))
679- else toString(s(this, ek))
680- let br = parseIntValue(em)
681- let ck = height
682- if (if ((az > ej))
683- then (aY != bT)
684- else false)
685- then l(("amount is less then minLockAmount=" + toString(az)))
686- else if ((aA > bg))
687- then l(("passed duration is less than minLockDuration=" + toString(aA)))
688- else if ((bg > aB))
689- then l(("passed duration is greater than maxLockDuration=" + toString(aB)))
690- else if (((bg % aE) != 0))
691- then l(("duration must be multiple of lockStepBlocks=" + toString(aE)))
692- else {
693- let en = fraction(ej, bg, aB)
694- let eo = ca()
695- let dW = bq(br)
696- let dP = dF()._2
697- let ep = cE(aY)
698- let eq = invoke(bS, "refreshUserReward", [aY.bytes, br], nil)
699- if ((eq == eq))
700- then {
701- let er = if (el)
702- then nil
703- else [IntegerEntry(ek, (br + 1)), StringEntry(bk(bO), em), StringEntry(bl(em), bO)]
704- $Tuple2(((((er ++ cA(aY, aO.transactionId, ej, ck, bg, en, 0)) ++ cn(ej, bg, 1, if (el)
705- then 0
706- else 1)) :+ ch("lock", bO, ej, ck, bg, en, aO)) ++ [IntegerEntry(dW, dP), IntegerEntry(by(), (eo + en)), IntegerEntry(bc(aY), (ep + en))]), en)
707- }
708- else throw("Strict value is not equal to itself.")
709- }
666+ else fraction(ez, ex, ey)
667+ let eB = ([IntegerEntry(er, ei)] ++ ew)
668+ let eC = makeString([toString(et), toString(eu), toString(ep), toString(ex), toString(ey)], ":")
669+ $Tuple3(eA, eB, eC)
710670 }
711671 }
712672 }
713673
714674
715-func es (aY,et) = {
716- let eu = bb(aY, et)
717- let ev = parseIntValue(eu[aR])
718- let ck = parseIntValue(eu[aS])
719- let ew = parseIntValue(eu[aT])
720- let ex = (ck + ew)
721- let bi = parseIntValue(eu[aW])
722- let ey = ((height - ck) / aD)
723- let ez = fraction(toBigInt(ey), (toBigInt((i * aD)) * h), toBigInt(ew))
724- let eA = if ((height > ex))
725- then ev
726- else toInt(fraction(toBigInt(ev), (h - pow(toBigInt(5), 1, ez, f, f, DOWN)), h))
727- let eB = (eA - bi)
728- eB
675+func eD (aI,aY) = {
676+ let eE = av()
677+ let eF = eE[ap]
678+ let ay = fromBase58String(eF)
679+ let az = parseIntValue(eE[aq])
680+ let aA = parseIntValue(eE[ar])
681+ let aB = parseIntValue(eE[as])
682+ if ((size(aI.payments) != 1))
683+ then g("invalid payment - exact one payment must be attached")
684+ else {
685+ let cT = aI.payments[0]
686+ let eG = cT.amount
687+ if ((ay != value(cT.assetId)))
688+ then g((("invalid asset is in payment - " + eF) + " is expected"))
689+ else {
690+ let eH = be()
691+ let bR = toString(aI.caller)
692+ let eI = isDefined(getString(bf(bR)))
693+ let en = if (eI)
694+ then value(getString(bf(bR)))
695+ else toString(n(this, eH))
696+ let aV = parseIntValue(en)
697+ let cm = height
698+ let cL = bi(en)
699+ let cM = bj(en)
700+ let cK = bh(en)
701+ if (if ((az > eG))
702+ then (aI.caller != bW)
703+ else false)
704+ then g(("amount is less then minLockAmount=" + toString(az)))
705+ else if ((aA > aY))
706+ then g(("passed duration is less then minLockDuration=" + toString(aA)))
707+ else if ((aY > aB))
708+ then g(("passed duration is greater then maxLockDuration=" + toString(aB)))
709+ else if (if (eI)
710+ then ((n(this, cL) + n(this, cM)) >= cm)
711+ else false)
712+ then g("there is an active lock - consider to use increaseLock")
713+ else if ((k(this, cK) > 0))
714+ then g(("there are locked WXs - consider to use increaseLock " + cK))
715+ else {
716+ let eJ = fraction(aY, c, aB)
717+ let eK = fraction(eG, eJ, c)
718+ let eL = q(invoke(aw, "calcGwxParamsREADONLY", [eK, cm, aY], nil))
719+ let cn = t(eL[0])
720+ let co = t(eL[1])
721+ let bn = toString(t(eL[2]))
722+ let cg = cb(false)
723+ let es = bt(en)
724+ let ei = dZ()._2
725+ let eM = if (eI)
726+ then nil
727+ else [IntegerEntry(eH, (aV + 1)), StringEntry(bf(bR), en), StringEntry(bg(en), bR)]
728+ $Tuple2(((((eM ++ cJ(bR, en, eG, cm, aY, cn, co, bn)) ++ cr(eG, aY, 1, if (eI)
729+ then 0
730+ else 1)) :+ cj("lock", bR, eG, cm, aY, cn, co, aI)) ++ [IntegerEntry(es, ei), IntegerEntry(bA(), (cg + eK))]), eK)
731+ }
732+ }
733+ }
729734 }
730735
731736
732-@Callable(aO)
733-func lockRef (bg,eC,eD) = {
734- let eE = aH()
735- if ((eE == eE))
737+@Callable(aI)
738+func constructor (eN,eO,az,eP,eQ,aw) = {
739+ let eR = aH(aI)
740+ if ((eR == eR))
741+ then ([IntegerEntry(be(), 0), StringEntry(au(), aC(eO, az, eP, eQ, aw)), StringEntry(A(), eN)] ++ cr(0, 0, 0, 0))
742+ else throw("Strict value is not equal to itself.")
743+ }
744+
745+
746+
747+@Callable(aI)
748+func lockRef (aY,eS,eT) = {
749+ let eU = eD(aI, aY)
750+ let eV = eU._1
751+ let eK = eU._2
752+ let eW = toString(aI.caller)
753+ let eX = if (if ((eS == ""))
754+ then true
755+ else (eT == base58''))
756+ then unit
757+ else invoke(w, "createPair", [z, eS, eW, eT], nil)
758+ if ((eX == eX))
736759 then {
737- let eF = eh(aO, bg)
738- let eG = eF._1
739- let en = eF._2
740- let eH = toString(aO.caller)
741- let eI = if (if ((eC == ""))
742- then true
743- else (eD == base58''))
744- then unit
745- else invoke(z, "createPair", [C, eC, eH, eD], nil)
746- if ((eI == eI))
747- then {
748- let eJ = invoke(aC, "updateReferralActivity", [toString(aO.caller), en], nil)
749- if ((eJ == eJ))
750- then $Tuple2(eG, unit)
751- else throw("Strict value is not equal to itself.")
752- }
760+ let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
761+ if ((eY == eY))
762+ then $Tuple2(eV, unit)
753763 else throw("Strict value is not equal to itself.")
754764 }
755765 else throw("Strict value is not equal to itself.")
756766 }
757767
758768
759769
760-@Callable(aO)
761-func lock (bg) = {
762- let eE = aH()
763- if ((eE == eE))
770+@Callable(aI)
771+func lock (aY) = {
772+ let eZ = eD(aI, aY)
773+ let eV = eZ._1
774+ let eK = eZ._2
775+ let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
776+ if ((eY == eY))
777+ then $Tuple2(eV, unit)
778+ else throw("Strict value is not equal to itself.")
779+ }
780+
781+
782+
783+@Callable(aI)
784+func increaseLock (fa) = {
785+ let eE = av()
786+ let eF = eE[ap]
787+ let ay = fromBase58String(eF)
788+ let aA = parseIntValue(eE[ar])
789+ let aB = parseIntValue(eE[as])
790+ let eG = cR(aI, ay)
791+ let bR = toString(aI.caller)
792+ let em = aT(bR)
793+ let en = em[aL]
794+ let fb = parseIntValue(em[aM])
795+ let cm = parseIntValue(em[aN])
796+ let fc = parseIntValue(em[aO])
797+ let fd = (cm + fc)
798+ let fe = max([(fd - height), 0])
799+ let ff = (fb + eG)
800+ let fg = (fe + fa)
801+ if ((0 > fa))
802+ then g("duration is less then zero")
803+ else if ((aA > fg))
804+ then g(("lockDurationNew is less then minLockDuration=" + toString(aA)))
805+ else if ((fg > aB))
806+ then g(("deltaDuration + existedLockDuration is greater then maxLockDuration=" + toString(aB)))
807+ else {
808+ let eJ = fraction(fg, c, aB)
809+ let eK = fraction(ff, eJ, c)
810+ let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
811+ if ((eY == eY))
812+ then {
813+ let fh = height
814+ let eL = q(invoke(aw, "calcGwxParamsREADONLY", [eK, fh, fg], nil))
815+ let cn = t(eL[0])
816+ let co = t(eL[1])
817+ let bn = toString(t(eL[2]))
818+ let fi = cZ(bR)
819+ let fj = (eK - fi)
820+ if ((0 > fj))
821+ then g(("gwxDiff is less then 0: " + toString(fj)))
822+ else {
823+ let cg = cb(false)
824+ let fk = cb(true)
825+ (((cJ(bR, en, ff, fh, fg, cn, co, bn) ++ cr(eG, fa, 0, 0)) :+ cj("lock", bR, eG, cm, fg, cn, co, aI)) ++ [IntegerEntry(bA(), (cg + fj))])
826+ }
827+ }
828+ else throw("Strict value is not equal to itself.")
829+ }
830+ }
831+
832+
833+
834+@Callable(aI)
835+func claimWxBoost (bJ,bR) = if ((bU != aI.caller))
836+ then g("permissions denied")
837+ else {
838+ let fl = ej(bJ, bR, false)
839+ let fm = fl._1
840+ let eB = fl._2
841+ let eC = fl._3
842+ $Tuple2(eB, [fm])
843+ }
844+
845+
846+
847+@Callable(aI)
848+func claimWxBoostREADONLY (bJ,bR) = {
849+ let fn = ej(bJ, bR, true)
850+ let fm = fn._1
851+ let eB = fn._2
852+ let eC = fn._3
853+ $Tuple2(nil, [fm, eC])
854+ }
855+
856+
857+
858+@Callable(aI)
859+func unlock (aS) = {
860+ let em = aT(aS)
861+ let en = em[aL]
862+ let fb = parseIntValue(em[aM])
863+ let cm = parseIntValue(em[aN])
864+ let fc = parseIntValue(em[aO])
865+ let fd = (cm + fc)
866+ let eE = av()
867+ let ay = fromBase58String(eE[ap])
868+ if ((fd >= height))
869+ then g((("wait " + toString(fd)) + " to unlock"))
870+ else if ((0 >= fb))
871+ then g("nothing to unlock")
872+ else {
873+ let bn = valueOrElse(getInteger(aw, an()), 0)
874+ (((cJ(aS, en, 0, cm, fc, 0, 0, toString(bn)) ++ cr(-(fb), 0, 0, -1)) :+ cj("unlock", aS, fb, cm, fc, 0, 0, aI)) :+ ScriptTransfer(addressFromStringValue(aS), fb, ay))
875+ }
876+ }
877+
878+
879+
880+@Callable(aI)
881+func gwxUserInfoREADONLY (aS) = {
882+ let bc = cZ(aS)
883+ $Tuple2(nil, [bc])
884+ }
885+
886+
887+
888+@Callable(aI)
889+func userMaxDurationREADONLY (bR) = {
890+ let eE = av()
891+ let aB = parseIntValue(eE[as])
892+ let el = getString(this, aR(bR))
893+ if ((el == unit))
894+ then $Tuple2(nil, $Tuple2("lock", aB))
895+ else {
896+ let em = split(value(el), a)
897+ let cm = parseIntValue(em[aN])
898+ let fc = parseIntValue(em[aO])
899+ let fd = (cm + fc)
900+ let fe = max([(fd - height), 0])
901+ let fo = (aB - fe)
902+ $Tuple2(nil, $Tuple2("increaseLock", fo))
903+ }
904+ }
905+
906+
907+
908+@Callable(aI)
909+func getUserGwxAmountAtHeightREADONLY (aS,cV) = {
910+ let bc = cU(aS, cV)
911+ $Tuple2(nil, bc)
912+ }
913+
914+
915+
916+@Callable(aI)
917+func getTotalCachedGwxREADONLY () = $Tuple2(nil, cb(true))
918+
919+
920+
921+@Callable(aI)
922+func onBoostEmissionUpdate () = {
923+ let eR = if ((aI.caller == bT))
924+ then true
925+ else aH(aI)
926+ if ((eR == eR))
927+ then dZ()
928+ else throw("Strict value is not equal to itself.")
929+ }
930+
931+
932+
933+@Callable(aI)
934+func onStakedVoteUpdate (bJ,bR,dL) = {
935+ let eR = if ((aI.caller == bU))
936+ then true
937+ else aH(aI)
938+ if ((eR == eR))
764939 then {
765- let eK = eh(aO, bg)
766- let eG = eK._1
767- let en = eK._2
768- let eJ = invoke(aC, "updateReferralActivity", [toString(aO.caller), en], nil)
769- if ((eJ == eJ))
770- then $Tuple2(eG, unit)
771- else throw("Strict value is not equal to itself.")
940+ let dO = dK(bJ, bR, dL)
941+ $Tuple2(dO, unit)
772942 }
773943 else throw("Strict value is not equal to itself.")
774944 }
775945
776946
777947
778-@Callable(aO)
779-func claimWxBoost (bG,bO) = {
780- let eE = aH()
781- if ((eE == eE))
782- then if ((bR != aO.caller))
783- then l("permissions denied")
784- else {
785- let eL = dQ(bG, bO, false)
786- let eM = eL._1
787- let ef = eL._2
788- let eg = eL._3
789- $Tuple2(ef, [eM])
790- }
791- else throw("Strict value is not equal to itself.")
792- }
948+@Callable(aI)
949+func getVotingResultStakedREADONLY (bJ) = $Tuple2(nil, dp(bJ))
793950
794951
795952
796-@Callable(aO)
797-func claimWxBoostREADONLY (bG,bO) = {
798- let eN = dQ(bG, bO, true)
799- let eM = eN._1
800- let ef = eN._2
801- let eg = eN._3
802- $Tuple2(nil, [eM, eg])
803- }
953+@Callable(aI)
954+func getVotingResultStakedIntegralREADONLY (bJ) = $Tuple2(nil, dt(bJ))
804955
805956
806957
807-@Callable(aO)
808-func unlock (eO) = {
809- let eE = aH()
810- if ((eE == eE))
811- then {
812- let aY = aO.caller
813- let bO = toString(aY)
814- let et = if ((eO == ""))
815- then unit
816- else fromBase58String(eO)
817- let eu = bb(aY, et)
818- let ev = parseIntValue(eu[aR])
819- let ck = parseIntValue(eu[aS])
820- let ew = parseIntValue(eu[aT])
821- let bi = parseIntValue(eu[aW])
822- let bh = parseIntValue(eu[aV])
823- let ey = ((height - ck) / aD)
824- let eB = es(aY, et)
825- let eP = min([fraction(eB, ew, aB), bh])
826- let eQ = v((bh - eP), "gwxRemaining")
827- let eR = cb(aY)
828- if ((0 >= eB))
829- then l("nothing to unlock")
830- else {
831- let eo = ca()
832- let ep = cE(aY)
833- let eS = v((ep - eP), "userGwxAmountTotalNew")
834- if ((eR > eS))
835- then l(("locked gwx amount: " + toString(eR)))
836- else {
837- let br = parseIntValue(valueOrErrorMessage(getString(bk(bO)), j("invalid user number")))
838- let eq = invoke(bS, "refreshUserReward", [aY.bytes, br], nil)
839- if ((eq == eq))
840- then ((((cA(aY, et, ev, ck, ew, eQ, (bi + eB)) ++ cn(-(eB), 0, 0, 0)) :+ ch("unlock", bO, eB, ck, ew, eP, aO)) :+ ScriptTransfer(aY, eB, ay)) ++ [IntegerEntry(by(), v((eo - eP), "gwxTotal")), IntegerEntry(bc(aY), eS)])
841- else throw("Strict value is not equal to itself.")
842- }
843- }
844- }
845- else throw("Strict value is not equal to itself.")
846- }
958+@Callable(aI)
959+func getUserVoteFinalizedREADONLY (bJ,bR) = $Tuple2(nil, di(bJ, bR))
847960
848961
849962
850-@Callable(aO)
851-func gwxUserInfoREADONLY (bO) = {
852- let aY = valueOrErrorMessage(addressFromString(bO), j("invalid user address"))
853- let bh = cE(aY)
854- $Tuple2(nil, [bh])
855- }
963+@Callable(aI)
964+func getUserVoteStakedIntegralREADONLY (bJ,bR) = $Tuple2(nil, dD(bJ, bR))
856965
857966
858-
859-@Callable(aO)
860-func userMaxDurationREADONLY (bO) = $Tuple2(nil, $Tuple2("lock", aB))
861-
862-
863-
864-@Callable(aO)
865-func getUserGwxAmountAtHeightREADONLY (bO,eT) = {
866- let aY = valueOrErrorMessage(addressFromString(bO), j("invalid user address"))
867- let bh = cE(aY)
868- $Tuple2(nil, bh)
869- }
870-
871-
872-
873-@Callable(aO)
874-func getUserGwxAmount (bO) = {
875- let aY = valueOrErrorMessage(addressFromString(bO), j("invalid user address"))
876- let bh = cE(aY)
877- $Tuple2(nil, bh)
878- }
879-
880-
881-
882-@Callable(aO)
883-func getGwxTotalREADONLY () = $Tuple2(nil, ca())
884-
885-
886-
887-@Callable(aO)
888-func onBoostEmissionUpdate () = {
889- let eE = aH()
890- if ((eE == eE))
891- then {
892- let eU = if ((aO.caller == bQ))
893- then true
894- else aN(aO)
895- if ((eU == eU))
896- then dF()
897- else throw("Strict value is not equal to itself.")
898- }
899- else throw("Strict value is not equal to itself.")
900- }
901-
902-
903-
904-@Callable(aO)
905-func onStakedVoteUpdate (bG,bO,dr) = {
906- let eE = aH()
907- if ((eE == eE))
908- then {
909- let eU = if ((aO.caller == bR))
910- then true
911- else aN(aO)
912- if ((eU == eU))
913- then {
914- let du = dq(bG, bO, dr)
915- $Tuple2(du, unit)
916- }
917- else throw("Strict value is not equal to itself.")
918- }
919- else throw("Strict value is not equal to itself.")
920- }
921-
922-
923-
924-@Callable(aO)
925-func getVotingResultStakedREADONLY (bG) = $Tuple2(nil, cV(bG))
926-
927-
928-
929-@Callable(aO)
930-func getVotingResultStakedIntegralREADONLY (bG) = $Tuple2(nil, cZ(bG))
931-
932-
933-
934-@Callable(aO)
935-func getUserVoteFinalizedREADONLY (bG,bO) = $Tuple2(nil, cO(bG, bO))
936-
937-
938-
939-@Callable(aO)
940-func getUserVoteStakedIntegralREADONLY (bG,bO) = $Tuple2(nil, dj(bG, bO))
941-
942-
943-
944-@Callable(aO)
945-func suspend (w) = {
946- let eU = aN(aO)
947- if ((eU == eU))
948- then $Tuple2([BooleanEntry(aF, w)], w)
949- else throw("Strict value is not equal to itself.")
950- }
951-
952-
953-@Verifier(eV)
954-func eW () = {
955- let eX = {
956- let aJ = aL()
957- if ($isInstanceOf(aJ, "ByteVector"))
967+@Verifier(fp)
968+func fq () = {
969+ let fr = {
970+ let r = aF()
971+ if ($isInstanceOf(r, "ByteVector"))
958972 then {
959- let aQ = aJ
960- aQ
973+ let aK = r
974+ aK
961975 }
962- else if ($isInstanceOf(aJ, "Unit"))
963- then eV.senderPublicKey
976+ else if ($isInstanceOf(r, "Unit"))
977+ then fp.senderPublicKey
964978 else throw("Match error")
965979 }
966- sigVerify(eV.bodyBytes, eV.proofs[0], eX)
980+ sigVerify(fp.bodyBytes, fp.proofs[0], fr)
967981 }
968982

github/deemru/w8io/169f3d6 
276.92 ms