tx · 8rS4kd91RokvqUUaXRYnF8ZeFo57Ac6FYrbiaRDPZ2zs

3Mx3zmXrMcLFCafMuPtXAzR4ZPVeZYb6qLz:  -0.03000000 Waves

2022.07.29 13:30 [2160994] smart account 3Mx3zmXrMcLFCafMuPtXAzR4ZPVeZYb6qLz > SELF 0.00000000 Waves

{ "type": 13, "id": "8rS4kd91RokvqUUaXRYnF8ZeFo57Ac6FYrbiaRDPZ2zs", "fee": 3000000, "feeAssetId": null, "timestamp": 1659090667224, "version": 1, "sender": "3Mx3zmXrMcLFCafMuPtXAzR4ZPVeZYb6qLz", "senderPublicKey": "D28XoueZWsMfm8Y5pa6C5ZFuYoWgre2Wm8tzJANJgMnq", "proofs": [ "2FxDoec3z7GMHK8DC3aC9CRJuCHQ3UwgK4xm2LdYGmJNFNkq1SiptFHUzkMqRHeJzdHwiVTee89RgDykwyb99njo" ], "script": "base64:BgJFCAISAwoBCBIDCgEIEgMKAQgSABIAEgQKAggBEgMKAQgSBAoCCAgSBgoEARgIGBIECgIYCBIECgIICBIDCgEIEgQKAggIXgAGU0NBTEU4AAgABU1VTFQ4AIDC1y8AB1NDQUxFMTgAEgAGTVVMVDE4CQC2AgEAgICQu7rWrfANAANTRVACAl9fAA5QT09MV0VJR0hUTVVMVAUFTVVMVDgACnplcm9CaWdJbnQJALYCAQAAAAlvbmVCaWdJbnQJALYCAQABAQlhc0FueUxpc3QBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQKdmFsQW55THlzdAUHJG1hdGNoMAUKdmFsQW55THlzdAkAAgECG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEFYXNJbnQBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACA0ludAQGdmFsSW50BQckbWF0Y2gwBQZ2YWxJbnQJAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCGFzU3RyaW5nAQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnZhbFN0cgUHJG1hdGNoMAUGdmFsU3RyCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQxhc0J5dGVWZWN0b3IBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEBnZhbEJpbgUHJG1hdGNoMAUGdmFsQmluCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQCsAgIJAKwCAgIPbWFuZGF0b3J5IHRoaXMuBQNrZXkCDyBpcyBub3QgZGVmaW5lZAEYZ2V0U3RyaW5nQnlBZGRyZXNzT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkArAICCQCsAgIJAKwCAgkArAICAgptYW5kYXRvcnkgCQClCAEFB2FkZHJlc3MCAS4FA2tleQIPIGlzIG5vdCBkZWZpbmVkAQxnZXRJbnRPclplcm8CB2FkZHJlc3MDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFB2FkZHJlc3MFA2tleQAAAQ9nZXRJbnRPckRlZmF1bHQDB2FkZHJlc3MDa2V5CmRlZmF1bHRWYWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUHYWRkcmVzcwUDa2V5BQpkZWZhdWx0VmFsAQxnZXRJbnRPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUHYWRkcmVzcwUDa2V5CQCsAgIJAKwCAgIPbWFuZGF0b3J5IHRoaXMuBQNrZXkCDyBpcyBub3QgZGVmaW5lZAEZZ2V0QmlnSW50RnJvbVN0cmluZ09yWmVybwIHYWRkcmVzcwNrZXkJAQV2YWx1ZQEJAKgDAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQdhZGRyZXNzBQNrZXkCATABHGdldEJpZ0ludEZyb21TdHJpbmdPckRlZmF1bHQDB2FkZHJlc3MDa2V5CmRlZmF1bHRWYWwEByRtYXRjaDAJAJ0IAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkBBXZhbHVlAQkAqAMBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFCmRlZmF1bHRWYWwJAAIBAgtNYXRjaCBlcnJvcgEFdG9YMTgCB29yaWdWYWwNb3JpZ1NjYWxlTXVsdAkAvAIDCQC2AgEFB29yaWdWYWwFBk1VTFQxOAkAtgIBBQ1vcmlnU2NhbGVNdWx0AQdmcm9tWDE4AgN2YWwPcmVzdWx0U2NhbGVNdWx0CQCgAwEJALwCAwUDdmFsCQC2AgEFD3Jlc3VsdFNjYWxlTXVsdAUGTVVMVDE4ARFrZXlGYWN0b3J5QWRkcmVzcwACHCVzJXNfX2NvbmZpZ19fZmFjdG9yeUFkZHJlc3MBGWtleVZvdGluZ0VtaXNzaW9uQ29udHJhY3QAAholc19fdm90aW5nRW1pc3Npb25Db250cmFjdAAYSWR4RmFjdG9yeUNmZ1N0YWtpbmdEYXBwAAEAGUlkeEZhY3RvcnlDZmdCb29zdGluZ0RhcHAAAgAUSWR4RmFjdG9yeUNmZ0lkb0RhcHAAAwAVSWR4RmFjdG9yeUNmZ1RlYW1EYXBwAAQAGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHAABQAVSWR4RmFjdG9yeUNmZ1Jlc3REYXBwAAYAGUlkeEZhY3RvcnlDZmdTbGlwcGFnZURhcHAABwENa2V5RmFjdG9yeUNmZwACESVzX19mYWN0b3J5Q29uZmlnARNrZXlNYW5hZ2VyUHVibGljS2V5AAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAIbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5ARZrZXlTdGFibGVQb29sQWRkb25BZGRyAAIXJXNfX3N0YWJsZVBvb2xBZGRvbkFkZHIBDGtleUFkZG9uQWRkcgACDSVzX19hZGRvbkFkZHIBGmtleUZhY3RvcnlMcDJBc3NldHNNYXBwaW5nAQpscEFzc2V0U3RyCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFCmxwQXNzZXRTdHIJAMwIAgIebWFwcGluZ3NfX2xwQXNzZXQyUG9vbENvbnRyYWN0BQNuaWwFA1NFUAEQa2V5RmFjdG9yeUxwTGlzdAACECVzX19scFRva2Vuc0xpc3QBJmtleUZhY3RvcnlMcEFzc2V0VG9Qb29sQ29udHJhY3RBZGRyZXNzAQpscEFzc2V0U3RyCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFCmxwQXNzZXRTdHIJAMwIAgIebWFwcGluZ3NfX2xwQXNzZXQyUG9vbENvbnRyYWN0BQNuaWwFA1NFUAEUa2V5RmFjdG9yeVBvb2xXZWlnaHQBD2NvbnRyYWN0QWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIKcG9vbFdlaWdodAkAzAgCBQ9jb250cmFjdEFkZHJlc3MFA25pbAUDU0VQAQpyZWFkTHBMaXN0AQdmYWN0b3J5CQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUHZmFjdG9yeQkBEGtleUZhY3RvcnlMcExpc3QAAgAFA1NFUAEUcmVhZEZhY3RvcnlDZmdPckZhaWwBB2ZhY3RvcnkJALUJAgkBGGdldFN0cmluZ0J5QWRkcmVzc09yRmFpbAIFB2ZhY3RvcnkJAQ1rZXlGYWN0b3J5Q2ZnAAUDU0VQARhnZXRCb29zdGluZ0FkZHJlc3NPckZhaWwBCmZhY3RvcnlDZmcJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUKZmFjdG9yeUNmZwUZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcAEYZ2V0RW1pc3Npb25BZGRyZXNzT3JGYWlsAQpmYWN0b3J5Q2ZnCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFCmZhY3RvcnlDZmcFGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHABF2dldFN0YWtpbmdBZGRyZXNzT3JGYWlsAQpmYWN0b3J5Q2ZnCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFCmZhY3RvcnlDZmcFGElkeEZhY3RvcnlDZmdTdGFraW5nRGFwcAEea2V5RW1pc3Npb25SYXRlUGVyQmxvY2tDdXJyZW50AAIbJXMlc19fcmF0ZVBlckJsb2NrX19jdXJyZW50ASFrZXlFbWlzc2lvblJhdGVQZXJCbG9ja01heEN1cnJlbnQAAh4lcyVzX19yYXRlUGVyQmxvY2tNYXhfX2N1cnJlbnQBFWtleUVtaXNzaW9uU3RhcnRCbG9jawACGiVzJXNfX2VtaXNzaW9uX19zdGFydEJsb2NrARtrZXlFbWlzc2lvbkR1cmF0aW9uSW5CbG9ja3MAAhglcyVzX19lbWlzc2lvbl9fZHVyYXRpb24BE2tleUVtaXNzaW9uRW5kQmxvY2sAAhglcyVzX19lbWlzc2lvbl9fZW5kQmxvY2sBD2tleVN0YWtlZEJ5VXNlcgIOdXNlckFkZHJlc3NTdHIMbHBBc3NldElkU3RyCQC5CQIJAMwIAgIOJXMlcyVzX19zdGFrZWQJAMwIAgUOdXNlckFkZHJlc3NTdHIJAMwIAgUMbHBBc3NldElkU3RyBQNuaWwFA1NFUAEOa2V5U3Rha2VkVG90YWwBDGxwQXNzZXRJZFN0cgkArAICAhclcyVzJXNfX3N0YWtlZF9fdG90YWxfXwUMbHBBc3NldElkU3RyARBrZXlDbGFpbWVkQnlVc2VyAgxscEFzc2V0SWRTdHIOdXNlckFkZHJlc3NTdHIJALkJAgkAzAgCAg8lcyVzJXNfX2NsYWltZWQJAMwIAgUOdXNlckFkZHJlc3NTdHIJAMwIAgUMbHBBc3NldElkU3RyBQNuaWwFA1NFUAEZa2V5Q2xhaW1lZEJ5VXNlck1pblJld2FyZAIMbHBBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyCQC5CQIJAMwIAgIYJXMlcyVzX19jbGFpbWVkTWluUmV3YXJkCQDMCAIFDnVzZXJBZGRyZXNzU3RyCQDMCAIFDGxwQXNzZXRJZFN0cgUDbmlsBQNTRVABG2tleUNsYWltZWRCeVVzZXJCb29zdFJld2FyZAIMbHBBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyCQC5CQIJAMwIAgIaJXMlcyVzX19jbGFpbWVkQm9vc3RSZXdhcmQJAMwIAgUOdXNlckFkZHJlc3NTdHIJAMwIAgUMbHBBc3NldElkU3RyBQNuaWwFA1NFUAEPa2V5Q2xhaW1lZFRvdGFsAQxscEFzc2V0SWRTdHIJALkJAgkAzAgCAhYlcyVzJXNfX2NsYWltZWRfX3RvdGFsCQDMCAIFDGxwQXNzZXRJZFN0cgUDbmlsBQNTRVABCnJlYWRTdGFrZWQBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAEVa2V5TGFzdFRvdGFsTHBCYWxhbmNlAQlscEFzc2V0SWQJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgUJbHBBc3NldElkCQDMCAICBXRvdGFsCQDMCAICA2JhbAUDbmlsBQNTRVABFGtleUxhc3RVc2VyTHBCYWxhbmNlAglscEFzc2V0SWQLdXNlckFkZHJlc3MJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgUJbHBBc3NldElkCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAICA2JhbAUDbmlsBQNTRVABGWtleVRvdGFsTHBCYWxhbmNlSW50ZWdyYWwBCWxwQXNzZXRJZAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQlscEFzc2V0SWQJAMwIAgIFdG90YWwJAMwIAgIGYmFsSU5UBQNuaWwFA1NFUAEYa2V5VXNlckxwQmFsYW5jZUludGVncmFsAglscEFzc2V0SWQLdXNlckFkZHJlc3MJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgUJbHBBc3NldElkCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAICBmJhbElOVAUDbmlsBQNTRVABJmtleVRvdGFsTHBCYWxhbmNlSW50ZWdyYWxMYXN0VXBkSGVpZ2h0AQlscEFzc2V0SWQJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgUJbHBBc3NldElkCQDMCAICBXRvdGFsCQDMCAICB2xhc3RVcGQFA25pbAUDU0VQASVrZXlVc2VyTHBCYWxhbmNlSW50ZWdyYWxMYXN0VXBkSGVpZ2h0AglscEFzc2V0SWQLdXNlckFkZHJlc3MJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgUJbHBBc3NldElkCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAICB2xhc3RVcGQFA25pbAUDU0VQARJrZXlXeFBlckxwSW50ZWdyYWwBCWxwQXNzZXRJZAkAuQkCCQDMCAICCCVzJXMlcyVzCQDMCAIFCWxwQXNzZXRJZAkAzAgCAgZjb21tb24JAMwIAgIFbHBJbnQFA25pbAUDU0VQAR9rZXlXeFBlckxwSW50ZWdyYWxMYXN0VXBkSGVpZ2h0AQlscEFzc2V0SWQJALkJAgkAzAgCAgglcyVzJXMlcwkAzAgCBQlscEFzc2V0SWQJAMwIAgIGY29tbW9uCQDMCAICBmxwSW50SAUDbmlsBQNTRVABEGtleVd4VG9DbGFpbVVzZXICCWxwQXNzZXRJZAt1c2VyQWRkcmVzcwkAuQkCCQDMCAICCCVzJXMlcyVzCQDMCAIFCWxwQXNzZXRJZAkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCAgVscEludAUDbmlsBQNTRVABI2tleVd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0AglscEFzc2V0SWQLdXNlckFkZHJlc3MJALkJAgkAzAgCAgglcyVzJXMlcwkAzAgCBQlscEFzc2V0SWQJAMwIAgULdXNlckFkZHJlc3MJAMwIAgIGbHBJbnRIBQNuaWwFA1NFUAEKa2V5V3hQZXJMcAEJbHBBc3NldElkCQC5CQIJAMwIAgICJXMJAMwIAgUJbHBBc3NldElkCQDMCAICB3d4UGVyTHAFA25pbAUDU0VQAQ1rZXlXeFBlckxwWDE4AQlscEFzc2V0SWQJALkJAgkAzAgCAgIlcwkAzAgCBQlscEFzc2V0SWQJAMwIAgIKd3hQZXJMcFgxOAUDbmlsBQNTRVABGmtleVd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0AglscEFzc2V0SWQLdXNlckFkZHJlc3MJALkJAgkAzAgCAgglcyVzJXMlcwkAzAgCBQlscEFzc2V0SWQJAMwIAgULdXNlckFkZHJlc3MJAMwIAgIFdUludEwFA25pbAUDU0VQARlrZXlPcGVyYXRpb25IaXN0b3J5UmVjb3JkAwR0eXBlC3VzZXJBZGRyZXNzBnR4SWQ1OAkAuQkCCQDMCAICESVzJXMlcyVzX19oaXN0b3J5CQDMCAIFBHR5cGUJAMwIAgULdXNlckFkZHJlc3MJAMwIAgUGdHhJZDU4BQNuaWwFA1NFUAETZm9ybWF0SGlzdG9yeVJlY29yZAQLdXNlckFkZHJlc3MJbHBBc3NldElkBHR5cGUGYW1vdW50CQC5CQIJAMwIAgIMJXMlcyVzJWQlZCVkCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAIFCWxwQXNzZXRJZAkAzAgCBQR0eXBlCQDMCAIJAKQDAQUGaGVpZ2h0CQDMCAIJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkApAMBBQZhbW91bnQFA25pbAUDU0VQARVPcGVyYXRpb25IaXN0b3J5RW50cnkFBHR5cGULdXNlckFkZHJlc3MJbHBBc3NldElkBmFtb3VudAR0eElkCQELU3RyaW5nRW50cnkCCQEZa2V5T3BlcmF0aW9uSGlzdG9yeVJlY29yZAMFBHR5cGUFC3VzZXJBZGRyZXNzCQDYBAEFBHR4SWQJARNmb3JtYXRIaXN0b3J5UmVjb3JkBAULdXNlckFkZHJlc3MFCWxwQXNzZXRJZAUEdHlwZQUGYW1vdW50AA5mYWN0b3J5QWRkcmVzcwkBD2dldFN0cmluZ09yRmFpbAIFBHRoaXMJARFrZXlGYWN0b3J5QWRkcmVzcwAAD2ZhY3RvcnlDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQUOZmFjdG9yeUFkZHJlc3MACmZhY3RvcnlDZmcJARRyZWFkRmFjdG9yeUNmZ09yRmFpbAEFD2ZhY3RvcnlDb250cmFjdAAQZW1pc3Npb25Db250cmFjdAkBGGdldEVtaXNzaW9uQWRkcmVzc09yRmFpbAEFCmZhY3RvcnlDZmcAEGJvb3N0aW5nQ29udHJhY3QJARhnZXRCb29zdGluZ0FkZHJlc3NPckZhaWwBBQpmYWN0b3J5Q2ZnAQtrZXlOZXh0VXNlcgEJbHBBc3NldElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCBQlscEFzc2V0SWQJAMwIAgIIbmV4dFVzZXIFA25pbAUDU0VQARBnZXRVc2Vyc0xpc3ROYW1lAQlscEFzc2V0SWQJALkJAgkAzAgCAgV1c2VycwkAzAgCBQlscEFzc2V0SWQFA25pbAUDU0VQAQtrZXlMaXN0SGVhZAEIbGlzdE5hbWUJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgUIbGlzdE5hbWUJAMwIAgIEaGVhZAUDbmlsBQNTRVABC2tleUxpc3RTaXplAQhsaXN0TmFtZQkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQhsaXN0TmFtZQkAzAgCAgRzaXplBQNuaWwFA1NFUAELa2V5TGlzdFByZXYCCGxpc3ROYW1lAmlkCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgUIbGlzdE5hbWUJAMwIAgUCaWQJAMwIAgIEcHJldgUDbmlsBQNTRVABC2tleUxpc3ROZXh0AghsaXN0TmFtZQJpZAkAuQkCCQDMCAICCCVzJXMlcyVzCQDMCAIFCGxpc3ROYW1lCQDMCAIFAmlkCQDMCAICBG5leHQFA25pbAUDU0VQAQxjb250YWluc05vZGUCCGxpc3ROYW1lAmlkBApoZWFkT3JVbml0CQCdCAIFBHRoaXMJAQtrZXlMaXN0SGVhZAEFCGxpc3ROYW1lBApwcmV2T3JVbml0CQCdCAIFBHRoaXMJAQtrZXlMaXN0UHJldgIFCGxpc3ROYW1lBQJpZAQKbmV4dE9yVW5pdAkAnQgCBQR0aGlzCQELa2V5TGlzdE5leHQCBQhsaXN0TmFtZQUCaWQDAwkAAAIFAmlkCQELdmFsdWVPckVsc2UCBQpoZWFkT3JVbml0AgAGCQECIT0CBQpwcmV2T3JVbml0BQR1bml0BgkBAiE9AgUKbmV4dE9yVW5pdAUEdW5pdAERaW5zZXJ0Tm9kZUFjdGlvbnMCCGxpc3ROYW1lAmlkBApoZWFkT3JVbml0CQCdCAIFBHRoaXMJAQtrZXlMaXN0SGVhZAEFCGxpc3ROYW1lBAhsaXN0U2l6ZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQELa2V5TGlzdFNpemUBBQhsaXN0TmFtZQAABAljaGVja05vZGUDCQEBIQEJAQxjb250YWluc05vZGUCBQhsaXN0TmFtZQUCaWQGCQACAQILTm9kZSBleGlzdHMDCQAAAgUJY2hlY2tOb2RlBQljaGVja05vZGUJAM4IAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQELa2V5TGlzdFNpemUBBQhsaXN0TmFtZQkAZAIFCGxpc3RTaXplAAEFA25pbAMJAQIhPQIFCmhlYWRPclVuaXQFBHVuaXQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBC2tleUxpc3ROZXh0AgUIbGlzdE5hbWUFAmlkCQEFdmFsdWUBBQpoZWFkT3JVbml0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlMaXN0UHJldgIFCGxpc3ROYW1lCQEFdmFsdWUBBQpoZWFkT3JVbml0BQJpZAUDbmlsBQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBC2tleUxpc3RIZWFkAQUIbGlzdE5hbWUFAmlkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEWRlbGV0ZU5vZGVBY3Rpb25zAghsaXN0TmFtZQJpZAQKaGVhZE9yVW5pdAkAnQgCBQR0aGlzCQELa2V5TGlzdEhlYWQBBQhsaXN0TmFtZQQIbGlzdFNpemUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBC2tleUxpc3RTaXplAQUIbGlzdE5hbWUAAAQKcHJldk9yVW5pdAkAnQgCBQR0aGlzCQELa2V5TGlzdFByZXYCBQhsaXN0TmFtZQUCaWQECm5leHRPclVuaXQJAJ0IAgUEdGhpcwkBC2tleUxpc3ROZXh0AgUIbGlzdE5hbWUFAmlkCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQtrZXlMaXN0U2l6ZQEFCGxpc3ROYW1lCQBlAgUIbGlzdFNpemUAAQUDbmlsAwMJAQIhPQIFCnByZXZPclVuaXQFBHVuaXQJAQIhPQIFCm5leHRPclVuaXQFBHVuaXQHCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlMaXN0TmV4dAIFCGxpc3ROYW1lCQEFdmFsdWUBBQpwcmV2T3JVbml0CQEFdmFsdWUBBQpuZXh0T3JVbml0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlMaXN0UHJldgIFCGxpc3ROYW1lCQEFdmFsdWUBBQpuZXh0T3JVbml0CQEFdmFsdWUBBQpwcmV2T3JVbml0CQDMCAIJAQtEZWxldGVFbnRyeQEJAQtrZXlMaXN0UHJldgIFCGxpc3ROYW1lBQJpZAkAzAgCCQELRGVsZXRlRW50cnkBCQELa2V5TGlzdE5leHQCBQhsaXN0TmFtZQUCaWQFA25pbAMJAQIhPQIFCm5leHRPclVuaXQFBHVuaXQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBC2tleUxpc3RIZWFkAQUIbGlzdE5hbWUJAQV2YWx1ZQEFCm5leHRPclVuaXQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBC2tleUxpc3ROZXh0AgUIbGlzdE5hbWUFAmlkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQtrZXlMaXN0UHJldgIFCGxpc3ROYW1lCQEFdmFsdWUBBQpuZXh0T3JVbml0BQNuaWwDCQECIT0CBQpwcmV2T3JVbml0BQR1bml0CQDMCAIJAQtEZWxldGVFbnRyeQEJAQtrZXlMaXN0UHJldgIFCGxpc3ROYW1lBQJpZAkAzAgCCQELRGVsZXRlRW50cnkBCQELa2V5TGlzdE5leHQCBQhsaXN0TmFtZQkBBXZhbHVlAQUKcHJldk9yVW5pdAUDbmlsAwkAAAIFAmlkCQELdmFsdWVPckVsc2UCBQpoZWFkT3JVbml0AgAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBC2tleUxpc3RIZWFkAQUIbGlzdE5hbWUFA25pbAkAAgEJAKwCAgkArAICCQCsAgICDmludmFsaWQgbm9kZTogBQhsaXN0TmFtZQIBLgUCaWQBG2NhbGNXeFBlckxwSW50ZWdyYWxVc2VyTGFzdAQMc3Rha2VkQnlVc2VyJnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0T3JaZXJvEnd4UGVyTHBJbnRlZ3JhbE5ldxp3eFBlckxwSW50ZWdyYWxVc2VyTGFzdEtFWQMDCQAAAgUmd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHRPclplcm8FCnplcm9CaWdJbnQJAL8CAgUMc3Rha2VkQnlVc2VyBQp6ZXJvQmlnSW50BwUKemVyb0JpZ0ludAMJAAACBQxzdGFrZWRCeVVzZXIFCnplcm9CaWdJbnQFEnd4UGVyTHBJbnRlZ3JhbE5ldwMDCQC/AgIFJnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0T3JaZXJvBQp6ZXJvQmlnSW50CQC/AgIFDHN0YWtlZEJ5VXNlcgUKemVyb0JpZ0ludAcJAQV2YWx1ZQEJAKgDAQkBD2dldFN0cmluZ09yRmFpbAIFBHRoaXMFGnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0S0VZCQACAQItY2FsY1d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0OiB1bmV4cGVjdGVkIHN0YXRlARRyZWZyZXNoUG9vbElOVEVHUkFMUwMMbHBBc3NldElkU3RyDnBvb2xBZGRyZXNzU3RyDWxwRGVsdGFBbW91bnQEDnN0YWtlZFRvdGFsS0VZCQEOa2V5U3Rha2VkVG90YWwBBQxscEFzc2V0SWRTdHIEC3N0YWtlZFRvdGFsCQC2AgEJAQpyZWFkU3Rha2VkAQUOc3Rha2VkVG90YWxLRVkEEm5vblplcm9TdGFrZWRUb3RhbAMJAAACBQtzdGFrZWRUb3RhbAUKemVyb0JpZ0ludAUJb25lQmlnSW50BQtzdGFrZWRUb3RhbAQKcG9vbFdlaWdodAkBEUBleHRyTmF0aXZlKDEwNTApAgUPZmFjdG9yeUNvbnRyYWN0CQEUa2V5RmFjdG9yeVBvb2xXZWlnaHQBBQ5wb29sQWRkcmVzc1N0cgQSZW1pc3Npb25TdGFydEJsb2NrCQEMZ2V0SW50T3JGYWlsAgUQZW1pc3Npb25Db250cmFjdAkBFWtleUVtaXNzaW9uU3RhcnRCbG9jawAEBU1VTFQzAOgHBBR3eEVtaXNzaW9uUGVyQmxvY2tYMwkAaAIJAQxnZXRJbnRPckZhaWwCBRBlbWlzc2lvbkNvbnRyYWN0CQEea2V5RW1pc3Npb25SYXRlUGVyQmxvY2tDdXJyZW50AAUFTVVMVDMEGHBvb2xXeEVtaXNzaW9uUGVyQmxvY2tYMwkAawMFFHd4RW1pc3Npb25QZXJCbG9ja1gzBQpwb29sV2VpZ2h0CQBoAgUOUE9PTFdFSUdIVE1VTFQAAwQSd3hQZXJMcEludGVncmFsS0VZCQESa2V5V3hQZXJMcEludGVncmFsAQUMbHBBc3NldElkU3RyBB93eFBlckxwSW50ZWdyYWxMYXN0VXBkSGVpZ2h0S0VZCQEfa2V5V3hQZXJMcEludGVncmFsTGFzdFVwZEhlaWdodAEFDGxwQXNzZXRJZFN0cgQKd3hQZXJMcEtFWQkBCmtleVd4UGVyTHABBQxscEFzc2V0SWRTdHIEHHd4UGVyTHBJbnRlZ3JhbExhc3RVcGRIZWlnaHQJAQ9nZXRJbnRPckRlZmF1bHQDBQR0aGlzBR93eFBlckxwSW50ZWdyYWxMYXN0VXBkSGVpZ2h0S0VZBRJlbWlzc2lvblN0YXJ0QmxvY2sED3d4UGVyTHBJbnRlZ3JhbAkBGWdldEJpZ0ludEZyb21TdHJpbmdPclplcm8CBQR0aGlzBRJ3eFBlckxwSW50ZWdyYWxLRVkED3d4UGVyTHBPclplcm9YMwAABAJkaAkAlgMBCQDMCAIJAGUCBQZoZWlnaHQFHHd4UGVyTHBJbnRlZ3JhbExhc3RVcGRIZWlnaHQJAMwIAgAABQNuaWwECXd4UGVyTHBYMwMJAQIhPQIFD3d4UGVyTHBPclplcm9YMwAACQC2AgEFD3d4UGVyTHBPclplcm9YMwkAvAIDCQC2AgEFGHBvb2xXeEVtaXNzaW9uUGVyQmxvY2tYMwkAtgIBBQVNVUxUOAUSbm9uWmVyb1N0YWtlZFRvdGFsBA5zdGFrZWRUb3RhbE5ldwkAtwICBQtzdGFrZWRUb3RhbAkAtgIBBQ1scERlbHRhQW1vdW50BBVub25aZXJvU3Rha2VkVG90YWxOZXcDCQAAAgUOc3Rha2VkVG90YWxOZXcFCnplcm9CaWdJbnQFCW9uZUJpZ0ludAUOc3Rha2VkVG90YWxOZXcEEnd4UGVyTHBJbnRlZ3JhbE5ldwkAtwICBQ93eFBlckxwSW50ZWdyYWwJALkCAgUJd3hQZXJMcFgzCQC2AgEFAmRoBAx3eFBlckxwWDNOZXcJALoCAgkAtgIBBRhwb29sV3hFbWlzc2lvblBlckJsb2NrWDMFFW5vblplcm9TdGFrZWRUb3RhbE5ldwQfd3hQZXJMcEludGVncmFsTGFzdFVwZEhlaWdodE5ldwUGaGVpZ2h0BAVkZWJ1ZwkAuQkCCQDMCAIJAKYDAQUSd3hQZXJMcEludGVncmFsTmV3CQDMCAIJAKQDAQUCZGgJAMwIAgkApgMBBQl3eFBlckxwWDMJAMwIAgkApgMBBQtzdGFrZWRUb3RhbAkAzAgCCQCkAwEFGHBvb2xXeEVtaXNzaW9uUGVyQmxvY2tYMwkAzAgCCQCkAwEFFHd4RW1pc3Npb25QZXJCbG9ja1gzCQDMCAIJAKQDAQUKcG9vbFdlaWdodAUDbmlsAgI6OgkAlQoDBRJ3eFBlckxwSW50ZWdyYWxOZXcJAMwIAgkBC1N0cmluZ0VudHJ5AgUSd3hQZXJMcEludGVncmFsS0VZCQCmAwEFEnd4UGVyTHBJbnRlZ3JhbE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgUfd3hQZXJMcEludGVncmFsTGFzdFVwZEhlaWdodEtFWQUfd3hQZXJMcEludGVncmFsTGFzdFVwZEhlaWdodE5ldwkAzAgCCQELU3RyaW5nRW50cnkCBQp3eFBlckxwS0VZCQCmAwEFDHd4UGVyTHBYM05ldwUDbmlsBQVkZWJ1ZwEQcmVmcmVzaElOVEVHUkFMUwQMbHBBc3NldElkU3RyDnVzZXJBZGRyZXNzU3RyDnBvb2xBZGRyZXNzU3RyDWxwRGVsdGFBbW91bnQEDSR0MDE0MjU1MTQzNzcJARRyZWZyZXNoUG9vbElOVEVHUkFMUwMFDGxwQXNzZXRJZFN0cgUOcG9vbEFkZHJlc3NTdHIFDWxwRGVsdGFBbW91bnQEEnd4UGVyTHBJbnRlZ3JhbE5ldwgFDSR0MDE0MjU1MTQzNzcCXzEEEXBvb2xJbnRlZ3JhbFNUQVRFCAUNJHQwMTQyNTUxNDM3NwJfMgQJcG9vbERFQlVHCAUNJHQwMTQyNTUxNDM3NwJfMwQFTVVMVDMA6AcED3N0YWtlZEJ5VXNlcktFWQkBD2tleVN0YWtlZEJ5VXNlcgIFDnVzZXJBZGRyZXNzU3RyBQxscEFzc2V0SWRTdHIEDHN0YWtlZEJ5VXNlcgkBCnJlYWRTdGFrZWQBBQ9zdGFrZWRCeVVzZXJLRVkEEHd4VG9DbGFpbVVzZXJLRVkJARBrZXlXeFRvQ2xhaW1Vc2VyAgUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgQjd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHRLRVkJASNrZXlXeFBlckxwSW50ZWdyYWxVc2VyTGFzdFVwZEhlaWdodAIFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIEGnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0S0VZCQEaa2V5V3hQZXJMcEludGVncmFsVXNlckxhc3QCBQxscEFzc2V0SWRTdHIFDnVzZXJBZGRyZXNzU3RyBA13eFRvQ2xhaW1Vc2VyCQEZZ2V0QmlnSW50RnJvbVN0cmluZ09yWmVybwIFBHRoaXMFEHd4VG9DbGFpbVVzZXJLRVkEJnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0T3JaZXJvCQEMZ2V0SW50T3JaZXJvAgUEdGhpcwUjd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHRLRVkEF3d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0CQEbY2FsY1d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0BAkAtgIBBQxzdGFrZWRCeVVzZXIJALYCAQUmd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHRPclplcm8FEnd4UGVyTHBJbnRlZ3JhbE5ldwUad3hQZXJMcEludGVncmFsVXNlckxhc3RLRVkEBk1VTFQxMQkAaAIFBU1VTFQ4BQVNVUxUMwQQd3hUb0NsYWltVXNlck5ldwkAmAMBCQDMCAIJALcCAgUNd3hUb0NsYWltVXNlcgkAvAIDCQC4AgIFEnd4UGVyTHBJbnRlZ3JhbE5ldwUXd3hQZXJMcEludGVncmFsVXNlckxhc3QJALYCAQUMc3Rha2VkQnlVc2VyCQC2AgEFBk1VTFQxMQkAzAgCBQp6ZXJvQmlnSW50BQNuaWwEGnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0TmV3BRJ3eFBlckxwSW50ZWdyYWxOZXcEI3d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0TmV3BQZoZWlnaHQEBWRlYnVnCQC5CQIJAMwIAgkApgMBBQ13eFRvQ2xhaW1Vc2VyCQDMCAIJAKYDAQUXd3hQZXJMcEludGVncmFsVXNlckxhc3QJAMwIAgkApAMBBQxzdGFrZWRCeVVzZXIJAMwIAgUJcG9vbERFQlVHCQDMCAIJAKQDAQUGaGVpZ2h0BQNuaWwCAjo6CQCVCgMFEHd4VG9DbGFpbVVzZXJOZXcJAM4IAgURcG9vbEludGVncmFsU1RBVEUJAMwIAgkBC1N0cmluZ0VudHJ5AgUQd3hUb0NsYWltVXNlcktFWQkApgMBBRB3eFRvQ2xhaW1Vc2VyTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBSN3eFBlckxwSW50ZWdyYWxVc2VyTGFzdFVwZEhlaWdodEtFWQUjd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHROZXcJAMwIAgkBC1N0cmluZ0VudHJ5AgUad3hQZXJMcEludGVncmFsVXNlckxhc3RLRVkJAKYDAQUad3hQZXJMcEludGVncmFsVXNlckxhc3ROZXcFA25pbAUFZGVidWcBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQABAckbWF0Y2gwCQCiCAEJARNrZXlNYW5hZ2VyUHVibGljS2V5AAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJANkEAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAQHJG1hdGNoMAkAoggBCQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgAVcGVybWlzc2lvbkRlbmllZEVycm9yCQACAQIRUGVybWlzc2lvbiBkZW5pZWQBCG11c3RUaGlzAQFpAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwYFFXBlcm1pc3Npb25EZW5pZWRFcnJvcgELbXVzdE1hbmFnZXIBAWkEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrBgUVcGVybWlzc2lvbkRlbmllZEVycm9yAwkAAQIFByRtYXRjaDACBFVuaXQDCQAAAggFAWkGY2FsbGVyBQR0aGlzBgUVcGVybWlzc2lvbkRlbmllZEVycm9yCQACAQILTWF0Y2ggZXJyb3INAWkBC2NvbnN0cnVjdG9yARFmYWN0b3J5QWRkcmVzc1N0cgQLY2hlY2tDYWxsZXIJAQttdXN0TWFuYWdlcgEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlGYWN0b3J5QWRkcmVzcwAFEWZhY3RvcnlBZGRyZXNzU3RyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENY29uc3RydWN0b3JWMgEWdm90aW5nRW1pc3Npb25Db250cmFjdAQFY2hla3MJAMwIAgkBC211c3RNYW5hZ2VyAQUBaQkAzAgCAwkBAiE9AgkApggBBRZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0BQR1bml0BgIoaW52YWxpZCB2b3RpbmcgZW1pc3Npb24gY29udHJhY3QgYWRkcmVzcwUDbmlsAwkAAAIFBWNoZWtzBQVjaGVrcwkAzAgCCQELU3RyaW5nRW50cnkCCQEZa2V5Vm90aW5nRW1pc3Npb25Db250cmFjdAAFFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpzZXRNYW5hZ2VyARdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQQLY2hlY2tDYWxsZXIJAQttdXN0TWFuYWdlcgEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBBVjaGVja01hbmFnZXJQdWJsaWNLZXkJANkEAQUXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAgUVY2hlY2tNYW5hZ2VyUHVibGljS2V5BRVjaGVja01hbmFnZXJQdWJsaWNLZXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAUXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jb25maXJtTWFuYWdlcgAEAnBtCQEdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQABAVoYXNQTQMJAQlpc0RlZmluZWQBBQJwbQYJAAIBAhJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAgUFaGFzUE0FBWhhc1BNBAdjaGVja1BNAwkAAAIIBQFpD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCcG0GCQACAQIbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFB2NoZWNrUE0FB2NoZWNrUE0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBE2tleU1hbmFnZXJQdWJsaWNLZXkACQDYBAEJAQV2YWx1ZQEFAnBtCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVzdGFrZQADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAjRpbnZhbGlkIHBheW1lbnQgLSBleGFjdCBvbmUgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQJbHBBc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEDGxwQXNzZXRJZFN0cgkA2AQBBQlscEFzc2V0SWQEBmFtb3VudAgFA3BtdAZhbW91bnQEDnBvb2xBZGRyZXNzU3RyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPZmFjdG9yeUNvbnRyYWN0CQEaa2V5RmFjdG9yeUxwMkFzc2V0c01hcHBpbmcBBQxscEFzc2V0SWRTdHIJAKwCAgIVdW5zdXBwb3J0ZWQgbHAgYXNzZXQgBQxscEFzc2V0SWRTdHIECWNhbGxlclN0cgkApQgBCAUBaQZjYWxsZXIEDnVzZXJBZGRyZXNzU3RyAwkAAAIFCWNhbGxlclN0cgUOcG9vbEFkZHJlc3NTdHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBQljYWxsZXJTdHIED3N0YWtlZEJ5VXNlcktFWQkBD2tleVN0YWtlZEJ5VXNlcgIFDnVzZXJBZGRyZXNzU3RyBQxscEFzc2V0SWRTdHIEDnN0YWtlZFRvdGFsS0VZCQEOa2V5U3Rha2VkVG90YWwBBQxscEFzc2V0SWRTdHIEDHN0YWtlZEJ5VXNlcgkBCnJlYWRTdGFrZWQBBQ9zdGFrZWRCeVVzZXJLRVkEC3N0YWtlZFRvdGFsCQEKcmVhZFN0YWtlZAEFDnN0YWtlZFRvdGFsS0VZBA0kdDAxODgxMzE4OTMwCQEQcmVmcmVzaElOVEVHUkFMUwQFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIFDnBvb2xBZGRyZXNzU3RyBQZhbW91bnQEEHd4VG9DbGFpbVVzZXJOZXcIBQ0kdDAxODgxMzE4OTMwAl8xBA1pbnRlZ3JhbFNUQVRFCAUNJHQwMTg4MTMxODkzMAJfMgQFZGVidWcIBQ0kdDAxODgxMzE4OTMwAl8zBAhsaXN0TmFtZQkBEGdldFVzZXJzTGlzdE5hbWUBBQxscEFzc2V0SWRTdHIEC2xpc3RBY3Rpb25zAwkBDGNvbnRhaW5zTm9kZQIFCGxpc3ROYW1lBQ51c2VyQWRkcmVzc1N0cgUDbmlsCQERaW5zZXJ0Tm9kZUFjdGlvbnMCBQhsaXN0TmFtZQUOdXNlckFkZHJlc3NTdHIJAM4IAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9zdGFrZWRCeVVzZXJLRVkJAGQCBQxzdGFrZWRCeVVzZXIFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUOc3Rha2VkVG90YWxLRVkJAGQCBQtzdGFrZWRUb3RhbAUGYW1vdW50CQDMCAIJARVPcGVyYXRpb25IaXN0b3J5RW50cnkFAgVzdGFrZQUOdXNlckFkZHJlc3NTdHIFDGxwQXNzZXRJZFN0cgUGYW1vdW50CAUBaQ10cmFuc2FjdGlvbklkBQNuaWwFDWludGVncmFsU1RBVEUFC2xpc3RBY3Rpb25zAWkBB3Vuc3Rha2UCDGxwQXNzZXRJZFN0cgZhbW91bnQECWxwQXNzZXRJZAkA2QQBBQxscEFzc2V0SWRTdHIEDnBvb2xBZGRyZXNzU3RyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPZmFjdG9yeUNvbnRyYWN0CQEaa2V5RmFjdG9yeUxwMkFzc2V0c01hcHBpbmcBBQxscEFzc2V0SWRTdHIJAKwCAgIVdW5zdXBwb3J0ZWQgbHAgYXNzZXQgBQxscEFzc2V0SWRTdHIECXBvb2xBZGRvbgkBC3ZhbHVlT3JFbHNlAgkAnQgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQ5wb29sQWRkcmVzc1N0cgkBDGtleUFkZG9uQWRkcgAFDnBvb2xBZGRyZXNzU3RyBAljYWxsZXJTdHIJAKUIAQgFAWkGY2FsbGVyBA51c2VyQWRkcmVzc1N0cgMDCQAAAgUJY2FsbGVyU3RyBQ5wb29sQWRkcmVzc1N0cgYJAAACBQljYWxsZXJTdHIFCXBvb2xBZGRvbgkApQgBCAUBaQxvcmlnaW5DYWxsZXIFCWNhbGxlclN0cgQPc3Rha2VkQnlVc2VyS0VZCQEPa2V5U3Rha2VkQnlVc2VyAgUOdXNlckFkZHJlc3NTdHIFDGxwQXNzZXRJZFN0cgQOc3Rha2VkVG90YWxLRVkJAQ5rZXlTdGFrZWRUb3RhbAEFDGxwQXNzZXRJZFN0cgQMc3Rha2VkQnlVc2VyCQEKcmVhZFN0YWtlZAEFD3N0YWtlZEJ5VXNlcktFWQQLc3Rha2VkVG90YWwJAQpyZWFkU3Rha2VkAQUOc3Rha2VkVG90YWxLRVkEDWludGVncmFsU1RBVEUICQEQcmVmcmVzaElOVEVHUkFMUwQFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIFDnBvb2xBZGRyZXNzU3RyCQEBLQEFBmFtb3VudAJfMgQIbGlzdE5hbWUJARBnZXRVc2Vyc0xpc3ROYW1lAQUMbHBBc3NldElkU3RyBAtsaXN0QWN0aW9ucwMDCQEMY29udGFpbnNOb2RlAgUIbGlzdE5hbWUFDnVzZXJBZGRyZXNzU3RyCQAAAgUGYW1vdW50BQxzdGFrZWRCeVVzZXIHCQERZGVsZXRlTm9kZUFjdGlvbnMCBQhsaXN0TmFtZQUOdXNlckFkZHJlc3NTdHIFA25pbAQNY2xhaW1lZEJ5VXNlcgkBGWdldEJpZ0ludEZyb21TdHJpbmdPclplcm8CBQR0aGlzCQEQa2V5Q2xhaW1lZEJ5VXNlcgIFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIEC3Bvb2xBZGRyZXNzCQEYZ2V0U3RyaW5nQnlBZGRyZXNzT3JGYWlsAgUPZmFjdG9yeUNvbnRyYWN0CQEma2V5RmFjdG9yeUxwQXNzZXRUb1Bvb2xDb250cmFjdEFkZHJlc3MBBQxscEFzc2V0SWRTdHIEEHd4VG9DbGFpbVVzZXJOZXcICQEQcmVmcmVzaElOVEVHUkFMUwQFDGxwQXNzZXRJZFN0cgUOdXNlckFkZHJlc3NTdHIFC3Bvb2xBZGRyZXNzAAACXzEEEGF2YWlsYWJsZVRvQ2xhaW0JALgCAgUQd3hUb0NsYWltVXNlck5ldwUNY2xhaW1lZEJ5VXNlcgQBcgMJAL8CAgUQYXZhaWxhYmxlVG9DbGFpbQUKemVyb0JpZ0ludAkA/AcEBQR0aGlzAg9jbGFpbVd4SU5URVJOQUwJAMwIAgUMbHBBc3NldElkU3RyCQDMCAIFDnVzZXJBZGRyZXNzU3RyBQNuaWwFA25pbAUEdW5pdAMJAAACBQFyBQFyAwkAZgIFBmFtb3VudAUMc3Rha2VkQnlVc2VyCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg5wYXNzZWQgYW1vdW50PQkApAMBBQZhbW91bnQCGCBpcyBsZXNzIHRoZW4gYXZhaWxhYmxlPQkApAMBBQxzdGFrZWRCeVVzZXICDC4gbHBBc3NldElkPQUMbHBBc3NldElkU3RyAhIuIHN0YWtlZEJ5VXNlcktFWT0FD3N0YWtlZEJ5VXNlcktFWQkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFD3N0YWtlZEJ5VXNlcktFWQkAZQIFDHN0YWtlZEJ5VXNlcgUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5zdGFrZWRUb3RhbEtFWQkAZQIFC3N0YWtlZFRvdGFsBQZhbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZhbW91bnQFCWxwQXNzZXRJZAkAzAgCCQEVT3BlcmF0aW9uSGlzdG9yeUVudHJ5BQIHdW5zdGFrZQUOdXNlckFkZHJlc3NTdHIFDGxwQXNzZXRJZFN0cgUGYW1vdW50CAUBaQ10cmFuc2FjdGlvbklkBQNuaWwFDWludGVncmFsU1RBVEUFC2xpc3RBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB2NsYWltV3gBDGxwQXNzZXRJZFN0cgQOdXNlckFkZHJlc3NTdHIJAKUIAQgFAWkGY2FsbGVyBAZyZXN1bHQJAPwHBAUEdGhpcwIPY2xhaW1XeElOVEVSTkFMCQDMCAIFDGxwQXNzZXRJZFN0cgkAzAgCBQ51c2VyQWRkcmVzc1N0cgUDbmlsBQNuaWwJAJQKAgUDbmlsBQZyZXN1bHQBaQEPY2xhaW1XeElOVEVSTkFMAgxscEFzc2V0SWRTdHIOdXNlckFkZHJlc3NTdHIEC2NoZWNrQ2FsbGVyCQEIbXVzdFRoaXMBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQLdXNlckFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQ51c2VyQWRkcmVzc1N0cgIlY2xhaW1XeElOVEVSTkFMOiBpbnZhbGlkIHVzZXIgYWRkcmVzcwQOcG9vbEFkZHJlc3NTdHIJARhnZXRTdHJpbmdCeUFkZHJlc3NPckZhaWwCBQ9mYWN0b3J5Q29udHJhY3QJASZrZXlGYWN0b3J5THBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwEFDGxwQXNzZXRJZFN0cgQQY2xhaW1lZEJ5VXNlcktFWQkBEGtleUNsYWltZWRCeVVzZXICBQxscEFzc2V0SWRTdHIFDnVzZXJBZGRyZXNzU3RyBA9jbGFpbWVkVG90YWxLRVkJAQ9rZXlDbGFpbWVkVG90YWwBBQxscEFzc2V0SWRTdHIEGWNsYWltZWRCeVVzZXJNaW5SZXdhcmRLRVkJARlrZXlDbGFpbWVkQnlVc2VyTWluUmV3YXJkAgUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgQbY2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkS0VZCQEba2V5Q2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkAgUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgQNY2xhaW1lZEJ5VXNlcgkBGWdldEJpZ0ludEZyb21TdHJpbmdPclplcm8CBQR0aGlzBRBjbGFpbWVkQnlVc2VyS0VZBBZjbGFpbWVkQnlVc2VyTWluUmV3YXJkCQEZZ2V0QmlnSW50RnJvbVN0cmluZ09yWmVybwIFBHRoaXMFGWNsYWltZWRCeVVzZXJNaW5SZXdhcmRLRVkEGGNsYWltZWRCeVVzZXJCb29zdFJld2FyZAkBGWdldEJpZ0ludEZyb21TdHJpbmdPclplcm8CBQR0aGlzBRtjbGFpbWVkQnlVc2VyQm9vc3RSZXdhcmRLRVkEDGNsYWltZWRUb3RhbAkBGWdldEJpZ0ludEZyb21TdHJpbmdPclplcm8CBQR0aGlzBQ9jbGFpbWVkVG90YWxLRVkEDSR0MDIyNzY1MjI4NzcJARByZWZyZXNoSU5URUdSQUxTBAUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgUOcG9vbEFkZHJlc3NTdHIAAAQQd3hUb0NsYWltVXNlck5ldwgFDSR0MDIyNzY1MjI4NzcCXzEEDWludGVncmFsU1RBVEUIBQ0kdDAyMjc2NTIyODc3Al8yBAVkZWJ1ZwgFDSR0MDIyNzY1MjI4NzcCXzMEEGF2YWlsYWJsZVRvQ2xhaW0JAJgDAQkAzAgCCQC4AgIFEHd4VG9DbGFpbVVzZXJOZXcFDWNsYWltZWRCeVVzZXIJAMwIAgUKemVyb0JpZ0ludAUDbmlsAwkAwAICBQp6ZXJvQmlnSW50BRBhdmFpbGFibGVUb0NsYWltCQACAQIQbm90aGluZyB0byBjbGFpbQQSd3hBbW91bnRCb29zdFRvdGFsCQCWAwEJAMwIAgkBBWFzSW50AQkAkQMCCQEJYXNBbnlMaXN0AQkA/AcEBRBib29zdGluZ0NvbnRyYWN0AgxjbGFpbVd4Qm9vc3QJAMwIAgUMbHBBc3NldElkU3RyCQDMCAIFDnVzZXJBZGRyZXNzU3RyBQNuaWwFA25pbAAACQDMCAIAAAUDbmlsBA1taW5SZXdhcmRQYXJ0BRBhdmFpbGFibGVUb0NsYWltBA9ib29zdFJld2FyZFBhcnQJAJkDAQkAzAgCCQC5AgIFDW1pblJld2FyZFBhcnQJALYCAQACCQDMCAIJALYCAQUSd3hBbW91bnRCb29zdFRvdGFsBQNuaWwECXd4QXNzZXRJZAkBDGFzQnl0ZVZlY3RvcgEJAJEDAgkBCWFzQW55TGlzdAEJAPwHBAUQZW1pc3Npb25Db250cmFjdAIEZW1pdAkAzAgCCQCgAwEFDW1pblJld2FyZFBhcnQFA25pbAUDbmlsAAAECWVtaXRCb29zdAkBCWFzQW55TGlzdAEJAPwHBAUQZW1pc3Npb25Db250cmFjdAIEZW1pdAkAzAgCCQCgAwEFD2Jvb3N0UmV3YXJkUGFydAUDbmlsBQNuaWwDCQAAAgUJZW1pdEJvb3N0BQllbWl0Qm9vc3QEEmNsYWltZWRCeVVzZXJWYWx1ZQkAtwICBQ1jbGFpbWVkQnlVc2VyBRBhdmFpbGFibGVUb0NsYWltBB5jbGFpbWVkQnlVc2VyTWluUmV3YXJkUGx1c1BhcnQJALcCAgUWY2xhaW1lZEJ5VXNlck1pblJld2FyZAUNbWluUmV3YXJkUGFydAQrY2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkUGx1c0Jvb3N0UmV3YXJkUGFydAkAtwICBRZjbGFpbWVkQnlVc2VyTWluUmV3YXJkBQ1taW5SZXdhcmRQYXJ0BCBjbGFpbWVkVG90YWxQbHVzQXZhaWxhYmxlVG9DbGFpbQkAtwICBRZjbGFpbWVkQnlVc2VyTWluUmV3YXJkBQ1taW5SZXdhcmRQYXJ0CQDMCAIJAQtTdHJpbmdFbnRyeQIFEGNsYWltZWRCeVVzZXJLRVkJAKYDAQUSY2xhaW1lZEJ5VXNlclZhbHVlCQDMCAIJAQtTdHJpbmdFbnRyeQIFGWNsYWltZWRCeVVzZXJNaW5SZXdhcmRLRVkJAKYDAQUeY2xhaW1lZEJ5VXNlck1pblJld2FyZFBsdXNQYXJ0CQDMCAIJAQtTdHJpbmdFbnRyeQIFG2NsYWltZWRCeVVzZXJCb29zdFJld2FyZEtFWQkApgMBBStjbGFpbWVkQnlVc2VyQm9vc3RSZXdhcmRQbHVzQm9vc3RSZXdhcmRQYXJ0CQDMCAIJAQtTdHJpbmdFbnRyeQIFD2NsYWltZWRUb3RhbEtFWQkApgMBBSBjbGFpbWVkVG90YWxQbHVzQXZhaWxhYmxlVG9DbGFpbQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQt1c2VyQWRkcmVzcwkAoAMBBQ1taW5SZXdhcmRQYXJ0BQl3eEFzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwULdXNlckFkZHJlc3MJAKADAQUPYm9vc3RSZXdhcmRQYXJ0BQl3eEFzc2V0SWQJAMwIAgkBFU9wZXJhdGlvbkhpc3RvcnlFbnRyeQUCBWNsYWltBQ51c2VyQWRkcmVzc1N0cgUMbHBBc3NldElkU3RyCQCgAwEFEGF2YWlsYWJsZVRvQ2xhaW0IBQFpDXRyYW5zYWN0aW9uSWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARtjbGFpbVd4QnVsa0ludGVybmFsUkVBRE9OTFkEC2N1cnJlbnRJdGVyCmxwQXNzZXRJZHMOdXNlckFkZHJlc3NTdHIGcmVzQWNjAwkAAAIFC2N1cnJlbnRJdGVyCQCQAwEFCmxwQXNzZXRJZHMJAJQKAgUDbmlsBQZyZXNBY2MECWxwQXNzZXRJZAkAkQMCBQpscEFzc2V0SWRzBQtjdXJyZW50SXRlcgQEaW5mbwkAtQkCCgABQAkA/AcEBQR0aGlzAg9jbGFpbVd4UkVBRE9OTFkJAMwIAgUJbHBBc3NldElkCQDMCAIFDnVzZXJBZGRyZXNzU3RyBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBCQD8BwQFBHRoaXMCD2NsYWltV3hSRUFET05MWQkAzAgCBQlscEFzc2V0SWQJAMwIAgUOdXNlckFkZHJlc3NTdHIFA25pbAUDbmlsAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcFA1NFUAQJdW5jbGFpbWVkCQCRAwIFBGluZm8AAwQHY2xhaW1lZAkAkQMCBQRpbmZvAAQEA3JlcwkAzQgCBQZyZXNBY2MJALkJAgkAzAgCAgQlZCVkCQDMCAIFCXVuY2xhaW1lZAkAzAgCBQdjbGFpbWVkBQNuaWwFA1NFUAQDaW52CgABQAkA/AcEBQR0aGlzAhtjbGFpbVd4QnVsa0ludGVybmFsUkVBRE9OTFkJAMwIAgkAZAIFC2N1cnJlbnRJdGVyAAEJAMwIAgUKbHBBc3NldElkcwkAzAgCBQ51c2VyQWRkcmVzc1N0cgkAzAgCBQNyZXMFA25pbAUDbmlsAwkAAQIFAUACCUxpc3RbQW55XQUBQAkAAgEJAKwCAgkAAwEJAPwHBAUEdGhpcwIbY2xhaW1XeEJ1bGtJbnRlcm5hbFJFQURPTkxZCQDMCAIJAGQCBQtjdXJyZW50SXRlcgABCQDMCAIFCmxwQXNzZXRJZHMJAMwIAgUOdXNlckFkZHJlc3NTdHIJAMwIAgUDcmVzBQNuaWwFA25pbAIeIGNvdWxkbid0IGJlIGNhc3QgdG8gTGlzdFtBbnldAwkAAAIFA2ludgUDaW52CQCUCgIFA25pbAUDaW52CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBE2NsYWltV3hCdWxrUkVBRE9OTFkCCmxwQXNzZXRJZHMOdXNlckFkZHJlc3NTdHIEA3JlcwkA/AcEBQR0aGlzAhtjbGFpbVd4QnVsa0ludGVybmFsUkVBRE9OTFkJAMwIAgAACQDMCAIFCmxwQXNzZXRJZHMJAMwIAgUOdXNlckFkZHJlc3NTdHIJAMwIAgUDbmlsBQNuaWwFA25pbAkAlAoCBQNuaWwFA3JlcwFpAQ9jbGFpbVd4UkVBRE9OTFkCDGxwQXNzZXRJZFN0cg51c2VyQWRkcmVzc1N0cgQPc3Rha2VkQnlVc2VyS0VZCQEPa2V5U3Rha2VkQnlVc2VyAgUOdXNlckFkZHJlc3NTdHIFDGxwQXNzZXRJZFN0cgQOc3Rha2VkVG90YWxLRVkJAQ5rZXlTdGFrZWRUb3RhbAEFDGxwQXNzZXRJZFN0cgQQY2xhaW1lZEJ5VXNlcktFWQkBEGtleUNsYWltZWRCeVVzZXICBQxscEFzc2V0SWRTdHIFDnVzZXJBZGRyZXNzU3RyBAxzdGFrZWRCeVVzZXIJAQpyZWFkU3Rha2VkAQUPc3Rha2VkQnlVc2VyS0VZBAtzdGFrZWRUb3RhbAkBCnJlYWRTdGFrZWQBBQ5zdGFrZWRUb3RhbEtFWQQNY2xhaW1lZEJ5VXNlcgkBGWdldEJpZ0ludEZyb21TdHJpbmdPclplcm8CBQR0aGlzBRBjbGFpbWVkQnlVc2VyS0VZBA5wb29sQWRkcmVzc1N0cgkBGGdldFN0cmluZ0J5QWRkcmVzc09yRmFpbAIFD2ZhY3RvcnlDb250cmFjdAkBJmtleUZhY3RvcnlMcEFzc2V0VG9Qb29sQ29udHJhY3RBZGRyZXNzAQUMbHBBc3NldElkU3RyBApwb29sV2VpZ2h0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9mYWN0b3J5Q29udHJhY3QJARRrZXlGYWN0b3J5UG9vbFdlaWdodAEFDnBvb2xBZGRyZXNzU3RyBBJ3eEVtaXNzaW9uUGVyQmxvY2sJAQxnZXRJbnRPckZhaWwCBRBlbWlzc2lvbkNvbnRyYWN0CQEea2V5RW1pc3Npb25SYXRlUGVyQmxvY2tDdXJyZW50AAQSZW1pc3Npb25TdGFydEJsb2NrCQEMZ2V0SW50T3JGYWlsAgUQZW1pc3Npb25Db250cmFjdAkBFWtleUVtaXNzaW9uU3RhcnRCbG9jawAEDHBhc3NlZEJsb2NrcwMJAGYCBRJlbWlzc2lvblN0YXJ0QmxvY2sFBmhlaWdodAAACQBlAgUGaGVpZ2h0BRJlbWlzc2lvblN0YXJ0QmxvY2sEDnBvb2xXeEVtaXNzaW9uCQBrAwkAaAIFEnd4RW1pc3Npb25QZXJCbG9jawUMcGFzc2VkQmxvY2tzBQpwb29sV2VpZ2h0BQ5QT09MV0VJR0hUTVVMVAQMdXNlcld4UmV3YXJkCQBrAwUOcG9vbFd4RW1pc3Npb24FDHN0YWtlZEJ5VXNlcgULc3Rha2VkVG90YWwEDSR0MDI2MzM1MjY0NDcJARByZWZyZXNoSU5URUdSQUxTBAUMbHBBc3NldElkU3RyBQ51c2VyQWRkcmVzc1N0cgUOcG9vbEFkZHJlc3NTdHIAAAQQd3hUb0NsYWltVXNlck5ldwgFDSR0MDI2MzM1MjY0NDcCXzEEDWludGVncmFsU1RBVEUIBQ0kdDAyNjMzNTI2NDQ3Al8yBAVkZWJ1ZwgFDSR0MDI2MzM1MjY0NDcCXzMEEGF2YWlsYWJsZVRvQ2xhaW0JAJgDAQkAzAgCCQC4AgIFEHd4VG9DbGFpbVVzZXJOZXcFDWNsYWltZWRCeVVzZXIJAMwIAgUKemVyb0JpZ0ludAUDbmlsBA5ib29zdEludlJlc3VsdAkBCWFzQW55TGlzdAEJAPwHBAUQYm9vc3RpbmdDb250cmFjdAIUY2xhaW1XeEJvb3N0UkVBRE9OTFkJAMwIAgUMbHBBc3NldElkU3RyCQDMCAIFDnVzZXJBZGRyZXNzU3RyBQNuaWwFA25pbAQSd3hBbW91bnRCb29zdFRvdGFsCQCWAwEJAMwIAgkBBWFzSW50AQkAkQMCBQ5ib29zdEludlJlc3VsdAAACQDMCAIAAAUDbmlsBApib29zdERlYnVnCQEIYXNTdHJpbmcBCQCRAwIFDmJvb3N0SW52UmVzdWx0AAEEDW1pblJld2FyZFBhcnQFEGF2YWlsYWJsZVRvQ2xhaW0ED2Jvb3N0UmV3YXJkUGFydAkAmQMBCQDMCAIJALkCAgUNbWluUmV3YXJkUGFydAkAtgIBAAIJAMwIAgkAtgIBBRJ3eEFtb3VudEJvb3N0VG90YWwFA25pbAQLdG90YWxSZXdhcmQJALcCAgUNbWluUmV3YXJkUGFydAUPYm9vc3RSZXdhcmRQYXJ0CQCUCgIFA25pbAkAuQkCCQDMCAICDiVzJXMlZCVkJWQlZCVzCQDMCAIFDGxwQXNzZXRJZFN0cgkAzAgCBQ51c2VyQWRkcmVzc1N0cgkAzAgCCQCmAwEFC3RvdGFsUmV3YXJkCQDMCAIJAKYDAQUNY2xhaW1lZEJ5VXNlcgkAzAgCCQCmAwEFDW1pblJld2FyZFBhcnQJAMwIAgkApgMBBQ9ib29zdFJld2FyZFBhcnQJAMwIAgIEc29vbgUDbmlsBQNTRVABaQESdXNlcnNMaXN0VHJhdmVyc2FsAQlscEFzc2V0SWQEC2NoZWNrQ2FsbGVyAwkAAAIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEZa2V5Vm90aW5nRW1pc3Npb25Db250cmFjdAACAAYJAQttdXN0TWFuYWdlcgEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBAhsaXN0TmFtZQkBEGdldFVzZXJzTGlzdE5hbWUBBQlscEFzc2V0SWQECnVzZXJPclVuaXQJAKIIAQkBC2tleU5leHRVc2VyAQUJbHBBc3NldElkBApoZWFkT3JVbml0CQCiCAEJAQtrZXlMaXN0SGVhZAEFCGxpc3ROYW1lBAckbWF0Y2gwBQp1c2VyT3JVbml0AwkAAQIFByRtYXRjaDACBFVuaXQEByRtYXRjaDEFCmhlYWRPclVuaXQDCQABAgUHJG1hdGNoMQIEVW5pdAkAlAoCBQNuaWwHAwkAAQIFByRtYXRjaDECBlN0cmluZwQEaGVhZAUHJG1hdGNoMQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlOZXh0VXNlcgEFCWxwQXNzZXRJZAUEaGVhZAUDbmlsBgkAAgECC01hdGNoIGVycm9yAwkAAQIFByRtYXRjaDACBlN0cmluZwQLdXNlckFkZHJlc3MFByRtYXRjaDAEDWNsYWltZWRCeVVzZXIJARlnZXRCaWdJbnRGcm9tU3RyaW5nT3JaZXJvAgUEdGhpcwkBEGtleUNsYWltZWRCeVVzZXICBQlscEFzc2V0SWQFC3VzZXJBZGRyZXNzBAtwb29sQWRkcmVzcwkBGGdldFN0cmluZ0J5QWRkcmVzc09yRmFpbAIFD2ZhY3RvcnlDb250cmFjdAkBJmtleUZhY3RvcnlMcEFzc2V0VG9Qb29sQ29udHJhY3RBZGRyZXNzAQUJbHBBc3NldElkBBB3eFRvQ2xhaW1Vc2VyTmV3CAkBEHJlZnJlc2hJTlRFR1JBTFMEBQlscEFzc2V0SWQFC3VzZXJBZGRyZXNzBQtwb29sQWRkcmVzcwAAAl8xBBBhdmFpbGFibGVUb0NsYWltCQC4AgIFEHd4VG9DbGFpbVVzZXJOZXcFDWNsYWltZWRCeVVzZXIEAXIDCQC/AgIFEGF2YWlsYWJsZVRvQ2xhaW0FCnplcm9CaWdJbnQJAPwHBAUEdGhpcwIPY2xhaW1XeElOVEVSTkFMCQDMCAIFCWxwQXNzZXRJZAkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsBQNuaWwFBHVuaXQDCQAAAgUBcgUBcgQObmV4dFVzZXJPclVuaXQJAKIIAQkBC2tleUxpc3ROZXh0AgUIbGlzdE5hbWUFC3VzZXJBZGRyZXNzBAckbWF0Y2gxBQ5uZXh0VXNlck9yVW5pdAMJAAECBQckbWF0Y2gxAgRVbml0CQCUCgIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBC2tleU5leHRVc2VyAQUJbHBBc3NldElkBQNuaWwHAwkAAQIFByRtYXRjaDECBlN0cmluZwQIbmV4dFVzZXIFByRtYXRjaDEJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5TmV4dFVzZXIBBQlscEFzc2V0SWQFCG5leHRVc2VyBQNuaWwGCQACAQILTWF0Y2ggZXJyb3IJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAgtNYXRjaCBlcnJvcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5vbk1vZGlmeVdlaWdodAIMbHBBc3NldElkU3RyDnBvb2xBZGRyZXNzU3RyAwkBAiE9AggFAWkGY2FsbGVyBQ9mYWN0b3J5Q29udHJhY3QJAAIBAhJwZXJtaXNzaW9ucyBkZW5pZWQEDSR0MDI4NzQ3Mjg4NTcJARRyZWZyZXNoUG9vbElOVEVHUkFMUwMFDGxwQXNzZXRJZFN0cgUOcG9vbEFkZHJlc3NTdHIAAAQSd3hQZXJMcEludGVncmFsTmV3CAUNJHQwMjg3NDcyODg1NwJfMQQRcG9vbEludGVncmFsU1RBVEUIBQ0kdDAyODc0NzI4ODU3Al8yBAlwb29sREVCVUcIBQ0kdDAyODc0NzI4ODU3Al8zBRFwb29sSW50ZWdyYWxTVEFURQECdHgBBnZlcmlmeQAED3RhcmdldFB1YmxpY0tleQQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwBQJwawMJAAECBQckbWF0Y2gwAgRVbml0CAUCdHgPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFD3RhcmdldFB1YmxpY0tleeR8P3g=", "chainId": 84, "height": 2160994, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 861fPL9byvMuJb2nMZMC2Ty7re92WrN1HXvHjN1P9gQ3 Next: 2StVcQENUafBkooUXjXDznzU1M1dWW4p74fREVKUZ5sW Diff:
OldNewDifferences
130130 func U () = "%s__stablePoolAddonAddr"
131131
132132
133-func V (W) = makeString(["%s%s%s", W, "mappings__lpAsset2PoolContract"], e)
133+func V () = "%s__addonAddr"
134134
135135
136-func X () = "%s__lpTokensList"
136+func W (X) = makeString(["%s%s%s", X, "mappings__lpAsset2PoolContract"], e)
137137
138138
139-func Y (W) = makeString(["%s%s%s", W, "mappings__lpAsset2PoolContract"], e)
139+func Y () = "%s__lpTokensList"
140140
141141
142-func Z (aa) = makeString(["%s%s", "poolWeight", aa], e)
142+func Z (X) = makeString(["%s%s%s", X, "mappings__lpAsset2PoolContract"], e)
143143
144144
145-func ab (ac) = split(valueOrElse(getString(ac, X()), ""), e)
145+func aa (ab) = makeString(["%s%s", "poolWeight", ab], e)
146146
147147
148-func ad (ac) = split(v(ac, R()), e)
148+func ac (ad) = split(valueOrElse(getString(ad, Y()), ""), e)
149149
150150
151-func ae (af) = addressFromStringValue(af[L])
151+func ae (ad) = split(v(ad, R()), e)
152152
153153
154-func ag (af) = addressFromStringValue(af[O])
154+func af (ag) = addressFromStringValue(ag[L])
155155
156156
157-func ah (af) = addressFromStringValue(af[K])
157+func ah (ag) = addressFromStringValue(ag[O])
158158
159159
160-func ai () = "%s%s__ratePerBlock__current"
160+func ai (ag) = addressFromStringValue(ag[K])
161161
162162
163-func aj () = "%s%s__ratePerBlockMax__current"
163+func aj () = "%s%s__ratePerBlock__current"
164164
165165
166-func ak () = "%s%s__emission__startBlock"
166+func ak () = "%s%s__ratePerBlockMax__current"
167167
168168
169-func al () = "%s%s__emission__duration"
169+func al () = "%s%s__emission__startBlock"
170170
171171
172-func am () = "%s%s__emission__endBlock"
172+func am () = "%s%s__emission__duration"
173173
174174
175-func an (ao,ap) = makeString(["%s%s%s__staked", ao, ap], e)
175+func an () = "%s%s__emission__endBlock"
176176
177177
178-func aq (ap) = ("%s%s%s__staked__total__" + ap)
178+func ao (ap,aq) = makeString(["%s%s%s__staked", ap, aq], e)
179179
180180
181-func ar (ap,ao) = makeString(["%s%s%s__claimed", ao, ap], e)
181+func ar (aq) = ("%s%s%s__staked__total__" + aq)
182182
183183
184-func as (ap,ao) = makeString(["%s%s%s__claimedMinReward", ao, ap], e)
184+func as (aq,ap) = makeString(["%s%s%s__claimed", ap, aq], e)
185185
186186
187-func at (ap,ao) = makeString(["%s%s%s__claimedBoostReward", ao, ap], e)
187+func at (aq,ap) = makeString(["%s%s%s__claimedMinReward", ap, aq], e)
188188
189189
190-func au (ap) = makeString(["%s%s%s__claimed__total", ap], e)
190+func au (aq,ap) = makeString(["%s%s%s__claimedBoostReward", ap, aq], e)
191191
192192
193-func av (u) = valueOrElse(getInteger(this, u), 0)
193+func av (aq) = makeString(["%s%s%s__claimed__total", aq], e)
194194
195195
196-func aw (ax) = makeString(["%s%s%s", ax, "total", "bal"], e)
196+func aw (u) = valueOrElse(getInteger(this, u), 0)
197197
198198
199-func ay (ax,az) = makeString(["%s%s%s", ax, az, "bal"], e)
199+func ax (ay) = makeString(["%s%s%s", ay, "total", "bal"], e)
200200
201201
202-func aA (ax) = makeString(["%s%s%s", ax, "total", "balINT"], e)
202+func az (ay,aA) = makeString(["%s%s%s", ay, aA, "bal"], e)
203203
204204
205-func aB (ax,az) = makeString(["%s%s%s", ax, az, "balINT"], e)
205+func aB (ay) = makeString(["%s%s%s", ay, "total", "balINT"], e)
206206
207207
208-func aC (ax) = makeString(["%s%s%s", ax, "total", "lastUpd"], e)
208+func aC (ay,aA) = makeString(["%s%s%s", ay, aA, "balINT"], e)
209209
210210
211-func aD (ax,az) = makeString(["%s%s%s", ax, az, "lastUpd"], e)
211+func aD (ay) = makeString(["%s%s%s", ay, "total", "lastUpd"], e)
212212
213213
214-func aE (ax) = makeString(["%s%s%s%s", ax, "common", "lpInt"], e)
214+func aE (ay,aA) = makeString(["%s%s%s", ay, aA, "lastUpd"], e)
215215
216216
217-func aF (ax) = makeString(["%s%s%s%s", ax, "common", "lpIntH"], e)
217+func aF (ay) = makeString(["%s%s%s%s", ay, "common", "lpInt"], e)
218218
219219
220-func aG (ax,az) = makeString(["%s%s%s%s", ax, az, "lpInt"], e)
220+func aG (ay) = makeString(["%s%s%s%s", ay, "common", "lpIntH"], e)
221221
222222
223-func aH (ax,az) = makeString(["%s%s%s%s", ax, az, "lpIntH"], e)
223+func aH (ay,aA) = makeString(["%s%s%s%s", ay, aA, "lpInt"], e)
224224
225225
226-func aI (ax) = makeString(["%s", ax, "wxPerLp"], e)
226+func aI (ay,aA) = makeString(["%s%s%s%s", ay, aA, "lpIntH"], e)
227227
228228
229-func aJ (ax) = makeString(["%s", ax, "wxPerLpX18"], e)
229+func aJ (ay) = makeString(["%s", ay, "wxPerLp"], e)
230230
231231
232-func aK (ax,az) = makeString(["%s%s%s%s", ax, az, "uIntL"], e)
232+func aK (ay) = makeString(["%s", ay, "wxPerLpX18"], e)
233233
234234
235-func aL (aM,az,aN) = makeString(["%s%s%s%s__history", aM, az, aN], e)
235+func aL (ay,aA) = makeString(["%s%s%s%s", ay, aA, "uIntL"], e)
236236
237237
238-func aO (az,ax,aM,aP) = makeString(["%s%s%s%d%d%d", az, ax, aM, toString(height), toString(lastBlock.timestamp), toString(aP)], e)
238+func aM (aN,aA,aO) = makeString(["%s%s%s%s__history", aN, aA, aO], e)
239239
240240
241-func aQ (aM,az,ax,aP,aR) = StringEntry(aL(aM, az, toBase58String(aR)), aO(az, ax, aM, aP))
241+func aP (aA,ay,aN,aQ) = makeString(["%s%s%s%d%d%d", aA, ay, aN, toString(height), toString(lastBlock.timestamp), toString(aQ)], e)
242242
243243
244-let aS = s(this, I())
245-
246-let aT = addressFromStringValue(aS)
247-
248-let af = ad(aT)
249-
250-let aU = ag(af)
251-
252-let aV = ae(af)
253-
254-func aW (ax) = makeString(["%s%s", ax, "nextUser"], e)
244+func aR (aN,aA,ay,aQ,aS) = StringEntry(aM(aN, aA, toBase58String(aS)), aP(aA, ay, aN, aQ))
255245
256246
257-func aX (ax) = makeString(["users", ax], e)
247+let aT = s(this, I())
248+
249+let aU = addressFromStringValue(aT)
250+
251+let ag = ae(aU)
252+
253+let aV = ah(ag)
254+
255+let aW = af(ag)
256+
257+func aX (ay) = makeString(["%s%s", ay, "nextUser"], e)
258258
259259
260-func aY (aZ) = makeString(["%s%s%s", aZ, "head"], e)
260+func aY (ay) = makeString(["users", ay], e)
261261
262262
263-func ba (aZ) = makeString(["%s%s%s", aZ, "size"], e)
263+func aZ (ba) = makeString(["%s%s%s", ba, "head"], e)
264264
265265
266-func bb (aZ,bc) = makeString(["%s%s%s%s", aZ, bc, "prev"], e)
266+func bb (ba) = makeString(["%s%s%s", ba, "size"], e)
267267
268268
269-func bd (aZ,bc) = makeString(["%s%s%s%s", aZ, bc, "next"], e)
269+func bc (ba,bd) = makeString(["%s%s%s%s", ba, bd, "prev"], e)
270270
271271
272-func be (aZ,bc) = {
273- let bf = getString(this, aY(aZ))
274- let bg = getString(this, bb(aZ, bc))
275- let bh = getString(this, bd(aZ, bc))
276- if (if ((bc == valueOrElse(bf, "")))
272+func be (ba,bd) = makeString(["%s%s%s%s", ba, bd, "next"], e)
273+
274+
275+func bf (ba,bd) = {
276+ let bg = getString(this, aZ(ba))
277+ let bh = getString(this, bc(ba, bd))
278+ let bi = getString(this, be(ba, bd))
279+ if (if ((bd == valueOrElse(bg, "")))
277280 then true
278- else (bg != unit))
281+ else (bh != unit))
279282 then true
280- else (bh != unit)
283+ else (bi != unit)
281284 }
282285
283286
284-func bi (aZ,bc) = {
285- let bf = getString(this, aY(aZ))
286- let bj = valueOrElse(getInteger(this, ba(aZ)), 0)
287- let bk = if (!(be(aZ, bc)))
287+func bj (ba,bd) = {
288+ let bg = getString(this, aZ(ba))
289+ let bk = valueOrElse(getInteger(this, bb(ba)), 0)
290+ let bl = if (!(bf(ba, bd)))
288291 then true
289292 else throw("Node exists")
290- if ((bk == bk))
291- then (([IntegerEntry(ba(aZ), (bj + 1))] ++ (if ((bf != unit))
292- then [StringEntry(bd(aZ, bc), value(bf)), StringEntry(bb(aZ, value(bf)), bc)]
293- else nil)) ++ [StringEntry(aY(aZ), bc)])
293+ if ((bl == bl))
294+ then (([IntegerEntry(bb(ba), (bk + 1))] ++ (if ((bg != unit))
295+ then [StringEntry(be(ba, bd), value(bg)), StringEntry(bc(ba, value(bg)), bd)]
296+ else nil)) ++ [StringEntry(aZ(ba), bd)])
294297 else throw("Strict value is not equal to itself.")
295298 }
296299
297300
298-func bl (aZ,bc) = {
299- let bf = getString(this, aY(aZ))
300- let bj = valueOrElse(getInteger(this, ba(aZ)), 0)
301- let bg = getString(this, bb(aZ, bc))
302- let bh = getString(this, bd(aZ, bc))
303- ([IntegerEntry(ba(aZ), (bj - 1))] ++ (if (if ((bg != unit))
304- then (bh != unit)
301+func bm (ba,bd) = {
302+ let bg = getString(this, aZ(ba))
303+ let bk = valueOrElse(getInteger(this, bb(ba)), 0)
304+ let bh = getString(this, bc(ba, bd))
305+ let bi = getString(this, be(ba, bd))
306+ ([IntegerEntry(bb(ba), (bk - 1))] ++ (if (if ((bh != unit))
307+ then (bi != unit)
305308 else false)
306- then [StringEntry(bd(aZ, value(bg)), value(bh)), StringEntry(bb(aZ, value(bh)), value(bg)), DeleteEntry(bb(aZ, bc)), DeleteEntry(bd(aZ, bc))]
307- else if ((bh != unit))
308- then [StringEntry(aY(aZ), value(bh)), DeleteEntry(bd(aZ, bc)), DeleteEntry(bb(aZ, value(bh)))]
309- else if ((bg != unit))
310- then [DeleteEntry(bb(aZ, bc)), DeleteEntry(bd(aZ, value(bg)))]
311- else if ((bc == valueOrElse(bf, "")))
312- then [DeleteEntry(aY(aZ))]
313- else throw(((("invalid node: " + aZ) + ".") + bc))))
309+ then [StringEntry(be(ba, value(bh)), value(bi)), StringEntry(bc(ba, value(bi)), value(bh)), DeleteEntry(bc(ba, bd)), DeleteEntry(be(ba, bd))]
310+ else if ((bi != unit))
311+ then [StringEntry(aZ(ba), value(bi)), DeleteEntry(be(ba, bd)), DeleteEntry(bc(ba, value(bi)))]
312+ else if ((bh != unit))
313+ then [DeleteEntry(bc(ba, bd)), DeleteEntry(be(ba, value(bh)))]
314+ else if ((bd == valueOrElse(bg, "")))
315+ then [DeleteEntry(aZ(ba))]
316+ else throw(((("invalid node: " + ba) + ".") + bd))))
314317 }
315318
316319
317-func bm (bn,bo,bp,bq) = if (if ((bo == g))
318- then (bn > g)
320+func bn (bo,bp,bq,br) = if (if ((bp == g))
321+ then (bo > g)
319322 else false)
320323 then g
321- else if ((bn == g))
322- then bp
323- else if (if ((bo > g))
324- then (bn > g)
324+ else if ((bo == g))
325+ then bq
326+ else if (if ((bp > g))
327+ then (bo > g)
325328 else false)
326- then value(parseBigInt(s(this, bq)))
329+ then value(parseBigInt(s(this, br)))
327330 else throw("calcWxPerLpIntegralUserLast: unexpected state")
328331
329332
330-func br (ap,bs,bt) = {
331- let bu = aq(ap)
332- let bv = toBigInt(av(bu))
333- let bw = if ((bv == g))
333+func bs (aq,bt,bu) = {
334+ let bv = ar(aq)
335+ let bw = toBigInt(aw(bv))
336+ let bx = if ((bw == g))
334337 then h
335- else bv
336- let bx = getIntegerValue(aT, Z(bs))
337- let by = z(aU, ak())
338- let bz = 1000
339- let bA = (z(aU, ai()) * bz)
340- let bB = fraction(bA, bx, (f * 3))
341- let bC = aE(ap)
342- let bD = aF(ap)
343- let bE = aI(ap)
344- let bF = x(this, bD, by)
345- let bG = A(this, bC)
346- let bH = 0
347- let bI = max([(height - bF), 0])
348- let bJ = if ((bH != 0))
349- then toBigInt(bH)
350- else fraction(toBigInt(bB), toBigInt(b), bw)
351- let bK = (bv + toBigInt(bt))
352- let bL = if ((bK == g))
338+ else bw
339+ let by = getIntegerValue(aU, aa(bt))
340+ let bz = z(aV, al())
341+ let bA = 1000
342+ let bB = (z(aV, aj()) * bA)
343+ let bC = fraction(bB, by, (f * 3))
344+ let bD = aF(aq)
345+ let bE = aG(aq)
346+ let bF = aJ(aq)
347+ let bG = x(this, bE, bz)
348+ let bH = A(this, bD)
349+ let bI = 0
350+ let bJ = max([(height - bG), 0])
351+ let bK = if ((bI != 0))
352+ then toBigInt(bI)
353+ else fraction(toBigInt(bC), toBigInt(b), bx)
354+ let bL = (bw + toBigInt(bu))
355+ let bM = if ((bL == g))
353356 then h
354- else bK
355- let bp = (bG + (bJ * toBigInt(bI)))
356- let bM = (toBigInt(bB) / bL)
357- let bN = height
358- let bO = makeString([toString(bp), toString(bI), toString(bJ), toString(bv), toString(bB), toString(bA), toString(bx)], "::")
359- $Tuple3(bp, [StringEntry(bC, toString(bp)), IntegerEntry(bD, bN), StringEntry(bE, toString(bM))], bO)
357+ else bL
358+ let bq = (bH + (bK * toBigInt(bJ)))
359+ let bN = (toBigInt(bC) / bM)
360+ let bO = height
361+ let bP = makeString([toString(bq), toString(bJ), toString(bK), toString(bw), toString(bC), toString(bB), toString(by)], "::")
362+ $Tuple3(bq, [StringEntry(bD, toString(bq)), IntegerEntry(bE, bO), StringEntry(bF, toString(bN))], bP)
360363 }
361364
362365
363-func bP (ap,ao,bs,bt) = {
364- let bQ = br(ap, bs, bt)
365- let bp = bQ._1
366- let bR = bQ._2
367- let bS = bQ._3
368- let bz = 1000
369- let bT = an(ao, ap)
370- let bn = av(bT)
371- let bU = aG(ap, ao)
372- let bV = aH(ap, ao)
373- let bq = aK(ap, ao)
374- let bW = A(this, bU)
375- let bo = w(this, bV)
376- let bX = bm(toBigInt(bn), toBigInt(bo), bp, bq)
377- let bY = (b * bz)
378- let bZ = max([(bW + fraction((bp - bX), toBigInt(bn), toBigInt(bY))), g])
379- let ca = bp
380- let cb = height
381- let bO = makeString([toString(bW), toString(bX), toString(bn), bS, toString(height)], "::")
382- $Tuple3(bZ, (bR ++ [StringEntry(bU, toString(bZ)), IntegerEntry(bV, cb), StringEntry(bq, toString(ca))]), bO)
366+func bQ (aq,ap,bt,bu) = {
367+ let bR = bs(aq, bt, bu)
368+ let bq = bR._1
369+ let bS = bR._2
370+ let bT = bR._3
371+ let bA = 1000
372+ let bU = ao(ap, aq)
373+ let bo = aw(bU)
374+ let bV = aH(aq, ap)
375+ let bW = aI(aq, ap)
376+ let br = aL(aq, ap)
377+ let bX = A(this, bV)
378+ let bp = w(this, bW)
379+ let bY = bn(toBigInt(bo), toBigInt(bp), bq, br)
380+ let bZ = (b * bA)
381+ let ca = max([(bX + fraction((bq - bY), toBigInt(bo), toBigInt(bZ))), g])
382+ let cb = bq
383+ let cc = height
384+ let bP = makeString([toString(bX), toString(bY), toString(bo), bT, toString(height)], "::")
385+ $Tuple3(ca, (bS ++ [StringEntry(bV, toString(ca)), IntegerEntry(bW, cc), StringEntry(br, toString(cb))]), bP)
383386 }
384387
385388
386-func cc () = {
389+func cd () = {
387390 let k = getString(S())
388391 if ($isInstanceOf(k, "String"))
389392 then {
396399 }
397400
398401
399-func cd () = {
402+func ce () = {
400403 let k = getString(T())
401404 if ($isInstanceOf(k, "String"))
402405 then {
409412 }
410413
411414
412-let ce = throw("Permission denied")
415+let cf = throw("Permission denied")
413416
414-func cf (cg) = if ((cg.caller == this))
417+func cg (ch) = if ((ch.caller == this))
415418 then true
416- else ce
419+ else cf
417420
418421
419-func ch (cg) = {
420- let k = cc()
422+func ci (ch) = {
423+ let k = cd()
421424 if ($isInstanceOf(k, "ByteVector"))
422425 then {
423- let ci = k
424- if ((cg.callerPublicKey == ci))
426+ let cj = k
427+ if ((ch.callerPublicKey == cj))
425428 then true
426- else ce
429+ else cf
427430 }
428431 else if ($isInstanceOf(k, "Unit"))
429- then if ((cg.caller == this))
432+ then if ((ch.caller == this))
430433 then true
431- else ce
434+ else cf
432435 else throw("Match error")
433436 }
434437
435438
436-@Callable(cg)
437-func constructor (cj) = {
438- let ck = ch(cg)
439- if ((ck == ck))
440- then [StringEntry(I(), cj)]
439+@Callable(ch)
440+func constructor (ck) = {
441+ let cl = ci(ch)
442+ if ((cl == cl))
443+ then [StringEntry(I(), ck)]
441444 else throw("Strict value is not equal to itself.")
442445 }
443446
444447
445448
446-@Callable(cg)
447-func constructorV2 (cl) = {
448- let cm = [ch(cg), if ((addressFromString(cl) != unit))
449+@Callable(ch)
450+func constructorV2 (cm) = {
451+ let cn = [ci(ch), if ((addressFromString(cm) != unit))
449452 then true
450453 else "invalid voting emission contract address"]
451- if ((cm == cm))
452- then [StringEntry(J(), cl)]
454+ if ((cn == cn))
455+ then [StringEntry(J(), cm)]
453456 else throw("Strict value is not equal to itself.")
454457 }
455458
456459
457460
458-@Callable(cg)
459-func setManager (cn) = {
460- let ck = ch(cg)
461- if ((ck == ck))
461+@Callable(ch)
462+func setManager (co) = {
463+ let cl = ci(ch)
464+ if ((cl == cl))
462465 then {
463- let co = fromBase58String(cn)
464- if ((co == co))
465- then [StringEntry(T(), cn)]
466+ let cp = fromBase58String(co)
467+ if ((cp == cp))
468+ then [StringEntry(T(), co)]
466469 else throw("Strict value is not equal to itself.")
467470 }
468471 else throw("Strict value is not equal to itself.")
470473
471474
472475
473-@Callable(cg)
476+@Callable(ch)
474477 func confirmManager () = {
475- let cp = cd()
476- let cq = if (isDefined(cp))
478+ let cq = ce()
479+ let cr = if (isDefined(cq))
477480 then true
478481 else throw("No pending manager")
479- if ((cq == cq))
482+ if ((cr == cr))
480483 then {
481- let cr = if ((cg.callerPublicKey == value(cp)))
484+ let cs = if ((ch.callerPublicKey == value(cq)))
482485 then true
483486 else throw("You are not pending manager")
484- if ((cr == cr))
485- then [StringEntry(S(), toBase58String(value(cp))), DeleteEntry(T())]
487+ if ((cs == cs))
488+ then [StringEntry(S(), toBase58String(value(cq))), DeleteEntry(T())]
486489 else throw("Strict value is not equal to itself.")
487490 }
488491 else throw("Strict value is not equal to itself.")
490493
491494
492495
493-@Callable(cg)
494-func stake () = if ((size(cg.payments) != 1))
496+@Callable(ch)
497+func stake () = if ((size(ch.payments) != 1))
495498 then throw("invalid payment - exact one payment must be attached")
496499 else {
497- let cs = cg.payments[0]
498- let ax = value(cs.assetId)
499- let ap = toBase58String(ax)
500- let aP = cs.amount
501- let bs = valueOrErrorMessage(getString(aT, V(ap)), ("unsupported lp asset " + ap))
502- let ct = toString(cg.caller)
503- let ao = if ((ct == bs))
504- then toString(cg.originCaller)
505- else ct
506- let bT = an(ao, ap)
507- let bu = aq(ap)
508- let bn = av(bT)
509- let bv = av(bu)
510- let cu = bP(ap, ao, bs, aP)
511- let bZ = cu._1
512- let cv = cu._2
513- let bO = cu._3
514- let aZ = aX(ap)
515- let cw = if (be(aZ, ao))
500+ let ct = ch.payments[0]
501+ let ay = value(ct.assetId)
502+ let aq = toBase58String(ay)
503+ let aQ = ct.amount
504+ let bt = valueOrErrorMessage(getString(aU, W(aq)), ("unsupported lp asset " + aq))
505+ let cu = toString(ch.caller)
506+ let ap = if ((cu == bt))
507+ then toString(ch.originCaller)
508+ else cu
509+ let bU = ao(ap, aq)
510+ let bv = ar(aq)
511+ let bo = aw(bU)
512+ let bw = aw(bv)
513+ let cv = bQ(aq, ap, bt, aQ)
514+ let ca = cv._1
515+ let cw = cv._2
516+ let bP = cv._3
517+ let ba = aY(aq)
518+ let cx = if (bf(ba, ap))
516519 then nil
517- else bi(aZ, ao)
518- (([IntegerEntry(bT, (bn + aP)), IntegerEntry(bu, (bv + aP)), aQ("stake", ao, ap, aP, cg.transactionId)] ++ cv) ++ cw)
520+ else bj(ba, ap)
521+ (([IntegerEntry(bU, (bo + aQ)), IntegerEntry(bv, (bw + aQ)), aR("stake", ap, aq, aQ, ch.transactionId)] ++ cw) ++ cx)
519522 }
520523
521524
522525
523-@Callable(cg)
524-func unstake (ap,aP) = {
525- let ax = fromBase58String(ap)
526- let bs = valueOrErrorMessage(getString(aT, V(ap)), ("unsupported lp asset " + ap))
527- let cx = valueOrElse(getString(this, U()), bs)
528- let ct = toString(cg.caller)
529- let ao = if (if ((ct == bs))
526+@Callable(ch)
527+func unstake (aq,aQ) = {
528+ let ay = fromBase58String(aq)
529+ let bt = valueOrErrorMessage(getString(aU, W(aq)), ("unsupported lp asset " + aq))
530+ let cy = valueOrElse(getString(addressFromStringValue(bt), V()), bt)
531+ let cu = toString(ch.caller)
532+ let ap = if (if ((cu == bt))
530533 then true
531- else (ct == cx))
532- then toString(cg.originCaller)
533- else ct
534- let bT = an(ao, ap)
535- let bu = aq(ap)
536- let bn = av(bT)
537- let bv = av(bu)
538- let cv = bP(ap, ao, bs, -(aP))._2
539- let aZ = aX(ap)
540- let cw = if (if (be(aZ, ao))
541- then (aP == bn)
534+ else (cu == cy))
535+ then toString(ch.originCaller)
536+ else cu
537+ let bU = ao(ap, aq)
538+ let bv = ar(aq)
539+ let bo = aw(bU)
540+ let bw = aw(bv)
541+ let cw = bQ(aq, ap, bt, -(aQ))._2
542+ let ba = aY(aq)
543+ let cx = if (if (bf(ba, ap))
544+ then (aQ == bo)
542545 else false)
543- then bl(aZ, ao)
546+ then bm(ba, ap)
544547 else nil
545- let cy = A(this, ar(ap, ao))
546- let cz = v(aT, Y(ap))
547- let bZ = bP(ap, ao, cz, 0)._1
548- let cA = (bZ - cy)
549- let cB = if ((cA > g))
550- then invoke(this, "claimWxINTERNAL", [ap, ao], nil)
548+ let cz = A(this, as(aq, ap))
549+ let cA = v(aU, Z(aq))
550+ let ca = bQ(aq, ap, cA, 0)._1
551+ let cB = (ca - cz)
552+ let cC = if ((cB > g))
553+ then invoke(this, "claimWxINTERNAL", [aq, ap], nil)
551554 else unit
552- if ((cB == cB))
553- then if ((aP > bn))
554- then throw(((((((("passed amount=" + toString(aP)) + " is less then available=") + toString(bn)) + ". lpAssetId=") + ap) + ". stakedByUserKEY=") + bT))
555- else (([IntegerEntry(bT, (bn - aP)), IntegerEntry(bu, (bv - aP)), ScriptTransfer(cg.caller, aP, ax), aQ("unstake", ao, ap, aP, cg.transactionId)] ++ cv) ++ cw)
555+ if ((cC == cC))
556+ then if ((aQ > bo))
557+ then throw(((((((("passed amount=" + toString(aQ)) + " is less then available=") + toString(bo)) + ". lpAssetId=") + aq) + ". stakedByUserKEY=") + bU))
558+ else (([IntegerEntry(bU, (bo - aQ)), IntegerEntry(bv, (bw - aQ)), ScriptTransfer(ch.caller, aQ, ay), aR("unstake", ap, aq, aQ, ch.transactionId)] ++ cw) ++ cx)
556559 else throw("Strict value is not equal to itself.")
557560 }
558561
559562
560563
561-@Callable(cg)
562-func claimWx (ap) = {
563- let ao = toString(cg.caller)
564- let cC = invoke(this, "claimWxINTERNAL", [ap, ao], nil)
565- $Tuple2(nil, cC)
564+@Callable(ch)
565+func claimWx (aq) = {
566+ let ap = toString(ch.caller)
567+ let cD = invoke(this, "claimWxINTERNAL", [aq, ap], nil)
568+ $Tuple2(nil, cD)
566569 }
567570
568571
569572
570-@Callable(cg)
571-func claimWxINTERNAL (ap,ao) = {
572- let ck = cf(cg)
573- if ((ck == ck))
573+@Callable(ch)
574+func claimWxINTERNAL (aq,ap) = {
575+ let cl = cg(ch)
576+ if ((cl == cl))
574577 then {
575- let az = valueOrErrorMessage(addressFromString(ao), "claimWxINTERNAL: invalid user address")
576- let bs = v(aT, Y(ap))
577- let cD = ar(ap, ao)
578- let cE = au(ap)
579- let cF = as(ap, ao)
580- let cG = at(ap, ao)
581- let cy = A(this, cD)
582- let cH = A(this, cF)
578+ let aA = valueOrErrorMessage(addressFromString(ap), "claimWxINTERNAL: invalid user address")
579+ let bt = v(aU, Z(aq))
580+ let cE = as(aq, ap)
581+ let cF = av(aq)
582+ let cG = at(aq, ap)
583+ let cH = au(aq, ap)
584+ let cz = A(this, cE)
583585 let cI = A(this, cG)
584- let cJ = A(this, cE)
585- let cK = bP(ap, ao, bs, 0)
586- let bZ = cK._1
587- let cv = cK._2
588- let bO = cK._3
589- let cA = max([(bZ - cy), g])
590- if ((g >= cA))
586+ let cJ = A(this, cH)
587+ let cK = A(this, cF)
588+ let cL = bQ(aq, ap, bt, 0)
589+ let ca = cL._1
590+ let cw = cL._2
591+ let bP = cL._3
592+ let cB = max([(ca - cz), g])
593+ if ((g >= cB))
591594 then throw("nothing to claim")
592595 else {
593- let cL = max([m(i(invoke(aV, "claimWxBoost", [ap, ao], nil))[0]), 0])
594- let cM = cA
595- let cN = min([(cM * toBigInt(2)), toBigInt(cL)])
596- let cO = q(i(invoke(aU, "emit", [toInt(cM)], nil))[0])
597- let cP = i(invoke(aU, "emit", [toInt(cN)], nil))
598- if ((cP == cP))
596+ let cM = max([m(i(invoke(aW, "claimWxBoost", [aq, ap], nil))[0]), 0])
597+ let cN = cB
598+ let cO = min([(cN * toBigInt(2)), toBigInt(cM)])
599+ let cP = q(i(invoke(aV, "emit", [toInt(cN)], nil))[0])
600+ let cQ = i(invoke(aV, "emit", [toInt(cO)], nil))
601+ if ((cQ == cQ))
599602 then {
600- let cQ = (cy + cA)
601- let cR = (cH + cM)
602- let cS = (cH + cM)
603- let cT = (cH + cM)
604-[StringEntry(cD, toString(cQ)), StringEntry(cF, toString(cR)), StringEntry(cG, toString(cS)), StringEntry(cE, toString(cT)), ScriptTransfer(az, toInt(cM), cO), ScriptTransfer(az, toInt(cN), cO), aQ("claim", ao, ap, toInt(cA), cg.transactionId)]
603+ let cR = (cz + cB)
604+ let cS = (cI + cN)
605+ let cT = (cI + cN)
606+ let cU = (cI + cN)
607+[StringEntry(cE, toString(cR)), StringEntry(cG, toString(cS)), StringEntry(cH, toString(cT)), StringEntry(cF, toString(cU)), ScriptTransfer(aA, toInt(cN), cP), ScriptTransfer(aA, toInt(cO), cP), aR("claim", ap, aq, toInt(cB), ch.transactionId)]
605608 }
606609 else throw("Strict value is not equal to itself.")
607610 }
611614
612615
613616
614-@Callable(cg)
615-func claimWxBulkInternalREADONLY (cU,cV,ao,cW) = if ((cU == size(cV)))
616- then $Tuple2(nil, cW)
617+@Callable(ch)
618+func claimWxBulkInternalREADONLY (cV,cW,ap,cX) = if ((cV == size(cW)))
619+ then $Tuple2(nil, cX)
617620 else {
618- let ax = cV[cU]
619- let cX = split({
620- let cY = invoke(this, "claimWxREADONLY", [ax, ao], nil)
621- if ($isInstanceOf(cY, "String"))
622- then cY
623- else throw(($getType(invoke(this, "claimWxREADONLY", [ax, ao], nil)) + " couldn't be cast to String"))
621+ let ay = cW[cV]
622+ let cY = split({
623+ let cZ = invoke(this, "claimWxREADONLY", [ay, ap], nil)
624+ if ($isInstanceOf(cZ, "String"))
625+ then cZ
626+ else throw(($getType(invoke(this, "claimWxREADONLY", [ay, ap], nil)) + " couldn't be cast to String"))
624627 }, e)
625- let cZ = cX[3]
626- let da = cX[4]
627- let db = (cW :+ makeString(["%d%d", cZ, da], e))
628- let dc = {
629- let cY = invoke(this, "claimWxBulkInternalREADONLY", [(cU + 1), cV, ao, db], nil)
630- if ($isInstanceOf(cY, "List[Any]"))
631- then cY
632- else throw(($getType(invoke(this, "claimWxBulkInternalREADONLY", [(cU + 1), cV, ao, db], nil)) + " couldn't be cast to List[Any]"))
628+ let da = cY[3]
629+ let db = cY[4]
630+ let dc = (cX :+ makeString(["%d%d", da, db], e))
631+ let dd = {
632+ let cZ = invoke(this, "claimWxBulkInternalREADONLY", [(cV + 1), cW, ap, dc], nil)
633+ if ($isInstanceOf(cZ, "List[Any]"))
634+ then cZ
635+ else throw(($getType(invoke(this, "claimWxBulkInternalREADONLY", [(cV + 1), cW, ap, dc], nil)) + " couldn't be cast to List[Any]"))
633636 }
634- if ((dc == dc))
635- then $Tuple2(nil, dc)
637+ if ((dd == dd))
638+ then $Tuple2(nil, dd)
636639 else throw("Strict value is not equal to itself.")
637640 }
638641
639642
640643
641-@Callable(cg)
642-func claimWxBulkREADONLY (cV,ao) = {
643- let db = invoke(this, "claimWxBulkInternalREADONLY", [0, cV, ao, nil], nil)
644- $Tuple2(nil, db)
644+@Callable(ch)
645+func claimWxBulkREADONLY (cW,ap) = {
646+ let dc = invoke(this, "claimWxBulkInternalREADONLY", [0, cW, ap, nil], nil)
647+ $Tuple2(nil, dc)
645648 }
646649
647650
648651
649-@Callable(cg)
650-func claimWxREADONLY (ap,ao) = {
651- let bT = an(ao, ap)
652- let bu = aq(ap)
653- let cD = ar(ap, ao)
654- let bn = av(bT)
655- let bv = av(bu)
656- let cy = A(this, cD)
657- let bs = v(aT, Y(ap))
658- let bx = getIntegerValue(aT, Z(bs))
659- let dd = z(aU, ai())
660- let by = z(aU, ak())
661- let de = if ((by > height))
652+@Callable(ch)
653+func claimWxREADONLY (aq,ap) = {
654+ let bU = ao(ap, aq)
655+ let bv = ar(aq)
656+ let cE = as(aq, ap)
657+ let bo = aw(bU)
658+ let bw = aw(bv)
659+ let cz = A(this, cE)
660+ let bt = v(aU, Z(aq))
661+ let by = getIntegerValue(aU, aa(bt))
662+ let de = z(aV, aj())
663+ let bz = z(aV, al())
664+ let df = if ((bz > height))
662665 then 0
663- else (height - by)
664- let df = fraction((dd * de), bx, f)
665- let dg = fraction(df, bn, bv)
666- let dh = bP(ap, ao, bs, 0)
667- let bZ = dh._1
668- let cv = dh._2
669- let bO = dh._3
670- let cA = max([(bZ - cy), g])
671- let di = i(invoke(aV, "claimWxBoostREADONLY", [ap, ao], nil))
672- let cL = max([m(di[0]), 0])
673- let dj = o(di[1])
674- let cM = cA
675- let cN = min([(cM * toBigInt(2)), toBigInt(cL)])
676- let dk = (cM + cN)
677- $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", ap, ao, toString(dk), toString(cy), toString(cM), toString(cN), "soon"], e))
666+ else (height - bz)
667+ let dg = fraction((de * df), by, f)
668+ let dh = fraction(dg, bo, bw)
669+ let di = bQ(aq, ap, bt, 0)
670+ let ca = di._1
671+ let cw = di._2
672+ let bP = di._3
673+ let cB = max([(ca - cz), g])
674+ let dj = i(invoke(aW, "claimWxBoostREADONLY", [aq, ap], nil))
675+ let cM = max([m(dj[0]), 0])
676+ let dk = o(dj[1])
677+ let cN = cB
678+ let cO = min([(cN * toBigInt(2)), toBigInt(cM)])
679+ let dl = (cN + cO)
680+ $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", aq, ap, toString(dl), toString(cz), toString(cN), toString(cO), "soon"], e))
678681 }
679682
680683
681684
682-@Callable(cg)
683-func usersListTraversal (ax) = {
684- let ck = if ((toBase58String(cg.caller.bytes) == valueOrElse(getString(this, J()), "")))
685+@Callable(ch)
686+func usersListTraversal (ay) = {
687+ let cl = if ((toBase58String(ch.caller.bytes) == valueOrElse(getString(this, J()), "")))
685688 then true
686- else ch(cg)
687- if ((ck == ck))
689+ else ci(ch)
690+ if ((cl == cl))
688691 then {
689- let aZ = aX(ax)
690- let dl = getString(aW(ax))
691- let bf = getString(aY(aZ))
692- let k = dl
692+ let ba = aY(ay)
693+ let dm = getString(aX(ay))
694+ let bg = getString(aZ(ba))
695+ let k = dm
693696 if ($isInstanceOf(k, "Unit"))
694697 then {
695- let dm = bf
696- if ($isInstanceOf(dm, "Unit"))
698+ let dn = bg
699+ if ($isInstanceOf(dn, "Unit"))
697700 then $Tuple2(nil, false)
698- else if ($isInstanceOf(dm, "String"))
701+ else if ($isInstanceOf(dn, "String"))
699702 then {
700- let dn = dm
701- $Tuple2([StringEntry(aW(ax), dn)], true)
703+ let do = dn
704+ $Tuple2([StringEntry(aX(ay), do)], true)
702705 }
703706 else throw("Match error")
704707 }
705708 else if ($isInstanceOf(k, "String"))
706709 then {
707- let az = k
708- let cy = A(this, ar(ax, az))
709- let cz = v(aT, Y(ax))
710- let bZ = bP(ax, az, cz, 0)._1
711- let cA = (bZ - cy)
712- let cB = if ((cA > g))
713- then invoke(this, "claimWxINTERNAL", [ax, az], nil)
710+ let aA = k
711+ let cz = A(this, as(ay, aA))
712+ let cA = v(aU, Z(ay))
713+ let ca = bQ(ay, aA, cA, 0)._1
714+ let cB = (ca - cz)
715+ let cC = if ((cB > g))
716+ then invoke(this, "claimWxINTERNAL", [ay, aA], nil)
714717 else unit
715- if ((cB == cB))
718+ if ((cC == cC))
716719 then {
717- let do = getString(bd(aZ, az))
718- let dm = do
719- if ($isInstanceOf(dm, "Unit"))
720- then $Tuple2([DeleteEntry(aW(ax))], false)
721- else if ($isInstanceOf(dm, "String"))
720+ let dp = getString(be(ba, aA))
721+ let dn = dp
722+ if ($isInstanceOf(dn, "Unit"))
723+ then $Tuple2([DeleteEntry(aX(ay))], false)
724+ else if ($isInstanceOf(dn, "String"))
722725 then {
723- let dp = dm
724- $Tuple2([StringEntry(aW(ax), dp)], true)
726+ let dq = dn
727+ $Tuple2([StringEntry(aX(ay), dq)], true)
725728 }
726729 else throw("Match error")
727730 }
734737
735738
736739
737-@Callable(cg)
738-func onModifyWeight (ap,bs) = if ((cg.caller != aT))
740+@Callable(ch)
741+func onModifyWeight (aq,bt) = if ((ch.caller != aU))
739742 then throw("permissions denied")
740743 else {
741- let dq = br(ap, bs, 0)
742- let bp = dq._1
743- let bR = dq._2
744- let bS = dq._3
745- bR
744+ let dr = bs(aq, bt, 0)
745+ let bq = dr._1
746+ let bS = dr._2
747+ let bT = dr._3
748+ bS
746749 }
747750
748751
749-@Verifier(dr)
750-func ds () = {
751- let dt = {
752- let k = cc()
752+@Verifier(ds)
753+func dt () = {
754+ let du = {
755+ let k = cd()
753756 if ($isInstanceOf(k, "ByteVector"))
754757 then {
755- let ci = k
756- ci
758+ let cj = k
759+ cj
757760 }
758761 else if ($isInstanceOf(k, "Unit"))
759- then dr.senderPublicKey
762+ then ds.senderPublicKey
760763 else throw("Match error")
761764 }
762- sigVerify(dr.bodyBytes, dr.proofs[0], dt)
765+ sigVerify(ds.bodyBytes, ds.proofs[0], du)
763766 }
764767
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 8
55
66 let b = 100000000
77
88 let c = 18
99
1010 let d = toBigInt(1000000000000000000)
1111
1212 let e = "__"
1313
1414 let f = b
1515
1616 let g = toBigInt(0)
1717
1818 let h = toBigInt(1)
1919
2020 func i (j) = {
2121 let k = j
2222 if ($isInstanceOf(k, "List[Any]"))
2323 then {
2424 let l = k
2525 l
2626 }
2727 else throw("fail to cast into List[Any]")
2828 }
2929
3030
3131 func m (j) = {
3232 let k = j
3333 if ($isInstanceOf(k, "Int"))
3434 then {
3535 let n = k
3636 n
3737 }
3838 else throw("fail to cast into Int")
3939 }
4040
4141
4242 func o (j) = {
4343 let k = j
4444 if ($isInstanceOf(k, "String"))
4545 then {
4646 let p = k
4747 p
4848 }
4949 else throw("fail to cast into Int")
5050 }
5151
5252
5353 func q (j) = {
5454 let k = j
5555 if ($isInstanceOf(k, "ByteVector"))
5656 then {
5757 let r = k
5858 r
5959 }
6060 else throw("fail to cast into Int")
6161 }
6262
6363
6464 func s (t,u) = valueOrErrorMessage(getString(t, u), (("mandatory this." + u) + " is not defined"))
6565
6666
6767 func v (t,u) = valueOrErrorMessage(getString(t, u), (((("mandatory " + toString(t)) + ".") + u) + " is not defined"))
6868
6969
7070 func w (t,u) = valueOrElse(getInteger(t, u), 0)
7171
7272
7373 func x (t,u,y) = valueOrElse(getInteger(t, u), y)
7474
7575
7676 func z (t,u) = valueOrErrorMessage(getInteger(t, u), (("mandatory this." + u) + " is not defined"))
7777
7878
7979 func A (t,u) = value(parseBigInt(valueOrElse(getString(t, u), "0")))
8080
8181
8282 func B (t,u,y) = {
8383 let k = getString(t, u)
8484 if ($isInstanceOf(k, "String"))
8585 then {
8686 let C = k
8787 value(parseBigInt(C))
8888 }
8989 else if ($isInstanceOf(k, "Unit"))
9090 then y
9191 else throw("Match error")
9292 }
9393
9494
9595 func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
9696
9797
9898 func G (j,H) = toInt(fraction(j, toBigInt(H), d))
9999
100100
101101 func I () = "%s%s__config__factoryAddress"
102102
103103
104104 func J () = "%s__votingEmissionContract"
105105
106106
107107 let K = 1
108108
109109 let L = 2
110110
111111 let M = 3
112112
113113 let N = 4
114114
115115 let O = 5
116116
117117 let P = 6
118118
119119 let Q = 7
120120
121121 func R () = "%s__factoryConfig"
122122
123123
124124 func S () = "%s__managerPublicKey"
125125
126126
127127 func T () = "%s__pendingManagerPublicKey"
128128
129129
130130 func U () = "%s__stablePoolAddonAddr"
131131
132132
133-func V (W) = makeString(["%s%s%s", W, "mappings__lpAsset2PoolContract"], e)
133+func V () = "%s__addonAddr"
134134
135135
136-func X () = "%s__lpTokensList"
136+func W (X) = makeString(["%s%s%s", X, "mappings__lpAsset2PoolContract"], e)
137137
138138
139-func Y (W) = makeString(["%s%s%s", W, "mappings__lpAsset2PoolContract"], e)
139+func Y () = "%s__lpTokensList"
140140
141141
142-func Z (aa) = makeString(["%s%s", "poolWeight", aa], e)
142+func Z (X) = makeString(["%s%s%s", X, "mappings__lpAsset2PoolContract"], e)
143143
144144
145-func ab (ac) = split(valueOrElse(getString(ac, X()), ""), e)
145+func aa (ab) = makeString(["%s%s", "poolWeight", ab], e)
146146
147147
148-func ad (ac) = split(v(ac, R()), e)
148+func ac (ad) = split(valueOrElse(getString(ad, Y()), ""), e)
149149
150150
151-func ae (af) = addressFromStringValue(af[L])
151+func ae (ad) = split(v(ad, R()), e)
152152
153153
154-func ag (af) = addressFromStringValue(af[O])
154+func af (ag) = addressFromStringValue(ag[L])
155155
156156
157-func ah (af) = addressFromStringValue(af[K])
157+func ah (ag) = addressFromStringValue(ag[O])
158158
159159
160-func ai () = "%s%s__ratePerBlock__current"
160+func ai (ag) = addressFromStringValue(ag[K])
161161
162162
163-func aj () = "%s%s__ratePerBlockMax__current"
163+func aj () = "%s%s__ratePerBlock__current"
164164
165165
166-func ak () = "%s%s__emission__startBlock"
166+func ak () = "%s%s__ratePerBlockMax__current"
167167
168168
169-func al () = "%s%s__emission__duration"
169+func al () = "%s%s__emission__startBlock"
170170
171171
172-func am () = "%s%s__emission__endBlock"
172+func am () = "%s%s__emission__duration"
173173
174174
175-func an (ao,ap) = makeString(["%s%s%s__staked", ao, ap], e)
175+func an () = "%s%s__emission__endBlock"
176176
177177
178-func aq (ap) = ("%s%s%s__staked__total__" + ap)
178+func ao (ap,aq) = makeString(["%s%s%s__staked", ap, aq], e)
179179
180180
181-func ar (ap,ao) = makeString(["%s%s%s__claimed", ao, ap], e)
181+func ar (aq) = ("%s%s%s__staked__total__" + aq)
182182
183183
184-func as (ap,ao) = makeString(["%s%s%s__claimedMinReward", ao, ap], e)
184+func as (aq,ap) = makeString(["%s%s%s__claimed", ap, aq], e)
185185
186186
187-func at (ap,ao) = makeString(["%s%s%s__claimedBoostReward", ao, ap], e)
187+func at (aq,ap) = makeString(["%s%s%s__claimedMinReward", ap, aq], e)
188188
189189
190-func au (ap) = makeString(["%s%s%s__claimed__total", ap], e)
190+func au (aq,ap) = makeString(["%s%s%s__claimedBoostReward", ap, aq], e)
191191
192192
193-func av (u) = valueOrElse(getInteger(this, u), 0)
193+func av (aq) = makeString(["%s%s%s__claimed__total", aq], e)
194194
195195
196-func aw (ax) = makeString(["%s%s%s", ax, "total", "bal"], e)
196+func aw (u) = valueOrElse(getInteger(this, u), 0)
197197
198198
199-func ay (ax,az) = makeString(["%s%s%s", ax, az, "bal"], e)
199+func ax (ay) = makeString(["%s%s%s", ay, "total", "bal"], e)
200200
201201
202-func aA (ax) = makeString(["%s%s%s", ax, "total", "balINT"], e)
202+func az (ay,aA) = makeString(["%s%s%s", ay, aA, "bal"], e)
203203
204204
205-func aB (ax,az) = makeString(["%s%s%s", ax, az, "balINT"], e)
205+func aB (ay) = makeString(["%s%s%s", ay, "total", "balINT"], e)
206206
207207
208-func aC (ax) = makeString(["%s%s%s", ax, "total", "lastUpd"], e)
208+func aC (ay,aA) = makeString(["%s%s%s", ay, aA, "balINT"], e)
209209
210210
211-func aD (ax,az) = makeString(["%s%s%s", ax, az, "lastUpd"], e)
211+func aD (ay) = makeString(["%s%s%s", ay, "total", "lastUpd"], e)
212212
213213
214-func aE (ax) = makeString(["%s%s%s%s", ax, "common", "lpInt"], e)
214+func aE (ay,aA) = makeString(["%s%s%s", ay, aA, "lastUpd"], e)
215215
216216
217-func aF (ax) = makeString(["%s%s%s%s", ax, "common", "lpIntH"], e)
217+func aF (ay) = makeString(["%s%s%s%s", ay, "common", "lpInt"], e)
218218
219219
220-func aG (ax,az) = makeString(["%s%s%s%s", ax, az, "lpInt"], e)
220+func aG (ay) = makeString(["%s%s%s%s", ay, "common", "lpIntH"], e)
221221
222222
223-func aH (ax,az) = makeString(["%s%s%s%s", ax, az, "lpIntH"], e)
223+func aH (ay,aA) = makeString(["%s%s%s%s", ay, aA, "lpInt"], e)
224224
225225
226-func aI (ax) = makeString(["%s", ax, "wxPerLp"], e)
226+func aI (ay,aA) = makeString(["%s%s%s%s", ay, aA, "lpIntH"], e)
227227
228228
229-func aJ (ax) = makeString(["%s", ax, "wxPerLpX18"], e)
229+func aJ (ay) = makeString(["%s", ay, "wxPerLp"], e)
230230
231231
232-func aK (ax,az) = makeString(["%s%s%s%s", ax, az, "uIntL"], e)
232+func aK (ay) = makeString(["%s", ay, "wxPerLpX18"], e)
233233
234234
235-func aL (aM,az,aN) = makeString(["%s%s%s%s__history", aM, az, aN], e)
235+func aL (ay,aA) = makeString(["%s%s%s%s", ay, aA, "uIntL"], e)
236236
237237
238-func aO (az,ax,aM,aP) = makeString(["%s%s%s%d%d%d", az, ax, aM, toString(height), toString(lastBlock.timestamp), toString(aP)], e)
238+func aM (aN,aA,aO) = makeString(["%s%s%s%s__history", aN, aA, aO], e)
239239
240240
241-func aQ (aM,az,ax,aP,aR) = StringEntry(aL(aM, az, toBase58String(aR)), aO(az, ax, aM, aP))
241+func aP (aA,ay,aN,aQ) = makeString(["%s%s%s%d%d%d", aA, ay, aN, toString(height), toString(lastBlock.timestamp), toString(aQ)], e)
242242
243243
244-let aS = s(this, I())
245-
246-let aT = addressFromStringValue(aS)
247-
248-let af = ad(aT)
249-
250-let aU = ag(af)
251-
252-let aV = ae(af)
253-
254-func aW (ax) = makeString(["%s%s", ax, "nextUser"], e)
244+func aR (aN,aA,ay,aQ,aS) = StringEntry(aM(aN, aA, toBase58String(aS)), aP(aA, ay, aN, aQ))
255245
256246
257-func aX (ax) = makeString(["users", ax], e)
247+let aT = s(this, I())
248+
249+let aU = addressFromStringValue(aT)
250+
251+let ag = ae(aU)
252+
253+let aV = ah(ag)
254+
255+let aW = af(ag)
256+
257+func aX (ay) = makeString(["%s%s", ay, "nextUser"], e)
258258
259259
260-func aY (aZ) = makeString(["%s%s%s", aZ, "head"], e)
260+func aY (ay) = makeString(["users", ay], e)
261261
262262
263-func ba (aZ) = makeString(["%s%s%s", aZ, "size"], e)
263+func aZ (ba) = makeString(["%s%s%s", ba, "head"], e)
264264
265265
266-func bb (aZ,bc) = makeString(["%s%s%s%s", aZ, bc, "prev"], e)
266+func bb (ba) = makeString(["%s%s%s", ba, "size"], e)
267267
268268
269-func bd (aZ,bc) = makeString(["%s%s%s%s", aZ, bc, "next"], e)
269+func bc (ba,bd) = makeString(["%s%s%s%s", ba, bd, "prev"], e)
270270
271271
272-func be (aZ,bc) = {
273- let bf = getString(this, aY(aZ))
274- let bg = getString(this, bb(aZ, bc))
275- let bh = getString(this, bd(aZ, bc))
276- if (if ((bc == valueOrElse(bf, "")))
272+func be (ba,bd) = makeString(["%s%s%s%s", ba, bd, "next"], e)
273+
274+
275+func bf (ba,bd) = {
276+ let bg = getString(this, aZ(ba))
277+ let bh = getString(this, bc(ba, bd))
278+ let bi = getString(this, be(ba, bd))
279+ if (if ((bd == valueOrElse(bg, "")))
277280 then true
278- else (bg != unit))
281+ else (bh != unit))
279282 then true
280- else (bh != unit)
283+ else (bi != unit)
281284 }
282285
283286
284-func bi (aZ,bc) = {
285- let bf = getString(this, aY(aZ))
286- let bj = valueOrElse(getInteger(this, ba(aZ)), 0)
287- let bk = if (!(be(aZ, bc)))
287+func bj (ba,bd) = {
288+ let bg = getString(this, aZ(ba))
289+ let bk = valueOrElse(getInteger(this, bb(ba)), 0)
290+ let bl = if (!(bf(ba, bd)))
288291 then true
289292 else throw("Node exists")
290- if ((bk == bk))
291- then (([IntegerEntry(ba(aZ), (bj + 1))] ++ (if ((bf != unit))
292- then [StringEntry(bd(aZ, bc), value(bf)), StringEntry(bb(aZ, value(bf)), bc)]
293- else nil)) ++ [StringEntry(aY(aZ), bc)])
293+ if ((bl == bl))
294+ then (([IntegerEntry(bb(ba), (bk + 1))] ++ (if ((bg != unit))
295+ then [StringEntry(be(ba, bd), value(bg)), StringEntry(bc(ba, value(bg)), bd)]
296+ else nil)) ++ [StringEntry(aZ(ba), bd)])
294297 else throw("Strict value is not equal to itself.")
295298 }
296299
297300
298-func bl (aZ,bc) = {
299- let bf = getString(this, aY(aZ))
300- let bj = valueOrElse(getInteger(this, ba(aZ)), 0)
301- let bg = getString(this, bb(aZ, bc))
302- let bh = getString(this, bd(aZ, bc))
303- ([IntegerEntry(ba(aZ), (bj - 1))] ++ (if (if ((bg != unit))
304- then (bh != unit)
301+func bm (ba,bd) = {
302+ let bg = getString(this, aZ(ba))
303+ let bk = valueOrElse(getInteger(this, bb(ba)), 0)
304+ let bh = getString(this, bc(ba, bd))
305+ let bi = getString(this, be(ba, bd))
306+ ([IntegerEntry(bb(ba), (bk - 1))] ++ (if (if ((bh != unit))
307+ then (bi != unit)
305308 else false)
306- then [StringEntry(bd(aZ, value(bg)), value(bh)), StringEntry(bb(aZ, value(bh)), value(bg)), DeleteEntry(bb(aZ, bc)), DeleteEntry(bd(aZ, bc))]
307- else if ((bh != unit))
308- then [StringEntry(aY(aZ), value(bh)), DeleteEntry(bd(aZ, bc)), DeleteEntry(bb(aZ, value(bh)))]
309- else if ((bg != unit))
310- then [DeleteEntry(bb(aZ, bc)), DeleteEntry(bd(aZ, value(bg)))]
311- else if ((bc == valueOrElse(bf, "")))
312- then [DeleteEntry(aY(aZ))]
313- else throw(((("invalid node: " + aZ) + ".") + bc))))
309+ then [StringEntry(be(ba, value(bh)), value(bi)), StringEntry(bc(ba, value(bi)), value(bh)), DeleteEntry(bc(ba, bd)), DeleteEntry(be(ba, bd))]
310+ else if ((bi != unit))
311+ then [StringEntry(aZ(ba), value(bi)), DeleteEntry(be(ba, bd)), DeleteEntry(bc(ba, value(bi)))]
312+ else if ((bh != unit))
313+ then [DeleteEntry(bc(ba, bd)), DeleteEntry(be(ba, value(bh)))]
314+ else if ((bd == valueOrElse(bg, "")))
315+ then [DeleteEntry(aZ(ba))]
316+ else throw(((("invalid node: " + ba) + ".") + bd))))
314317 }
315318
316319
317-func bm (bn,bo,bp,bq) = if (if ((bo == g))
318- then (bn > g)
320+func bn (bo,bp,bq,br) = if (if ((bp == g))
321+ then (bo > g)
319322 else false)
320323 then g
321- else if ((bn == g))
322- then bp
323- else if (if ((bo > g))
324- then (bn > g)
324+ else if ((bo == g))
325+ then bq
326+ else if (if ((bp > g))
327+ then (bo > g)
325328 else false)
326- then value(parseBigInt(s(this, bq)))
329+ then value(parseBigInt(s(this, br)))
327330 else throw("calcWxPerLpIntegralUserLast: unexpected state")
328331
329332
330-func br (ap,bs,bt) = {
331- let bu = aq(ap)
332- let bv = toBigInt(av(bu))
333- let bw = if ((bv == g))
333+func bs (aq,bt,bu) = {
334+ let bv = ar(aq)
335+ let bw = toBigInt(aw(bv))
336+ let bx = if ((bw == g))
334337 then h
335- else bv
336- let bx = getIntegerValue(aT, Z(bs))
337- let by = z(aU, ak())
338- let bz = 1000
339- let bA = (z(aU, ai()) * bz)
340- let bB = fraction(bA, bx, (f * 3))
341- let bC = aE(ap)
342- let bD = aF(ap)
343- let bE = aI(ap)
344- let bF = x(this, bD, by)
345- let bG = A(this, bC)
346- let bH = 0
347- let bI = max([(height - bF), 0])
348- let bJ = if ((bH != 0))
349- then toBigInt(bH)
350- else fraction(toBigInt(bB), toBigInt(b), bw)
351- let bK = (bv + toBigInt(bt))
352- let bL = if ((bK == g))
338+ else bw
339+ let by = getIntegerValue(aU, aa(bt))
340+ let bz = z(aV, al())
341+ let bA = 1000
342+ let bB = (z(aV, aj()) * bA)
343+ let bC = fraction(bB, by, (f * 3))
344+ let bD = aF(aq)
345+ let bE = aG(aq)
346+ let bF = aJ(aq)
347+ let bG = x(this, bE, bz)
348+ let bH = A(this, bD)
349+ let bI = 0
350+ let bJ = max([(height - bG), 0])
351+ let bK = if ((bI != 0))
352+ then toBigInt(bI)
353+ else fraction(toBigInt(bC), toBigInt(b), bx)
354+ let bL = (bw + toBigInt(bu))
355+ let bM = if ((bL == g))
353356 then h
354- else bK
355- let bp = (bG + (bJ * toBigInt(bI)))
356- let bM = (toBigInt(bB) / bL)
357- let bN = height
358- let bO = makeString([toString(bp), toString(bI), toString(bJ), toString(bv), toString(bB), toString(bA), toString(bx)], "::")
359- $Tuple3(bp, [StringEntry(bC, toString(bp)), IntegerEntry(bD, bN), StringEntry(bE, toString(bM))], bO)
357+ else bL
358+ let bq = (bH + (bK * toBigInt(bJ)))
359+ let bN = (toBigInt(bC) / bM)
360+ let bO = height
361+ let bP = makeString([toString(bq), toString(bJ), toString(bK), toString(bw), toString(bC), toString(bB), toString(by)], "::")
362+ $Tuple3(bq, [StringEntry(bD, toString(bq)), IntegerEntry(bE, bO), StringEntry(bF, toString(bN))], bP)
360363 }
361364
362365
363-func bP (ap,ao,bs,bt) = {
364- let bQ = br(ap, bs, bt)
365- let bp = bQ._1
366- let bR = bQ._2
367- let bS = bQ._3
368- let bz = 1000
369- let bT = an(ao, ap)
370- let bn = av(bT)
371- let bU = aG(ap, ao)
372- let bV = aH(ap, ao)
373- let bq = aK(ap, ao)
374- let bW = A(this, bU)
375- let bo = w(this, bV)
376- let bX = bm(toBigInt(bn), toBigInt(bo), bp, bq)
377- let bY = (b * bz)
378- let bZ = max([(bW + fraction((bp - bX), toBigInt(bn), toBigInt(bY))), g])
379- let ca = bp
380- let cb = height
381- let bO = makeString([toString(bW), toString(bX), toString(bn), bS, toString(height)], "::")
382- $Tuple3(bZ, (bR ++ [StringEntry(bU, toString(bZ)), IntegerEntry(bV, cb), StringEntry(bq, toString(ca))]), bO)
366+func bQ (aq,ap,bt,bu) = {
367+ let bR = bs(aq, bt, bu)
368+ let bq = bR._1
369+ let bS = bR._2
370+ let bT = bR._3
371+ let bA = 1000
372+ let bU = ao(ap, aq)
373+ let bo = aw(bU)
374+ let bV = aH(aq, ap)
375+ let bW = aI(aq, ap)
376+ let br = aL(aq, ap)
377+ let bX = A(this, bV)
378+ let bp = w(this, bW)
379+ let bY = bn(toBigInt(bo), toBigInt(bp), bq, br)
380+ let bZ = (b * bA)
381+ let ca = max([(bX + fraction((bq - bY), toBigInt(bo), toBigInt(bZ))), g])
382+ let cb = bq
383+ let cc = height
384+ let bP = makeString([toString(bX), toString(bY), toString(bo), bT, toString(height)], "::")
385+ $Tuple3(ca, (bS ++ [StringEntry(bV, toString(ca)), IntegerEntry(bW, cc), StringEntry(br, toString(cb))]), bP)
383386 }
384387
385388
386-func cc () = {
389+func cd () = {
387390 let k = getString(S())
388391 if ($isInstanceOf(k, "String"))
389392 then {
390393 let C = k
391394 fromBase58String(C)
392395 }
393396 else if ($isInstanceOf(k, "Unit"))
394397 then unit
395398 else throw("Match error")
396399 }
397400
398401
399-func cd () = {
402+func ce () = {
400403 let k = getString(T())
401404 if ($isInstanceOf(k, "String"))
402405 then {
403406 let C = k
404407 fromBase58String(C)
405408 }
406409 else if ($isInstanceOf(k, "Unit"))
407410 then unit
408411 else throw("Match error")
409412 }
410413
411414
412-let ce = throw("Permission denied")
415+let cf = throw("Permission denied")
413416
414-func cf (cg) = if ((cg.caller == this))
417+func cg (ch) = if ((ch.caller == this))
415418 then true
416- else ce
419+ else cf
417420
418421
419-func ch (cg) = {
420- let k = cc()
422+func ci (ch) = {
423+ let k = cd()
421424 if ($isInstanceOf(k, "ByteVector"))
422425 then {
423- let ci = k
424- if ((cg.callerPublicKey == ci))
426+ let cj = k
427+ if ((ch.callerPublicKey == cj))
425428 then true
426- else ce
429+ else cf
427430 }
428431 else if ($isInstanceOf(k, "Unit"))
429- then if ((cg.caller == this))
432+ then if ((ch.caller == this))
430433 then true
431- else ce
434+ else cf
432435 else throw("Match error")
433436 }
434437
435438
436-@Callable(cg)
437-func constructor (cj) = {
438- let ck = ch(cg)
439- if ((ck == ck))
440- then [StringEntry(I(), cj)]
439+@Callable(ch)
440+func constructor (ck) = {
441+ let cl = ci(ch)
442+ if ((cl == cl))
443+ then [StringEntry(I(), ck)]
441444 else throw("Strict value is not equal to itself.")
442445 }
443446
444447
445448
446-@Callable(cg)
447-func constructorV2 (cl) = {
448- let cm = [ch(cg), if ((addressFromString(cl) != unit))
449+@Callable(ch)
450+func constructorV2 (cm) = {
451+ let cn = [ci(ch), if ((addressFromString(cm) != unit))
449452 then true
450453 else "invalid voting emission contract address"]
451- if ((cm == cm))
452- then [StringEntry(J(), cl)]
454+ if ((cn == cn))
455+ then [StringEntry(J(), cm)]
453456 else throw("Strict value is not equal to itself.")
454457 }
455458
456459
457460
458-@Callable(cg)
459-func setManager (cn) = {
460- let ck = ch(cg)
461- if ((ck == ck))
461+@Callable(ch)
462+func setManager (co) = {
463+ let cl = ci(ch)
464+ if ((cl == cl))
462465 then {
463- let co = fromBase58String(cn)
464- if ((co == co))
465- then [StringEntry(T(), cn)]
466+ let cp = fromBase58String(co)
467+ if ((cp == cp))
468+ then [StringEntry(T(), co)]
466469 else throw("Strict value is not equal to itself.")
467470 }
468471 else throw("Strict value is not equal to itself.")
469472 }
470473
471474
472475
473-@Callable(cg)
476+@Callable(ch)
474477 func confirmManager () = {
475- let cp = cd()
476- let cq = if (isDefined(cp))
478+ let cq = ce()
479+ let cr = if (isDefined(cq))
477480 then true
478481 else throw("No pending manager")
479- if ((cq == cq))
482+ if ((cr == cr))
480483 then {
481- let cr = if ((cg.callerPublicKey == value(cp)))
484+ let cs = if ((ch.callerPublicKey == value(cq)))
482485 then true
483486 else throw("You are not pending manager")
484- if ((cr == cr))
485- then [StringEntry(S(), toBase58String(value(cp))), DeleteEntry(T())]
487+ if ((cs == cs))
488+ then [StringEntry(S(), toBase58String(value(cq))), DeleteEntry(T())]
486489 else throw("Strict value is not equal to itself.")
487490 }
488491 else throw("Strict value is not equal to itself.")
489492 }
490493
491494
492495
493-@Callable(cg)
494-func stake () = if ((size(cg.payments) != 1))
496+@Callable(ch)
497+func stake () = if ((size(ch.payments) != 1))
495498 then throw("invalid payment - exact one payment must be attached")
496499 else {
497- let cs = cg.payments[0]
498- let ax = value(cs.assetId)
499- let ap = toBase58String(ax)
500- let aP = cs.amount
501- let bs = valueOrErrorMessage(getString(aT, V(ap)), ("unsupported lp asset " + ap))
502- let ct = toString(cg.caller)
503- let ao = if ((ct == bs))
504- then toString(cg.originCaller)
505- else ct
506- let bT = an(ao, ap)
507- let bu = aq(ap)
508- let bn = av(bT)
509- let bv = av(bu)
510- let cu = bP(ap, ao, bs, aP)
511- let bZ = cu._1
512- let cv = cu._2
513- let bO = cu._3
514- let aZ = aX(ap)
515- let cw = if (be(aZ, ao))
500+ let ct = ch.payments[0]
501+ let ay = value(ct.assetId)
502+ let aq = toBase58String(ay)
503+ let aQ = ct.amount
504+ let bt = valueOrErrorMessage(getString(aU, W(aq)), ("unsupported lp asset " + aq))
505+ let cu = toString(ch.caller)
506+ let ap = if ((cu == bt))
507+ then toString(ch.originCaller)
508+ else cu
509+ let bU = ao(ap, aq)
510+ let bv = ar(aq)
511+ let bo = aw(bU)
512+ let bw = aw(bv)
513+ let cv = bQ(aq, ap, bt, aQ)
514+ let ca = cv._1
515+ let cw = cv._2
516+ let bP = cv._3
517+ let ba = aY(aq)
518+ let cx = if (bf(ba, ap))
516519 then nil
517- else bi(aZ, ao)
518- (([IntegerEntry(bT, (bn + aP)), IntegerEntry(bu, (bv + aP)), aQ("stake", ao, ap, aP, cg.transactionId)] ++ cv) ++ cw)
520+ else bj(ba, ap)
521+ (([IntegerEntry(bU, (bo + aQ)), IntegerEntry(bv, (bw + aQ)), aR("stake", ap, aq, aQ, ch.transactionId)] ++ cw) ++ cx)
519522 }
520523
521524
522525
523-@Callable(cg)
524-func unstake (ap,aP) = {
525- let ax = fromBase58String(ap)
526- let bs = valueOrErrorMessage(getString(aT, V(ap)), ("unsupported lp asset " + ap))
527- let cx = valueOrElse(getString(this, U()), bs)
528- let ct = toString(cg.caller)
529- let ao = if (if ((ct == bs))
526+@Callable(ch)
527+func unstake (aq,aQ) = {
528+ let ay = fromBase58String(aq)
529+ let bt = valueOrErrorMessage(getString(aU, W(aq)), ("unsupported lp asset " + aq))
530+ let cy = valueOrElse(getString(addressFromStringValue(bt), V()), bt)
531+ let cu = toString(ch.caller)
532+ let ap = if (if ((cu == bt))
530533 then true
531- else (ct == cx))
532- then toString(cg.originCaller)
533- else ct
534- let bT = an(ao, ap)
535- let bu = aq(ap)
536- let bn = av(bT)
537- let bv = av(bu)
538- let cv = bP(ap, ao, bs, -(aP))._2
539- let aZ = aX(ap)
540- let cw = if (if (be(aZ, ao))
541- then (aP == bn)
534+ else (cu == cy))
535+ then toString(ch.originCaller)
536+ else cu
537+ let bU = ao(ap, aq)
538+ let bv = ar(aq)
539+ let bo = aw(bU)
540+ let bw = aw(bv)
541+ let cw = bQ(aq, ap, bt, -(aQ))._2
542+ let ba = aY(aq)
543+ let cx = if (if (bf(ba, ap))
544+ then (aQ == bo)
542545 else false)
543- then bl(aZ, ao)
546+ then bm(ba, ap)
544547 else nil
545- let cy = A(this, ar(ap, ao))
546- let cz = v(aT, Y(ap))
547- let bZ = bP(ap, ao, cz, 0)._1
548- let cA = (bZ - cy)
549- let cB = if ((cA > g))
550- then invoke(this, "claimWxINTERNAL", [ap, ao], nil)
548+ let cz = A(this, as(aq, ap))
549+ let cA = v(aU, Z(aq))
550+ let ca = bQ(aq, ap, cA, 0)._1
551+ let cB = (ca - cz)
552+ let cC = if ((cB > g))
553+ then invoke(this, "claimWxINTERNAL", [aq, ap], nil)
551554 else unit
552- if ((cB == cB))
553- then if ((aP > bn))
554- then throw(((((((("passed amount=" + toString(aP)) + " is less then available=") + toString(bn)) + ". lpAssetId=") + ap) + ". stakedByUserKEY=") + bT))
555- else (([IntegerEntry(bT, (bn - aP)), IntegerEntry(bu, (bv - aP)), ScriptTransfer(cg.caller, aP, ax), aQ("unstake", ao, ap, aP, cg.transactionId)] ++ cv) ++ cw)
555+ if ((cC == cC))
556+ then if ((aQ > bo))
557+ then throw(((((((("passed amount=" + toString(aQ)) + " is less then available=") + toString(bo)) + ". lpAssetId=") + aq) + ". stakedByUserKEY=") + bU))
558+ else (([IntegerEntry(bU, (bo - aQ)), IntegerEntry(bv, (bw - aQ)), ScriptTransfer(ch.caller, aQ, ay), aR("unstake", ap, aq, aQ, ch.transactionId)] ++ cw) ++ cx)
556559 else throw("Strict value is not equal to itself.")
557560 }
558561
559562
560563
561-@Callable(cg)
562-func claimWx (ap) = {
563- let ao = toString(cg.caller)
564- let cC = invoke(this, "claimWxINTERNAL", [ap, ao], nil)
565- $Tuple2(nil, cC)
564+@Callable(ch)
565+func claimWx (aq) = {
566+ let ap = toString(ch.caller)
567+ let cD = invoke(this, "claimWxINTERNAL", [aq, ap], nil)
568+ $Tuple2(nil, cD)
566569 }
567570
568571
569572
570-@Callable(cg)
571-func claimWxINTERNAL (ap,ao) = {
572- let ck = cf(cg)
573- if ((ck == ck))
573+@Callable(ch)
574+func claimWxINTERNAL (aq,ap) = {
575+ let cl = cg(ch)
576+ if ((cl == cl))
574577 then {
575- let az = valueOrErrorMessage(addressFromString(ao), "claimWxINTERNAL: invalid user address")
576- let bs = v(aT, Y(ap))
577- let cD = ar(ap, ao)
578- let cE = au(ap)
579- let cF = as(ap, ao)
580- let cG = at(ap, ao)
581- let cy = A(this, cD)
582- let cH = A(this, cF)
578+ let aA = valueOrErrorMessage(addressFromString(ap), "claimWxINTERNAL: invalid user address")
579+ let bt = v(aU, Z(aq))
580+ let cE = as(aq, ap)
581+ let cF = av(aq)
582+ let cG = at(aq, ap)
583+ let cH = au(aq, ap)
584+ let cz = A(this, cE)
583585 let cI = A(this, cG)
584- let cJ = A(this, cE)
585- let cK = bP(ap, ao, bs, 0)
586- let bZ = cK._1
587- let cv = cK._2
588- let bO = cK._3
589- let cA = max([(bZ - cy), g])
590- if ((g >= cA))
586+ let cJ = A(this, cH)
587+ let cK = A(this, cF)
588+ let cL = bQ(aq, ap, bt, 0)
589+ let ca = cL._1
590+ let cw = cL._2
591+ let bP = cL._3
592+ let cB = max([(ca - cz), g])
593+ if ((g >= cB))
591594 then throw("nothing to claim")
592595 else {
593- let cL = max([m(i(invoke(aV, "claimWxBoost", [ap, ao], nil))[0]), 0])
594- let cM = cA
595- let cN = min([(cM * toBigInt(2)), toBigInt(cL)])
596- let cO = q(i(invoke(aU, "emit", [toInt(cM)], nil))[0])
597- let cP = i(invoke(aU, "emit", [toInt(cN)], nil))
598- if ((cP == cP))
596+ let cM = max([m(i(invoke(aW, "claimWxBoost", [aq, ap], nil))[0]), 0])
597+ let cN = cB
598+ let cO = min([(cN * toBigInt(2)), toBigInt(cM)])
599+ let cP = q(i(invoke(aV, "emit", [toInt(cN)], nil))[0])
600+ let cQ = i(invoke(aV, "emit", [toInt(cO)], nil))
601+ if ((cQ == cQ))
599602 then {
600- let cQ = (cy + cA)
601- let cR = (cH + cM)
602- let cS = (cH + cM)
603- let cT = (cH + cM)
604-[StringEntry(cD, toString(cQ)), StringEntry(cF, toString(cR)), StringEntry(cG, toString(cS)), StringEntry(cE, toString(cT)), ScriptTransfer(az, toInt(cM), cO), ScriptTransfer(az, toInt(cN), cO), aQ("claim", ao, ap, toInt(cA), cg.transactionId)]
603+ let cR = (cz + cB)
604+ let cS = (cI + cN)
605+ let cT = (cI + cN)
606+ let cU = (cI + cN)
607+[StringEntry(cE, toString(cR)), StringEntry(cG, toString(cS)), StringEntry(cH, toString(cT)), StringEntry(cF, toString(cU)), ScriptTransfer(aA, toInt(cN), cP), ScriptTransfer(aA, toInt(cO), cP), aR("claim", ap, aq, toInt(cB), ch.transactionId)]
605608 }
606609 else throw("Strict value is not equal to itself.")
607610 }
608611 }
609612 else throw("Strict value is not equal to itself.")
610613 }
611614
612615
613616
614-@Callable(cg)
615-func claimWxBulkInternalREADONLY (cU,cV,ao,cW) = if ((cU == size(cV)))
616- then $Tuple2(nil, cW)
617+@Callable(ch)
618+func claimWxBulkInternalREADONLY (cV,cW,ap,cX) = if ((cV == size(cW)))
619+ then $Tuple2(nil, cX)
617620 else {
618- let ax = cV[cU]
619- let cX = split({
620- let cY = invoke(this, "claimWxREADONLY", [ax, ao], nil)
621- if ($isInstanceOf(cY, "String"))
622- then cY
623- else throw(($getType(invoke(this, "claimWxREADONLY", [ax, ao], nil)) + " couldn't be cast to String"))
621+ let ay = cW[cV]
622+ let cY = split({
623+ let cZ = invoke(this, "claimWxREADONLY", [ay, ap], nil)
624+ if ($isInstanceOf(cZ, "String"))
625+ then cZ
626+ else throw(($getType(invoke(this, "claimWxREADONLY", [ay, ap], nil)) + " couldn't be cast to String"))
624627 }, e)
625- let cZ = cX[3]
626- let da = cX[4]
627- let db = (cW :+ makeString(["%d%d", cZ, da], e))
628- let dc = {
629- let cY = invoke(this, "claimWxBulkInternalREADONLY", [(cU + 1), cV, ao, db], nil)
630- if ($isInstanceOf(cY, "List[Any]"))
631- then cY
632- else throw(($getType(invoke(this, "claimWxBulkInternalREADONLY", [(cU + 1), cV, ao, db], nil)) + " couldn't be cast to List[Any]"))
628+ let da = cY[3]
629+ let db = cY[4]
630+ let dc = (cX :+ makeString(["%d%d", da, db], e))
631+ let dd = {
632+ let cZ = invoke(this, "claimWxBulkInternalREADONLY", [(cV + 1), cW, ap, dc], nil)
633+ if ($isInstanceOf(cZ, "List[Any]"))
634+ then cZ
635+ else throw(($getType(invoke(this, "claimWxBulkInternalREADONLY", [(cV + 1), cW, ap, dc], nil)) + " couldn't be cast to List[Any]"))
633636 }
634- if ((dc == dc))
635- then $Tuple2(nil, dc)
637+ if ((dd == dd))
638+ then $Tuple2(nil, dd)
636639 else throw("Strict value is not equal to itself.")
637640 }
638641
639642
640643
641-@Callable(cg)
642-func claimWxBulkREADONLY (cV,ao) = {
643- let db = invoke(this, "claimWxBulkInternalREADONLY", [0, cV, ao, nil], nil)
644- $Tuple2(nil, db)
644+@Callable(ch)
645+func claimWxBulkREADONLY (cW,ap) = {
646+ let dc = invoke(this, "claimWxBulkInternalREADONLY", [0, cW, ap, nil], nil)
647+ $Tuple2(nil, dc)
645648 }
646649
647650
648651
649-@Callable(cg)
650-func claimWxREADONLY (ap,ao) = {
651- let bT = an(ao, ap)
652- let bu = aq(ap)
653- let cD = ar(ap, ao)
654- let bn = av(bT)
655- let bv = av(bu)
656- let cy = A(this, cD)
657- let bs = v(aT, Y(ap))
658- let bx = getIntegerValue(aT, Z(bs))
659- let dd = z(aU, ai())
660- let by = z(aU, ak())
661- let de = if ((by > height))
652+@Callable(ch)
653+func claimWxREADONLY (aq,ap) = {
654+ let bU = ao(ap, aq)
655+ let bv = ar(aq)
656+ let cE = as(aq, ap)
657+ let bo = aw(bU)
658+ let bw = aw(bv)
659+ let cz = A(this, cE)
660+ let bt = v(aU, Z(aq))
661+ let by = getIntegerValue(aU, aa(bt))
662+ let de = z(aV, aj())
663+ let bz = z(aV, al())
664+ let df = if ((bz > height))
662665 then 0
663- else (height - by)
664- let df = fraction((dd * de), bx, f)
665- let dg = fraction(df, bn, bv)
666- let dh = bP(ap, ao, bs, 0)
667- let bZ = dh._1
668- let cv = dh._2
669- let bO = dh._3
670- let cA = max([(bZ - cy), g])
671- let di = i(invoke(aV, "claimWxBoostREADONLY", [ap, ao], nil))
672- let cL = max([m(di[0]), 0])
673- let dj = o(di[1])
674- let cM = cA
675- let cN = min([(cM * toBigInt(2)), toBigInt(cL)])
676- let dk = (cM + cN)
677- $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", ap, ao, toString(dk), toString(cy), toString(cM), toString(cN), "soon"], e))
666+ else (height - bz)
667+ let dg = fraction((de * df), by, f)
668+ let dh = fraction(dg, bo, bw)
669+ let di = bQ(aq, ap, bt, 0)
670+ let ca = di._1
671+ let cw = di._2
672+ let bP = di._3
673+ let cB = max([(ca - cz), g])
674+ let dj = i(invoke(aW, "claimWxBoostREADONLY", [aq, ap], nil))
675+ let cM = max([m(dj[0]), 0])
676+ let dk = o(dj[1])
677+ let cN = cB
678+ let cO = min([(cN * toBigInt(2)), toBigInt(cM)])
679+ let dl = (cN + cO)
680+ $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", aq, ap, toString(dl), toString(cz), toString(cN), toString(cO), "soon"], e))
678681 }
679682
680683
681684
682-@Callable(cg)
683-func usersListTraversal (ax) = {
684- let ck = if ((toBase58String(cg.caller.bytes) == valueOrElse(getString(this, J()), "")))
685+@Callable(ch)
686+func usersListTraversal (ay) = {
687+ let cl = if ((toBase58String(ch.caller.bytes) == valueOrElse(getString(this, J()), "")))
685688 then true
686- else ch(cg)
687- if ((ck == ck))
689+ else ci(ch)
690+ if ((cl == cl))
688691 then {
689- let aZ = aX(ax)
690- let dl = getString(aW(ax))
691- let bf = getString(aY(aZ))
692- let k = dl
692+ let ba = aY(ay)
693+ let dm = getString(aX(ay))
694+ let bg = getString(aZ(ba))
695+ let k = dm
693696 if ($isInstanceOf(k, "Unit"))
694697 then {
695- let dm = bf
696- if ($isInstanceOf(dm, "Unit"))
698+ let dn = bg
699+ if ($isInstanceOf(dn, "Unit"))
697700 then $Tuple2(nil, false)
698- else if ($isInstanceOf(dm, "String"))
701+ else if ($isInstanceOf(dn, "String"))
699702 then {
700- let dn = dm
701- $Tuple2([StringEntry(aW(ax), dn)], true)
703+ let do = dn
704+ $Tuple2([StringEntry(aX(ay), do)], true)
702705 }
703706 else throw("Match error")
704707 }
705708 else if ($isInstanceOf(k, "String"))
706709 then {
707- let az = k
708- let cy = A(this, ar(ax, az))
709- let cz = v(aT, Y(ax))
710- let bZ = bP(ax, az, cz, 0)._1
711- let cA = (bZ - cy)
712- let cB = if ((cA > g))
713- then invoke(this, "claimWxINTERNAL", [ax, az], nil)
710+ let aA = k
711+ let cz = A(this, as(ay, aA))
712+ let cA = v(aU, Z(ay))
713+ let ca = bQ(ay, aA, cA, 0)._1
714+ let cB = (ca - cz)
715+ let cC = if ((cB > g))
716+ then invoke(this, "claimWxINTERNAL", [ay, aA], nil)
714717 else unit
715- if ((cB == cB))
718+ if ((cC == cC))
716719 then {
717- let do = getString(bd(aZ, az))
718- let dm = do
719- if ($isInstanceOf(dm, "Unit"))
720- then $Tuple2([DeleteEntry(aW(ax))], false)
721- else if ($isInstanceOf(dm, "String"))
720+ let dp = getString(be(ba, aA))
721+ let dn = dp
722+ if ($isInstanceOf(dn, "Unit"))
723+ then $Tuple2([DeleteEntry(aX(ay))], false)
724+ else if ($isInstanceOf(dn, "String"))
722725 then {
723- let dp = dm
724- $Tuple2([StringEntry(aW(ax), dp)], true)
726+ let dq = dn
727+ $Tuple2([StringEntry(aX(ay), dq)], true)
725728 }
726729 else throw("Match error")
727730 }
728731 else throw("Strict value is not equal to itself.")
729732 }
730733 else throw("Match error")
731734 }
732735 else throw("Strict value is not equal to itself.")
733736 }
734737
735738
736739
737-@Callable(cg)
738-func onModifyWeight (ap,bs) = if ((cg.caller != aT))
740+@Callable(ch)
741+func onModifyWeight (aq,bt) = if ((ch.caller != aU))
739742 then throw("permissions denied")
740743 else {
741- let dq = br(ap, bs, 0)
742- let bp = dq._1
743- let bR = dq._2
744- let bS = dq._3
745- bR
744+ let dr = bs(aq, bt, 0)
745+ let bq = dr._1
746+ let bS = dr._2
747+ let bT = dr._3
748+ bS
746749 }
747750
748751
749-@Verifier(dr)
750-func ds () = {
751- let dt = {
752- let k = cc()
752+@Verifier(ds)
753+func dt () = {
754+ let du = {
755+ let k = cd()
753756 if ($isInstanceOf(k, "ByteVector"))
754757 then {
755- let ci = k
756- ci
758+ let cj = k
759+ cj
757760 }
758761 else if ($isInstanceOf(k, "Unit"))
759- then dr.senderPublicKey
762+ then ds.senderPublicKey
760763 else throw("Match error")
761764 }
762- sigVerify(dr.bodyBytes, dr.proofs[0], dt)
765+ sigVerify(ds.bodyBytes, ds.proofs[0], du)
763766 }
764767

github/deemru/w8io/169f3d6 
271.75 ms