tx · C9BnnQScYeDuQyA4mykD4xBxZ1diGVSvTe9jvun5mgrF

3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy:  -0.03700000 Waves

2025.02.11 17:42 [3499215] smart account 3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy > SELF 0.00000000 Waves

{ "type": 13, "id": "C9BnnQScYeDuQyA4mykD4xBxZ1diGVSvTe9jvun5mgrF", "fee": 3700000, "feeAssetId": null, "timestamp": 1739284950663, "version": 2, "chainId": 84, "sender": "3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy", "senderPublicKey": "9W33iCCNfmFxUbiC6XZcH5x7f6xfwC7Jb3BoExT5q2PV", "proofs": [ "4UQhRoh1B2TWcAn82UtRz5pXwSbdFNyY75quULFYhjLTkckusXNMhE7pqctBFG9Q8qg6CRYRN8caGnSNTyKAZAJP" ], "script": "base64:BgJfCAISCAoGCAgBAQEIEgUKAwEIAhIDCgEBEgMKAQESBAoCCAgSBAoCCAgSAwoBCBIDCgEIEgMKAQgSBAoCCAESABIAEgUKAwgIBBIDCgEIEgMKAQgSBAoCCAgSBAoCCAiLAQADU0VQAgJfXwAGU0NBTEU4AAgABU1VTFQ4AIDC1y8ADlBPT0xXRUlHSFRNVUxUBQVNVUxUOAEHd3JhcEVycgEDbXNnCQC5CQIJAMwIAgIOYm9vc3RpbmcucmlkZToJAMwIAgUDbXNnBQNuaWwCASABCHRocm93RXJyAQNtc2cJAAIBCQEHd3JhcEVycgEFA21zZwEEc3RyZgIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJAQd3cmFwRXJyAQkArAICCQCsAgICD21hbmRhdG9yeSB0aGlzLgUDa2V5Ag8gaXMgbm90IGRlZmluZWQBA2lvegIHYWRkcmVzcwNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUHYWRkcmVzcwUDa2V5AAABA2lvZAMHYWRkcmVzcwNrZXkKZGVmYXVsdFZhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQdhZGRyZXNzBQNrZXkFCmRlZmF1bHRWYWwBA2lvZgIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQdhZGRyZXNzBQNrZXkJAQd3cmFwRXJyAQkArAICCQCsAgICD21hbmRhdG9yeSB0aGlzLgUDa2V5Ag8gaXMgbm90IGRlZmluZWQBA2FicwEDdmFsAwkAZgIAAAUDdmFsCQEBLQEFA3ZhbAUDdmFsAQNhYWwBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQKdmFsQW55THlzdAUHJG1hdGNoMAUKdmFsQW55THlzdAkBCHRocm93RXJyAQIbZmFpbCB0byBjYXN0IGludG8gTGlzdFtBbnldAQJhaQEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIDSW50BAZ2YWxJbnQFByRtYXRjaDAFBnZhbEludAkBCHRocm93RXJyAQIVZmFpbCB0byBjYXN0IGludG8gSW50ARtrZXlSZWZlcnJhbHNDb250cmFjdEFkZHJlc3MACQC5CQIJAMwIAgIEJXMlcwkAzAgCAgZjb25maWcJAMwIAgIYcmVmZXJyYWxzQ29udHJhY3RBZGRyZXNzBQNuaWwFA1NFUAAecmVmZXJyYWxzQ29udHJhY3RBZGRyZXNzT3JGYWlsCQERQGV4dHJOYXRpdmUoMTA2MikBCQEEc3RyZgIFBHRoaXMJARtrZXlSZWZlcnJhbHNDb250cmFjdEFkZHJlc3MAABZrZXlSZWZlcnJhbFByb2dyYW1OYW1lCQC5CQIJAMwIAgIEJXMlcwkAzAgCAghyZWZlcnJhbAkAzAgCAgtwcm9ncmFtTmFtZQUDbmlsBQNTRVAAGnJlZmVycmFsUHJvZ3JhbU5hbWVEZWZhdWx0AgZ3eGxvY2sAE3JlZmVycmFsUHJvZ3JhbU5hbWUJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUWa2V5UmVmZXJyYWxQcm9ncmFtTmFtZQUacmVmZXJyYWxQcm9ncmFtTmFtZURlZmF1bHQBEWtleUZhY3RvcnlBZGRyZXNzAAIcJXMlc19fY29uZmlnX19mYWN0b3J5QWRkcmVzcwAYSWR4RmFjdG9yeUNmZ1N0YWtpbmdEYXBwAAEAGUlkeEZhY3RvcnlDZmdCb29zdGluZ0RhcHAAAgAUSWR4RmFjdG9yeUNmZ0lkb0RhcHAAAwAVSWR4RmFjdG9yeUNmZ1RlYW1EYXBwAAQAGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHAABQAVSWR4RmFjdG9yeUNmZ1Jlc3REYXBwAAYAGUlkeEZhY3RvcnlDZmdTbGlwcGFnZURhcHAABwAUSWR4RmFjdG9yeUNmZ0Rhb0RhcHAACAAaSWR4RmFjdG9yeUNmZ01hcmtldGluZ0RhcHAACQAaSWR4RmFjdG9yeUNmZ0d3eFJld2FyZERhcHAACgAWSWR4RmFjdG9yeUNmZ0JpcmRzRGFwcAALAQ1rZXlGYWN0b3J5Q2ZnAAIRJXNfX2ZhY3RvcnlDb25maWcBEGtleUZhY3RvcnlMcExpc3QAAhAlc19fbHBUb2tlbnNMaXN0ASZrZXlGYWN0b3J5THBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwEKbHBBc3NldFN0cgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQpscEFzc2V0U3RyCQDMCAICHm1hcHBpbmdzX19scEFzc2V0MlBvb2xDb250cmFjdAUDbmlsBQNTRVABFGtleUZhY3RvcnlQb29sV2VpZ2h0AQ9jb250cmFjdEFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICCnBvb2xXZWlnaHQJAMwIAgUPY29udHJhY3RBZGRyZXNzBQNuaWwFA1NFUAEba2V5RmFjdG9yeVBvb2xXZWlnaHRIaXN0b3J5Agtwb29sQWRkcmVzcwNudW0JAKwCAgkArAICCQCsAgICEiVzJXNfX3Bvb2xXZWlnaHRfXwULcG9vbEFkZHJlc3MCAl9fCQCkAwEFA251bQEYcmVhZEZhY3RvcnlBZGRyZXNzT3JGYWlsAAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBHN0cmYCBQR0aGlzCQERa2V5RmFjdG9yeUFkZHJlc3MAAQpyZWFkTHBMaXN0AAkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIJARhyZWFkRmFjdG9yeUFkZHJlc3NPckZhaWwACQEQa2V5RmFjdG9yeUxwTGlzdAACAAUDU0VQARRyZWFkRmFjdG9yeUNmZ09yRmFpbAEHZmFjdG9yeQkAtQkCCQEEc3RyZgIFB2ZhY3RvcnkJAQ1rZXlGYWN0b3J5Q2ZnAAUDU0VQARhnZXRCb29zdGluZ0FkZHJlc3NPckZhaWwBCmZhY3RvcnlDZmcJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUKZmFjdG9yeUNmZwUZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcAEYZ2V0RW1pc3Npb25BZGRyZXNzT3JGYWlsAQpmYWN0b3J5Q2ZnCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFCmZhY3RvcnlDZmcFGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHABF2dldFN0YWtpbmdBZGRyZXNzT3JGYWlsAQpmYWN0b3J5Q2ZnCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFCmZhY3RvcnlDZmcFGElkeEZhY3RvcnlDZmdTdGFraW5nRGFwcAEZZ2V0R3d4UmV3YXJkQWRkcmVzc09yRmFpbAEKZmFjdG9yeUNmZwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQpmYWN0b3J5Q2ZnBRpJZHhGYWN0b3J5Q2ZnR3d4UmV3YXJkRGFwcAETa2V5TWFuYWdlclB1YmxpY0tleQACFCVzX19tYW5hZ2VyUHVibGljS2V5ARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAIXJXNfX21hbmFnZXJWYXVsdEFkZHJlc3MBHmtleUVtaXNzaW9uUmF0ZVBlckJsb2NrQ3VycmVudAACGyVzJXNfX3JhdGVQZXJCbG9ja19fY3VycmVudAEha2V5RW1pc3Npb25SYXRlUGVyQmxvY2tNYXhDdXJyZW50AAIeJXMlc19fcmF0ZVBlckJsb2NrTWF4X19jdXJyZW50ARVrZXlFbWlzc2lvblN0YXJ0QmxvY2sAAholcyVzX19lbWlzc2lvbl9fc3RhcnRCbG9jawEda2V5Qm9vc3RpbmdWMkxhc3RVcGRhdGVIZWlnaHQAAhwlcyVzX19ib29zdGluZ1YyX19zdGFydEJsb2NrARVrZXlCb29zdGluZ1YySW50ZWdyYWwAAholcyVzX19ib29zdGluZ1YyX19pbnRlZ3JhbAEba2V5RW1pc3Npb25EdXJhdGlvbkluQmxvY2tzAAIYJXMlc19fZW1pc3Npb25fX2R1cmF0aW9uARNrZXlFbWlzc2lvbkVuZEJsb2NrAAIYJXMlc19fZW1pc3Npb25fX2VuZEJsb2NrAQ1rZXlOZXh0UGVyaW9kAAIOJXNfX25leHRQZXJpb2QBH2tleUd3eFJld2FyZEVtaXNzaW9uU3RhcnRIZWlnaHQAAiglcyVzX19nd3hSZXdhcmRFbWlzc2lvblBhcnRfX3N0YXJ0SGVpZ2h0AA1JZHhDZmdBc3NldElkAAEAE0lkeENmZ01pbkxvY2tBbW91bnQAAgAVSWR4Q2ZnTWluTG9ja0R1cmF0aW9uAAMAFUlkeENmZ01heExvY2tEdXJhdGlvbgAEABJJZHhDZmdNYXRoQ29udHJhY3QABQEJa2V5Q29uZmlnAAIKJXNfX2NvbmZpZwEVcmVhZENvbmZpZ0FycmF5T3JGYWlsAAkAtQkCCQEEc3RyZgIFBHRoaXMJAQlrZXlDb25maWcABQNTRVAADG1hdGhDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCCQEVcmVhZENvbmZpZ0FycmF5T3JGYWlsAAUSSWR4Q2ZnTWF0aENvbnRyYWN0AQ1mb3JtYXRDb25maWdTBQdhc3NldElkDW1pbkxvY2tBbW91bnQPbWluTG9ja0R1cmF0aW9uD21heExvY2tEdXJhdGlvbgxtYXRoQ29udHJhY3QJALkJAgkAzAgCAgglcyVkJWQlZAkAzAgCBQdhc3NldElkCQDMCAIFDW1pbkxvY2tBbW91bnQJAMwIAgUPbWluTG9ja0R1cmF0aW9uCQDMCAIFD21heExvY2tEdXJhdGlvbgkAzAgCBQxtYXRoQ29udHJhY3QFA25pbAUDU0VQAQxmb3JtYXRDb25maWcFB2Fzc2V0SWQNbWluTG9ja0Ftb3VudA9taW5Mb2NrRHVyYXRpb24PbWF4TG9ja0R1cmF0aW9uDG1hdGhDb250cmFjdAkBDWZvcm1hdENvbmZpZ1MFBQdhc3NldElkCQCkAwEFDW1pbkxvY2tBbW91bnQJAKQDAQUPbWluTG9ja0R1cmF0aW9uCQCkAwEFD21heExvY2tEdXJhdGlvbgUMbWF0aENvbnRyYWN0ARxnZXRNYW5hZ2VyVmF1bHRBZGRyZXNzT3JUaGlzAAQHJG1hdGNoMAkAoggBCQEWa2V5TWFuYWdlclZhdWx0QWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFzBQR0aGlzARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAQTbWFuYWdlclZhdWx0QWRkcmVzcwkBHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMABAckbWF0Y2gwCQCdCAIFE21hbmFnZXJWYXVsdEFkZHJlc3MJARNrZXlNYW5hZ2VyUHVibGljS2V5AAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJANkEAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBC211c3RNYW5hZ2VyAQFpBAJwZAkBCHRocm93RXJyAQIRUGVybWlzc2lvbiBkZW5pZWQEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrBgUCcGQDCQABAgUHJG1hdGNoMAIEVW5pdAMJAAACCAUBaQZjYWxsZXIFBHRoaXMGBQJwZAkAAgECC01hdGNoIGVycm9yAA5JZHhMb2NrVXNlck51bQABAA1JZHhMb2NrQW1vdW50AAIADElkeExvY2tTdGFydAADAA9JZHhMb2NrRHVyYXRpb24ABAANSWR4TG9ja1BhcmFtSwAFAA1JZHhMb2NrUGFyYW1CAAYBE2tleUxvY2tQYXJhbXNSZWNvcmQBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIKJXMlc19fbG9jawkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsBQNTRVABGnJlYWRMb2NrUGFyYW1zUmVjb3JkT3JGYWlsAQt1c2VyQWRkcmVzcwkAtQkCCQEEc3RyZgIFBHRoaXMJARNrZXlMb2NrUGFyYW1zUmVjb3JkAQULdXNlckFkZHJlc3MFA1NFUAEXZm9ybWF0TG9ja1BhcmFtc1JlY29yZFMIB3VzZXJOdW0GYW1vdW50BXN0YXJ0CGR1cmF0aW9uBnBhcmFtSwZwYXJhbUIQbGFzdFVwZFRpbWVzdGFtcAlnd3hBbW91bnQJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIFB3VzZXJOdW0JAMwIAgUGYW1vdW50CQDMCAIFBXN0YXJ0CQDMCAIFCGR1cmF0aW9uCQDMCAIFBnBhcmFtSwkAzAgCBQZwYXJhbUIJAMwIAgUQbGFzdFVwZFRpbWVzdGFtcAkAzAgCBQlnd3hBbW91bnQFA25pbAUDU0VQARZmb3JtYXRMb2NrUGFyYW1zUmVjb3JkBwd1c2VyTnVtBmFtb3VudAVzdGFydAhkdXJhdGlvbgZwYXJhbUsGcGFyYW1CCWd3eEFtb3VudAkBF2Zvcm1hdExvY2tQYXJhbXNSZWNvcmRTCAUHdXNlck51bQkApAMBBQZhbW91bnQJAKQDAQUFc3RhcnQJAKQDAQUIZHVyYXRpb24JAKQDAQUGcGFyYW1LCQCkAwEFBnBhcmFtQgkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkApAMBBQlnd3hBbW91bnQBDmtleU5leHRVc2VyTnVtAAIPJXNfX25leHRVc2VyTnVtARJrZXlVc2VyMk51bU1hcHBpbmcBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIZJXMlcyVzX19tYXBwaW5nX191c2VyMm51bQkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsBQNTRVABEmtleU51bTJVc2VyTWFwcGluZwEDbnVtCQC5CQIJAMwIAgIZJXMlcyVzX19tYXBwaW5nX19udW0ydXNlcgkAzAgCBQNudW0FA25pbAUDU0VQARZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50AQd1c2VyTnVtCQC5CQIJAMwIAgIWJXMlZCVzX19wYXJhbUJ5VXNlck51bQkAzAgCBQd1c2VyTnVtCQDMCAICBmFtb3VudAUDbmlsBQNTRVABFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sBB3VzZXJOdW0JALkJAgkAzAgCAhYlcyVkJXNfX3BhcmFtQnlVc2VyTnVtCQDMCAIFB3VzZXJOdW0JAMwIAgIFc3RhcnQFA25pbAUDU0VQARRrZXlMb2NrUGFyYW1EdXJhdGlvbgEHdXNlck51bQkAuQkCCQDMCAICFiVzJWQlc19fcGFyYW1CeVVzZXJOdW0JAMwIAgUHdXNlck51bQkAzAgCAghkdXJhdGlvbgUDbmlsBQNTRVABDWtleUxvY2tQYXJhbUsBB3VzZXJOdW0JALkJAgkAzAgCAhYlcyVkJXNfX3BhcmFtQnlVc2VyTnVtCQDMCAIFB3VzZXJOdW0JAMwIAgIBawUDbmlsBQNTRVABDWtleUxvY2tQYXJhbUIBB3VzZXJOdW0JALkJAgkAzAgCAhYlcyVkJXNfX3BhcmFtQnlVc2VyTnVtCQDMCAIFB3VzZXJOdW0JAMwIAgIBYgUDbmlsBQNTRVABFWtleUxvY2tQYXJhbUJ5UGVyaW9kSwIHdXNlck51bQZwZXJpb2QJALkJAgkAzAgCAhclcyVkJXMlZF9fcGFyYW1CeVBlcmlvZAkAzAgCBQd1c2VyTnVtCQDMCAICAWsJAMwIAgUGcGVyaW9kBQNuaWwFA1NFUAEVa2V5TG9ja1BhcmFtQnlQZXJpb2RCAgd1c2VyTnVtBnBlcmlvZAkAuQkCCQDMCAICFyVzJWQlcyVkX19wYXJhbUJ5UGVyaW9kCQDMCAIFB3VzZXJOdW0JAMwIAgIBYgkAzAgCBQZwZXJpb2QFA25pbAUDU0VQARdrZXlMb2NrUGFyYW1Ub3RhbEFtb3VudAACHiVzJXNfX3N0YXRzX19hY3RpdmVUb3RhbExvY2tlZAEga2V5U3RhdHNMb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3MAAiUlcyVzX19zdGF0c19fbG9ja3NEdXJhdGlvblN1bUluQmxvY2tzARJrZXlTdGF0c0xvY2tzQ291bnQAAhclcyVzX19zdGF0c19fbG9ja3NDb3VudAESa2V5U3RhdHNVc2Vyc0NvdW50AAIdJXMlc19fc3RhdHNfX2FjdGl2ZVVzZXJzQ291bnQBIGtleVVzZXJCb29zdEVtaXNzaW9uTGFzdElOVEVHUkFMAQd1c2VyTnVtCQC5CQIJAMwIAgIgJXMlZF9fdXNlckJvb3N0RW1pc3Npb25MYXN0SW50VjIJAMwIAgUHdXNlck51bQUDbmlsBQNTRVABImtleVVzZXJMcEJvb3N0RW1pc3Npb25MYXN0SU5URUdSQUwCB3VzZXJOdW0JbHBBc3NldElkCQC5CQIJAMwIAgIgJXMlZF9fdXNlckJvb3N0RW1pc3Npb25MYXN0SW50VjIJAMwIAgUHdXNlck51bQkAzAgCBQlscEFzc2V0SWQFA25pbAUDU0VQARdrZXlVc2VyTWF4Qm9vc3RJTlRFR1JBTAEHdXNlck51bQkAuQkCCQDMCAICESVzJWRfX21heEJvb3N0SW50CQDMCAIFB3VzZXJOdW0FA25pbAUDU0VQARhrZXlUb3RhbE1heEJvb3N0SU5URUdSQUwAAhglcyVzX19tYXhCb29zdEludF9fdG90YWwBIWtleVVzZXJCb29zdEF2YWxhaWJsZVRvQ2xhaW1Ub3RhbAEHdXNlck51bQkAuQkCCQDMCAICJCVzJWRfX3VzZXJCb29zdEF2YWxpYWJsZVRvQ2xhaW1Ub3RhbAkAzAgCBQd1c2VyTnVtBQNuaWwFA1NFUAETa2V5VXNlckJvb3N0Q2xhaW1lZAEHdXNlck51bQkAuQkCCQDMCAICFiVzJWRfX3VzZXJCb29zdENsYWltZWQJAMwIAgUHdXNlck51bQUDbmlsBQNTRVABEWtleVRvdGFsQ2FjaGVkR3d4AAIWJXMlc19fZ3d4Q2FjaGVkX190b3RhbAEba2V5VG90YWxDYWNoZWRHd3hDb3JyZWN0aXZlAAIcJXNfX2d3eENhY2hlZFRvdGFsQ29ycmVjdGl2ZQEHa2V5Vm90ZQQNYW1vdW50QXNzZXRJZAxwcmljZUFzc2V0SWQHYWRkcmVzcwVlcG9jaAkAuQkCCQDMCAICCiVzJXMlcyVzJWQJAMwIAgIEdm90ZQkAzAgCBQ1hbW91bnRBc3NldElkCQDMCAIFDHByaWNlQXNzZXRJZAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgkApAMBBQVlcG9jaAUDbmlsBQNTRVABFWtleVN0YXJ0SGVpZ2h0QnlFcG9jaAEFZXBvY2gJALkJAgkAzAgCAgQlcyVkCQDMCAICC3N0YXJ0SGVpZ2h0CQDMCAIJAKQDAQUFZXBvY2gFA25pbAUDU0VQARFrZXlDdXJyZW50RXBvY2hVaQAJALkJAgkAzAgCAgIlcwkAzAgCAg5jdXJyZW50RXBvY2hVaQUDbmlsBQNTRVABFWtleVZvdGluZ1Jlc3VsdFN0YWtlZAIMbHBBc3NldElkU3RyBWVwb2NoCQC5CQIJAMwIAgIGJXMlcyVkCQDMCAICEnZvdGluZ1Jlc3VsdFN0YWtlZAkAzAgCBQxscEFzc2V0SWRTdHIJAMwIAgkApAMBBQVlcG9jaAUDbmlsBQNTRVABHWtleVZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsAgxscEFzc2V0SWRTdHIFZXBvY2gJALkJAgkAzAgCAgYlcyVzJWQJAMwIAgIadm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwJAMwIAgUMbHBBc3NldElkU3RyCQDMCAIJAKQDAQUFZXBvY2gFA25pbAUDU0VQASVrZXlWb3RpbmdSZXN1bHRTdGFrZWRMYXN0VXBkYXRlSGVpZ2h0AgxscEFzc2V0SWRTdHIFZXBvY2gJALkJAgkAzAgCAgYlcyVzJWQJAMwIAgIqdm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxMYXN0VXBkYXRlSGVpZ2h0CQDMCAIFDGxwQXNzZXRJZFN0cgkAzAgCCQCkAwEFBWVwb2NoBQNuaWwFA1NFUAEha2V5Vm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxMYXN0AwxscEFzc2V0SWRTdHIHYWRkcmVzcwVlcG9jaAkAuQkCCQDMCAICCCVzJXMlcyVkCQDMCAICHnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsTGFzdAkAzAgCBQxscEFzc2V0SWRTdHIJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAIJAKQDAQUFZXBvY2gFA25pbAUDU0VQARVrZXlWb3RlU3Rha2VkSW50ZWdyYWwDDGxwQXNzZXRJZFN0cgdhZGRyZXNzBWVwb2NoCQC5CQIJAMwIAgIIJXMlcyVzJWQJAMwIAgISdm90ZVN0YWtlZEludGVncmFsCQDMCAIFDGxwQXNzZXRJZFN0cgkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgkApAMBBQVlcG9jaAUDbmlsBQNTRVABHWtleVZvdGVTdGFrZWRMYXN0VXBkYXRlSGVpZ2h0AwxscEFzc2V0SWRTdHIHYWRkcmVzcwVlcG9jaAkAuQkCCQDMCAICCCVzJXMlcyVkCQDMCAICInZvdGVTdGFrZWRJbnRlZ3JhbExhc3RVcGRhdGVIZWlnaHQJAMwIAgUMbHBBc3NldElkU3RyCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCCQCkAwEFBWVwb2NoBQNuaWwFA1NFUAEZa2V5Vm90ZVN0YWtlZEludGVncmFsTGFzdAMMbHBBc3NldElkU3RyB2FkZHJlc3MFZXBvY2gJALkJAgkAzAgCAgglcyVzJXMlZAkAzAgCAhZ2b3RlU3Rha2VkSW50ZWdyYWxMYXN0CQDMCAIFDGxwQXNzZXRJZFN0cgkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgkApAMBBQVlcG9jaAUDbmlsBQNTRVABD2tleVN0YWtlZEJ5VXNlcgIOdXNlckFkZHJlc3NTdHIMbHBBc3NldElkU3RyCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICBnN0YWtlZAkAzAgCBQ51c2VyQWRkcmVzc1N0cgkAzAgCBQxscEFzc2V0SWRTdHIFA25pbAUDU0VQAA9mYWN0b3J5Q29udHJhY3QJARhyZWFkRmFjdG9yeUFkZHJlc3NPckZhaWwAAApmYWN0b3J5Q2ZnCQEUcmVhZEZhY3RvcnlDZmdPckZhaWwBBQ9mYWN0b3J5Q29udHJhY3QAEGVtaXNzaW9uQ29udHJhY3QJARhnZXRFbWlzc2lvbkFkZHJlc3NPckZhaWwBBQpmYWN0b3J5Q2ZnAA9zdGFraW5nQ29udHJhY3QJARdnZXRTdGFraW5nQWRkcmVzc09yRmFpbAEFCmZhY3RvcnlDZmcAEWd3eFJld2FyZENvbnRyYWN0CQEZZ2V0R3d4UmV3YXJkQWRkcmVzc09yRmFpbAEFCmZhY3RvcnlDZmcAFmxwU3Rha2luZ1Bvb2xzQ29udHJhY3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkAuQkCCQDMCAICAiVzCQDMCAICFmxwU3Rha2luZ1Bvb2xzQ29udHJhY3QFA25pbAUDU0VQCQEHd3JhcEVycgECLmxwX3N0YWtpbmdfcG9vbHMgY29udHJhY3QgYWRkcmVzcyBpcyB1bmRlZmluZWQJAQd3cmFwRXJyAQIpaW52YWxpZCBscF9zdGFraW5nX3Bvb2xzIGNvbnRyYWN0IGFkZHJlc3MAGWtleVZvdGluZ0VtaXNzaW9uQ29udHJhY3QJALkJAgkAzAgCAgIlcwkAzAgCAhZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0BQNuaWwFA1NFUAAWdm90aW5nRW1pc3Npb25Db250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUPZmFjdG9yeUNvbnRyYWN0BRlrZXlWb3RpbmdFbWlzc2lvbkNvbnRyYWN0AApib29zdENvZWZmCgABQAkA/AcEBRBlbWlzc2lvbkNvbnRyYWN0AhVnZXRCb29zdENvZWZmUkVBRE9OTFkFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAERZ2V0VG90YWxDYWNoZWRHd3gBB2NvcnJlY3QEDmN1cnJlbnRFcG9jaFVpCQERQGV4dHJOYXRpdmUoMTA1MCkCBRZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0CQERa2V5Q3VycmVudEVwb2NoVWkABA5rZXlUYXJnZXRFcG9jaAkAuQkCCQDMCAICBCVzJXMJAMwIAgIpdG90YWxDYWNoZWRHd3hDb3JyZWN0aW9uX19hY3RpdmF0aW9uRXBvY2gFA25pbAUDU0VQBBF0YXJnZXRFcG9jaE9wdGlvbgkAmggCBQR0aGlzBQ5rZXlUYXJnZXRFcG9jaAQRdG90YWxDYWNoZWRHd3hSYXcJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBEWtleVRvdGFsQ2FjaGVkR3d4AAAABBVpc0NvcnJlY3Rpb25BY3RpdmF0ZWQDCQEJaXNEZWZpbmVkAQURdGFyZ2V0RXBvY2hPcHRpb24JAGcCBQ5jdXJyZW50RXBvY2hVaQkBBXZhbHVlAQURdGFyZ2V0RXBvY2hPcHRpb24HBApjb3JyZWN0aXZlAwMFFWlzQ29ycmVjdGlvbkFjdGl2YXRlZAUHY29ycmVjdAcJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBG2tleVRvdGFsQ2FjaGVkR3d4Q29ycmVjdGl2ZQAAAAAACQCWAwEJAMwIAgAACQDMCAIJAGQCBRF0b3RhbENhY2hlZEd3eFJhdwUKY29ycmVjdGl2ZQUDbmlsAQxIaXN0b3J5RW50cnkIBHR5cGUEdXNlcgZhbW91bnQJbG9ja1N0YXJ0CGR1cmF0aW9uAWsBYgFpBApoaXN0b3J5S0VZCQC5CQIJAMwIAgIRJXMlcyVzJXNfX2hpc3RvcnkJAMwIAgUEdHlwZQkAzAgCBQR1c2VyCQDMCAIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAUDbmlsBQNTRVAEC2hpc3RvcnlEQVRBCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBCAUJbGFzdEJsb2NrBmhlaWdodAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAKQDAQUGYW1vdW50CQDMCAIJAKQDAQUJbG9ja1N0YXJ0CQDMCAIJAKQDAQUIZHVyYXRpb24JAMwIAgkApAMBBQFrCQDMCAIJAKQDAQUBYgUDbmlsBQNTRVAJAQtTdHJpbmdFbnRyeQIFCmhpc3RvcnlLRVkFC2hpc3RvcnlEQVRBAQpTdGF0c0VudHJ5BA50b3RhbExvY2tlZEluYwtkdXJhdGlvbkluYwxsb2NrQ291bnRJbmMNdXNlcnNDb3VudEluYwQbbG9ja3NEdXJhdGlvblN1bUluQmxvY2tzS0VZCQEga2V5U3RhdHNMb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3MABA1sb2Nrc0NvdW50S0VZCQESa2V5U3RhdHNMb2Nrc0NvdW50AAQNdXNlcnNDb3VudEtFWQkBEmtleVN0YXRzVXNlcnNDb3VudAAEDnRvdGFsQW1vdW50S0VZCQEXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQABBhsb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3MJAQNpb3oCBQR0aGlzBRtsb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3NLRVkECmxvY2tzQ291bnQJAQNpb3oCBQR0aGlzBQ1sb2Nrc0NvdW50S0VZBAp1c2Vyc0NvdW50CQEDaW96AgUEdGhpcwUNdXNlcnNDb3VudEtFWQQLdG90YWxBbW91bnQJAQNpb3oCBQR0aGlzBQ50b3RhbEFtb3VudEtFWQkAzAgCCQEMSW50ZWdlckVudHJ5AgUbbG9ja3NEdXJhdGlvblN1bUluQmxvY2tzS0VZCQBkAgUYbG9ja3NEdXJhdGlvblN1bUluQmxvY2tzBQtkdXJhdGlvbkluYwkAzAgCCQEMSW50ZWdlckVudHJ5AgUNbG9ja3NDb3VudEtFWQkAZAIFCmxvY2tzQ291bnQFDGxvY2tDb3VudEluYwkAzAgCCQEMSW50ZWdlckVudHJ5AgUNdXNlcnNDb3VudEtFWQkAZAIFCnVzZXJzQ291bnQFDXVzZXJzQ291bnRJbmMJAMwIAgkBDEludGVnZXJFbnRyeQIFDnRvdGFsQW1vdW50S0VZCQBkAgULdG90YWxBbW91bnQFDnRvdGFsTG9ja2VkSW5jBQNuaWwBDWNhbGNHd3hBbW91bnQDBGtSYXcEYlJhdwFoBAVTQ0FMRQDoBwkAaQIJAGQCCQBoAgUEa1JhdwUBaAUEYlJhdwUFU0NBTEUBD0xvY2tQYXJhbXNFbnRyeQgLdXNlckFkZHJlc3MHdXNlck51bQZhbW91bnQFc3RhcnQIZHVyYXRpb24BawFiBnBlcmlvZAQNdXNlckFtb3VudEtFWQkBFmtleUxvY2tQYXJhbVVzZXJBbW91bnQBBQd1c2VyTnVtBA1zdGFydEJsb2NrS0VZCQEWa2V5TG9ja1BhcmFtU3RhcnRCbG9jawEFB3VzZXJOdW0EC2R1cmF0aW9uS0VZCQEUa2V5TG9ja1BhcmFtRHVyYXRpb24BBQd1c2VyTnVtBARrS0VZCQENa2V5TG9ja1BhcmFtSwEFB3VzZXJOdW0EBGJLRVkJAQ1rZXlMb2NrUGFyYW1CAQUHdXNlck51bQQMa0J5UGVyaW9kS0VZCQEVa2V5TG9ja1BhcmFtQnlQZXJpb2RLAgUHdXNlck51bQUGcGVyaW9kBAxiQnlQZXJpb2RLRVkJARVrZXlMb2NrUGFyYW1CeVBlcmlvZEICBQd1c2VyTnVtBQZwZXJpb2QECWd3eEFtb3VudAkBDWNhbGNHd3hBbW91bnQDBQFrBQFiBQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIFDXVzZXJBbW91bnRLRVkFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNc3RhcnRCbG9ja0tFWQUFc3RhcnQJAMwIAgkBDEludGVnZXJFbnRyeQIFC2R1cmF0aW9uS0VZBQhkdXJhdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUEa0tFWQUBawkAzAgCCQEMSW50ZWdlckVudHJ5AgUEYktFWQUBYgkAzAgCCQEMSW50ZWdlckVudHJ5AgUMa0J5UGVyaW9kS0VZBQFrCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxiQnlQZXJpb2RLRVkFAWIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBE2tleUxvY2tQYXJhbXNSZWNvcmQBBQt1c2VyQWRkcmVzcwkBFmZvcm1hdExvY2tQYXJhbXNSZWNvcmQHBQd1c2VyTnVtBQZhbW91bnQFBXN0YXJ0BQhkdXJhdGlvbgUBawUBYgUJZ3d4QW1vdW50BQNuaWwBImV4dHJhY3RPcHRpb25hbFBheW1lbnRBbW91bnRPckZhaWwCAWkPZXhwZWN0ZWRBc3NldElkAwkAZgIJAJADAQgFAWkIcGF5bWVudHMAAQkBCHRocm93RXJyAQIbb25seSBvbmUgcGF5bWVudCBpcyBhbGxvd2VkAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAAAABANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAUPZXhwZWN0ZWRBc3NldElkCQEIdGhyb3dFcnIBAhtpbnZhbGlkIGFzc2V0IGlkIGluIHBheW1lbnQIBQNwbXQGYW1vdW50ARljYWxjVXNlckd3eEFtb3VudEF0SGVpZ2h0Agt1c2VyQWRkcmVzcwx0YXJnZXRIZWlnaHQEBUVNUFRZAgVlbXB0eQQSdXNlcjJOdW1NYXBwaW5nS0VZCQESa2V5VXNlcjJOdW1NYXBwaW5nAQULdXNlckFkZHJlc3MEB3VzZXJOdW0JAQt2YWx1ZU9yRWxzZQIJAKIIAQUSdXNlcjJOdW1NYXBwaW5nS0VZBQVFTVBUWQQBawkBC3ZhbHVlT3JFbHNlAgkAnwgBCQENa2V5TG9ja1BhcmFtSwEFB3VzZXJOdW0AAAQBYgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQENa2V5TG9ja1BhcmFtQgEFB3VzZXJOdW0AAAQNZ3d4QW1vdW50Q2FsYwkBDWNhbGNHd3hBbW91bnQDBQFrBQFiBQx0YXJnZXRIZWlnaHQECWd3eEFtb3VudAMJAGYCAAAFDWd3eEFtb3VudENhbGMAAAUNZ3d4QW1vdW50Q2FsYwUJZ3d4QW1vdW50ARRjYWxjQ3VycmVudEd3eEFtb3VudAELdXNlckFkZHJlc3MJARljYWxjVXNlckd3eEFtb3VudEF0SGVpZ2h0AgULdXNlckFkZHJlc3MFBmhlaWdodAEaZ2V0Vm90aW5nRW1pc3Npb25FcG9jaEluZm8ABA0kdDAxNzgyOTE4MTE5BA5jdXJyZW50RXBvY2hVaQkBBXZhbHVlAQkAmggCBRZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0CQERa2V5Q3VycmVudEVwb2NoVWkABBJsYXN0RmluYWxpemVkRXBvY2gJAGUCBQ5jdXJyZW50RXBvY2hVaQABAwkAZgIAAAUSbGFzdEZpbmFsaXplZEVwb2NoCQEIdGhyb3dFcnIBAg1pbnZhbGlkIGVwb2NoCQCUCgIFDmN1cnJlbnRFcG9jaFVpBRJsYXN0RmluYWxpemVkRXBvY2gEDmN1cnJlbnRFcG9jaFVpCAUNJHQwMTc4MjkxODExOQJfMQQSbGFzdEZpbmFsaXplZEVwb2NoCAUNJHQwMTc4MjkxODExOQJfMgQXY3VycmVudEVwb2NoU3RhcnRIZWlnaHQJAQV2YWx1ZQEJAJoIAgUWdm90aW5nRW1pc3Npb25Db250cmFjdAkBFWtleVN0YXJ0SGVpZ2h0QnlFcG9jaAEFDmN1cnJlbnRFcG9jaFVpCQCUCgIFEmxhc3RGaW5hbGl6ZWRFcG9jaAUXY3VycmVudEVwb2NoU3RhcnRIZWlnaHQBGGdldFBvb2xBc3NldHNCeUxwQXNzZXRJZAEMbHBBc3NldElkU3RyBBBpZHhBbW91bnRBc3NldElkAAQED2lkeFByaWNlQXNzZXRJZAAFBAdwb29sQ2ZnCgABQAkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCIGdldFBvb2xDb25maWdCeUxwQXNzZXRJZFJFQURPTkxZCQDMCAIFDGxwQXNzZXRJZFN0cgUDbmlsBQNuaWwDCQABAgUBQAIJTGlzdFtBbnldBQFACQACAQkArAICCQADAQUBQAIeIGNvdWxkbid0IGJlIGNhc3QgdG8gTGlzdFtBbnldBA1hbW91bnRBc3NldElkCgABQAkAkQMCBQdwb29sQ2ZnBRBpZHhBbW91bnRBc3NldElkAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwQMcHJpY2VBc3NldElkCgABQAkAkQMCBQdwb29sQ2ZnBQ9pZHhQcmljZUFzc2V0SWQDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nCQCUCgIFDWFtb3VudEFzc2V0SWQFDHByaWNlQXNzZXRJZAEUZ2V0VXNlclZvdGVGaW5hbGl6ZWQCDGxwQXNzZXRJZFN0cg51c2VyQWRkcmVzc1N0cgQLdXNlckFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDnVzZXJBZGRyZXNzU3RyBA0kdDAxODgxMDE4ODkwCQEaZ2V0Vm90aW5nRW1pc3Npb25FcG9jaEluZm8ABBJsYXN0RmluYWxpemVkRXBvY2gIBQ0kdDAxODgxMDE4ODkwAl8xBBdjdXJyZW50RXBvY2hTdGFydEhlaWdodAgFDSR0MDE4ODEwMTg4OTACXzIEDSR0MDE4ODkzMTg5NjgJARhnZXRQb29sQXNzZXRzQnlMcEFzc2V0SWQBBQxscEFzc2V0SWRTdHIEDWFtb3VudEFzc2V0SWQIBQ0kdDAxODg5MzE4OTY4Al8xBAxwcmljZUFzc2V0SWQIBQ0kdDAxODg5MzE4OTY4Al8yBAt1c2VyVm90ZUtleQkBB2tleVZvdGUEBQ1hbW91bnRBc3NldElkBQxwcmljZUFzc2V0SWQFC3VzZXJBZGRyZXNzBRJsYXN0RmluYWxpemVkRXBvY2gECHVzZXJWb3RlCQELdmFsdWVPckVsc2UCCQCaCAIFFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QFC3VzZXJWb3RlS2V5AAAFCHVzZXJWb3RlARFnZXRVc2VyVm90ZVN0YWtlZAIMbHBBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyBAxzdGFrZWRCeVVzZXIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5U3Rha2VkQnlVc2VyAgUOdXNlckFkZHJlc3NTdHIFDGxwQXNzZXRJZFN0cgAABAh1c2VyVm90ZQkBFGdldFVzZXJWb3RlRmluYWxpemVkAgUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgMJAAACBQxzdGFrZWRCeVVzZXIAAAAABQh1c2VyVm90ZQEVZ2V0Vm90aW5nUmVzdWx0U3Rha2VkAQxscEFzc2V0SWRTdHIEDSR0MDE5NTEyMTk1OTIJARpnZXRWb3RpbmdFbWlzc2lvbkVwb2NoSW5mbwAEEmxhc3RGaW5hbGl6ZWRFcG9jaAgFDSR0MDE5NTEyMTk1OTICXzEEF2N1cnJlbnRFcG9jaFN0YXJ0SGVpZ2h0CAUNJHQwMTk1MTIxOTU5MgJfMgQXdm90aW5nUmVzdWx0U3Rha2VkU3RhcnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUWdm90aW5nRW1pc3Npb25Db250cmFjdAkBFWtleVZvdGluZ1Jlc3VsdFN0YWtlZAIFDGxwQXNzZXRJZFN0cgUSbGFzdEZpbmFsaXplZEVwb2NoAAAEEnZvdGluZ1Jlc3VsdFN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEVa2V5Vm90aW5nUmVzdWx0U3Rha2VkAgUMbHBBc3NldElkU3RyBRJsYXN0RmluYWxpemVkRXBvY2gFF3ZvdGluZ1Jlc3VsdFN0YWtlZFN0YXJ0BRJ2b3RpbmdSZXN1bHRTdGFrZWQBHWdldFZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsAQxscEFzc2V0SWRTdHIEDSR0MDE5OTU0MjAwMzQJARpnZXRWb3RpbmdFbWlzc2lvbkVwb2NoSW5mbwAEEmxhc3RGaW5hbGl6ZWRFcG9jaAgFDSR0MDE5OTU0MjAwMzQCXzEEF2N1cnJlbnRFcG9jaFN0YXJ0SGVpZ2h0CAUNJHQwMTk5NTQyMDAzNAJfMgQSdm90aW5nUmVzdWx0U3Rha2VkCQEVZ2V0Vm90aW5nUmVzdWx0U3Rha2VkAQUMbHBBc3NldElkU3RyBB52b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbFByZXYJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBHWtleVZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsAgUMbHBBc3NldElkU3RyBRJsYXN0RmluYWxpemVkRXBvY2gAAAQidm90aW5nUmVzdWx0U3Rha2VkTGFzdFVwZGF0ZUhlaWdodAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEla2V5Vm90aW5nUmVzdWx0U3Rha2VkTGFzdFVwZGF0ZUhlaWdodAIFDGxwQXNzZXRJZFN0cgUSbGFzdEZpbmFsaXplZEVwb2NoBRdjdXJyZW50RXBvY2hTdGFydEhlaWdodAQcdm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxEaAkAZQIFBmhlaWdodAUidm90aW5nUmVzdWx0U3Rha2VkTGFzdFVwZGF0ZUhlaWdodAQadm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwJAGQCCQBoAgUcdm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxEaAUSdm90aW5nUmVzdWx0U3Rha2VkBR52b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbFByZXYFGnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsASFyZWZyZXNoVm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwCDGxwQXNzZXRJZFN0cg9zdGFrZWRWb3RlRGVsdGEEDSR0MDIwODcxMjA5NTEJARpnZXRWb3RpbmdFbWlzc2lvbkVwb2NoSW5mbwAEEmxhc3RGaW5hbGl6ZWRFcG9jaAgFDSR0MDIwODcxMjA5NTECXzEEF2N1cnJlbnRFcG9jaFN0YXJ0SGVpZ2h0CAUNJHQwMjA4NzEyMDk1MQJfMgQSdm90aW5nUmVzdWx0U3Rha2VkCQEVZ2V0Vm90aW5nUmVzdWx0U3Rha2VkAQUMbHBBc3NldElkU3RyBBV2b3RpbmdSZXN1bHRTdGFrZWROZXcJAGQCBRJ2b3RpbmdSZXN1bHRTdGFrZWQFD3N0YWtlZFZvdGVEZWx0YQQadm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwJAR1nZXRWb3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbAEFDGxwQXNzZXRJZFN0cgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFWtleVZvdGluZ1Jlc3VsdFN0YWtlZAIFDGxwQXNzZXRJZFN0cgUSbGFzdEZpbmFsaXplZEVwb2NoBRV2b3RpbmdSZXN1bHRTdGFrZWROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJASVrZXlWb3RpbmdSZXN1bHRTdGFrZWRMYXN0VXBkYXRlSGVpZ2h0AgUMbHBBc3NldElkU3RyBRJsYXN0RmluYWxpemVkRXBvY2gFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHWtleVZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsAgUMbHBBc3NldElkU3RyBRJsYXN0RmluYWxpemVkRXBvY2gFGnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsBQNuaWwBGWdldFVzZXJWb3RlU3Rha2VkSW50ZWdyYWwCDGxwQXNzZXRJZFN0cg51c2VyQWRkcmVzc1N0cgQNJHQwMjE1NjIyMTY0MgkBGmdldFZvdGluZ0VtaXNzaW9uRXBvY2hJbmZvAAQSbGFzdEZpbmFsaXplZEVwb2NoCAUNJHQwMjE1NjIyMTY0MgJfMQQXY3VycmVudEVwb2NoU3RhcnRIZWlnaHQIBQ0kdDAyMTU2MjIxNjQyAl8yBAt1c2VyQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUOdXNlckFkZHJlc3NTdHIEDnVzZXJWb3RlU3Rha2VkCQERZ2V0VXNlclZvdGVTdGFrZWQCBQxscEFzc2V0SWRTdHIFDnVzZXJBZGRyZXNzU3RyBBp1c2VyVm90ZVN0YWtlZEludGVncmFsUHJldgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEVa2V5Vm90ZVN0YWtlZEludGVncmFsAwUMbHBBc3NldElkU3RyBQt1c2VyQWRkcmVzcwUSbGFzdEZpbmFsaXplZEVwb2NoAAAEHnVzZXJWb3RlU3Rha2VkTGFzdFVwZGF0ZUhlaWdodAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEda2V5Vm90ZVN0YWtlZExhc3RVcGRhdGVIZWlnaHQDBQxscEFzc2V0SWRTdHIFC3VzZXJBZGRyZXNzBRJsYXN0RmluYWxpemVkRXBvY2gFF2N1cnJlbnRFcG9jaFN0YXJ0SGVpZ2h0BBh1c2VyVm90ZVN0YWtlZEludGVncmFsRGgJAGUCBQZoZWlnaHQFHnVzZXJWb3RlU3Rha2VkTGFzdFVwZGF0ZUhlaWdodAQWdXNlclZvdGVTdGFrZWRJbnRlZ3JhbAkAtwICCQC5AgIJALYCAQUYdXNlclZvdGVTdGFrZWRJbnRlZ3JhbERoCQC2AgEFDnVzZXJWb3RlU3Rha2VkCQC2AgEFGnVzZXJWb3RlU3Rha2VkSW50ZWdyYWxQcmV2BAhMT05HX01BWAD//////////38JAKADAQkAmQMBCQDMCAIJALYCAQUITE9OR19NQVgJAMwIAgUWdXNlclZvdGVTdGFrZWRJbnRlZ3JhbAUDbmlsARlyZWZyZXNoVm90ZVN0YWtlZEludGVncmFsAwxscEFzc2V0SWRTdHIOdXNlckFkZHJlc3NTdHIEZWRnZQQNJHQwMjI1NjkyMjY0OQkBGmdldFZvdGluZ0VtaXNzaW9uRXBvY2hJbmZvAAQSbGFzdEZpbmFsaXplZEVwb2NoCAUNJHQwMjI1NjkyMjY0OQJfMQQXY3VycmVudEVwb2NoU3RhcnRIZWlnaHQIBQ0kdDAyMjU2OTIyNjQ5Al8yBAt1c2VyQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUOdXNlckFkZHJlc3NTdHIEEXVzZXJWb3RlRmluYWxpemVkCQEUZ2V0VXNlclZvdGVGaW5hbGl6ZWQCBQxscEFzc2V0SWRTdHIFDnVzZXJBZGRyZXNzU3RyBAdhY3Rpb25zAwkAAAIFEXVzZXJWb3RlRmluYWxpemVkAAAFA25pbAQPc3Rha2VkVm90ZURlbHRhAwUEZWRnZQURdXNlclZvdGVGaW5hbGl6ZWQJAQEtAQURdXNlclZvdGVGaW5hbGl6ZWQEE3ZvdGluZ1Jlc3VsdEFjdGlvbnMJASFyZWZyZXNoVm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwCBQxscEFzc2V0SWRTdHIFD3N0YWtlZFZvdGVEZWx0YQQWdXNlclZvdGVTdGFrZWRJbnRlZ3JhbAkBGWdldFVzZXJWb3RlU3Rha2VkSW50ZWdyYWwCBQxscEFzc2V0SWRTdHIFDnVzZXJBZGRyZXNzU3RyBAt2b3RlQWN0aW9ucwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHWtleVZvdGVTdGFrZWRMYXN0VXBkYXRlSGVpZ2h0AwUMbHBBc3NldElkU3RyBQt1c2VyQWRkcmVzcwUSbGFzdEZpbmFsaXplZEVwb2NoBQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlWb3RlU3Rha2VkSW50ZWdyYWwDBQxscEFzc2V0SWRTdHIFC3VzZXJBZGRyZXNzBRJsYXN0RmluYWxpemVkRXBvY2gFFnVzZXJWb3RlU3Rha2VkSW50ZWdyYWwFA25pbAkAzggCBRN2b3RpbmdSZXN1bHRBY3Rpb25zBQt2b3RlQWN0aW9ucwUHYWN0aW9ucwEbZ2V0U3Rha2VkVm90ZXNJbnRlZ3JhbHNEaWZmAgxscEFzc2V0SWRTdHIOdXNlckFkZHJlc3NTdHIEDSR0MDIzNTAzMjM1ODMJARpnZXRWb3RpbmdFbWlzc2lvbkVwb2NoSW5mbwAEEmxhc3RGaW5hbGl6ZWRFcG9jaAgFDSR0MDIzNTAzMjM1ODMCXzEEF2N1cnJlbnRFcG9jaFN0YXJ0SGVpZ2h0CAUNJHQwMjM1MDMyMzU4MwJfMgQLdXNlckFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDnVzZXJBZGRyZXNzU3RyBB11c2VyVm90ZVN0YWtlZEludGVncmFsTGFzdEtleQkBGWtleVZvdGVTdGFrZWRJbnRlZ3JhbExhc3QDBQxscEFzc2V0SWRTdHIFC3VzZXJBZGRyZXNzBRJsYXN0RmluYWxpemVkRXBvY2gEGnVzZXJWb3RlU3Rha2VkSW50ZWdyYWxMYXN0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFHXVzZXJWb3RlU3Rha2VkSW50ZWdyYWxMYXN0S2V5AAAEIXZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsTGFzdEtleQkBIWtleVZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsTGFzdAMFDGxwQXNzZXRJZFN0cgULdXNlckFkZHJlc3MFEmxhc3RGaW5hbGl6ZWRFcG9jaAQedm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxMYXN0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFIXZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsTGFzdEtleQAABBZ1c2VyVm90ZVN0YWtlZEludGVncmFsCQEZZ2V0VXNlclZvdGVTdGFrZWRJbnRlZ3JhbAIFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIEGnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsCQEdZ2V0Vm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwBBQxscEFzc2V0SWRTdHIEGnVzZXJWb3RlU3Rha2VkSW50ZWdyYWxEaWZmCQBlAgUWdXNlclZvdGVTdGFrZWRJbnRlZ3JhbAUadXNlclZvdGVTdGFrZWRJbnRlZ3JhbExhc3QEHnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsRGlmZgkAZQIFGnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsBR52b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbExhc3QJAJUKAwkAzAgCCQEMSW50ZWdlckVudHJ5AgUddXNlclZvdGVTdGFrZWRJbnRlZ3JhbExhc3RLZXkFFnVzZXJWb3RlU3Rha2VkSW50ZWdyYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFIXZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsTGFzdEtleQUadm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWwFA25pbAUadXNlclZvdGVTdGFrZWRJbnRlZ3JhbERpZmYFHnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsRGlmZgEccmVmcmVzaEJvb3N0RW1pc3Npb25JbnRlZ3JhbAAEEnd4RW1pc3Npb25QZXJCbG9jawkBA2lvZgIFEGVtaXNzaW9uQ29udHJhY3QJAR5rZXlFbWlzc2lvblJhdGVQZXJCbG9ja0N1cnJlbnQABCBib29zdGluZ1YyTGFzdFVwZGF0ZUhlaWdodE9wdGlvbgkAmggCBQR0aGlzCQEda2V5Qm9vc3RpbmdWMkxhc3RVcGRhdGVIZWlnaHQABBhib29zdGluZ1YySW5nZXJnYWxPcHRpb24JAJoIAgUEdGhpcwkBFWtleUJvb3N0aW5nVjJJbnRlZ3JhbAAEC2VtaXNzaW9uRW5kCQEDaW9mAgUQZW1pc3Npb25Db250cmFjdAkBE2tleUVtaXNzaW9uRW5kQmxvY2sABAFoAwkAZgIFBmhlaWdodAULZW1pc3Npb25FbmQFC2VtaXNzaW9uRW5kBQZoZWlnaHQEAmRoBAckbWF0Y2gwBSBib29zdGluZ1YyTGFzdFVwZGF0ZUhlaWdodE9wdGlvbgMJAAECBQckbWF0Y2gwAgNJbnQEEGxhc3RVcGRhdGVIZWlnaHQFByRtYXRjaDAJAJYDAQkAzAgCCQBlAgUBaAUQbGFzdFVwZGF0ZUhlaWdodAkAzAgCAAAFA25pbAMJAAECBQckbWF0Y2gwAgRVbml0AAAJAAIBAgtNYXRjaCBlcnJvcgQVYm9vc3RFbWlzc2lvblBlckJsb2NrCQBpAgkAaAIFEnd4RW1pc3Npb25QZXJCbG9jawkAZQIFCmJvb3N0Q29lZmYAAQUKYm9vc3RDb2VmZgQZYm9vc3RFbWlzc2lvbkludGVncmFsUHJldgkBC3ZhbHVlT3JFbHNlAgUYYm9vc3RpbmdWMkluZ2VyZ2FsT3B0aW9uAAAEFWJvb3N0RW1pc3Npb25JbnRlZ3JhbAkAZAIJAGgCBRVib29zdEVtaXNzaW9uUGVyQmxvY2sFAmRoBRlib29zdEVtaXNzaW9uSW50ZWdyYWxQcmV2CQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlCb29zdGluZ1YySW50ZWdyYWwABRVib29zdEVtaXNzaW9uSW50ZWdyYWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAR1rZXlCb29zdGluZ1YyTGFzdFVwZGF0ZUhlaWdodAAFBmhlaWdodAUDbmlsBRVib29zdEVtaXNzaW9uSW50ZWdyYWwBFGludGVybmFsQ2xhaW1XeEJvb3N0AwxscEFzc2V0SWRTdHIOdXNlckFkZHJlc3NTdHIIcmVhZE9ubHkEEHVzZXJSZWNvcmRPcHRpb24JAJ0IAgUEdGhpcwkBE2tleUxvY2tQYXJhbXNSZWNvcmQBBQ51c2VyQWRkcmVzc1N0cgMJAAACBRB1c2VyUmVjb3JkT3B0aW9uBQR1bml0CQCVCgMAAAUDbmlsAhV1c2VyUmVjb3JkOjppczo6ZW1wdHkED3VzZXJSZWNvcmRBcnJheQkAtQkCCQEFdmFsdWUBBRB1c2VyUmVjb3JkT3B0aW9uBQNTRVAECnVzZXJOdW1TdHIJAJEDAgUPdXNlclJlY29yZEFycmF5BQ5JZHhMb2NrVXNlck51bQQIRU1QVFlTVFICBWVtcHR5BApwb29sV2VpZ2h0AwkBAiE9AgUMbHBBc3NldElkU3RyBQhFTVBUWVNUUgQOcG9vbEFkZHJlc3NTdHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9mYWN0b3J5Q29udHJhY3QJASZrZXlGYWN0b3J5THBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwEFDGxwQXNzZXRJZFN0cgkBB3dyYXBFcnIBCQCsAgICFXVuc3VwcG9ydGVkIGxwIGFzc2V0IAUMbHBBc3NldElkU3RyCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9mYWN0b3J5Q29udHJhY3QJARRrZXlGYWN0b3J5UG9vbFdlaWdodAEFDnBvb2xBZGRyZXNzU3RyAwUIcmVhZE9ubHkAAAkBCHRocm93RXJyAQkArAICAihub3QgcmVhZG9ubHkgbW9kZTogdW5zdXBwb3J0ZWQgbHAgYXNzZXQgBQxscEFzc2V0SWRTdHIEInVzZXJMcEJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWxLRVkJASJrZXlVc2VyTHBCb29zdEVtaXNzaW9uTGFzdElOVEVHUkFMAgUKdXNlck51bVN0cgUMbHBBc3NldElkU3RyBCB1c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbEtFWQkBIGtleVVzZXJCb29zdEVtaXNzaW9uTGFzdElOVEVHUkFMAQUKdXNlck51bVN0cgQddXNlckJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUidXNlckxwQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbEtFWQkBA2lvegIFBHRoaXMFIHVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsS0VZBBVib29zdEVtaXNzaW9uSW50ZWdyYWwICQEccmVmcmVzaEJvb3N0RW1pc3Npb25JbnRlZ3JhbAACXzIEGXVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwJAGUCBRVib29zdEVtaXNzaW9uSW50ZWdyYWwFHXVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsAwkAZgIAAAUZdXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbAkBCHRocm93RXJyAQISd3JvbmcgY2FsY3VsYXRpb25zBA0kdDAyNzIwMjI3MzQxCQEbZ2V0U3Rha2VkVm90ZXNJbnRlZ3JhbHNEaWZmAgUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgQbc3Rha2VkVm90ZXNJbnRlZ3JhbHNBY3Rpb25zCAUNJHQwMjcyMDIyNzM0MQJfMQQUdXNlclZvdGVJbnRlZ3JhbERpZmYIBQ0kdDAyNzIwMjI3MzQxAl8yBBZ0b3RhbFZvdGVzSW50ZWdyYWxEaWZmCAUNJHQwMjcyMDIyNzM0MQJfMwQdcG9vbFVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwJAGsDBRl1c2VyQm9vc3RFbWlzc2lvbkludGVncmFsBQpwb29sV2VpZ2h0BQ5QT09MV0VJR0hUTVVMVAQhdXNlckJvb3N0QXZhbGlhYmxlVG9DbGFpbVRvdGFsTmV3AwkAAAIFFnRvdGFsVm90ZXNJbnRlZ3JhbERpZmYAAAAACQBrAwUdcG9vbFVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwFFHVzZXJWb3RlSW50ZWdyYWxEaWZmBRZ0b3RhbFZvdGVzSW50ZWdyYWxEaWZmBAlkYXRhU3RhdGUJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUidXNlckxwQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbEtFWQUVYm9vc3RFbWlzc2lvbkludGVncmFsBQNuaWwFG3N0YWtlZFZvdGVzSW50ZWdyYWxzQWN0aW9ucwQFZGVidWcJALkJAgkAzAgCCQCkAwEFHXVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsCQDMCAIJAKQDAQUZdXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbAkAzAgCCQCkAwEFCnBvb2xXZWlnaHQJAMwIAgkApAMBBRR1c2VyVm90ZUludGVncmFsRGlmZgkAzAgCCQCkAwEFFnRvdGFsVm90ZXNJbnRlZ3JhbERpZmYFA25pbAIBOgkAlQoDBSF1c2VyQm9vc3RBdmFsaWFibGVUb0NsYWltVG90YWxOZXcFCWRhdGFTdGF0ZQUFZGVidWcBC2xvY2tBY3Rpb25zAgFpCGR1cmF0aW9uBAhjZmdBcnJheQkBFXJlYWRDb25maWdBcnJheU9yRmFpbAAECmFzc2V0SWRTdHIJAJEDAgUIY2ZnQXJyYXkFDUlkeENmZ0Fzc2V0SWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQNbWluTG9ja0Ftb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGNmZ0FycmF5BRNJZHhDZmdNaW5Mb2NrQW1vdW50BA9taW5Mb2NrRHVyYXRpb24JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhjZmdBcnJheQUVSWR4Q2ZnTWluTG9ja0R1cmF0aW9uBA9tYXhMb2NrRHVyYXRpb24JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhjZmdBcnJheQUVSWR4Q2ZnTWF4TG9ja0R1cmF0aW9uAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQEIdGhyb3dFcnIBAjRpbnZhbGlkIHBheW1lbnQgLSBleGFjdCBvbmUgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQJcG10QW1vdW50CAUDcG10BmFtb3VudAMJAQIhPQIFB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAkBCHRocm93RXJyAQkArAICCQCsAgICHmludmFsaWQgYXNzZXQgaXMgaW4gcGF5bWVudCAtIAUKYXNzZXRJZFN0cgIMIGlzIGV4cGVjdGVkBA5uZXh0VXNlck51bUtFWQkBDmtleU5leHRVc2VyTnVtAAQOdXNlckFkZHJlc3NTdHIJAKUIAQgFAWkGY2FsbGVyBA51c2VySXNFeGlzdGluZwkBCWlzRGVmaW5lZAEJAKIIAQkBEmtleVVzZXIyTnVtTWFwcGluZwEFDnVzZXJBZGRyZXNzU3RyBAp1c2VyTnVtU3RyAwUOdXNlcklzRXhpc3RpbmcJAQV2YWx1ZQEJAKIIAQkBEmtleVVzZXIyTnVtTWFwcGluZwEFDnVzZXJBZGRyZXNzU3RyCQCkAwEJAQNpb2YCBQR0aGlzBQ5uZXh0VXNlck51bUtFWQQHdXNlck51bQkBDXBhcnNlSW50VmFsdWUBBQp1c2VyTnVtU3RyBAlsb2NrU3RhcnQFBmhlaWdodAQNc3RhcnRCbG9ja0tFWQkBFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sBBQp1c2VyTnVtU3RyBAtkdXJhdGlvbktFWQkBFGtleUxvY2tQYXJhbUR1cmF0aW9uAQUKdXNlck51bVN0cgQNdXNlckFtb3VudEtFWQkBFmtleUxvY2tQYXJhbVVzZXJBbW91bnQBBQp1c2VyTnVtU3RyAwMJAGYCBQ1taW5Mb2NrQW1vdW50BQlwbXRBbW91bnQJAQIhPQIIBQFpBmNhbGxlcgUWbHBTdGFraW5nUG9vbHNDb250cmFjdAcJAQh0aHJvd0VycgEJAKwCAgIiYW1vdW50IGlzIGxlc3MgdGhlbiBtaW5Mb2NrQW1vdW50PQkApAMBBQ1taW5Mb2NrQW1vdW50AwkAZgIFD21pbkxvY2tEdXJhdGlvbgUIZHVyYXRpb24JAQh0aHJvd0VycgEJAKwCAgItcGFzc2VkIGR1cmF0aW9uIGlzIGxlc3MgdGhlbiBtaW5Mb2NrRHVyYXRpb249CQCkAwEFD21pbkxvY2tEdXJhdGlvbgMJAGYCBQhkdXJhdGlvbgUPbWF4TG9ja0R1cmF0aW9uCQEIdGhyb3dFcnIBCQCsAgICMHBhc3NlZCBkdXJhdGlvbiBpcyBncmVhdGVyIHRoZW4gbWF4TG9ja0R1cmF0aW9uPQkApAMBBQ9tYXhMb2NrRHVyYXRpb24DAwUOdXNlcklzRXhpc3RpbmcJAGcCCQBkAgkBA2lvZgIFBHRoaXMFDXN0YXJ0QmxvY2tLRVkJAQNpb2YCBQR0aGlzBQtkdXJhdGlvbktFWQUJbG9ja1N0YXJ0BwkBCHRocm93RXJyAQI2dGhlcmUgaXMgYW4gYWN0aXZlIGxvY2sgLSBjb25zaWRlciB0byB1c2UgaW5jcmVhc2VMb2NrAwkAZgIJAQNpb3oCBQR0aGlzBQ11c2VyQW1vdW50S0VZAAAJAQh0aHJvd0VycgEJAKwCAgI0dGhlcmUgYXJlIGxvY2tlZCBXWHMgLSBjb25zaWRlciB0byB1c2UgaW5jcmVhc2VMb2NrIAUNdXNlckFtb3VudEtFWQQHY29lZmZYOAkAawMFCGR1cmF0aW9uBQVNVUxUOAUPbWF4TG9ja0R1cmF0aW9uBA5nV3hBbW91bnRTdGFydAkAawMFCXBtdEFtb3VudAUHY29lZmZYOAUFTVVMVDgEE2dXeFBhcmFtc1Jlc3VsdExpc3QJAQNhYWwBCQD8BwQFDG1hdGhDb250cmFjdAIVY2FsY0d3eFBhcmFtc1JFQURPTkxZCQDMCAIFDmdXeEFtb3VudFN0YXJ0CQDMCAIFCWxvY2tTdGFydAkAzAgCBQhkdXJhdGlvbgUDbmlsBQNuaWwEAWsJAQJhaQEJAJEDAgUTZ1d4UGFyYW1zUmVzdWx0TGlzdAAABAFiCQECYWkBCQCRAwIFE2dXeFBhcmFtc1Jlc3VsdExpc3QAAQQGcGVyaW9kCQCkAwEJAQJhaQEJAJEDAgUTZ1d4UGFyYW1zUmVzdWx0TGlzdAACBBF0b3RhbENhY2hlZEd3eFJhdwkBEWdldFRvdGFsQ2FjaGVkR3d4AQcEIHVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsS0VZCQEga2V5VXNlckJvb3N0RW1pc3Npb25MYXN0SU5URUdSQUwBBQp1c2VyTnVtU3RyBBVib29zdEVtaXNzaW9uSW50ZWdyYWwICQEccmVmcmVzaEJvb3N0RW1pc3Npb25JbnRlZ3JhbAACXzIEA2FycgMFDnVzZXJJc0V4aXN0aW5nBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIFDm5leHRVc2VyTnVtS0VZCQBkAgUHdXNlck51bQABCQDMCAIJAQtTdHJpbmdFbnRyeQIJARJrZXlVc2VyMk51bU1hcHBpbmcBBQ51c2VyQWRkcmVzc1N0cgUKdXNlck51bVN0cgkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5TnVtMlVzZXJNYXBwaW5nAQUKdXNlck51bVN0cgUOdXNlckFkZHJlc3NTdHIFA25pbAkAlAoCCQDOCAIJAM0IAgkAzggCCQDOCAIFA2FycgkBD0xvY2tQYXJhbXNFbnRyeQgFDnVzZXJBZGRyZXNzU3RyBQp1c2VyTnVtU3RyBQlwbXRBbW91bnQFCWxvY2tTdGFydAUIZHVyYXRpb24FAWsFAWIFBnBlcmlvZAkBClN0YXRzRW50cnkEBQlwbXRBbW91bnQFCGR1cmF0aW9uAAEDBQ51c2VySXNFeGlzdGluZwAAAAEJAQxIaXN0b3J5RW50cnkIAgRsb2NrBQ51c2VyQWRkcmVzc1N0cgUJcG10QW1vdW50BQlsb2NrU3RhcnQFCGR1cmF0aW9uBQFrBQFiBQFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSB1c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbEtFWQUVYm9vc3RFbWlzc2lvbkludGVncmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQERa2V5VG90YWxDYWNoZWRHd3gACQBkAgURdG90YWxDYWNoZWRHd3hSYXcFDmdXeEFtb3VudFN0YXJ0BQNuaWwFDmdXeEFtb3VudFN0YXJ0EQFpAQtjb25zdHJ1Y3RvcgYRZmFjdG9yeUFkZHJlc3NTdHIObG9ja0Fzc2V0SWRTdHINbWluTG9ja0Ftb3VudAttaW5EdXJhdGlvbgttYXhEdXJhdGlvbgxtYXRoQ29udHJhY3QEC2NoZWNrQ2FsbGVyCQELbXVzdE1hbmFnZXIBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOa2V5TmV4dFVzZXJOdW0AAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBCWtleUNvbmZpZwAJAQxmb3JtYXRDb25maWcFBQ5sb2NrQXNzZXRJZFN0cgUNbWluTG9ja0Ftb3VudAULbWluRHVyYXRpb24FC21heER1cmF0aW9uBQxtYXRoQ29udHJhY3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUZhY3RvcnlBZGRyZXNzAAURZmFjdG9yeUFkZHJlc3NTdHIFA25pbAkBClN0YXRzRW50cnkEAAAAAAAAAAAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHbG9ja1JlZgMIZHVyYXRpb24PcmVmZXJyZXJBZGRyZXNzCXNpZ25hdHVyZQQNJHQwMzE5NTIzMjAxNwkBC2xvY2tBY3Rpb25zAgUBaQUIZHVyYXRpb24EEWxvY2tBY3Rpb25zUmVzdWx0CAUNJHQwMzE5NTIzMjAxNwJfMQQOZ1d4QW1vdW50U3RhcnQIBQ0kdDAzMTk1MjMyMDE3Al8yBA9yZWZlcnJhbEFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAZyZWZJbnYDAwkAAAIFD3JlZmVycmVyQWRkcmVzcwIABgkAAAIFCXNpZ25hdHVyZQEABQR1bml0CQD8BwQFHnJlZmVycmFsc0NvbnRyYWN0QWRkcmVzc09yRmFpbAIKY3JlYXRlUGFpcgkAzAgCBRNyZWZlcnJhbFByb2dyYW1OYW1lCQDMCAIFD3JlZmVycmVyQWRkcmVzcwkAzAgCBQ9yZWZlcnJhbEFkZHJlc3MJAMwIAgUJc2lnbmF0dXJlBQNuaWwFA25pbAMJAAACBQZyZWZJbnYFBnJlZkludgQRdXBkYXRlUmVmQWN0aXZpdHkJAPwHBAUMbWF0aENvbnRyYWN0AhZ1cGRhdGVSZWZlcnJhbEFjdGl2aXR5CQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFDmdXeEFtb3VudFN0YXJ0BQNuaWwFA25pbAMJAAACBRF1cGRhdGVSZWZBY3Rpdml0eQURdXBkYXRlUmVmQWN0aXZpdHkJAJQKAgURbG9ja0FjdGlvbnNSZXN1bHQFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEEbG9jawEIZHVyYXRpb24EDSR0MDMyNDc1MzI1NDAJAQtsb2NrQWN0aW9ucwIFAWkFCGR1cmF0aW9uBBFsb2NrQWN0aW9uc1Jlc3VsdAgFDSR0MDMyNDc1MzI1NDACXzEEDmdXeEFtb3VudFN0YXJ0CAUNJHQwMzI0NzUzMjU0MAJfMgQRdXBkYXRlUmVmQWN0aXZpdHkJAPwHBAUMbWF0aENvbnRyYWN0AhZ1cGRhdGVSZWZlcnJhbEFjdGl2aXR5CQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFDmdXeEFtb3VudFN0YXJ0BQNuaWwFA25pbAMJAAACBRF1cGRhdGVSZWZBY3Rpdml0eQURdXBkYXRlUmVmQWN0aXZpdHkJAJQKAgURbG9ja0FjdGlvbnNSZXN1bHQFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMaW5jcmVhc2VMb2NrAQ1kZWx0YUR1cmF0aW9uBAhjZmdBcnJheQkBFXJlYWRDb25maWdBcnJheU9yRmFpbAAECmFzc2V0SWRTdHIJAJEDAgUIY2ZnQXJyYXkFDUlkeENmZ0Fzc2V0SWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQPbWluTG9ja0R1cmF0aW9uCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIY2ZnQXJyYXkFFUlkeENmZ01pbkxvY2tEdXJhdGlvbgQPbWF4TG9ja0R1cmF0aW9uCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIY2ZnQXJyYXkFFUlkeENmZ01heExvY2tEdXJhdGlvbgQJcG10QW1vdW50CQEiZXh0cmFjdE9wdGlvbmFsUGF5bWVudEFtb3VudE9yRmFpbAIFAWkFB2Fzc2V0SWQEDnVzZXJBZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgQPdXNlclJlY29yZEFycmF5CQEacmVhZExvY2tQYXJhbXNSZWNvcmRPckZhaWwBBQ51c2VyQWRkcmVzc1N0cgQKdXNlck51bVN0cgkAkQMCBQ91c2VyUmVjb3JkQXJyYXkFDklkeExvY2tVc2VyTnVtBAp1c2VyQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPdXNlclJlY29yZEFycmF5BQ1JZHhMb2NrQW1vdW50BAlsb2NrU3RhcnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ91c2VyUmVjb3JkQXJyYXkFDElkeExvY2tTdGFydAQMbG9ja0R1cmF0aW9uCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPdXNlclJlY29yZEFycmF5BQ9JZHhMb2NrRHVyYXRpb24EB2xvY2tFbmQJAGQCBQlsb2NrU3RhcnQFDGxvY2tEdXJhdGlvbgQRcmVtYWluaW5nRHVyYXRpb24JAJYDAQkAzAgCCQBlAgUHbG9ja0VuZAUGaGVpZ2h0CQDMCAIAAAUDbmlsBA11c2VyQW1vdW50TmV3CQBkAgUKdXNlckFtb3VudAUJcG10QW1vdW50BA9sb2NrRHVyYXRpb25OZXcJAGQCBRFyZW1haW5pbmdEdXJhdGlvbgUNZGVsdGFEdXJhdGlvbgMJAGYCAAAFDWRlbHRhRHVyYXRpb24JAQh0aHJvd0VycgECGmR1cmF0aW9uIGlzIGxlc3MgdGhlbiB6ZXJvAwkAZgIFD21pbkxvY2tEdXJhdGlvbgUPbG9ja0R1cmF0aW9uTmV3CQEIdGhyb3dFcnIBCQCsAgICLWxvY2tEdXJhdGlvbk5ldyBpcyBsZXNzIHRoZW4gbWluTG9ja0R1cmF0aW9uPQkApAMBBQ9taW5Mb2NrRHVyYXRpb24DCQBmAgUPbG9ja0R1cmF0aW9uTmV3BQ9tYXhMb2NrRHVyYXRpb24JAQh0aHJvd0VycgEJAKwCAgJEZGVsdGFEdXJhdGlvbiArIGV4aXN0ZWRMb2NrRHVyYXRpb24gaXMgZ3JlYXRlciB0aGVuIG1heExvY2tEdXJhdGlvbj0JAKQDAQUPbWF4TG9ja0R1cmF0aW9uBAdjb2VmZlg4CQBrAwUPbG9ja0R1cmF0aW9uTmV3BQVNVUxUOAUPbWF4TG9ja0R1cmF0aW9uBA5nV3hBbW91bnRTdGFydAkAawMFDXVzZXJBbW91bnROZXcFB2NvZWZmWDgFBU1VTFQ4BBF1cGRhdGVSZWZBY3Rpdml0eQkA/AcEBQxtYXRoQ29udHJhY3QCFnVwZGF0ZVJlZmVycmFsQWN0aXZpdHkJAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgUOZ1d4QW1vdW50U3RhcnQFA25pbAUDbmlsAwkAAAIFEXVwZGF0ZVJlZkFjdGl2aXR5BRF1cGRhdGVSZWZBY3Rpdml0eQQMbG9ja1N0YXJ0TmV3BQZoZWlnaHQEE2dXeFBhcmFtc1Jlc3VsdExpc3QJAQNhYWwBCQD8BwQFDG1hdGhDb250cmFjdAIVY2FsY0d3eFBhcmFtc1JFQURPTkxZCQDMCAIFDmdXeEFtb3VudFN0YXJ0CQDMCAIFDGxvY2tTdGFydE5ldwkAzAgCBQ9sb2NrRHVyYXRpb25OZXcFA25pbAUDbmlsBAFrCQECYWkBCQCRAwIFE2dXeFBhcmFtc1Jlc3VsdExpc3QAAAQBYgkBAmFpAQkAkQMCBRNnV3hQYXJhbXNSZXN1bHRMaXN0AAEEBnBlcmlvZAkApAMBCQECYWkBCQCRAwIFE2dXeFBhcmFtc1Jlc3VsdExpc3QAAgQLY3VyclVzZXJHd3gJARRjYWxjQ3VycmVudEd3eEFtb3VudAEFDnVzZXJBZGRyZXNzU3RyBAdnd3hEaWZmCQBlAgUOZ1d4QW1vdW50U3RhcnQFC2N1cnJVc2VyR3d4AwkAZgIAAAUHZ3d4RGlmZgkBCHRocm93RXJyAQkArAICAhhnd3hEaWZmIGlzIGxlc3MgdGhlbiAwOiAJAKQDAQUHZ3d4RGlmZgQRdG90YWxDYWNoZWRHd3hSYXcJARFnZXRUb3RhbENhY2hlZEd3eAEHBBd0b3RhbENhY2hlZEd3eENvcnJlY3RlZAkBEWdldFRvdGFsQ2FjaGVkR3d4AQYJAM4IAgkAzQgCCQDOCAIJAQ9Mb2NrUGFyYW1zRW50cnkIBQ51c2VyQWRkcmVzc1N0cgUKdXNlck51bVN0cgUNdXNlckFtb3VudE5ldwUMbG9ja1N0YXJ0TmV3BQ9sb2NrRHVyYXRpb25OZXcFAWsFAWIFBnBlcmlvZAkBClN0YXRzRW50cnkEBQlwbXRBbW91bnQFDWRlbHRhRHVyYXRpb24AAAAACQEMSGlzdG9yeUVudHJ5CAIEbG9jawUOdXNlckFkZHJlc3NTdHIFCXBtdEFtb3VudAUJbG9ja1N0YXJ0BQ9sb2NrRHVyYXRpb25OZXcFAWsFAWIFAWkJAMwIAgkBDEludGVnZXJFbnRyeQIJARFrZXlUb3RhbENhY2hlZEd3eAAJAGQCBRF0b3RhbENhY2hlZEd3eFJhdwUHZ3d4RGlmZgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDGNsYWltV3hCb29zdAIMbHBBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyAwkBAiE9AgUPc3Rha2luZ0NvbnRyYWN0CAUBaQZjYWxsZXIJAQh0aHJvd0VycgECEnBlcm1pc3Npb25zIGRlbmllZAQNJHQwMzU2NDUzNTc0NwkBFGludGVybmFsQ2xhaW1XeEJvb3N0AwUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgcEEnVzZXJCb29zdEF2YWlsYWJsZQgFDSR0MDM1NjQ1MzU3NDcCXzEECWRhdGFTdGF0ZQgFDSR0MDM1NjQ1MzU3NDcCXzIEBWRlYnVnCAUNJHQwMzU2NDUzNTc0NwJfMwkAlAoCBQlkYXRhU3RhdGUJAMwIAgUSdXNlckJvb3N0QXZhaWxhYmxlBQNuaWwBaQEUY2xhaW1XeEJvb3N0UkVBRE9OTFkCDGxwQXNzZXRJZFN0cg51c2VyQWRkcmVzc1N0cgQNJHQwMzU4NzkzNTk4MAkBFGludGVybmFsQ2xhaW1XeEJvb3N0AwUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgYEEnVzZXJCb29zdEF2YWlsYWJsZQgFDSR0MDM1ODc5MzU5ODACXzEECWRhdGFTdGF0ZQgFDSR0MDM1ODc5MzU5ODACXzIEBWRlYnVnCAUNJHQwMzU4NzkzNTk4MAJfMwkAlAoCBQNuaWwJAMwIAgUSdXNlckJvb3N0QXZhaWxhYmxlCQDMCAIFBWRlYnVnBQNuaWwBaQEGdW5sb2NrAQt1c2VyQWRkcmVzcwQPdXNlclJlY29yZEFycmF5CQEacmVhZExvY2tQYXJhbXNSZWNvcmRPckZhaWwBBQt1c2VyQWRkcmVzcwQKdXNlck51bVN0cgkAkQMCBQ91c2VyUmVjb3JkQXJyYXkFDklkeExvY2tVc2VyTnVtBAp1c2VyQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPdXNlclJlY29yZEFycmF5BQ1JZHhMb2NrQW1vdW50BAlsb2NrU3RhcnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ91c2VyUmVjb3JkQXJyYXkFDElkeExvY2tTdGFydAQMbG9ja0R1cmF0aW9uCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPdXNlclJlY29yZEFycmF5BQ9JZHhMb2NrRHVyYXRpb24EB2xvY2tFbmQJAGQCBQlsb2NrU3RhcnQFDGxvY2tEdXJhdGlvbgQIY2ZnQXJyYXkJARVyZWFkQ29uZmlnQXJyYXlPckZhaWwABAdhc3NldElkCQDZBAEJAJEDAgUIY2ZnQXJyYXkFDUlkeENmZ0Fzc2V0SWQDCQBnAgUHbG9ja0VuZAUGaGVpZ2h0CQEIdGhyb3dFcnIBCQCsAgIJAKwCAgIFd2FpdCAJAKQDAQUHbG9ja0VuZAIKIHRvIHVubG9jawMJAGcCAAAFCnVzZXJBbW91bnQJAQh0aHJvd0VycgECEW5vdGhpbmcgdG8gdW5sb2NrBAZwZXJpb2QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMbWF0aENvbnRyYWN0CQENa2V5TmV4dFBlcmlvZAAAAAkAzQgCCQDNCAIJAM4IAgkBD0xvY2tQYXJhbXNFbnRyeQgFC3VzZXJBZGRyZXNzBQp1c2VyTnVtU3RyAAAFCWxvY2tTdGFydAUMbG9ja0R1cmF0aW9uAAAAAAkApAMBBQZwZXJpb2QJAQpTdGF0c0VudHJ5BAkBAS0BBQp1c2VyQW1vdW50AAAAAAD///////////8BCQEMSGlzdG9yeUVudHJ5CAIGdW5sb2NrBQt1c2VyQWRkcmVzcwUKdXNlckFtb3VudAUJbG9ja1N0YXJ0BQxsb2NrRHVyYXRpb24AAAAABQFpCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQt1c2VyQWRkcmVzcwUKdXNlckFtb3VudAUHYXNzZXRJZAFpARNnd3hVc2VySW5mb1JFQURPTkxZAQt1c2VyQWRkcmVzcwQJZ3d4QW1vdW50CQEUY2FsY0N1cnJlbnRHd3hBbW91bnQBBQt1c2VyQWRkcmVzcwkAlAoCBQNuaWwJAMwIAgUJZ3d4QW1vdW50BQNuaWwBaQEXdXNlck1heER1cmF0aW9uUkVBRE9OTFkBDnVzZXJBZGRyZXNzU3RyBAhjZmdBcnJheQkBFXJlYWRDb25maWdBcnJheU9yRmFpbAAED21heExvY2tEdXJhdGlvbgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGNmZ0FycmF5BRVJZHhDZmdNYXhMb2NrRHVyYXRpb24EEHVzZXJSZWNvcmRPcHRpb24JAJ0IAgUEdGhpcwkBE2tleUxvY2tQYXJhbXNSZWNvcmQBBQ51c2VyQWRkcmVzc1N0cgMJAAACBRB1c2VyUmVjb3JkT3B0aW9uBQR1bml0CQCUCgIFA25pbAkAlAoCAgRsb2NrBQ9tYXhMb2NrRHVyYXRpb24ED3VzZXJSZWNvcmRBcnJheQkAtQkCCQEFdmFsdWUBBRB1c2VyUmVjb3JkT3B0aW9uBQNTRVAECWxvY2tTdGFydAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD3VzZXJSZWNvcmRBcnJheQUMSWR4TG9ja1N0YXJ0BAxsb2NrRHVyYXRpb24JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ91c2VyUmVjb3JkQXJyYXkFD0lkeExvY2tEdXJhdGlvbgQHbG9ja0VuZAkAZAIFCWxvY2tTdGFydAUMbG9ja0R1cmF0aW9uBBFyZW1haW5pbmdEdXJhdGlvbgkAlgMBCQDMCAIJAGUCBQdsb2NrRW5kBQZoZWlnaHQJAMwIAgAABQNuaWwEEG1heERlbHRhRHVyYXRpb24JAGUCBQ9tYXhMb2NrRHVyYXRpb24FEXJlbWFpbmluZ0R1cmF0aW9uCQCUCgIFA25pbAkAlAoCAgxpbmNyZWFzZUxvY2sFEG1heERlbHRhRHVyYXRpb24BaQEgZ2V0VXNlckd3eEFtb3VudEF0SGVpZ2h0UkVBRE9OTFkCC3VzZXJBZGRyZXNzDHRhcmdldEhlaWdodAQJZ3d4QW1vdW50CQEZY2FsY1VzZXJHd3hBbW91bnRBdEhlaWdodAIFC3VzZXJBZGRyZXNzBQx0YXJnZXRIZWlnaHQJAJQKAgUDbmlsBQlnd3hBbW91bnQBaQEZZ2V0VG90YWxDYWNoZWRHd3hSRUFET05MWQAJAJQKAgUDbmlsCQERZ2V0VG90YWxDYWNoZWRHd3gBBgFpARVvbkJvb3N0RW1pc3Npb25VcGRhdGUABAtjaGVja0NhbGxlcgMJAAACCAUBaQZjYWxsZXIFEGVtaXNzaW9uQ29udHJhY3QGCQELbXVzdE1hbmFnZXIBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgkBHHJlZnJlc2hCb29zdEVtaXNzaW9uSW50ZWdyYWwACQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEm9uU3Rha2VkVm90ZVVwZGF0ZQMMbHBBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyBGVkZ2UEC2NoZWNrQ2FsbGVyAwkAAAIIBQFpBmNhbGxlcgUPc3Rha2luZ0NvbnRyYWN0BgkBC211c3RNYW5hZ2VyAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIEB2FjdGlvbnMJARlyZWZyZXNoVm90ZVN0YWtlZEludGVncmFsAwUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgUEZWRnZQkAlAoCBQdhY3Rpb25zBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBHWdldFZvdGluZ1Jlc3VsdFN0YWtlZFJFQURPTkxZAQxscEFzc2V0SWRTdHIJAJQKAgUDbmlsCQEVZ2V0Vm90aW5nUmVzdWx0U3Rha2VkAQUMbHBBc3NldElkU3RyAWkBJWdldFZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsUkVBRE9OTFkBDGxwQXNzZXRJZFN0cgkAlAoCBQNuaWwJAR1nZXRWb3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbAEFDGxwQXNzZXRJZFN0cgFpARxnZXRVc2VyVm90ZUZpbmFsaXplZFJFQURPTkxZAgxscEFzc2V0SWRTdHIOdXNlckFkZHJlc3NTdHIJAJQKAgUDbmlsCQEUZ2V0VXNlclZvdGVGaW5hbGl6ZWQCBQxscEFzc2V0SWRTdHIFDnVzZXJBZGRyZXNzU3RyAWkBIWdldFVzZXJWb3RlU3Rha2VkSW50ZWdyYWxSRUFET05MWQIMbHBBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyCQCUCgIFA25pbAkBGWdldFVzZXJWb3RlU3Rha2VkSW50ZWdyYWwCBQxscEFzc2V0SWRTdHIFDnVzZXJBZGRyZXNzU3RyAQJ0eAEGdmVyaWZ5AAQPdGFyZ2V0UHVibGljS2V5BAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQIBQJ0eA9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUPdGFyZ2V0UHVibGljS2V5YBRyyQ==", "height": 3499215, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 83YoB1oxbbnAnJDKTgA4Y41y7DzfKFpnCTG3mzT7z3qB Next: BKoL8Wv967ocXziaQT3jHBgvKETfnQ2JpjjBhR5pYFht Diff:
OldNewDifferences
563563 let dG = valueOrElse(getInteger(this, bN(bJ, aS, dc)), 0)
564564 let dH = valueOrElse(getInteger(this, bO(bJ, aS, dc)), dd)
565565 let dI = (height - dH)
566- let dJ = ((dI * dF) + dG)
567- dJ
566+ let dJ = ((toBigInt(dI) * toBigInt(dF)) + toBigInt(dG))
567+ let dK = 9223372036854775807
568+ toInt(min([toBigInt(dK), dJ]))
568569 }
569570
570571
571-func dK (bJ,bR,dL) = {
572- let dM = da()
573- let dc = dM._1
574- let dd = dM._2
572+func dL (bJ,bR,dM) = {
573+ let dN = da()
574+ let dc = dN._1
575+ let dd = dN._2
575576 let aS = addressFromStringValue(bR)
576- let dN = di(bJ, bR)
577- let dO = if ((dN == 0))
577+ let dO = di(bJ, bR)
578+ let dP = if ((dO == 0))
578579 then nil
579580 else {
580- let dA = if (dL)
581- then dN
582- else -(dN)
583- let dP = dz(bJ, dA)
581+ let dA = if (dM)
582+ then dO
583+ else -(dO)
584+ let dQ = dz(bJ, dA)
584585 let dJ = dD(bJ, bR)
585- let dQ = [IntegerEntry(bO(bJ, aS, dc), height), IntegerEntry(bN(bJ, aS, dc), dJ)]
586- (dP ++ dQ)
586+ let dR = [IntegerEntry(bO(bJ, aS, dc), height), IntegerEntry(bN(bJ, aS, dc), dJ)]
587+ (dQ ++ dR)
587588 }
588- dO
589+ dP
589590 }
590591
591592
592-func dR (bJ,bR) = {
593- let dS = da()
594- let dc = dS._1
595- let dd = dS._2
593+func dS (bJ,bR) = {
594+ let dT = da()
595+ let dc = dT._1
596+ let dd = dT._2
596597 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)
598+ let dU = bP(bJ, aS, dc)
599+ let dV = valueOrElse(getInteger(this, dU), 0)
600+ let dW = bM(bJ, aS, dc)
601+ let dX = valueOrElse(getInteger(this, dW), 0)
601602 let dJ = dD(bJ, bR)
602603 let dy = dt(bJ)
603- let dX = (dJ - dU)
604- let dY = (dy - dW)
605- $Tuple3([IntegerEntry(dT, dJ), IntegerEntry(dV, dy)], dX, dY)
604+ let dY = (dJ - dV)
605+ let dZ = (dy - dX)
606+ $Tuple3([IntegerEntry(dU, dJ), IntegerEntry(dW, dy)], dY, dZ)
606607 }
607608
608609
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
610+func ea () = {
611+ let eb = n(bT, ag())
612+ let ec = getInteger(this, aj())
613+ let ed = getInteger(this, ak())
614+ let ee = n(bT, am())
615+ let cH = if ((height > ee))
616+ then ee
616617 else height
617- let ee = {
618- let r = eb
618+ let ef = {
619+ let r = ec
619620 if ($isInstanceOf(r, "Int"))
620621 then {
621- let ef = r
622- max([(cH - ef), 0])
622+ let eg = r
623+ max([(cH - eg), 0])
623624 }
624625 else if ($isInstanceOf(r, "Unit"))
625626 then 0
626627 else throw("Match error")
627628 }
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)
629+ let eh = ((eb * (bZ - 1)) / bZ)
630+ let ei = valueOrElse(ed, 0)
631+ let ej = ((eh * ef) + ei)
632+ $Tuple2([IntegerEntry(ak(), ej), IntegerEntry(aj(), height)], ej)
632633 }
633634
634635
635-func ej (bJ,bR,ek) = {
636- let el = getString(this, aR(bR))
637- if ((el == unit))
636+func ek (bJ,bR,el) = {
637+ let em = getString(this, aR(bR))
638+ if ((em == unit))
638639 then $Tuple3(0, nil, "userRecord::is::empty")
639640 else {
640- let em = split(value(el), a)
641- let en = em[aL]
642- let eo = "empty"
643- let ep = if ((bJ != eo))
641+ let en = split(value(em), a)
642+ let eo = en[aL]
643+ let ep = "empty"
644+ let eq = if ((bJ != ep))
644645 then {
645- let eq = valueOrErrorMessage(getString(bS, O(bJ)), e(("unsupported lp asset " + bJ)))
646- getIntegerValue(bS, Q(eq))
646+ let er = valueOrErrorMessage(getString(bS, O(bJ)), e(("unsupported lp asset " + bJ)))
647+ getIntegerValue(bS, Q(er))
647648 }
648- else if (ek)
649+ else if (el)
649650 then 0
650651 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))
652+ let es = bu(eo, bJ)
653+ let et = bt(eo)
654+ let eu = valueOrElse(getInteger(this, es), k(this, et))
655+ let ej = ea()._2
656+ let ev = (ej - eu)
657+ if ((0 > ev))
657658 then g("wrong calculations")
658659 else {
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))
660+ let ew = dS(bJ, bR)
661+ let ex = ew._1
662+ let ey = ew._2
663+ let ez = ew._3
664+ let eA = fraction(ev, eq, d)
665+ let eB = if ((ez == 0))
665666 then 0
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)
667+ else fraction(eA, ey, ez)
668+ let eC = ([IntegerEntry(es, ej)] ++ ex)
669+ let eD = makeString([toString(eu), toString(ev), toString(eq), toString(ey), toString(ez)], ":")
670+ $Tuple3(eB, eC, eD)
670671 }
671672 }
672673 }
673674
674675
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])
676+func eE (aI,aY) = {
677+ let eF = av()
678+ let eG = eF[ap]
679+ let ay = fromBase58String(eG)
680+ let az = parseIntValue(eF[aq])
681+ let aA = parseIntValue(eF[ar])
682+ let aB = parseIntValue(eF[as])
682683 if ((size(aI.payments) != 1))
683684 then g("invalid payment - exact one payment must be attached")
684685 else {
685686 let cT = aI.payments[0]
686- let eG = cT.amount
687+ let eH = cT.amount
687688 if ((ay != value(cT.assetId)))
688- then g((("invalid asset is in payment - " + eF) + " is expected"))
689+ then g((("invalid asset is in payment - " + eG) + " is expected"))
689690 else {
690- let eH = be()
691+ let eI = be()
691692 let bR = toString(aI.caller)
692- let eI = isDefined(getString(bf(bR)))
693- let en = if (eI)
693+ let eJ = isDefined(getString(bf(bR)))
694+ let eo = if (eJ)
694695 then value(getString(bf(bR)))
695- else toString(n(this, eH))
696- let aV = parseIntValue(en)
696+ else toString(n(this, eI))
697+ let aV = parseIntValue(eo)
697698 let cm = height
698- let cL = bi(en)
699- let cM = bj(en)
700- let cK = bh(en)
701- if (if ((az > eG))
699+ let cL = bi(eo)
700+ let cM = bj(eo)
701+ let cK = bh(eo)
702+ if (if ((az > eH))
702703 then (aI.caller != bW)
703704 else false)
704705 then g(("amount is less then minLockAmount=" + toString(az)))
706707 then g(("passed duration is less then minLockDuration=" + toString(aA)))
707708 else if ((aY > aB))
708709 then g(("passed duration is greater then maxLockDuration=" + toString(aB)))
709- else if (if (eI)
710+ else if (if (eJ)
710711 then ((n(this, cL) + n(this, cM)) >= cm)
711712 else false)
712713 then g("there is an active lock - consider to use increaseLock")
713714 else if ((k(this, cK) > 0))
714715 then g(("there are locked WXs - consider to use increaseLock " + cK))
715716 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]))
717+ let eK = fraction(aY, c, aB)
718+ let eL = fraction(eH, eK, c)
719+ let eM = q(invoke(aw, "calcGwxParamsREADONLY", [eL, cm, aY], nil))
720+ let cn = t(eM[0])
721+ let co = t(eM[1])
722+ let bn = toString(t(eM[2]))
722723 let cg = cb(false)
723- let es = bt(en)
724- let ei = dZ()._2
725- let eM = if (eI)
724+ let et = bt(eo)
725+ let ej = ea()._2
726+ let eN = if (eJ)
726727 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)
728+ else [IntegerEntry(eI, (aV + 1)), StringEntry(bf(bR), eo), StringEntry(bg(eo), bR)]
729+ $Tuple2(((((eN ++ cJ(bR, eo, eH, cm, aY, cn, co, bn)) ++ cr(eH, aY, 1, if (eJ)
729730 then 0
730- else 1)) :+ cj("lock", bR, eG, cm, aY, cn, co, aI)) ++ [IntegerEntry(es, ei), IntegerEntry(bA(), (cg + eK))]), eK)
731+ else 1)) :+ cj("lock", bR, eH, cm, aY, cn, co, aI)) ++ [IntegerEntry(et, ej), IntegerEntry(bA(), (cg + eL))]), eL)
731732 }
732733 }
733734 }
735736
736737
737738 @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))
739+func constructor (eO,eP,az,eQ,eR,aw) = {
740+ let eS = aH(aI)
741+ if ((eS == eS))
742+ then ([IntegerEntry(be(), 0), StringEntry(au(), aC(eP, az, eQ, eR, aw)), StringEntry(A(), eO)] ++ cr(0, 0, 0, 0))
742743 else throw("Strict value is not equal to itself.")
743744 }
744745
745746
746747
747748 @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 == ""))
749+func lockRef (aY,eT,eU) = {
750+ let eV = eE(aI, aY)
751+ let eW = eV._1
752+ let eL = eV._2
753+ let eX = toString(aI.caller)
754+ let eY = if (if ((eT == ""))
754755 then true
755- else (eT == base58''))
756+ else (eU == base58''))
756757 then unit
757- else invoke(w, "createPair", [z, eS, eW, eT], nil)
758- if ((eX == eX))
758+ else invoke(w, "createPair", [z, eT, eX, eU], nil)
759+ if ((eY == eY))
759760 then {
760- let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
761- if ((eY == eY))
762- then $Tuple2(eV, unit)
761+ let eZ = invoke(aw, "updateReferralActivity", [toString(aI.caller), eL], nil)
762+ if ((eZ == eZ))
763+ then $Tuple2(eW, unit)
763764 else throw("Strict value is not equal to itself.")
764765 }
765766 else throw("Strict value is not equal to itself.")
769770
770771 @Callable(aI)
771772 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)
773+ let fa = eE(aI, aY)
774+ let eW = fa._1
775+ let eL = fa._2
776+ let eZ = invoke(aw, "updateReferralActivity", [toString(aI.caller), eL], nil)
777+ if ((eZ == eZ))
778+ then $Tuple2(eW, unit)
778779 else throw("Strict value is not equal to itself.")
779780 }
780781
781782
782783
783784 @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)
785+func increaseLock (fb) = {
786+ let eF = av()
787+ let eG = eF[ap]
788+ let ay = fromBase58String(eG)
789+ let aA = parseIntValue(eF[ar])
790+ let aB = parseIntValue(eF[as])
791+ let eH = cR(aI, ay)
791792 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))
793+ let en = aT(bR)
794+ let eo = en[aL]
795+ let fc = parseIntValue(en[aM])
796+ let cm = parseIntValue(en[aN])
797+ let fd = parseIntValue(en[aO])
798+ let fe = (cm + fd)
799+ let ff = max([(fe - height), 0])
800+ let fg = (fc + eH)
801+ let fh = (ff + fb)
802+ if ((0 > fb))
802803 then g("duration is less then zero")
803- else if ((aA > fg))
804+ else if ((aA > fh))
804805 then g(("lockDurationNew is less then minLockDuration=" + toString(aA)))
805- else if ((fg > aB))
806+ else if ((fh > aB))
806807 then g(("deltaDuration + existedLockDuration is greater then maxLockDuration=" + toString(aB)))
807808 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))
809+ let eK = fraction(fh, c, aB)
810+ let eL = fraction(fg, eK, c)
811+ let eZ = invoke(aw, "updateReferralActivity", [toString(aI.caller), eL], nil)
812+ if ((eZ == eZ))
812813 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)))
814+ let fi = height
815+ let eM = q(invoke(aw, "calcGwxParamsREADONLY", [eL, fi, fh], nil))
816+ let cn = t(eM[0])
817+ let co = t(eM[1])
818+ let bn = toString(t(eM[2]))
819+ let fj = cZ(bR)
820+ let fk = (eL - fj)
821+ if ((0 > fk))
822+ then g(("gwxDiff is less then 0: " + toString(fk)))
822823 else {
823824 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))])
825+ let fl = cb(true)
826+ (((cJ(bR, eo, fg, fi, fh, cn, co, bn) ++ cr(eH, fb, 0, 0)) :+ cj("lock", bR, eH, cm, fh, cn, co, aI)) ++ [IntegerEntry(bA(), (cg + fk))])
826827 }
827828 }
828829 else throw("Strict value is not equal to itself.")
835836 func claimWxBoost (bJ,bR) = if ((bU != aI.caller))
836837 then g("permissions denied")
837838 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])
839+ let fm = ek(bJ, bR, false)
840+ let fn = fm._1
841+ let eC = fm._2
842+ let eD = fm._3
843+ $Tuple2(eC, [fn])
843844 }
844845
845846
846847
847848 @Callable(aI)
848849 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])
850+ let fo = ek(bJ, bR, true)
851+ let fn = fo._1
852+ let eC = fo._2
853+ let eD = fo._3
854+ $Tuple2(nil, [fn, eD])
854855 }
855856
856857
857858
858859 @Callable(aI)
859860 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))
861+ let en = aT(aS)
862+ let eo = en[aL]
863+ let fc = parseIntValue(en[aM])
864+ let cm = parseIntValue(en[aN])
865+ let fd = parseIntValue(en[aO])
866+ let fe = (cm + fd)
867+ let eF = av()
868+ let ay = fromBase58String(eF[ap])
869+ if ((fe >= height))
870+ then g((("wait " + toString(fe)) + " to unlock"))
871+ else if ((0 >= fc))
871872 then g("nothing to unlock")
872873 else {
873874 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+ (((cJ(aS, eo, 0, cm, fd, 0, 0, toString(bn)) ++ cr(-(fc), 0, 0, -1)) :+ cj("unlock", aS, fc, cm, fd, 0, 0, aI)) :+ ScriptTransfer(addressFromStringValue(aS), fc, ay))
875876 }
876877 }
877878
887888
888889 @Callable(aI)
889890 func userMaxDurationREADONLY (bR) = {
890- let eE = av()
891- let aB = parseIntValue(eE[as])
892- let el = getString(this, aR(bR))
893- if ((el == unit))
891+ let eF = av()
892+ let aB = parseIntValue(eF[as])
893+ let em = getString(this, aR(bR))
894+ if ((em == unit))
894895 then $Tuple2(nil, $Tuple2("lock", aB))
895896 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))
897+ let en = split(value(em), a)
898+ let cm = parseIntValue(en[aN])
899+ let fd = parseIntValue(en[aO])
900+ let fe = (cm + fd)
901+ let ff = max([(fe - height), 0])
902+ let fp = (aB - ff)
903+ $Tuple2(nil, $Tuple2("increaseLock", fp))
903904 }
904905 }
905906
920921
921922 @Callable(aI)
922923 func onBoostEmissionUpdate () = {
923- let eR = if ((aI.caller == bT))
924+ let eS = if ((aI.caller == bT))
924925 then true
925926 else aH(aI)
926- if ((eR == eR))
927- then dZ()
927+ if ((eS == eS))
928+ then ea()
928929 else throw("Strict value is not equal to itself.")
929930 }
930931
931932
932933
933934 @Callable(aI)
934-func onStakedVoteUpdate (bJ,bR,dL) = {
935- let eR = if ((aI.caller == bU))
935+func onStakedVoteUpdate (bJ,bR,dM) = {
936+ let eS = if ((aI.caller == bU))
936937 then true
937938 else aH(aI)
938- if ((eR == eR))
939+ if ((eS == eS))
939940 then {
940- let dO = dK(bJ, bR, dL)
941- $Tuple2(dO, unit)
941+ let dP = dL(bJ, bR, dM)
942+ $Tuple2(dP, unit)
942943 }
943944 else throw("Strict value is not equal to itself.")
944945 }
964965 func getUserVoteStakedIntegralREADONLY (bJ,bR) = $Tuple2(nil, dD(bJ, bR))
965966
966967
967-@Verifier(fp)
968-func fq () = {
969- let fr = {
968+@Verifier(fq)
969+func fr () = {
970+ let fs = {
970971 let r = aF()
971972 if ($isInstanceOf(r, "ByteVector"))
972973 then {
974975 aK
975976 }
976977 else if ($isInstanceOf(r, "Unit"))
977- then fp.senderPublicKey
978+ then fq.senderPublicKey
978979 else throw("Match error")
979980 }
980- sigVerify(fp.bodyBytes, fp.proofs[0], fr)
981+ sigVerify(fq.bodyBytes, fq.proofs[0], fs)
981982 }
982983
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
1212 func e (f) = makeString(["boosting.ride:", f], " ")
1313
1414
1515 func g (f) = throw(e(f))
1616
1717
1818 func h (i,j) = valueOrErrorMessage(getString(i, j), e((("mandatory this." + j) + " is not defined")))
1919
2020
2121 func k (i,j) = valueOrElse(getInteger(i, j), 0)
2222
2323
2424 func l (i,j,m) = valueOrElse(getInteger(i, j), m)
2525
2626
2727 func n (i,j) = valueOrErrorMessage(getInteger(i, j), e((("mandatory this." + j) + " is not defined")))
2828
2929
3030 func o (p) = if ((0 > p))
3131 then -(p)
3232 else p
3333
3434
3535 func q (p) = {
3636 let r = p
3737 if ($isInstanceOf(r, "List[Any]"))
3838 then {
3939 let s = r
4040 s
4141 }
4242 else g("fail to cast into List[Any]")
4343 }
4444
4545
4646 func t (p) = {
4747 let r = p
4848 if ($isInstanceOf(r, "Int"))
4949 then {
5050 let u = r
5151 u
5252 }
5353 else g("fail to cast into Int")
5454 }
5555
5656
5757 func v () = makeString(["%s%s", "config", "referralsContractAddress"], a)
5858
5959
6060 let w = addressFromStringValue(h(this, v()))
6161
6262 let x = makeString(["%s%s", "referral", "programName"], a)
6363
6464 let y = "wxlock"
6565
6666 let z = valueOrElse(getString(this, x), y)
6767
6868 func A () = "%s%s__config__factoryAddress"
6969
7070
7171 let B = 1
7272
7373 let C = 2
7474
7575 let D = 3
7676
7777 let E = 4
7878
7979 let F = 5
8080
8181 let G = 6
8282
8383 let H = 7
8484
8585 let I = 8
8686
8787 let J = 9
8888
8989 let K = 10
9090
9191 let L = 11
9292
9393 func M () = "%s__factoryConfig"
9494
9595
9696 func N () = "%s__lpTokensList"
9797
9898
9999 func O (P) = makeString(["%s%s%s", P, "mappings__lpAsset2PoolContract"], a)
100100
101101
102102 func Q (R) = makeString(["%s%s", "poolWeight", R], a)
103103
104104
105105 func S (T,U) = ((("%s%s__poolWeight__" + T) + "__") + toString(U))
106106
107107
108108 func V () = addressFromStringValue(h(this, A()))
109109
110110
111111 func W () = split(valueOrElse(getString(V(), N()), ""), a)
112112
113113
114114 func X (Y) = split(h(Y, M()), a)
115115
116116
117117 func Z (aa) = addressFromStringValue(aa[C])
118118
119119
120120 func ab (aa) = addressFromStringValue(aa[F])
121121
122122
123123 func ac (aa) = addressFromStringValue(aa[B])
124124
125125
126126 func ad (aa) = addressFromStringValue(aa[K])
127127
128128
129129 func ae () = "%s__managerPublicKey"
130130
131131
132132 func af () = "%s__managerVaultAddress"
133133
134134
135135 func ag () = "%s%s__ratePerBlock__current"
136136
137137
138138 func ah () = "%s%s__ratePerBlockMax__current"
139139
140140
141141 func ai () = "%s%s__emission__startBlock"
142142
143143
144144 func aj () = "%s%s__boostingV2__startBlock"
145145
146146
147147 func ak () = "%s%s__boostingV2__integral"
148148
149149
150150 func al () = "%s%s__emission__duration"
151151
152152
153153 func am () = "%s%s__emission__endBlock"
154154
155155
156156 func an () = "%s__nextPeriod"
157157
158158
159159 func ao () = "%s%s__gwxRewardEmissionPart__startHeight"
160160
161161
162162 let ap = 1
163163
164164 let aq = 2
165165
166166 let ar = 3
167167
168168 let as = 4
169169
170170 let at = 5
171171
172172 func au () = "%s__config"
173173
174174
175175 func av () = split(h(this, au()), a)
176176
177177
178178 let aw = addressFromStringValue(av()[at])
179179
180180 func ax (ay,az,aA,aB,aw) = makeString(["%s%d%d%d", ay, az, aA, aB, aw], a)
181181
182182
183183 func aC (ay,az,aA,aB,aw) = ax(ay, toString(az), toString(aA), toString(aB), aw)
184184
185185
186186 func aD () = {
187187 let r = getString(af())
188188 if ($isInstanceOf(r, "String"))
189189 then {
190190 let aE = r
191191 addressFromStringValue(aE)
192192 }
193193 else this
194194 }
195195
196196
197197 func aF () = {
198198 let aG = aD()
199199 let r = getString(aG, ae())
200200 if ($isInstanceOf(r, "String"))
201201 then {
202202 let aE = r
203203 fromBase58String(aE)
204204 }
205205 else if ($isInstanceOf(r, "Unit"))
206206 then unit
207207 else throw("Match error")
208208 }
209209
210210
211211 func aH (aI) = {
212212 let aJ = g("Permission denied")
213213 let r = aF()
214214 if ($isInstanceOf(r, "ByteVector"))
215215 then {
216216 let aK = r
217217 if ((aI.callerPublicKey == aK))
218218 then true
219219 else aJ
220220 }
221221 else if ($isInstanceOf(r, "Unit"))
222222 then if ((aI.caller == this))
223223 then true
224224 else aJ
225225 else throw("Match error")
226226 }
227227
228228
229229 let aL = 1
230230
231231 let aM = 2
232232
233233 let aN = 3
234234
235235 let aO = 4
236236
237237 let aP = 5
238238
239239 let aQ = 6
240240
241241 func aR (aS) = makeString(["%s%s__lock", aS], a)
242242
243243
244244 func aT (aS) = split(h(this, aR(aS)), a)
245245
246246
247247 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)
248248
249249
250250 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))
251251
252252
253253 func be () = "%s__nextUserNum"
254254
255255
256256 func bf (aS) = makeString(["%s%s%s__mapping__user2num", aS], a)
257257
258258
259259 func bg (U) = makeString(["%s%s%s__mapping__num2user", U], a)
260260
261261
262262 func bh (aV) = makeString(["%s%d%s__paramByUserNum", aV, "amount"], a)
263263
264264
265265 func bi (aV) = makeString(["%s%d%s__paramByUserNum", aV, "start"], a)
266266
267267
268268 func bj (aV) = makeString(["%s%d%s__paramByUserNum", aV, "duration"], a)
269269
270270
271271 func bk (aV) = makeString(["%s%d%s__paramByUserNum", aV, "k"], a)
272272
273273
274274 func bl (aV) = makeString(["%s%d%s__paramByUserNum", aV, "b"], a)
275275
276276
277277 func bm (aV,bn) = makeString(["%s%d%s%d__paramByPeriod", aV, "k", bn], a)
278278
279279
280280 func bo (aV,bn) = makeString(["%s%d%s%d__paramByPeriod", aV, "b", bn], a)
281281
282282
283283 func bp () = "%s%s__stats__activeTotalLocked"
284284
285285
286286 func bq () = "%s%s__stats__locksDurationSumInBlocks"
287287
288288
289289 func br () = "%s%s__stats__locksCount"
290290
291291
292292 func bs () = "%s%s__stats__activeUsersCount"
293293
294294
295295 func bt (aV) = makeString(["%s%d__userBoostEmissionLastIntV2", aV], a)
296296
297297
298298 func bu (aV,bv) = makeString(["%s%d__userBoostEmissionLastIntV2", aV, bv], a)
299299
300300
301301 func bw (aV) = makeString(["%s%d__maxBoostInt", aV], a)
302302
303303
304304 func bx () = "%s%s__maxBoostInt__total"
305305
306306
307307 func by (aV) = makeString(["%s%d__userBoostAvaliableToClaimTotal", aV], a)
308308
309309
310310 func bz (aV) = makeString(["%s%d__userBoostClaimed", aV], a)
311311
312312
313313 func bA () = "%s%s__gwxCached__total"
314314
315315
316316 func bB () = "%s__gwxCachedTotalCorrective"
317317
318318
319319 func bC (bD,bE,i,bF) = makeString(["%s%s%s%s%d", "vote", bD, bE, toString(i), toString(bF)], a)
320320
321321
322322 func bG (bF) = makeString(["%s%d", "startHeight", toString(bF)], a)
323323
324324
325325 func bH () = makeString(["%s", "currentEpochUi"], a)
326326
327327
328328 func bI (bJ,bF) = makeString(["%s%s%d", "votingResultStaked", bJ, toString(bF)], a)
329329
330330
331331 func bK (bJ,bF) = makeString(["%s%s%d", "votingResultStakedIntegral", bJ, toString(bF)], a)
332332
333333
334334 func bL (bJ,bF) = makeString(["%s%s%d", "votingResultStakedIntegralLastUpdateHeight", bJ, toString(bF)], a)
335335
336336
337337 func bM (bJ,i,bF) = makeString(["%s%s%s%d", "votingResultStakedIntegralLast", bJ, toString(i), toString(bF)], a)
338338
339339
340340 func bN (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegral", bJ, toString(i), toString(bF)], a)
341341
342342
343343 func bO (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegralLastUpdateHeight", bJ, toString(i), toString(bF)], a)
344344
345345
346346 func bP (bJ,i,bF) = makeString(["%s%s%s%d", "voteStakedIntegralLast", bJ, toString(i), toString(bF)], a)
347347
348348
349349 func bQ (bR,bJ) = makeString(["%s%s%s", "staked", bR, bJ], a)
350350
351351
352352 let bS = V()
353353
354354 let aa = X(bS)
355355
356356 let bT = ab(aa)
357357
358358 let bU = ac(aa)
359359
360360 let bV = ad(aa)
361361
362362 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"))
363363
364364 let bX = makeString(["%s", "votingEmissionContract"], a)
365365
366366 let bY = addressFromStringValue(getStringValue(bS, bX))
367367
368368 let bZ = {
369369 let ca = invoke(bT, "getBoostCoeffREADONLY", nil, nil)
370370 if ($isInstanceOf(ca, "Int"))
371371 then ca
372372 else throw(($getType(ca) + " couldn't be cast to Int"))
373373 }
374374
375375 func cb (cc) = {
376376 let cd = getIntegerValue(bY, bH())
377377 let ce = makeString(["%s%s", "totalCachedGwxCorrection__activationEpoch"], a)
378378 let cf = getInteger(this, ce)
379379 let cg = valueOrElse(getInteger(this, bA()), 0)
380380 let ch = if (isDefined(cf))
381381 then (cd >= value(cf))
382382 else false
383383 let ci = if (if (ch)
384384 then cc
385385 else false)
386386 then valueOrElse(getInteger(this, bB()), 0)
387387 else 0
388388 max([0, (cg + ci)])
389389 }
390390
391391
392392 func cj (ck,cl,aW,cm,aY,cn,co,aI) = {
393393 let cp = makeString(["%s%s%s%s__history", ck, cl, toBase58String(aI.transactionId)], a)
394394 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)
395395 StringEntry(cp, cq)
396396 }
397397
398398
399399 func cr (cs,ct,cu,cv) = {
400400 let cw = bq()
401401 let cx = br()
402402 let cy = bs()
403403 let cz = bp()
404404 let cA = k(this, cw)
405405 let cB = k(this, cx)
406406 let cC = k(this, cy)
407407 let cD = k(this, cz)
408408 [IntegerEntry(cw, (cA + ct)), IntegerEntry(cx, (cB + cu)), IntegerEntry(cy, (cC + cv)), IntegerEntry(cz, (cD + cs))]
409409 }
410410
411411
412412 func cE (cF,cG,cH) = {
413413 let cI = 1000
414414 (((cF * cH) + cG) / cI)
415415 }
416416
417417
418418 func cJ (aS,aV,aW,aX,aY,cn,co,bn) = {
419419 let cK = bh(aV)
420420 let cL = bi(aV)
421421 let cM = bj(aV)
422422 let cN = bk(aV)
423423 let cO = bl(aV)
424424 let cP = bm(aV, bn)
425425 let cQ = bo(aV, bn)
426426 let bc = cE(cn, co, height)
427427 [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))]
428428 }
429429
430430
431431 func cR (aI,cS) = if ((size(aI.payments) > 1))
432432 then g("only one payment is allowed")
433433 else if ((size(aI.payments) == 0))
434434 then 0
435435 else {
436436 let cT = aI.payments[0]
437437 if ((value(cT.assetId) != cS))
438438 then g("invalid asset id in payment")
439439 else cT.amount
440440 }
441441
442442
443443 func cU (aS,cV) = {
444444 let cW = "empty"
445445 let cX = bf(aS)
446446 let aV = valueOrElse(getString(cX), cW)
447447 let cn = valueOrElse(getInteger(bk(aV)), 0)
448448 let co = valueOrElse(getInteger(bl(aV)), 0)
449449 let cY = cE(cn, co, cV)
450450 let bc = if ((0 > cY))
451451 then 0
452452 else cY
453453 bc
454454 }
455455
456456
457457 func cZ (aS) = cU(aS, height)
458458
459459
460460 func da () = {
461461 let db = {
462462 let cd = value(getInteger(bY, bH()))
463463 let dc = (cd - 1)
464464 if ((0 > dc))
465465 then g("invalid epoch")
466466 else $Tuple2(cd, dc)
467467 }
468468 let cd = db._1
469469 let dc = db._2
470470 let dd = value(getInteger(bY, bG(cd)))
471471 $Tuple2(dc, dd)
472472 }
473473
474474
475475 func de (bJ) = {
476476 let df = 4
477477 let dg = 5
478478 let dh = {
479479 let ca = invoke(bS, "getPoolConfigByLpAssetIdREADONLY", [bJ], nil)
480480 if ($isInstanceOf(ca, "List[Any]"))
481481 then ca
482482 else throw(($getType(ca) + " couldn't be cast to List[Any]"))
483483 }
484484 let bD = {
485485 let ca = dh[df]
486486 if ($isInstanceOf(ca, "String"))
487487 then ca
488488 else throw(($getType(ca) + " couldn't be cast to String"))
489489 }
490490 let bE = {
491491 let ca = dh[dg]
492492 if ($isInstanceOf(ca, "String"))
493493 then ca
494494 else throw(($getType(ca) + " couldn't be cast to String"))
495495 }
496496 $Tuple2(bD, bE)
497497 }
498498
499499
500500 func di (bJ,bR) = {
501501 let aS = addressFromStringValue(bR)
502502 let dj = da()
503503 let dc = dj._1
504504 let dd = dj._2
505505 let dk = de(bJ)
506506 let bD = dk._1
507507 let bE = dk._2
508508 let dl = bC(bD, bE, aS, dc)
509509 let dm = valueOrElse(getInteger(bY, dl), 0)
510510 dm
511511 }
512512
513513
514514 func dn (bJ,bR) = {
515515 let do = valueOrElse(getInteger(bU, bQ(bR, bJ)), 0)
516516 let dm = di(bJ, bR)
517517 if ((do == 0))
518518 then 0
519519 else dm
520520 }
521521
522522
523523 func dp (bJ) = {
524524 let dq = da()
525525 let dc = dq._1
526526 let dd = dq._2
527527 let dr = valueOrElse(getInteger(bY, bI(bJ, dc)), 0)
528528 let ds = valueOrElse(getInteger(this, bI(bJ, dc)), dr)
529529 ds
530530 }
531531
532532
533533 func dt (bJ) = {
534534 let du = da()
535535 let dc = du._1
536536 let dd = du._2
537537 let ds = dp(bJ)
538538 let dv = valueOrElse(getInteger(this, bK(bJ, dc)), 0)
539539 let dw = valueOrElse(getInteger(this, bL(bJ, dc)), dd)
540540 let dx = (height - dw)
541541 let dy = ((dx * ds) + dv)
542542 dy
543543 }
544544
545545
546546 func dz (bJ,dA) = {
547547 let dB = da()
548548 let dc = dB._1
549549 let dd = dB._2
550550 let ds = dp(bJ)
551551 let dC = (ds + dA)
552552 let dy = dt(bJ)
553553 [IntegerEntry(bI(bJ, dc), dC), IntegerEntry(bL(bJ, dc), height), IntegerEntry(bK(bJ, dc), dy)]
554554 }
555555
556556
557557 func dD (bJ,bR) = {
558558 let dE = da()
559559 let dc = dE._1
560560 let dd = dE._2
561561 let aS = addressFromStringValue(bR)
562562 let dF = dn(bJ, bR)
563563 let dG = valueOrElse(getInteger(this, bN(bJ, aS, dc)), 0)
564564 let dH = valueOrElse(getInteger(this, bO(bJ, aS, dc)), dd)
565565 let dI = (height - dH)
566- let dJ = ((dI * dF) + dG)
567- dJ
566+ let dJ = ((toBigInt(dI) * toBigInt(dF)) + toBigInt(dG))
567+ let dK = 9223372036854775807
568+ toInt(min([toBigInt(dK), dJ]))
568569 }
569570
570571
571-func dK (bJ,bR,dL) = {
572- let dM = da()
573- let dc = dM._1
574- let dd = dM._2
572+func dL (bJ,bR,dM) = {
573+ let dN = da()
574+ let dc = dN._1
575+ let dd = dN._2
575576 let aS = addressFromStringValue(bR)
576- let dN = di(bJ, bR)
577- let dO = if ((dN == 0))
577+ let dO = di(bJ, bR)
578+ let dP = if ((dO == 0))
578579 then nil
579580 else {
580- let dA = if (dL)
581- then dN
582- else -(dN)
583- let dP = dz(bJ, dA)
581+ let dA = if (dM)
582+ then dO
583+ else -(dO)
584+ let dQ = dz(bJ, dA)
584585 let dJ = dD(bJ, bR)
585- let dQ = [IntegerEntry(bO(bJ, aS, dc), height), IntegerEntry(bN(bJ, aS, dc), dJ)]
586- (dP ++ dQ)
586+ let dR = [IntegerEntry(bO(bJ, aS, dc), height), IntegerEntry(bN(bJ, aS, dc), dJ)]
587+ (dQ ++ dR)
587588 }
588- dO
589+ dP
589590 }
590591
591592
592-func dR (bJ,bR) = {
593- let dS = da()
594- let dc = dS._1
595- let dd = dS._2
593+func dS (bJ,bR) = {
594+ let dT = da()
595+ let dc = dT._1
596+ let dd = dT._2
596597 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)
598+ let dU = bP(bJ, aS, dc)
599+ let dV = valueOrElse(getInteger(this, dU), 0)
600+ let dW = bM(bJ, aS, dc)
601+ let dX = valueOrElse(getInteger(this, dW), 0)
601602 let dJ = dD(bJ, bR)
602603 let dy = dt(bJ)
603- let dX = (dJ - dU)
604- let dY = (dy - dW)
605- $Tuple3([IntegerEntry(dT, dJ), IntegerEntry(dV, dy)], dX, dY)
604+ let dY = (dJ - dV)
605+ let dZ = (dy - dX)
606+ $Tuple3([IntegerEntry(dU, dJ), IntegerEntry(dW, dy)], dY, dZ)
606607 }
607608
608609
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
610+func ea () = {
611+ let eb = n(bT, ag())
612+ let ec = getInteger(this, aj())
613+ let ed = getInteger(this, ak())
614+ let ee = n(bT, am())
615+ let cH = if ((height > ee))
616+ then ee
616617 else height
617- let ee = {
618- let r = eb
618+ let ef = {
619+ let r = ec
619620 if ($isInstanceOf(r, "Int"))
620621 then {
621- let ef = r
622- max([(cH - ef), 0])
622+ let eg = r
623+ max([(cH - eg), 0])
623624 }
624625 else if ($isInstanceOf(r, "Unit"))
625626 then 0
626627 else throw("Match error")
627628 }
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)
629+ let eh = ((eb * (bZ - 1)) / bZ)
630+ let ei = valueOrElse(ed, 0)
631+ let ej = ((eh * ef) + ei)
632+ $Tuple2([IntegerEntry(ak(), ej), IntegerEntry(aj(), height)], ej)
632633 }
633634
634635
635-func ej (bJ,bR,ek) = {
636- let el = getString(this, aR(bR))
637- if ((el == unit))
636+func ek (bJ,bR,el) = {
637+ let em = getString(this, aR(bR))
638+ if ((em == unit))
638639 then $Tuple3(0, nil, "userRecord::is::empty")
639640 else {
640- let em = split(value(el), a)
641- let en = em[aL]
642- let eo = "empty"
643- let ep = if ((bJ != eo))
641+ let en = split(value(em), a)
642+ let eo = en[aL]
643+ let ep = "empty"
644+ let eq = if ((bJ != ep))
644645 then {
645- let eq = valueOrErrorMessage(getString(bS, O(bJ)), e(("unsupported lp asset " + bJ)))
646- getIntegerValue(bS, Q(eq))
646+ let er = valueOrErrorMessage(getString(bS, O(bJ)), e(("unsupported lp asset " + bJ)))
647+ getIntegerValue(bS, Q(er))
647648 }
648- else if (ek)
649+ else if (el)
649650 then 0
650651 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))
652+ let es = bu(eo, bJ)
653+ let et = bt(eo)
654+ let eu = valueOrElse(getInteger(this, es), k(this, et))
655+ let ej = ea()._2
656+ let ev = (ej - eu)
657+ if ((0 > ev))
657658 then g("wrong calculations")
658659 else {
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))
660+ let ew = dS(bJ, bR)
661+ let ex = ew._1
662+ let ey = ew._2
663+ let ez = ew._3
664+ let eA = fraction(ev, eq, d)
665+ let eB = if ((ez == 0))
665666 then 0
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)
667+ else fraction(eA, ey, ez)
668+ let eC = ([IntegerEntry(es, ej)] ++ ex)
669+ let eD = makeString([toString(eu), toString(ev), toString(eq), toString(ey), toString(ez)], ":")
670+ $Tuple3(eB, eC, eD)
670671 }
671672 }
672673 }
673674
674675
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])
676+func eE (aI,aY) = {
677+ let eF = av()
678+ let eG = eF[ap]
679+ let ay = fromBase58String(eG)
680+ let az = parseIntValue(eF[aq])
681+ let aA = parseIntValue(eF[ar])
682+ let aB = parseIntValue(eF[as])
682683 if ((size(aI.payments) != 1))
683684 then g("invalid payment - exact one payment must be attached")
684685 else {
685686 let cT = aI.payments[0]
686- let eG = cT.amount
687+ let eH = cT.amount
687688 if ((ay != value(cT.assetId)))
688- then g((("invalid asset is in payment - " + eF) + " is expected"))
689+ then g((("invalid asset is in payment - " + eG) + " is expected"))
689690 else {
690- let eH = be()
691+ let eI = be()
691692 let bR = toString(aI.caller)
692- let eI = isDefined(getString(bf(bR)))
693- let en = if (eI)
693+ let eJ = isDefined(getString(bf(bR)))
694+ let eo = if (eJ)
694695 then value(getString(bf(bR)))
695- else toString(n(this, eH))
696- let aV = parseIntValue(en)
696+ else toString(n(this, eI))
697+ let aV = parseIntValue(eo)
697698 let cm = height
698- let cL = bi(en)
699- let cM = bj(en)
700- let cK = bh(en)
701- if (if ((az > eG))
699+ let cL = bi(eo)
700+ let cM = bj(eo)
701+ let cK = bh(eo)
702+ if (if ((az > eH))
702703 then (aI.caller != bW)
703704 else false)
704705 then g(("amount is less then minLockAmount=" + toString(az)))
705706 else if ((aA > aY))
706707 then g(("passed duration is less then minLockDuration=" + toString(aA)))
707708 else if ((aY > aB))
708709 then g(("passed duration is greater then maxLockDuration=" + toString(aB)))
709- else if (if (eI)
710+ else if (if (eJ)
710711 then ((n(this, cL) + n(this, cM)) >= cm)
711712 else false)
712713 then g("there is an active lock - consider to use increaseLock")
713714 else if ((k(this, cK) > 0))
714715 then g(("there are locked WXs - consider to use increaseLock " + cK))
715716 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]))
717+ let eK = fraction(aY, c, aB)
718+ let eL = fraction(eH, eK, c)
719+ let eM = q(invoke(aw, "calcGwxParamsREADONLY", [eL, cm, aY], nil))
720+ let cn = t(eM[0])
721+ let co = t(eM[1])
722+ let bn = toString(t(eM[2]))
722723 let cg = cb(false)
723- let es = bt(en)
724- let ei = dZ()._2
725- let eM = if (eI)
724+ let et = bt(eo)
725+ let ej = ea()._2
726+ let eN = if (eJ)
726727 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)
728+ else [IntegerEntry(eI, (aV + 1)), StringEntry(bf(bR), eo), StringEntry(bg(eo), bR)]
729+ $Tuple2(((((eN ++ cJ(bR, eo, eH, cm, aY, cn, co, bn)) ++ cr(eH, aY, 1, if (eJ)
729730 then 0
730- else 1)) :+ cj("lock", bR, eG, cm, aY, cn, co, aI)) ++ [IntegerEntry(es, ei), IntegerEntry(bA(), (cg + eK))]), eK)
731+ else 1)) :+ cj("lock", bR, eH, cm, aY, cn, co, aI)) ++ [IntegerEntry(et, ej), IntegerEntry(bA(), (cg + eL))]), eL)
731732 }
732733 }
733734 }
734735 }
735736
736737
737738 @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))
739+func constructor (eO,eP,az,eQ,eR,aw) = {
740+ let eS = aH(aI)
741+ if ((eS == eS))
742+ then ([IntegerEntry(be(), 0), StringEntry(au(), aC(eP, az, eQ, eR, aw)), StringEntry(A(), eO)] ++ cr(0, 0, 0, 0))
742743 else throw("Strict value is not equal to itself.")
743744 }
744745
745746
746747
747748 @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 == ""))
749+func lockRef (aY,eT,eU) = {
750+ let eV = eE(aI, aY)
751+ let eW = eV._1
752+ let eL = eV._2
753+ let eX = toString(aI.caller)
754+ let eY = if (if ((eT == ""))
754755 then true
755- else (eT == base58''))
756+ else (eU == base58''))
756757 then unit
757- else invoke(w, "createPair", [z, eS, eW, eT], nil)
758- if ((eX == eX))
758+ else invoke(w, "createPair", [z, eT, eX, eU], nil)
759+ if ((eY == eY))
759760 then {
760- let eY = invoke(aw, "updateReferralActivity", [toString(aI.caller), eK], nil)
761- if ((eY == eY))
762- then $Tuple2(eV, unit)
761+ let eZ = invoke(aw, "updateReferralActivity", [toString(aI.caller), eL], nil)
762+ if ((eZ == eZ))
763+ then $Tuple2(eW, unit)
763764 else throw("Strict value is not equal to itself.")
764765 }
765766 else throw("Strict value is not equal to itself.")
766767 }
767768
768769
769770
770771 @Callable(aI)
771772 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)
773+ let fa = eE(aI, aY)
774+ let eW = fa._1
775+ let eL = fa._2
776+ let eZ = invoke(aw, "updateReferralActivity", [toString(aI.caller), eL], nil)
777+ if ((eZ == eZ))
778+ then $Tuple2(eW, unit)
778779 else throw("Strict value is not equal to itself.")
779780 }
780781
781782
782783
783784 @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)
785+func increaseLock (fb) = {
786+ let eF = av()
787+ let eG = eF[ap]
788+ let ay = fromBase58String(eG)
789+ let aA = parseIntValue(eF[ar])
790+ let aB = parseIntValue(eF[as])
791+ let eH = cR(aI, ay)
791792 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))
793+ let en = aT(bR)
794+ let eo = en[aL]
795+ let fc = parseIntValue(en[aM])
796+ let cm = parseIntValue(en[aN])
797+ let fd = parseIntValue(en[aO])
798+ let fe = (cm + fd)
799+ let ff = max([(fe - height), 0])
800+ let fg = (fc + eH)
801+ let fh = (ff + fb)
802+ if ((0 > fb))
802803 then g("duration is less then zero")
803- else if ((aA > fg))
804+ else if ((aA > fh))
804805 then g(("lockDurationNew is less then minLockDuration=" + toString(aA)))
805- else if ((fg > aB))
806+ else if ((fh > aB))
806807 then g(("deltaDuration + existedLockDuration is greater then maxLockDuration=" + toString(aB)))
807808 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))
809+ let eK = fraction(fh, c, aB)
810+ let eL = fraction(fg, eK, c)
811+ let eZ = invoke(aw, "updateReferralActivity", [toString(aI.caller), eL], nil)
812+ if ((eZ == eZ))
812813 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)))
814+ let fi = height
815+ let eM = q(invoke(aw, "calcGwxParamsREADONLY", [eL, fi, fh], nil))
816+ let cn = t(eM[0])
817+ let co = t(eM[1])
818+ let bn = toString(t(eM[2]))
819+ let fj = cZ(bR)
820+ let fk = (eL - fj)
821+ if ((0 > fk))
822+ then g(("gwxDiff is less then 0: " + toString(fk)))
822823 else {
823824 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))])
825+ let fl = cb(true)
826+ (((cJ(bR, eo, fg, fi, fh, cn, co, bn) ++ cr(eH, fb, 0, 0)) :+ cj("lock", bR, eH, cm, fh, cn, co, aI)) ++ [IntegerEntry(bA(), (cg + fk))])
826827 }
827828 }
828829 else throw("Strict value is not equal to itself.")
829830 }
830831 }
831832
832833
833834
834835 @Callable(aI)
835836 func claimWxBoost (bJ,bR) = if ((bU != aI.caller))
836837 then g("permissions denied")
837838 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])
839+ let fm = ek(bJ, bR, false)
840+ let fn = fm._1
841+ let eC = fm._2
842+ let eD = fm._3
843+ $Tuple2(eC, [fn])
843844 }
844845
845846
846847
847848 @Callable(aI)
848849 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])
850+ let fo = ek(bJ, bR, true)
851+ let fn = fo._1
852+ let eC = fo._2
853+ let eD = fo._3
854+ $Tuple2(nil, [fn, eD])
854855 }
855856
856857
857858
858859 @Callable(aI)
859860 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))
861+ let en = aT(aS)
862+ let eo = en[aL]
863+ let fc = parseIntValue(en[aM])
864+ let cm = parseIntValue(en[aN])
865+ let fd = parseIntValue(en[aO])
866+ let fe = (cm + fd)
867+ let eF = av()
868+ let ay = fromBase58String(eF[ap])
869+ if ((fe >= height))
870+ then g((("wait " + toString(fe)) + " to unlock"))
871+ else if ((0 >= fc))
871872 then g("nothing to unlock")
872873 else {
873874 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+ (((cJ(aS, eo, 0, cm, fd, 0, 0, toString(bn)) ++ cr(-(fc), 0, 0, -1)) :+ cj("unlock", aS, fc, cm, fd, 0, 0, aI)) :+ ScriptTransfer(addressFromStringValue(aS), fc, ay))
875876 }
876877 }
877878
878879
879880
880881 @Callable(aI)
881882 func gwxUserInfoREADONLY (aS) = {
882883 let bc = cZ(aS)
883884 $Tuple2(nil, [bc])
884885 }
885886
886887
887888
888889 @Callable(aI)
889890 func userMaxDurationREADONLY (bR) = {
890- let eE = av()
891- let aB = parseIntValue(eE[as])
892- let el = getString(this, aR(bR))
893- if ((el == unit))
891+ let eF = av()
892+ let aB = parseIntValue(eF[as])
893+ let em = getString(this, aR(bR))
894+ if ((em == unit))
894895 then $Tuple2(nil, $Tuple2("lock", aB))
895896 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))
897+ let en = split(value(em), a)
898+ let cm = parseIntValue(en[aN])
899+ let fd = parseIntValue(en[aO])
900+ let fe = (cm + fd)
901+ let ff = max([(fe - height), 0])
902+ let fp = (aB - ff)
903+ $Tuple2(nil, $Tuple2("increaseLock", fp))
903904 }
904905 }
905906
906907
907908
908909 @Callable(aI)
909910 func getUserGwxAmountAtHeightREADONLY (aS,cV) = {
910911 let bc = cU(aS, cV)
911912 $Tuple2(nil, bc)
912913 }
913914
914915
915916
916917 @Callable(aI)
917918 func getTotalCachedGwxREADONLY () = $Tuple2(nil, cb(true))
918919
919920
920921
921922 @Callable(aI)
922923 func onBoostEmissionUpdate () = {
923- let eR = if ((aI.caller == bT))
924+ let eS = if ((aI.caller == bT))
924925 then true
925926 else aH(aI)
926- if ((eR == eR))
927- then dZ()
927+ if ((eS == eS))
928+ then ea()
928929 else throw("Strict value is not equal to itself.")
929930 }
930931
931932
932933
933934 @Callable(aI)
934-func onStakedVoteUpdate (bJ,bR,dL) = {
935- let eR = if ((aI.caller == bU))
935+func onStakedVoteUpdate (bJ,bR,dM) = {
936+ let eS = if ((aI.caller == bU))
936937 then true
937938 else aH(aI)
938- if ((eR == eR))
939+ if ((eS == eS))
939940 then {
940- let dO = dK(bJ, bR, dL)
941- $Tuple2(dO, unit)
941+ let dP = dL(bJ, bR, dM)
942+ $Tuple2(dP, unit)
942943 }
943944 else throw("Strict value is not equal to itself.")
944945 }
945946
946947
947948
948949 @Callable(aI)
949950 func getVotingResultStakedREADONLY (bJ) = $Tuple2(nil, dp(bJ))
950951
951952
952953
953954 @Callable(aI)
954955 func getVotingResultStakedIntegralREADONLY (bJ) = $Tuple2(nil, dt(bJ))
955956
956957
957958
958959 @Callable(aI)
959960 func getUserVoteFinalizedREADONLY (bJ,bR) = $Tuple2(nil, di(bJ, bR))
960961
961962
962963
963964 @Callable(aI)
964965 func getUserVoteStakedIntegralREADONLY (bJ,bR) = $Tuple2(nil, dD(bJ, bR))
965966
966967
967-@Verifier(fp)
968-func fq () = {
969- let fr = {
968+@Verifier(fq)
969+func fr () = {
970+ let fs = {
970971 let r = aF()
971972 if ($isInstanceOf(r, "ByteVector"))
972973 then {
973974 let aK = r
974975 aK
975976 }
976977 else if ($isInstanceOf(r, "Unit"))
977- then fp.senderPublicKey
978+ then fq.senderPublicKey
978979 else throw("Match error")
979980 }
980- sigVerify(fp.bodyBytes, fp.proofs[0], fr)
981+ sigVerify(fq.bodyBytes, fq.proofs[0], fs)
981982 }
982983

github/deemru/w8io/169f3d6 
183.37 ms