tx · GPDrfDQ2Jpsvk5nSwYoCMcd5MEHcZSCcD2kGPSNpoy1M

3MsqKJ6o1ABE37676cHHBxJRs6huYTt72ch:  -0.03900000 Waves

2024.07.17 11:33 [3197802] smart account 3MsqKJ6o1ABE37676cHHBxJRs6huYTt72ch > SELF 0.00000000 Waves

{ "type": 13, "id": "GPDrfDQ2Jpsvk5nSwYoCMcd5MEHcZSCcD2kGPSNpoy1M", "fee": 3900000, "feeAssetId": null, "timestamp": 1721205202912, "version": 2, "chainId": 84, "sender": "3MsqKJ6o1ABE37676cHHBxJRs6huYTt72ch", "senderPublicKey": "3xjN6fjYDXBGUE1mcRw2Fvr4R6tEZnuJA98QFGF99sXd", "proofs": [ "QoQeusH8EtnYwzXqbgxXGrJcMojwK5Tuf7siG3cDENWuqH6KU1zqjkiYNZPYH46mrhXeXPWzaLVT5wymvA7Fe76" ], "script": "base64:CAJbCAISBAoCCAgSBQoDCAgIEgUKAwgIARIGCgQICAEIEgUKAwgIARIGCgQICAEIEgYKBAEICAESBwoFAQgIAQgSAwoBAhIAEgYKBAgSAQESBgoECAEICBIECgIBCE4AB0lOVF9NQVgA//////////9/AAVXQVZFUwCAwtcvAAtNSU5fQkFMQU5DRQkAaAIAoJwBBQVXQVZFUwADU0VQAgEsAA9CTE9DS19IQVNIX1NJWkUAIAAMQUREUkVTU19TSVpFABoAFFBVQkxJQ19LRVlfSEFTSF9TSVpFABQACXplcm9lc1N0cgKACDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAEHRoaXNFcG9jaERhdGFLZXkCDXRoaXNFcG9jaERhdGEADGFsbE1pbmVyc0tleQIJYWxsTWluZXJzAA5tYWluQ2hhaW5JZEtleQILbWFpbkNoYWluSWQADmxhc3RDaGFpbklkS2V5AgtsYXN0Q2hhaW5JZAAXZmlyc3RWYWxpZEFsdENoYWluSWRLZXkCFGZpcnN0VmFsaWRBbHRDaGFpbklkAA5taW5lclJld2FyZEtleQILbWluZXJSZXdhcmQAGXN0YWtpbmdDb250cmFjdEFkZHJlc3NLZXkCFnN0YWtpbmdDb250cmFjdEFkZHJlc3MACmJsb2NrTWV0YUsCCGJsb2NrXzB4ABFmaW5hbGl6ZWRCbG9ja0tleQIOZmluYWxpemVkQmxvY2sACnRva2VuSWRLZXkCB3Rva2VuSWQAEmVsQnJpZGdlQWRkcmVzc0tleQIPZWxCcmlkZ2VBZGRyZXNzABNwcmV2UmFuZGFvSGVpZ2h0S2V5AhBwcmV2UmFuZGFvSGVpZ2h0ABdlbFRvQ2xUcmFuc2ZlcnNFcG9jaEtleQIUZWxUb0NsVHJhbnNmZXJzRXBvY2gBA3BhZAEBaQQBcwkApAMBBQFpBAckbWF0Y2gwCQCxAgEFAXMDCQAAAgABBQckbWF0Y2gwCQCsAgICBzAwMDAwMDAFAXMDCQAAAgACBQckbWF0Y2gwCQCsAgICBjAwMDAwMAUBcwMJAAACAAMFByRtYXRjaDAJAKwCAgIFMDAwMDAFAXMDCQAAAgAEBQckbWF0Y2gwCQCsAgICBDAwMDAFAXMDCQAAAgAFBQckbWF0Y2gwCQCsAgICAzAwMAUBcwMJAAACAAYFByRtYXRjaDAJAKwCAgICMDAFAXMDCQAAAgAHBQckbWF0Y2gwCQCsAgICATAFAXMFAXMBF2Jsb2NrRWxUb0NsVHJhbnNmZXJzS2V5AQxibG9ja0hhc2hIZXgJAKwCAgISZWxUb0NsVHJhbnNmZXJzXzB4BQxibG9ja0hhc2hIZXgBDGVwb2NoTWV0YUtleQEFZXBvY2gJAKwCAgIGZXBvY2hfCQEDcGFkAQUFZXBvY2gBFGNoYWluRmlyc3RCbG9ja0lkS2V5AQdjaGFpbklkCQCsAgIJAKwCAgIFY2hhaW4JAKQDAQUHY2hhaW5JZAIKRmlyc3RCbG9jawEMY2hhaW5NZXRhS2V5AQdjaGFpbklkCQCsAgICBmNoYWluXwkBA3BhZAEFB2NoYWluSWQBEmNoYWluTGFzdEhlaWdodEtleQIHY2hhaW5JZAVtaW5lcgkArAICCQCsAgIJAKwCAgIGY2hhaW5fCQEDcGFkAQUHY2hhaW5JZAIBXwkApQgBBQVtaW5lcgEUY2hhaW5Gb3JrZWRIZWlnaHRLZXkBB2NoYWluSWQJAKwCAgkArAICAgZjaGFpbl8JAQNwYWQBBQdjaGFpbklkAgxGb3JrZWRIZWlnaHQBDXN1cHBvcnRlcnNLZXkBB2NoYWluSWQJAKwCAgkArAICAgVjaGFpbgkApAMBBQdjaGFpbklkAgpTdXBwb3J0ZXJzARVtaW5lclJld2FyZEFkZHJlc3NLZXkBCW1pbmVyQWRkcgkArAICCQCsAgICBm1pbmVyXwUJbWluZXJBZGRyAg5fUmV3YXJkQWRkcmVzcwEKbWluZXJQa0tleQENcmV3YXJkQWRkcmVzcwkArAICCQCsAgICCG1pbmVyXzB4BQ1yZXdhcmRBZGRyZXNzAgNfUEsBD21pbmVyQ2hhaW5JZEtleQEFbWluZXIJAKwCAgkArAICAgZtaW5lcl8JAKUIAQUFbWluZXICCF9DaGFpbklkABRlbFRvQ2xUcmFuc2ZlcnNFcG9jaAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRdlbFRvQ2xUcmFuc2ZlcnNFcG9jaEtleQUHSU5UX01BWAEecmVxdWlyZUVsVG9DbFRyYW5zZmVyc0Rpc2FibGVkAAMJAGYCBRRlbFRvQ2xUcmFuc2ZlcnNFcG9jaAUGaGVpZ2h0BQR1bml0CQACAQkArAICCQCsAgICJ0VMIHRvIENMIHRyYW5zZmVycyBhY3RpdmF0ZWQgb24gZXBvY2ggIwkApAMBBQZoZWlnaHQCFS4gVXBncmFkZSB5b3VyIGNsaWVudAEdcmVxdWlyZUVsVG9DbFRyYW5zZmVyc0VuYWJsZWQAAwkAZwIFBmhlaWdodAUUZWxUb0NsVHJhbnNmZXJzRXBvY2gFBHVuaXQJAAIBCQCsAgIJAKwCAgkArAICAi9FTCB0byBDTCB0cmFuc2ZlcnMgaGF2ZW4ndCBhY3RpdmF0ZWQgb24gZXBvY2ggIwkApAMBBQZoZWlnaHQCGi4gV2FpdCBmb3IgYWN0aXZhdGlvbiBvbiAjCQCkAwEFFGVsVG9DbFRyYW5zZmVyc0Vwb2NoABZzdGFraW5nQ29udHJhY3RBZGRyZXNzBAckbWF0Y2gwCQCdCAIFBHRoaXMFGXN0YWtpbmdDb250cmFjdEFkZHJlc3NLZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUBcwkArAICAiJpbnZhbGlkIHN0YWtpbmcgY29udHJhY3QgYWRkcmVzczogBQFzCQEHQWRkcmVzcwEJARFAZXh0ck5hdGl2ZSgxMDUyKQIFBHRoaXMFGXN0YWtpbmdDb250cmFjdEFkZHJlc3NLZXkBEWdlbmVyYXRpbmdCYWxhbmNlAQdhZGRyZXNzBAckbWF0Y2gwCQCdCAIFFnN0YWtpbmdDb250cmFjdEFkZHJlc3MJAKwCAgIEJXNfXwkApQgBBQdhZGRyZXNzAwkAAQIFByRtYXRjaDACBlN0cmluZwQDc3RyBQckbWF0Y2gwBAlwYXJhbUxpc3QJALUJAgUDc3RyAgJfXwQKcHJldkhlaWdodAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCXBhcmFtTGlzdAABBAtwcmV2QmFsYW5jZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCXBhcmFtTGlzdAACBApuZXh0SGVpZ2h0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJcGFyYW1MaXN0AAMEC25leHRCYWxhbmNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJcGFyYW1MaXN0AAQDCQBnAgUGaGVpZ2h0BQpuZXh0SGVpZ2h0BQtuZXh0QmFsYW5jZQMJAGcCBQZoZWlnaHQFCnByZXZIZWlnaHQFC3ByZXZCYWxhbmNlAAAAAAEJY2hhaW5NZXRhAQdjaGFpbklkBAFzCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEMY2hhaW5NZXRhS2V5AQUHY2hhaW5JZAQFaXRlbXMJALUJAgUBcwUDU0VQCQCUCgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVpdGVtcwAACQCRAwIFBWl0ZW1zAAEAC21haW5DaGFpbklkCQELdmFsdWVPckVsc2UCCQCfCAEFDm1haW5DaGFpbklkS2V5AAAACyR0MDQ5MTE0OTc3CQEJY2hhaW5NZXRhAQULbWFpbkNoYWluSWQAD21haW5DaGFpbkhlaWdodAgFCyR0MDQ5MTE0OTc3Al8xABJtYWluQ2hhaW5MYXN0QmxvY2sIBQskdDA0OTExNDk3NwJfMgEJZXBvY2hNZXRhAQVlcG9jaAQHJG1hdGNoMAkAoggBCQEMZXBvY2hNZXRhS2V5AQUFZXBvY2gDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBAlmcmFnbWVudHMJALUJAgUBcwUDU0VQCQCVCgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUJZnJhZ21lbnRzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlmcmFnbWVudHMAAQkAkQMCBQlmcmFnbWVudHMAAgUEdW5pdAALJHQwNTIwODU2NzIEByRtYXRjaDAJAQllcG9jaE1ldGEBBQZoZWlnaHQDCQABAgUHJG1hdGNoMAIWKEFkZHJlc3MsIEludCwgU3RyaW5nKQQBbQUHJG1hdGNoMAUBbQQHJG1hdGNoMQkAoggBBRB0aGlzRXBvY2hEYXRhS2V5AwkAAQIFByRtYXRjaDECBlN0cmluZwQQcmF3VGhpc0Vwb2NoRGF0YQUHJG1hdGNoMQQNdGhpc0Vwb2NoRGF0YQkAtQkCBRByYXdUaGlzRXBvY2hEYXRhBQNTRVAECXRoaXNFcG9jaAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDXRoaXNFcG9jaERhdGEAAAkAlQoDAwkAAAIFCXRoaXNFcG9jaAUGaGVpZ2h0CQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFDXRoaXNFcG9jaERhdGEAAQUEdW5pdAAAAgAJAJUKAwUEdW5pdAAAAgAADnRoaXNFcG9jaE1pbmVyCAULJHQwNTIwODU2NzICXzEADHRoaXNFcG9jaFJlZggFCyR0MDUyMDg1NjcyAl8yABJ0aGlzRXBvY2hMYXN0QmxvY2sIBQskdDA1MjA4NTY3MgJfMwAMYWxsTWluZXJzU3RyCQELdmFsdWVPckVsc2UCCQCiCAEFDGFsbE1pbmVyc0tleQIAAAlhbGxNaW5lcnMEByRtYXRjaDAFDGFsbE1pbmVyc1N0cgMJAAACAgAFByRtYXRjaDAFA25pbAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEA3JhdwUHJG1hdGNoMAkAvAkCBQNyYXcFA1NFUAkAAgECC01hdGNoIGVycm9yAQlibG9ja01ldGEBB2Jsb2NrSWQEBG1ldGEJARFAZXh0ck5hdGl2ZSgxMDU3KQEJAKwCAgUKYmxvY2tNZXRhSwUHYmxvY2tJZAQLYmxvY2tIZWlnaHQJALEJAQUEbWV0YQQKYmxvY2tFcG9jaAkAsgkCBQRtZXRhAAgEC2Jsb2NrUGFyZW50CQDJAQIJAMoBAgUEbWV0YQAQBQ9CTE9DS19IQVNIX1NJWkUEDmJsb2NrR2VuZXJhdG9yCQDJAQIJAMoBAgUEbWV0YQkAZAIAEAUPQkxPQ0tfSEFTSF9TSVpFBQxBRERSRVNTX1NJWkUDCQBmAgUUZWxUb0NsVHJhbnNmZXJzRXBvY2gFCmJsb2NrRXBvY2gJAJgKBgULYmxvY2tIZWlnaHQFCmJsb2NrRXBvY2gFC2Jsb2NrUGFyZW50BQ5ibG9ja0dlbmVyYXRvcgAAAQAEB2NoYWluSWQJALEJAQkAygECBQRtZXRhCQBkAgkAZAIAEAUPQkxPQ0tfSEFTSF9TSVpFBQxBRERSRVNTX1NJWkUEF2VsVG9DbFRyYW5zZmVyc1Jvb3RIYXNoCQDKAQIFBG1ldGEJAGQCCQBkAgAYBQ9CTE9DS19IQVNIX1NJWkUFDEFERFJFU1NfU0laRQkAmAoGBQtibG9ja0hlaWdodAUKYmxvY2tFcG9jaAULYmxvY2tQYXJlbnQFDmJsb2NrR2VuZXJhdG9yBQdjaGFpbklkBRdlbFRvQ2xUcmFuc2ZlcnNSb290SGFzaAEQbWtCbG9ja01ldGFFbnRyeQYMYmxvY2tIYXNoSGV4C2Jsb2NrSGVpZ2h0DmJsb2NrUGFyZW50SGV4DmJsb2NrR2VuZXJhdG9yB2NoYWluSWQaZWxUb0NsVHJhbnNmZXJzUm9vdEhhc2hIZXgED2Jsb2NrRXBvY2hCeXRlcwkAmgMBBQZoZWlnaHQEDmJsb2NrTWV0YUJ5dGVzCQDLAQIJAMsBAgkAywECCQDLAQIJAMsBAgkAmgMBBQtibG9ja0hlaWdodAUPYmxvY2tFcG9jaEJ5dGVzCQDdBAEFDmJsb2NrUGFyZW50SGV4CAUOYmxvY2tHZW5lcmF0b3IFYnl0ZXMJAJoDAQUHY2hhaW5JZAkA3QQBBRplbFRvQ2xUcmFuc2ZlcnNSb290SGFzaEhleAkBC0JpbmFyeUVudHJ5AgkArAICBQpibG9ja01ldGFLBQxibG9ja0hhc2hIZXgFDmJsb2NrTWV0YUJ5dGVzAQxsYXN0SGVpZ2h0QnkCBW1pbmVyB2NoYWluSWQEByRtYXRjaDAJAJ8IAQkBEmNoYWluTGFzdEhlaWdodEtleQIFB2NoYWluSWQFBW1pbmVyAwkAAQIFByRtYXRjaDACA0ludAQBaAUHJG1hdGNoMAUBaAQJYmxvY2tIYXNoCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgIJAKwCAgkArAICAgVjaGFpbgkApAMBBQdjaGFpbklkAgtMYXN0TWluZWRCeQkApQgBBQVtaW5lcggJAQlibG9ja01ldGEBBQlibG9ja0hhc2gCXzEACyR0MDczMjA4Mjg2BAloaXRTb3VyY2UEByRtYXRjaDAIBQlsYXN0QmxvY2sDdnJmAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEA3ZyZgUHJG1hdGNoMAUDdnJmCAUJbGFzdEJsb2NrE2dlbmVyYXRpb25TaWduYXR1cmUKAQxwcm9jZXNzTWluZXICBHByZXYFbWluZXIECyR0MDc2MTg3NjgxBQRwcmV2BAlwcmV2RGVsYXkIBQskdDA3NjE4NzY4MQJfMQQJcHJldk1pbmVyCAULJHQwNzYxODc2ODECXzIEEHByZXZUb3RhbEJhbGFuY2UIBQskdDA3NjE4NzY4MQJfMwQKcHJldk1pbmVycwgFCyR0MDc2MTg3NjgxAl80BAxtaW5lckFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBW1pbmVyBA93YXZlc0dlbkJhbGFuY2UICQDvBwEFDG1pbmVyQWRkcmVzcwpnZW5lcmF0aW5nBAxtaW5lckJhbGFuY2UJARFnZW5lcmF0aW5nQmFsYW5jZQEFDG1pbmVyQWRkcmVzcwMDCQBmAgULTUlOX0JBTEFOQ0UFD3dhdmVzR2VuQmFsYW5jZQYJAGcCAAAFDG1pbmVyQmFsYW5jZQUEcHJldgQJbmV4dERlbGF5CQCFBwIFDG1pbmVyQWRkcmVzcwUMbWluZXJCYWxhbmNlAwkAZgIFCXByZXZEZWxheQUJbmV4dERlbGF5CQCWCgQFCW5leHREZWxheQUFbWluZXIJAGQCBRBwcmV2VG90YWxCYWxhbmNlBQxtaW5lckJhbGFuY2UJAM0IAgUKcHJldk1pbmVycwUFbWluZXIJAJYKBAUJcHJldkRlbGF5BQlwcmV2TWluZXIJAGQCBRBwcmV2VG90YWxCYWxhbmNlBQxtaW5lckJhbGFuY2UJAM0IAgUKcHJldk1pbmVycwUFbWluZXIKAAIkbAUJYWxsTWluZXJzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEBQdJTlRfTUFYAgAAAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxwcm9jZXNzTWluZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgANY29tcHV0ZWREZWxheQgFCyR0MDczMjA4Mjg2Al8xABFjb21wdXRlZEdlbmVyYXRvcggFCyR0MDczMjA4Mjg2Al8yABRjb21wdXRlZFRvdGFsQmFsYW5jZQgFCyR0MDczMjA4Mjg2Al8zAA5maWx0ZXJlZE1pbmVycwgFCyR0MDczMjA4Mjg2Al80ARNnZXRDaGFpbkxhc3RCbG9ja0lkAQdjaGFpbklkCAkBCWNoYWluTWV0YQEFB2NoYWluSWQCXzIACyR0MDgzNTI4NDg3CQEJYmxvY2tNZXRhAQUSbWFpbkNoYWluTGFzdEJsb2NrAAxtY2xiSWdub3JlZDEIBQskdDA4MzUyODQ4NwJfMQAObWFpbkNoYWluRXBvY2gIBQskdDA4MzUyODQ4NwJfMgATbWFpbkNoYWluUGFyZW50SGFzaAgFCyR0MDgzNTI4NDg3Al8zABJtYWluQ2hhaW5HZW5lcmF0b3IIBQskdDA4MzUyODQ4NwJfNAAMbWNsYklnbm9yZWQyCAULJHQwODM1Mjg0ODcCXzUADG1jbGJJZ25vcmVkMwgFCyR0MDgzNTI4NDg3Al82ARtjYWxjdWxhdGVGaW5hbGl6ZWRCbG9ja0hhc2gDCGN1ck1pbmVyDGN1clByZXZFcG9jaBBjdXJMYXN0QmxvY2tIYXNoBAtvZmZzZXRzXzEwMAkAvAkCAmQ6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6AgAEC2hhbGZCYWxhbmNlCQBpAgUUY29tcHV0ZWRUb3RhbEJhbGFuY2UAAgoBBHN0ZXACBHByZXYEbmV4dAQLJHQwODg1Mzg5MTcFBHByZXYECXRoaXNFcG9jaAgFCyR0MDg4NTM4OTE3Al8xBAx0b3RhbEJhbGFuY2UIBQskdDA4ODUzODkxNwJfMgQObWF5YmVTYWZlRXBvY2gIBQskdDA4ODUzODkxNwJfMwQKcHJldk1pbmVycwgFCyR0MDg4NTM4OTE3Al80BAckbWF0Y2gwBQ5tYXliZVNhZmVFcG9jaAMJAAECBQckbWF0Y2gwAgRVbml0BAskdDA4OTc1OTE0MQMJAAACBQl0aGlzRXBvY2gFBmhlaWdodAkAlQoDBQhjdXJNaW5lcgUMY3VyUHJldkVwb2NoBRBjdXJMYXN0QmxvY2tIYXNoCQEFdmFsdWUBCQEJZXBvY2hNZXRhAQUJdGhpc0Vwb2NoBAVtaW5lcggFCyR0MDg5NzU5MTQxAl8xBAlwcmV2RXBvY2gIBQskdDA4OTc1OTE0MQJfMgQNbGFzdEJsb2NrSGFzaAgFCyR0MDg5NzU5MTQxAl8zAwkAAAIFCXByZXZFcG9jaAAACQCWCgQFCXRoaXNFcG9jaAUMdG90YWxCYWxhbmNlBQ1sYXN0QmxvY2tIYXNoBQlhbGxNaW5lcnMECyR0MDkyNjY5NDY4AwkBD2NvbnRhaW5zRWxlbWVudAIFCnByZXZNaW5lcnMFBW1pbmVyCQCUCgIFDHRvdGFsQmFsYW5jZQUKcHJldk1pbmVycwkAlAoCCQBkAgUMdG90YWxCYWxhbmNlCQERZ2VuZXJhdGluZ0JhbGFuY2UBBQVtaW5lcgkAzAgCBQVtaW5lcgUKcHJldk1pbmVycwQPbmV3VG90YWxCYWxhbmNlCAULJHQwOTI2Njk0NjgCXzEECW5ld01pbmVycwgFCyR0MDkyNjY5NDY4Al8yAwkAZgIFD25ld1RvdGFsQmFsYW5jZQULaGFsZkJhbGFuY2UJAJYKBAUJdGhpc0Vwb2NoBQ9uZXdUb3RhbEJhbGFuY2UFDWxhc3RCbG9ja0hhc2gFCWFsbE1pbmVycwkAlgoEBQlwcmV2RXBvY2gFD25ld1RvdGFsQmFsYW5jZQUEdW5pdAUJbmV3TWluZXJzBQRwcmV2BAskdDA5NzAxOTgzNAoAAiRsCQDOCAIFC29mZnNldHNfMTAwBQtvZmZzZXRzXzEwMAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAUGaGVpZ2h0AAAFBHVuaXQFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEc3RlcAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIVTGlzdCBzaXplIGV4Y2VlZHMgMjAwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQByAHMAdAB1AHYAdwB4AHkAegB7AHwAfQB+AH8AgAEAgQEAggEAgwEAhAEAhQEAhgEAhwEAiAEAiQEAigEAiwEAjAEAjQEAjgEAjwEAkAEAkQEAkgEAkwEAlAEAlQEAlgEAlwEAmAEAmQEAmgEAmwEAnAEAnQEAngEAnwEAoAEAoQEAogEAowEApAEApQEApgEApwEAqAEAqQEAqgEAqwEArAEArQEArgEArwEAsAEAsQEAsgEAswEAtAEAtQEAtgEAtwEAuAEAuQEAugEAuwEAvAEAvQEAvgEAvwEAwAEAwQEAwgEAwwEAxAEAxQEAxgEAxwEAyAEEDWZhbGxiYWNrRXBvY2gIBQskdDA5NzAxOTgzNAJfMQQMdG90YWxCYWxhbmNlCAULJHQwOTcwMTk4MzQCXzIEFWZpbmFsaXplZEJsb2NrSGFzaE9wdAgFCyR0MDk3MDE5ODM0Al8zBAZtaW5lcnMIBQskdDA5NzAxOTgzNAJfNAQHJG1hdGNoMAUVZmluYWxpemVkQmxvY2tIYXNoT3B0AwkAAQIFByRtYXRjaDACBlN0cmluZwQSZmluYWxpemVkQmxvY2tIYXNoBQckbWF0Y2gwBRJmaW5hbGl6ZWRCbG9ja0hhc2gICQEFdmFsdWUBCQEJZXBvY2hNZXRhAQUNZmFsbGJhY2tFcG9jaAJfMwERc3VwcG9ydGluZ0JhbGFuY2UBB2NoYWluSWQKAQphZGRCYWxhbmNlAgNhY2MMZ2VuZXJhdG9yU3RyBA0kdDAxMDEwNDEwMTQwBQNhY2MEDHRvdGFsQmFsYW5jZQgFDSR0MDEwMTA0MTAxNDACXzEECmdlbmVyYXRvcnMIBQ0kdDAxMDEwNDEwMTQwAl8yBAlnZW5lcmF0b3IJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDGdlbmVyYXRvclN0cgMJAQ9jb250YWluc0VsZW1lbnQCBQpnZW5lcmF0b3JzBQlnZW5lcmF0b3IFA2FjYwQHYmFsYW5jZQkBEWdlbmVyYXRpbmdCYWxhbmNlAQUJZ2VuZXJhdG9yCQCUCgIJAGQCBQx0b3RhbEJhbGFuY2UFB2JhbGFuY2UJAM0IAgUKZ2VuZXJhdG9ycwUJZ2VuZXJhdG9yBA1hbGxHZW5lcmF0b3JzCQC8CQIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAQ1zdXBwb3J0ZXJzS2V5AQUHY2hhaW5JZAUDU0VQBA0kdDAxMDQ2MjEwNTI3CgACJGwFDWFsbEdlbmVyYXRvcnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQphZGRCYWxhbmNlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhVMaXN0IHNpemUgZXhjZWVkcyAxMDAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZAQHYmFsYW5jZQgFDSR0MDEwNDYyMTA1MjcCXzEEAl9nCAUNJHQwMTA0NjIxMDUyNwJfMgUHYmFsYW5jZQEPaXNDb250cmFjdFNldHVwAAkBCWlzRGVmaW5lZAEJAJ8IAQUObWluZXJSZXdhcmRLZXkBEWVuc3VyZU1pbmluZ0Vwb2NoAQlnZW5lcmF0b3IDCQECIT0CCQClCAEFCWdlbmVyYXRvcgURY29tcHV0ZWRHZW5lcmF0b3IJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJANgEAQgFCWdlbmVyYXRvcgVieXRlcwIbIGlzIG5vdCBhbGxvd2VkIHRvIG1pbmUgaW4gCQCkAwEFBmhlaWdodAIRIGVwb2NoLiBFeHBlY3RlZCAFEWNvbXB1dGVkR2VuZXJhdG9yBQR1bml0ARJpc1JlZmVyZW5jZUNvcnJlY3QCCXJlZmVyZW5jZQlsYXN0QmxvY2sDCQAAAgUJcmVmZXJlbmNlBQlsYXN0QmxvY2sFBHVuaXQJAAIBCQCsAgIJAKwCAgkArAICAjBFeHBlY3RlZCBhIHJlZmVyZW5jZSB0byB0aGUgY2hhaW4gbGFzdCBibG9jazogMHgFCWxhc3RCbG9jawIJLiBHb3Q6IDB4BQlyZWZlcmVuY2UBD2NoYWluSXNJbmFjdGl2ZQEHY2hhaW5JZAQMZmlyc3RCbG9ja0lkCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEUY2hhaW5GaXJzdEJsb2NrSWRLZXkBBQdjaGFpbklkBBRmaXJzdFZhbGlkQWx0Q2hhaW5JZAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRdmaXJzdFZhbGlkQWx0Q2hhaW5JZEtleQAAAwkAZgIFFGZpcnN0VmFsaWRBbHRDaGFpbklkBQdjaGFpbklkBgkAZgIICQEJYmxvY2tNZXRhAQkBEUBleHRyTmF0aXZlKDEwNTgpAQURZmluYWxpemVkQmxvY2tLZXkCXzEICQEJYmxvY2tNZXRhAQUMZmlyc3RCbG9ja0lkAl8xAQxtaW5lckNoYWluSWQBBW1pbmVyCQELdmFsdWVPckVsc2UCCQCfCAEJAQ9taW5lckNoYWluSWRLZXkBBQVtaW5lcgkAnwgBCQCsAgICCWNoYWluSWRPZgkApQgBBQVtaW5lcgEdZW5zdXJlRXhwZWN0ZWRPckluYWN0aXZlQ2hhaW4DCWdlbmVyYXRvcg9leHBlY3RlZENoYWluSWQQY2hlY2tIZWlnaHRCbG9jawQPaGVpZ2h0SXNDb3JyZWN0BAckbWF0Y2gwBRBjaGVja0hlaWdodEJsb2NrAwkAAQIFByRtYXRjaDACBlN0cmluZwQJYmxvY2tIYXNoBQckbWF0Y2gwBBRsYXN0TWluZWRCbG9ja0hlaWdodAkBDGxhc3RIZWlnaHRCeQIFCWdlbmVyYXRvcgULbWFpbkNoYWluSWQJAGYCCQBkAggJAQlibG9ja01ldGEBBQlibG9ja0hhc2gCXzEAAQUUbGFzdE1pbmVkQmxvY2tIZWlnaHQGBAckbWF0Y2gwCQEMbWluZXJDaGFpbklkAQUJZ2VuZXJhdG9yAwkAAQIFByRtYXRjaDACA0ludAQJY3VycmVudElkBQckbWF0Y2gwAwMJAAACBQljdXJyZW50SWQFD2V4cGVjdGVkQ2hhaW5JZAYDCQEPY2hhaW5Jc0luYWN0aXZlAQUJY3VycmVudElkBQ9oZWlnaHRJc0NvcnJlY3QHBQR1bml0CQACAQkArAICAhxtaW5lciBpcyBtaW5pbmcgb3RoZXIgY2hhaW4gCQCkAwEFCWN1cnJlbnRJZAUEdW5pdAESZW5zdXJlQ29ycmVjdEVwb2NoAQVlcG9jaAMJAAACBQVlcG9jaAUGaGVpZ2h0BQR1bml0CQACAQkArAICCQCsAgIJAKwCAgIaRXhwZWN0ZWQgYmxvY2sgZnJvbSBlcG9jaCAJAKQDAQUGaGVpZ2h0AgYuIEdvdCAJAKQDAQUFZXBvY2gBDGFkZFN1cHBvcnRlcgIHY2hhaW5JZAlnZW5lcmF0b3IEDXN1cHBvcnRlcnNTdHIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAQ1zdXBwb3J0ZXJzS2V5AQUHY2hhaW5JZAQKc3VwcG9ydGVycwkAvAkCBQ1zdXBwb3J0ZXJzU3RyBQNTRVADCQEPY29udGFpbnNFbGVtZW50AgUKc3VwcG9ydGVycwkApQgBBQlnZW5lcmF0b3IFA25pbAkAzAgCCQELU3RyaW5nRW50cnkCCQENc3VwcG9ydGVyc0tleQEFB2NoYWluSWQJAKwCAgkArAICBQ1zdXBwb3J0ZXJzU3RyBQNTRVAJAKUIAQUJZ2VuZXJhdG9yBQNuaWwBCXNldE9yRmFpbAIFZmxhZ3MFaW5kZXgDCQBmAgAABQVpbmRleAkAAgEJAKwCAgIiQ2FuJ3Qgd2l0aGRyYXcgYXQgbmVnYXRpdmUgaW5kZXg6IAkApAMBBQVpbmRleAQJZmxhZ3NTaXplCQCxAgEFBWZsYWdzAwkAZwIFBWluZGV4BQlmbGFnc1NpemUECWFkZFplcm9lcwkAZQIFBWluZGV4BQlmbGFnc1NpemUDCQBmAgUJYWRkWmVyb2VzCQCxAgEFCXplcm9lc1N0cgkAAgEJAKwCAgkArAICAgpDYW4ndCBhZGQgCQCkAwEFCWFkZFplcm9lcwIlIGVtcHR5IGZsYWdzLiBDb250YWN0IHdpdGggZGV2ZWxvcGVycwkArAICCQCsAgIFBWZsYWdzCQCvAgIFCXplcm9lc1N0cgUJYWRkWmVyb2VzAgExBAR0YWlsCQCwAgIFBWZsYWdzBQVpbmRleAQHYXRJbmRleAkArwICBQR0YWlsAAEDCQAAAgUHYXRJbmRleAIBMAkArAICCQCsAgIJAK8CAgUFZmxhZ3MFBWluZGV4AgExCQCwAgIFBHRhaWwAAQkAAgEJAKwCAgkArAICAgpUcmFuc2ZlciAjCQCkAwEFBWluZGV4AhcgaGFzIGJlZW4gYWxyZWFkeSB0YWtlbgERdmFsaWRhdGVCbG9ja0hhc2gBBmhleFN0cgQMZGVjb2RlZEJ5dGVzCQDdBAEFBmhleFN0cgMJAQIhPQIJAMgBAQUMZGVjb2RlZEJ5dGVzACAJAAIBAhdpbnZhbGlkIGJsb2NrIGlkIGxlbmd0aAUGaGV4U3RyAR1nZXRVcGRhdGVGaW5hbGl6ZWRCbG9ja0FjdGlvbgMGY2FsbGVyD25ld0Jsb2NrSGFzaEhleAlwcmV2RXBvY2gEF2N1ckZpbmFsaXplZEJsb2NrSGVpZ2h0CAkBCWJsb2NrTWV0YQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFEWZpbmFsaXplZEJsb2NrS2V5Al8xBBVuZXdGaW5hbGl6ZWRCbG9ja0hhc2gJARtjYWxjdWxhdGVGaW5hbGl6ZWRCbG9ja0hhc2gDBQZjYWxsZXIFCXByZXZFcG9jaAUPbmV3QmxvY2tIYXNoSGV4AwMJAAACBRVuZXdGaW5hbGl6ZWRCbG9ja0hhc2gFD25ld0Jsb2NrSGFzaEhleAYJAGYCCAkBCWJsb2NrTWV0YQEFFW5ld0ZpbmFsaXplZEJsb2NrSGFzaAJfMQUXY3VyRmluYWxpemVkQmxvY2tIZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgURZmluYWxpemVkQmxvY2tLZXkFFW5ld0ZpbmFsaXplZEJsb2NrSGFzaAUDbmlsBQNuaWwNAWkBC2FwcGVuZEJsb2NrAgxibG9ja0hhc2hIZXgMcmVmZXJlbmNlSGV4BAxjaGVja1ZlcnNpb24JAR5yZXF1aXJlRWxUb0NsVHJhbnNmZXJzRGlzYWJsZWQAAwkAAAIFDGNoZWNrVmVyc2lvbgUMY2hlY2tWZXJzaW9uAwkBAiE9AgUOdGhpc0Vwb2NoTWluZXIIBQFpDG9yaWdpbkNhbGxlcgQHJG1hdGNoMAUOdGhpc0Vwb2NoTWluZXIDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQKZXBvY2hNaW5lcgUHJG1hdGNoMAkAAgEJAKwCAgI5bm90IGFsbG93ZWQgdG8gZm9yZ2UgYmxvY2tzIGluIHRoaXMgZXBvY2gsIGV4cGVjdGVkIGZyb20gCQClCAEFCmVwb2NoTWluZXIJAAIBAkBub3QgYWxsb3dlZCB0byBmb3JnZSBibG9ja3MgaW4gdGhpcyBlcG9jaCwgZXBvY2ggbWluZXIgaXMgYWJzZW50BAdjaGFpbklkCQELdmFsdWVPckVsc2UCCQEMbWluZXJDaGFpbklkAQgFAWkMb3JpZ2luQ2FsbGVyBQttYWluQ2hhaW5JZAQNJHQwMTQ2NDQxNDY5NQkBCWNoYWluTWV0YQEFB2NoYWluSWQEC2NoYWluSGVpZ2h0CAUNJHQwMTQ2NDQxNDY5NQJfMQQLbGFzdEJsb2NrSWQIBQ0kdDAxNDY0NDE0Njk1Al8yBA5jaGVja1JlZmVyZW5jZQkBEmlzUmVmZXJlbmNlQ29ycmVjdAIFDHJlZmVyZW5jZUhleAULbGFzdEJsb2NrSWQDCQAAAgUOY2hlY2tSZWZlcmVuY2UFDmNoZWNrUmVmZXJlbmNlBA5uZXdDaGFpbkhlaWdodAkAZAIFC2NoYWluSGVpZ2h0AAEEDG5ld0Jsb2NrTWV0YQkAywECCQDLAQIJAMsBAgkAmgMBBQ5uZXdDaGFpbkhlaWdodAkAmgMBBQZoZWlnaHQJAN0EAQULbGFzdEJsb2NrSWQICAUBaQxvcmlnaW5DYWxsZXIFYnl0ZXMEDmNoZWNrQmxvY2tIYXNoCQERdmFsaWRhdGVCbG9ja0hhc2gBBQxibG9ja0hhc2hIZXgDCQAAAgUOY2hlY2tCbG9ja0hhc2gFDmNoZWNrQmxvY2tIYXNoCQDMCAIJAQtCaW5hcnlFbnRyeQIJAKwCAgUKYmxvY2tNZXRhSwUMYmxvY2tIYXNoSGV4BQxuZXdCbG9ja01ldGEJAMwIAgkBDEludGVnZXJFbnRyeQIJARJjaGFpbkxhc3RIZWlnaHRLZXkCBQdjaGFpbklkCAUBaQxvcmlnaW5DYWxsZXIFDm5ld0NoYWluSGVpZ2h0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxjaGFpbk1ldGFLZXkBBQdjaGFpbklkCQCsAgIJAKwCAgkApAMBBQ5uZXdDaGFpbkhlaWdodAUDU0VQBQxibG9ja0hhc2hIZXgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGVwb2NoTWV0YUtleQEFBmhlaWdodAkArAICCQCsAgIJAKwCAgkArAICCQClCAEJAQV2YWx1ZQEFDnRoaXNFcG9jaE1pbmVyBQNTRVAJAKQDAQUMdGhpc0Vwb2NoUmVmBQNTRVAFDGJsb2NrSGFzaEhleAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmFwcGVuZEJsb2NrX3YyAwxibG9ja0hhc2hIZXgMcmVmZXJlbmNlSGV4GmVsVG9DbFRyYW5zZmVyc1Jvb3RIYXNoSGV4BAxjaGVja1ZlcnNpb24JAR1yZXF1aXJlRWxUb0NsVHJhbnNmZXJzRW5hYmxlZAADCQAAAgUMY2hlY2tWZXJzaW9uBQxjaGVja1ZlcnNpb24DCQECIT0CBQ50aGlzRXBvY2hNaW5lcggFAWkMb3JpZ2luQ2FsbGVyBAckbWF0Y2gwBQ50aGlzRXBvY2hNaW5lcgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAplcG9jaE1pbmVyBQckbWF0Y2gwCQACAQkArAICAjlub3QgYWxsb3dlZCB0byBmb3JnZSBibG9ja3MgaW4gdGhpcyBlcG9jaCwgZXhwZWN0ZWQgZnJvbSAJAKUIAQUKZXBvY2hNaW5lcgkAAgECQG5vdCBhbGxvd2VkIHRvIGZvcmdlIGJsb2NrcyBpbiB0aGlzIGVwb2NoLCBlcG9jaCBtaW5lciBpcyBhYnNlbnQEB2NoYWluSWQJAQt2YWx1ZU9yRWxzZQIJAQxtaW5lckNoYWluSWQBCAUBaQxvcmlnaW5DYWxsZXIFC21haW5DaGFpbklkBA0kdDAxNTk2OTE2MDIwCQEJY2hhaW5NZXRhAQUHY2hhaW5JZAQLY2hhaW5IZWlnaHQIBQ0kdDAxNTk2OTE2MDIwAl8xBAtsYXN0QmxvY2tJZAgFDSR0MDE1OTY5MTYwMjACXzIEDmNoZWNrUmVmZXJlbmNlCQESaXNSZWZlcmVuY2VDb3JyZWN0AgUMcmVmZXJlbmNlSGV4BQtsYXN0QmxvY2tJZAMJAAACBQ5jaGVja1JlZmVyZW5jZQUOY2hlY2tSZWZlcmVuY2UEDm5ld0NoYWluSGVpZ2h0CQBkAgULY2hhaW5IZWlnaHQAAQQOY2hlY2tCbG9ja0hhc2gJARF2YWxpZGF0ZUJsb2NrSGFzaAEFDGJsb2NrSGFzaEhleAMJAAACBQ5jaGVja0Jsb2NrSGFzaAUOY2hlY2tCbG9ja0hhc2gJAMwIAgkBEG1rQmxvY2tNZXRhRW50cnkGBQxibG9ja0hhc2hIZXgFDm5ld0NoYWluSGVpZ2h0BQtsYXN0QmxvY2tJZAgFAWkMb3JpZ2luQ2FsbGVyBQdjaGFpbklkBRplbFRvQ2xUcmFuc2ZlcnNSb290SGFzaEhleAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmNoYWluTGFzdEhlaWdodEtleQIFB2NoYWluSWQIBQFpDG9yaWdpbkNhbGxlcgUObmV3Q2hhaW5IZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGNoYWluTWV0YUtleQEFB2NoYWluSWQJAKwCAgkArAICCQCkAwEFDm5ld0NoYWluSGVpZ2h0BQNTRVAFDGJsb2NrSGFzaEhleAkAzAgCCQELU3RyaW5nRW50cnkCCQEMZXBvY2hNZXRhS2V5AQUGaGVpZ2h0CQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQkBBXZhbHVlAQUOdGhpc0Vwb2NoTWluZXIFA1NFUAkApAMBBQx0aGlzRXBvY2hSZWYFA1NFUAUMYmxvY2tIYXNoSGV4BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPZXh0ZW5kTWFpbkNoYWluAwxibG9ja0hhc2hIZXgMcmVmZXJlbmNlSGV4BWVwb2NoBAxjaGVja1ZlcnNpb24JAR5yZXF1aXJlRWxUb0NsVHJhbnNmZXJzRGlzYWJsZWQAAwkAAAIFDGNoZWNrVmVyc2lvbgUMY2hlY2tWZXJzaW9uBA5jaGVja0Jsb2NrSGFzaAkBEXZhbGlkYXRlQmxvY2tIYXNoAQUMYmxvY2tIYXNoSGV4AwkAAAIFDmNoZWNrQmxvY2tIYXNoBQ5jaGVja0Jsb2NrSGFzaAQKY2hlY2tFcG9jaAkBEmVuc3VyZUNvcnJlY3RFcG9jaAEFBWVwb2NoAwkAAAIFCmNoZWNrRXBvY2gFCmNoZWNrRXBvY2gEDmNoZWNrR2VuZXJhdG9yCQERZW5zdXJlTWluaW5nRXBvY2gBCAUBaQxvcmlnaW5DYWxsZXIDCQAAAgUOY2hlY2tHZW5lcmF0b3IFDmNoZWNrR2VuZXJhdG9yBApjaGVja0NoYWluCQEdZW5zdXJlRXhwZWN0ZWRPckluYWN0aXZlQ2hhaW4DCAUBaQxvcmlnaW5DYWxsZXIFC21haW5DaGFpbklkBQR1bml0AwkAAAIFCmNoZWNrQ2hhaW4FCmNoZWNrQ2hhaW4EDmNoZWNrUmVmZXJlbmNlCQESaXNSZWZlcmVuY2VDb3JyZWN0AgUMcmVmZXJlbmNlSGV4BRJtYWluQ2hhaW5MYXN0QmxvY2sDCQAAAgUOY2hlY2tSZWZlcmVuY2UFDmNoZWNrUmVmZXJlbmNlBA10aGlzRXBvY2hNZXRhBAckbWF0Y2gwCQEJZXBvY2hNZXRhAQUGaGVpZ2h0AwkAAQIFByRtYXRjaDACBFVuaXQJAQtTdHJpbmdFbnRyeQIJAQxlcG9jaE1ldGFLZXkBBQZoZWlnaHQJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQxvcmlnaW5DYWxsZXIFA1NFUAkApAMBBQ5tYWluQ2hhaW5FcG9jaAUDU0VQBQxibG9ja0hhc2hIZXgEBW90aGVyBQckbWF0Y2gwCQACAQIVRXBvY2ggYWxyZWFkeSBzdGFydGVkBBR1cGRhdGVGaW5hbGl6ZWRCbG9jawkBHWdldFVwZGF0ZUZpbmFsaXplZEJsb2NrQWN0aW9uAwgFAWkMb3JpZ2luQ2FsbGVyBQxibG9ja0hhc2hIZXgFDm1haW5DaGFpbkVwb2NoBA5uZXdDaGFpbkhlaWdodAkAZAIFD21haW5DaGFpbkhlaWdodAABBAxuZXdCbG9ja01ldGEJAMsBAgkAywECCQDLAQIJAJoDAQUObmV3Q2hhaW5IZWlnaHQJAJoDAQUGaGVpZ2h0CQDdBAEFEm1haW5DaGFpbkxhc3RCbG9jawgIBQFpDG9yaWdpbkNhbGxlcgVieXRlcwkAzggCCQDMCAIJAQtCaW5hcnlFbnRyeQIJAKwCAgUKYmxvY2tNZXRhSwUMYmxvY2tIYXNoSGV4BQxuZXdCbG9ja01ldGEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGNoYWluTWV0YUtleQEFC21haW5DaGFpbklkCQCsAgIJAKwCAgkApAMBBQ5uZXdDaGFpbkhlaWdodAUDU0VQBQxibG9ja0hhc2hIZXgJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9taW5lckNoYWluSWRLZXkBCAUBaQxvcmlnaW5DYWxsZXIFC21haW5DaGFpbklkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESY2hhaW5MYXN0SGVpZ2h0S2V5AgULbWFpbkNoYWluSWQIBQFpDG9yaWdpbkNhbGxlcgUObmV3Q2hhaW5IZWlnaHQJAMwIAgUNdGhpc0Vwb2NoTWV0YQUDbmlsBRR1cGRhdGVGaW5hbGl6ZWRCbG9jawkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARJleHRlbmRNYWluQ2hhaW5fdjIEDGJsb2NrSGFzaEhleAxyZWZlcmVuY2VIZXgFZXBvY2gaZWxUb0NsVHJhbnNmZXJzUm9vdEhhc2hIZXgEDGNoZWNrVmVyc2lvbgkBHXJlcXVpcmVFbFRvQ2xUcmFuc2ZlcnNFbmFibGVkAAMJAAACBQxjaGVja1ZlcnNpb24FDGNoZWNrVmVyc2lvbgQOY2hlY2tCbG9ja0hhc2gJARF2YWxpZGF0ZUJsb2NrSGFzaAEFDGJsb2NrSGFzaEhleAMJAAACBQ5jaGVja0Jsb2NrSGFzaAUOY2hlY2tCbG9ja0hhc2gECmNoZWNrRXBvY2gJARJlbnN1cmVDb3JyZWN0RXBvY2gBBQVlcG9jaAMJAAACBQpjaGVja0Vwb2NoBQpjaGVja0Vwb2NoBA5jaGVja0dlbmVyYXRvcgkBEWVuc3VyZU1pbmluZ0Vwb2NoAQgFAWkMb3JpZ2luQ2FsbGVyAwkAAAIFDmNoZWNrR2VuZXJhdG9yBQ5jaGVja0dlbmVyYXRvcgQKY2hlY2tDaGFpbgkBHWVuc3VyZUV4cGVjdGVkT3JJbmFjdGl2ZUNoYWluAwgFAWkMb3JpZ2luQ2FsbGVyBQttYWluQ2hhaW5JZAUEdW5pdAMJAAACBQpjaGVja0NoYWluBQpjaGVja0NoYWluBA5jaGVja1JlZmVyZW5jZQkBEmlzUmVmZXJlbmNlQ29ycmVjdAIFDHJlZmVyZW5jZUhleAUSbWFpbkNoYWluTGFzdEJsb2NrAwkAAAIFDmNoZWNrUmVmZXJlbmNlBQ5jaGVja1JlZmVyZW5jZQQNdGhpc0Vwb2NoTWV0YQQHJG1hdGNoMAkBCWVwb2NoTWV0YQEFBmhlaWdodAMJAAECBQckbWF0Y2gwAgRVbml0CQELU3RyaW5nRW50cnkCCQEMZXBvY2hNZXRhS2V5AQUGaGVpZ2h0CQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBQNTRVAJAKQDAQUObWFpbkNoYWluRXBvY2gFA1NFUAUMYmxvY2tIYXNoSGV4BAVvdGhlcgUHJG1hdGNoMAkAAgECFUVwb2NoIGFscmVhZHkgc3RhcnRlZAQUdXBkYXRlRmluYWxpemVkQmxvY2sJAR1nZXRVcGRhdGVGaW5hbGl6ZWRCbG9ja0FjdGlvbgMIBQFpDG9yaWdpbkNhbGxlcgUMYmxvY2tIYXNoSGV4BQ5tYWluQ2hhaW5FcG9jaAQObmV3Q2hhaW5IZWlnaHQJAGQCBQ9tYWluQ2hhaW5IZWlnaHQAAQkAzggCCQDMCAIJARBta0Jsb2NrTWV0YUVudHJ5BgUMYmxvY2tIYXNoSGV4BQ5uZXdDaGFpbkhlaWdodAUSbWFpbkNoYWluTGFzdEJsb2NrCAUBaQxvcmlnaW5DYWxsZXIFC21haW5DaGFpbklkBRplbFRvQ2xUcmFuc2ZlcnNSb290SGFzaEhleAkAzAgCCQELU3RyaW5nRW50cnkCCQEMY2hhaW5NZXRhS2V5AQULbWFpbkNoYWluSWQJAKwCAgkArAICCQCkAwEFDm5ld0NoYWluSGVpZ2h0BQNTRVAFDGJsb2NrSGFzaEhleAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBD21pbmVyQ2hhaW5JZEtleQEIBQFpDG9yaWdpbkNhbGxlcgULbWFpbkNoYWluSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJjaGFpbkxhc3RIZWlnaHRLZXkCBQttYWluQ2hhaW5JZAgFAWkMb3JpZ2luQ2FsbGVyBQ5uZXdDaGFpbkhlaWdodAkAzAgCBQ10aGlzRXBvY2hNZXRhBQNuaWwFFHVwZGF0ZUZpbmFsaXplZEJsb2NrCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDXN0YXJ0QWx0Q2hhaW4DDGJsb2NrSGFzaEhleAxyZWZlcmVuY2VIZXgFZXBvY2gEDGNoZWNrVmVyc2lvbgkBHnJlcXVpcmVFbFRvQ2xUcmFuc2ZlcnNEaXNhYmxlZAADCQAAAgUMY2hlY2tWZXJzaW9uBQxjaGVja1ZlcnNpb24EDmNoZWNrQmxvY2tIYXNoCQERdmFsaWRhdGVCbG9ja0hhc2gBBQxibG9ja0hhc2hIZXgDCQAAAgUOY2hlY2tCbG9ja0hhc2gFDmNoZWNrQmxvY2tIYXNoBApjaGVja0Vwb2NoCQESZW5zdXJlQ29ycmVjdEVwb2NoAQUFZXBvY2gDCQAAAgUKY2hlY2tFcG9jaAUKY2hlY2tFcG9jaAQOY2hlY2tHZW5lcmF0b3IJARFlbnN1cmVNaW5pbmdFcG9jaAEIBQFpDG9yaWdpbkNhbGxlcgMJAAACBQ5jaGVja0dlbmVyYXRvcgUOY2hlY2tHZW5lcmF0b3IEDSR0MDE5Njk4MTk4MDIJAQlibG9ja01ldGEBBQxyZWZlcmVuY2VIZXgEDnJlZkNoYWluSGVpZ2h0CAUNJHQwMTk2OTgxOTgwMgJfMQQIcmVmRXBvY2gIBQ0kdDAxOTY5ODE5ODAyAl8yBAZyZWZSZWYIBQ0kdDAxOTY5ODE5ODAyAl8zBAxyZWZHZW5lcmF0b3IIBQ0kdDAxOTY5ODE5ODAyAl80BAtyZWZJZ25vcmVkMQgFDSR0MDE5Njk4MTk4MDICXzUEC3JlZklnbm9yZWQyCAUNJHQwMTk2OTgxOTgwMgJfNgQOZmluYWxpemVkRXBvY2gICQEJYmxvY2tNZXRhAQkBEUBleHRyTmF0aXZlKDEwNTgpAQURZmluYWxpemVkQmxvY2tLZXkCXzIECGVwb2NoUmVmAwkAZwIFCHJlZkVwb2NoBQ5maW5hbGl6ZWRFcG9jaAUIcmVmRXBvY2gJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICI2NhbiBub3Qgc3RhcnQgYWx0IGNoYWluIGZyb20gZXBvY2ggCQCkAwEFCHJlZkVwb2NoAggsIGVwb2NoIAkApAMBBQ5maW5hbGl6ZWRFcG9jaAINIGlzIGZpbmFsaXplZAQKY2hlY2tDaGFpbgkBHWVuc3VyZUV4cGVjdGVkT3JJbmFjdGl2ZUNoYWluAwgFAWkMb3JpZ2luQ2FsbGVyBQttYWluQ2hhaW5JZAUMcmVmZXJlbmNlSGV4AwkAAAIFCmNoZWNrQ2hhaW4FCmNoZWNrQ2hhaW4ECm5ld0NoYWluSWQJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFDmxhc3RDaGFpbklkS2V5AAAAAQQObmV3Q2hhaW5IZWlnaHQJAGQCCAkBCWJsb2NrTWV0YQEFDHJlZmVyZW5jZUhleAJfMQABBAxuZXdCbG9ja01ldGEJAMsBAgkAywECCQDLAQIJAJoDAQUObmV3Q2hhaW5IZWlnaHQJAJoDAQUGaGVpZ2h0CQDdBAEFDHJlZmVyZW5jZUhleAgIBQFpDG9yaWdpbkNhbGxlcgVieXRlcwQNdGhpc0Vwb2NoTWV0YQQHJG1hdGNoMAkBCWVwb2NoTWV0YQEFBmhlaWdodAMJAAECBQckbWF0Y2gwAgRVbml0CQELU3RyaW5nRW50cnkCCQEMZXBvY2hNZXRhS2V5AQUGaGVpZ2h0CQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBQNTRVAJAKQDAQUIZXBvY2hSZWYFA1NFUAUMYmxvY2tIYXNoSGV4BAVvdGhlcgUHJG1hdGNoMAkAAgECFUVwb2NoIGFscmVhZHkgc3RhcnRlZAkAzAgCBQ10aGlzRXBvY2hNZXRhCQDMCAIJAQtCaW5hcnlFbnRyeQIJAKwCAgUKYmxvY2tNZXRhSwUMYmxvY2tIYXNoSGV4BQxuZXdCbG9ja01ldGEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGNoYWluRmlyc3RCbG9ja0lkS2V5AQUKbmV3Q2hhaW5JZAUMYmxvY2tIYXNoSGV4CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxjaGFpbk1ldGFLZXkBBQpuZXdDaGFpbklkCQCsAgIJAKwCAgkApAMBBQ5uZXdDaGFpbkhlaWdodAUDU0VQBQxibG9ja0hhc2hIZXgJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9taW5lckNoYWluSWRLZXkBCAUBaQxvcmlnaW5DYWxsZXIFCm5ld0NoYWluSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJjaGFpbkxhc3RIZWlnaHRLZXkCBQpuZXdDaGFpbklkCAUBaQxvcmlnaW5DYWxsZXIFDm5ld0NoYWluSGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESY2hhaW5MYXN0SGVpZ2h0S2V5AgULbWFpbkNoYWluSWQIBQFpDG9yaWdpbkNhbGxlcgUObmV3Q2hhaW5IZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDXN1cHBvcnRlcnNLZXkBBQpuZXdDaGFpbklkCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUObGFzdENoYWluSWRLZXkFCm5ld0NoYWluSWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBzdGFydEFsdENoYWluX3YyBAxibG9ja0hhc2hIZXgMcmVmZXJlbmNlSGV4BWVwb2NoGmVsVG9DbFRyYW5zZmVyc1Jvb3RIYXNoSGV4BAxjaGVja1ZlcnNpb24JAR1yZXF1aXJlRWxUb0NsVHJhbnNmZXJzRW5hYmxlZAADCQAAAgUMY2hlY2tWZXJzaW9uBQxjaGVja1ZlcnNpb24EDmNoZWNrQmxvY2tIYXNoCQERdmFsaWRhdGVCbG9ja0hhc2gBBQxibG9ja0hhc2hIZXgDCQAAAgUOY2hlY2tCbG9ja0hhc2gFDmNoZWNrQmxvY2tIYXNoBApjaGVja0Vwb2NoCQESZW5zdXJlQ29ycmVjdEVwb2NoAQUFZXBvY2gDCQAAAgUKY2hlY2tFcG9jaAUKY2hlY2tFcG9jaAQOY2hlY2tHZW5lcmF0b3IJARFlbnN1cmVNaW5pbmdFcG9jaAEIBQFpDG9yaWdpbkNhbGxlcgMJAAACBQ5jaGVja0dlbmVyYXRvcgUOY2hlY2tHZW5lcmF0b3IEDSR0MDIxNjEyMjE3MTYJAQlibG9ja01ldGEBBQxyZWZlcmVuY2VIZXgEDnJlZkNoYWluSGVpZ2h0CAUNJHQwMjE2MTIyMTcxNgJfMQQIcmVmRXBvY2gIBQ0kdDAyMTYxMjIxNzE2Al8yBAZyZWZSZWYIBQ0kdDAyMTYxMjIxNzE2Al8zBAxyZWZHZW5lcmF0b3IIBQ0kdDAyMTYxMjIxNzE2Al80BAtyZWZJZ25vcmVkMQgFDSR0MDIxNjEyMjE3MTYCXzUEC3JlZklnbm9yZWQyCAUNJHQwMjE2MTIyMTcxNgJfNgQOZmluYWxpemVkRXBvY2gICQEJYmxvY2tNZXRhAQkBEUBleHRyTmF0aXZlKDEwNTgpAQURZmluYWxpemVkQmxvY2tLZXkCXzIECGVwb2NoUmVmAwkAZwIFCHJlZkVwb2NoBQ5maW5hbGl6ZWRFcG9jaAUIcmVmRXBvY2gJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICI2NhbiBub3Qgc3RhcnQgYWx0IGNoYWluIGZyb20gZXBvY2ggCQCkAwEFCHJlZkVwb2NoAggsIGVwb2NoIAkApAMBBQ5maW5hbGl6ZWRFcG9jaAINIGlzIGZpbmFsaXplZAQKY2hlY2tDaGFpbgkBHWVuc3VyZUV4cGVjdGVkT3JJbmFjdGl2ZUNoYWluAwgFAWkMb3JpZ2luQ2FsbGVyBQttYWluQ2hhaW5JZAUMcmVmZXJlbmNlSGV4AwkAAAIFCmNoZWNrQ2hhaW4FCmNoZWNrQ2hhaW4ECm5ld0NoYWluSWQJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFDmxhc3RDaGFpbklkS2V5AAAAAQQObmV3Q2hhaW5IZWlnaHQJAGQCCAkBCWJsb2NrTWV0YQEFDHJlZmVyZW5jZUhleAJfMQABBA10aGlzRXBvY2hNZXRhBAckbWF0Y2gwCQEJZXBvY2hNZXRhAQUGaGVpZ2h0AwkAAQIFByRtYXRjaDACBFVuaXQJAQtTdHJpbmdFbnRyeQIJAQxlcG9jaE1ldGFLZXkBBQZoZWlnaHQJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQxvcmlnaW5DYWxsZXIFA1NFUAkApAMBBQhlcG9jaFJlZgUDU0VQBQxibG9ja0hhc2hIZXgEBW90aGVyBQckbWF0Y2gwCQACAQIVRXBvY2ggYWxyZWFkeSBzdGFydGVkCQDMCAIFDXRoaXNFcG9jaE1ldGEJAMwIAgkBEG1rQmxvY2tNZXRhRW50cnkGBQxibG9ja0hhc2hIZXgFDm5ld0NoYWluSGVpZ2h0BQxyZWZlcmVuY2VIZXgIBQFpDG9yaWdpbkNhbGxlcgUKbmV3Q2hhaW5JZAUaZWxUb0NsVHJhbnNmZXJzUm9vdEhhc2hIZXgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGNoYWluRmlyc3RCbG9ja0lkS2V5AQUKbmV3Q2hhaW5JZAUMYmxvY2tIYXNoSGV4CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxjaGFpbk1ldGFLZXkBBQpuZXdDaGFpbklkCQCsAgIJAKwCAgkApAMBBQ5uZXdDaGFpbkhlaWdodAUDU0VQBQxibG9ja0hhc2hIZXgJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9taW5lckNoYWluSWRLZXkBCAUBaQxvcmlnaW5DYWxsZXIFCm5ld0NoYWluSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJjaGFpbkxhc3RIZWlnaHRLZXkCBQpuZXdDaGFpbklkCAUBaQxvcmlnaW5DYWxsZXIFDm5ld0NoYWluSGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESY2hhaW5MYXN0SGVpZ2h0S2V5AgULbWFpbkNoYWluSWQIBQFpDG9yaWdpbkNhbGxlcgUObmV3Q2hhaW5IZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDXN1cHBvcnRlcnNLZXkBBQpuZXdDaGFpbklkCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUObGFzdENoYWluSWRLZXkFCm5ld0NoYWluSWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5leHRlbmRBbHRDaGFpbgQHY2hhaW5JZAxibG9ja0hhc2hIZXgMcmVmZXJlbmNlSGV4BWVwb2NoBAxjaGVja1ZlcnNpb24JAR5yZXF1aXJlRWxUb0NsVHJhbnNmZXJzRGlzYWJsZWQAAwkAAAIFDGNoZWNrVmVyc2lvbgUMY2hlY2tWZXJzaW9uBA5jaGVja0Jsb2NrSGFzaAkBEXZhbGlkYXRlQmxvY2tIYXNoAQUMYmxvY2tIYXNoSGV4AwkAAAIFDmNoZWNrQmxvY2tIYXNoBQ5jaGVja0Jsb2NrSGFzaAQKY2hlY2tFcG9jaAkBEmVuc3VyZUNvcnJlY3RFcG9jaAEFBWVwb2NoAwkAAAIFCmNoZWNrRXBvY2gFCmNoZWNrRXBvY2gEDmNoZWNrR2VuZXJhdG9yCQERZW5zdXJlTWluaW5nRXBvY2gBCAUBaQxvcmlnaW5DYWxsZXIDCQAAAgUOY2hlY2tHZW5lcmF0b3IFDmNoZWNrR2VuZXJhdG9yBBNjaGFpbkZpcnN0QmxvY2tNZXRhCQEJYmxvY2tNZXRhAQkBEUBleHRyTmF0aXZlKDEwNTgpAQkBFGNoYWluRmlyc3RCbG9ja0lkS2V5AQUHY2hhaW5JZAQKY2hlY2tDaGFpbgkBHWVuc3VyZUV4cGVjdGVkT3JJbmFjdGl2ZUNoYWluAwgFAWkMb3JpZ2luQ2FsbGVyBQdjaGFpbklkCQDcBAEIBRNjaGFpbkZpcnN0QmxvY2tNZXRhAl8zAwkAAAIFCmNoZWNrQ2hhaW4FCmNoZWNrQ2hhaW4EDSR0MDIzOTU1MjQwMDkJAQljaGFpbk1ldGEBBQdjaGFpbklkBAtjaGFpbkhlaWdodAgFDSR0MDIzOTU1MjQwMDkCXzEEDmNoYWluTGFzdEJsb2NrCAUNJHQwMjM5NTUyNDAwOQJfMgQOY2hlY2tSZWZlcmVuY2UJARJpc1JlZmVyZW5jZUNvcnJlY3QCBQxyZWZlcmVuY2VIZXgFDmNoYWluTGFzdEJsb2NrAwkAAAIFDmNoZWNrUmVmZXJlbmNlBQ5jaGVja1JlZmVyZW5jZQQObmV3Q2hhaW5IZWlnaHQJAGQCBQtjaGFpbkhlaWdodAABBAlwcmV2RXBvY2gICQEJYmxvY2tNZXRhAQUMcmVmZXJlbmNlSGV4Al8yBBN1cGRhdGVNYWluQ2hhaW5EYXRhAwkAZgIJARFzdXBwb3J0aW5nQmFsYW5jZQEFB2NoYWluSWQJAGkCBRRjb21wdXRlZFRvdGFsQmFsYW5jZQACBAtsYXN0Q2hhaW5JZAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ5sYXN0Q2hhaW5JZEtleQAABBR1cGRhdGVGaW5hbGl6ZWRCbG9jawkBHWdldFVwZGF0ZUZpbmFsaXplZEJsb2NrQWN0aW9uAwgFAWkMb3JpZ2luQ2FsbGVyBQxibG9ja0hhc2hIZXgFCXByZXZFcG9jaAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUY2hhaW5Gb3JrZWRIZWlnaHRLZXkBBQttYWluQ2hhaW5JZAgFE2NoYWluRmlyc3RCbG9ja01ldGECXzEJAMwIAgkBDEludGVnZXJFbnRyeQIFDm1haW5DaGFpbklkS2V5BQdjaGFpbklkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRdmaXJzdFZhbGlkQWx0Q2hhaW5JZEtleQkAZAIFC2xhc3RDaGFpbklkAAEFA25pbAUUdXBkYXRlRmluYWxpemVkQmxvY2sFA25pbAQNdGhpc0Vwb2NoTWV0YQQHJG1hdGNoMAkBCWVwb2NoTWV0YQEFBmhlaWdodAMJAAECBQckbWF0Y2gwAgRVbml0CQELU3RyaW5nRW50cnkCCQEMZXBvY2hNZXRhS2V5AQUGaGVpZ2h0CQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBQNTRVAJAKQDAQUJcHJldkVwb2NoBQNTRVAFDGJsb2NrSGFzaEhleAQFb3RoZXIFByRtYXRjaDAJAAIBAhVFcG9jaCBhbHJlYWR5IHN0YXJ0ZWQEHXVwZGF0ZU1haW5DaGFpbkxhc3RNaW5lZEJsb2NrAwMJAAACBRN1cGRhdGVNYWluQ2hhaW5EYXRhBQNuaWwJAQIhPQIJAQt2YWx1ZU9yRWxzZQIJAQxtaW5lckNoYWluSWQBCAUBaQxvcmlnaW5DYWxsZXIAAAUHY2hhaW5JZAcJAMwIAgkBDEludGVnZXJFbnRyeQIJARJjaGFpbkxhc3RIZWlnaHRLZXkCBQttYWluQ2hhaW5JZAgFAWkMb3JpZ2luQ2FsbGVyCAUTY2hhaW5GaXJzdEJsb2NrTWV0YQJfMQUDbmlsBQNuaWwEDG5ld0Jsb2NrTWV0YQkAywECCQDLAQIJAMsBAgkAmgMBBQ5uZXdDaGFpbkhlaWdodAkAmgMBBQZoZWlnaHQJAN0EAQUMcmVmZXJlbmNlSGV4CAgFAWkMb3JpZ2luQ2FsbGVyBWJ5dGVzCQDOCAIJAM4IAgkAzggCCQDMCAIJAQtCaW5hcnlFbnRyeQIJAKwCAgUKYmxvY2tNZXRhSwUMYmxvY2tIYXNoSGV4BQxuZXdCbG9ja01ldGEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGNoYWluTWV0YUtleQEFB2NoYWluSWQJAKwCAgkArAICCQCkAwEFDm5ld0NoYWluSGVpZ2h0BQNTRVAFDGJsb2NrSGFzaEhleAkAzAgCBQ10aGlzRXBvY2hNZXRhCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPbWluZXJDaGFpbklkS2V5AQgFAWkMb3JpZ2luQ2FsbGVyBQdjaGFpbklkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESY2hhaW5MYXN0SGVpZ2h0S2V5AgUHY2hhaW5JZAgFAWkMb3JpZ2luQ2FsbGVyBQ5uZXdDaGFpbkhlaWdodAUDbmlsBRN1cGRhdGVNYWluQ2hhaW5EYXRhCQEMYWRkU3VwcG9ydGVyAgUHY2hhaW5JZAgFAWkMb3JpZ2luQ2FsbGVyBR11cGRhdGVNYWluQ2hhaW5MYXN0TWluZWRCbG9jawkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFleHRlbmRBbHRDaGFpbl92MgUHY2hhaW5JZAxibG9ja0hhc2hIZXgMcmVmZXJlbmNlSGV4BWVwb2NoGmVsVG9DbFRyYW5zZmVyc1Jvb3RIYXNoSGV4BAxjaGVja1ZlcnNpb24JAR1yZXF1aXJlRWxUb0NsVHJhbnNmZXJzRW5hYmxlZAADCQAAAgUMY2hlY2tWZXJzaW9uBQxjaGVja1ZlcnNpb24EDmNoZWNrQmxvY2tIYXNoCQERdmFsaWRhdGVCbG9ja0hhc2gBBQxibG9ja0hhc2hIZXgDCQAAAgUOY2hlY2tCbG9ja0hhc2gFDmNoZWNrQmxvY2tIYXNoBApjaGVja0Vwb2NoCQESZW5zdXJlQ29ycmVjdEVwb2NoAQUFZXBvY2gDCQAAAgUKY2hlY2tFcG9jaAUKY2hlY2tFcG9jaAQOY2hlY2tHZW5lcmF0b3IJARFlbnN1cmVNaW5pbmdFcG9jaAEIBQFpDG9yaWdpbkNhbGxlcgMJAAACBQ5jaGVja0dlbmVyYXRvcgUOY2hlY2tHZW5lcmF0b3IEE2NoYWluRmlyc3RCbG9ja01ldGEJAQlibG9ja01ldGEBCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEUY2hhaW5GaXJzdEJsb2NrSWRLZXkBBQdjaGFpbklkBApjaGVja0NoYWluCQEdZW5zdXJlRXhwZWN0ZWRPckluYWN0aXZlQ2hhaW4DCAUBaQxvcmlnaW5DYWxsZXIFB2NoYWluSWQJANwEAQgFE2NoYWluRmlyc3RCbG9ja01ldGECXzMDCQAAAgUKY2hlY2tDaGFpbgUKY2hlY2tDaGFpbgQNJHQwMjY2MTIyNjY2NgkBCWNoYWluTWV0YQEFB2NoYWluSWQEC2NoYWluSGVpZ2h0CAUNJHQwMjY2MTIyNjY2NgJfMQQOY2hhaW5MYXN0QmxvY2sIBQ0kdDAyNjYxMjI2NjY2Al8yBA5jaGVja1JlZmVyZW5jZQkBEmlzUmVmZXJlbmNlQ29ycmVjdAIFDHJlZmVyZW5jZUhleAUOY2hhaW5MYXN0QmxvY2sDCQAAAgUOY2hlY2tSZWZlcmVuY2UFDmNoZWNrUmVmZXJlbmNlBA5uZXdDaGFpbkhlaWdodAkAZAIFC2NoYWluSGVpZ2h0AAEECXByZXZFcG9jaAgJAQlibG9ja01ldGEBBQxyZWZlcmVuY2VIZXgCXzIEE3VwZGF0ZU1haW5DaGFpbkRhdGEDCQBmAgkBEXN1cHBvcnRpbmdCYWxhbmNlAQUHY2hhaW5JZAkAaQIFFGNvbXB1dGVkVG90YWxCYWxhbmNlAAIEC2xhc3RDaGFpbklkCQELdmFsdWVPckVsc2UCCQCfCAEFDmxhc3RDaGFpbklkS2V5AAAEFHVwZGF0ZUZpbmFsaXplZEJsb2NrCQEdZ2V0VXBkYXRlRmluYWxpemVkQmxvY2tBY3Rpb24DCAUBaQxvcmlnaW5DYWxsZXIFDGJsb2NrSGFzaEhleAUJcHJldkVwb2NoCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJARRjaGFpbkZvcmtlZEhlaWdodEtleQEFC21haW5DaGFpbklkCAUTY2hhaW5GaXJzdEJsb2NrTWV0YQJfMQkAzAgCCQEMSW50ZWdlckVudHJ5AgUObWFpbkNoYWluSWRLZXkFB2NoYWluSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFF2ZpcnN0VmFsaWRBbHRDaGFpbklkS2V5CQBkAgULbGFzdENoYWluSWQAAQUDbmlsBRR1cGRhdGVGaW5hbGl6ZWRCbG9jawUDbmlsBA10aGlzRXBvY2hNZXRhBAckbWF0Y2gwCQEJZXBvY2hNZXRhAQUGaGVpZ2h0AwkAAQIFByRtYXRjaDACBFVuaXQJAQtTdHJpbmdFbnRyeQIJAQxlcG9jaE1ldGFLZXkBBQZoZWlnaHQJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQxvcmlnaW5DYWxsZXIFA1NFUAkApAMBBQlwcmV2RXBvY2gFA1NFUAUMYmxvY2tIYXNoSGV4BAVvdGhlcgUHJG1hdGNoMAkAAgECFUVwb2NoIGFscmVhZHkgc3RhcnRlZAQddXBkYXRlTWFpbkNoYWluTGFzdE1pbmVkQmxvY2sDAwkAAAIFE3VwZGF0ZU1haW5DaGFpbkRhdGEFA25pbAkBAiE9AgkBC3ZhbHVlT3JFbHNlAgkBDG1pbmVyQ2hhaW5JZAEIBQFpDG9yaWdpbkNhbGxlcgAABQdjaGFpbklkBwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmNoYWluTGFzdEhlaWdodEtleQIFC21haW5DaGFpbklkCAUBaQxvcmlnaW5DYWxsZXIIBRNjaGFpbkZpcnN0QmxvY2tNZXRhAl8xBQNuaWwFA25pbAkAzggCCQDOCAIJAM4IAgkAzAgCCQEQbWtCbG9ja01ldGFFbnRyeQYFDGJsb2NrSGFzaEhleAUObmV3Q2hhaW5IZWlnaHQFDHJlZmVyZW5jZUhleAgFAWkMb3JpZ2luQ2FsbGVyBQdjaGFpbklkBRplbFRvQ2xUcmFuc2ZlcnNSb290SGFzaEhleAkAzAgCCQELU3RyaW5nRW50cnkCCQEMY2hhaW5NZXRhS2V5AQUHY2hhaW5JZAkArAICCQCsAgIJAKQDAQUObmV3Q2hhaW5IZWlnaHQFA1NFUAUMYmxvY2tIYXNoSGV4CQDMCAIFDXRoaXNFcG9jaE1ldGEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9taW5lckNoYWluSWRLZXkBCAUBaQxvcmlnaW5DYWxsZXIFB2NoYWluSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJjaGFpbkxhc3RIZWlnaHRLZXkCBQdjaGFpbklkCAUBaQxvcmlnaW5DYWxsZXIFDm5ld0NoYWluSGVpZ2h0BQNuaWwFE3VwZGF0ZU1haW5DaGFpbkRhdGEJAQxhZGRTdXBwb3J0ZXICBQdjaGFpbklkCAUBaQxvcmlnaW5DYWxsZXIFHXVwZGF0ZU1haW5DaGFpbkxhc3RNaW5lZEJsb2NrCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBGpvaW4BDXJld2FyZEFkZHJlc3MKARJjaGVja1Jld2FyZEFkZHJlc3MBB2FkZHJlc3MEByRtYXRjaDAJAKEIAQkBCm1pbmVyUGtLZXkBBQdhZGRyZXNzAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwAwkAAAIFAnBrCAUBaRVvcmlnaW5DYWxsZXJQdWJsaWNLZXkFBHVuaXQJAAIBCQCsAgIJAKwCAgkArAICAhFMMiBtaW5lciBhZGRyZXNzIAUHYWRkcmVzcwIYIGlzIGFscmVhZHkgbGlua2VkIHdpdGggCQDYBAEFAnBrBQR1bml0AwkBASEBCQEPaXNDb250cmFjdFNldHVwAAkAAgECH1RoZSBjb250cmFjdCBoYXMgbm90IHlldCBzZXQgdXADCQBmAgULTUlOX0JBTEFOQ0UICQDvBwEIBQFpDG9yaWdpbkNhbGxlcgpnZW5lcmF0aW5nCQACAQkArAICCQCsAgIJAKwCAgIhSW5zdWZmaWNpZW50IGdlbmVyYXRpbmcgYmFsYW5jZTogCQCkAwEICQDvBwEIBQFpDG9yaWdpbkNhbGxlcgpnZW5lcmF0aW5nAgwuIFJlcXVpcmVkOiAJAKQDAQULTUlOX0JBTEFOQ0UDCQECIT0CCQDIAQEFDXJld2FyZEFkZHJlc3MAFAkAAgECJXJld2FyZEFkZHJlc3Mgc2hvdWxkIGJlIGFuIEwyIGFkZHJlc3MDCQBnAgkAkAMBBQlhbGxNaW5lcnMAMgkAAgECD3RvbyBtYW55IG1pbmVycwoBDmNoZWNrRXhpc3RlbmNlAgZleGlzdHMFbWluZXIDBQZleGlzdHMGCQAAAgUFbWluZXIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBA1hbHJlYWR5RXhpc3RzCgACJGwFCWFsbE1pbmVycwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAHCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ5jaGVja0V4aXN0ZW5jZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAwUNYWxyZWFkeUV4aXN0cwUDbmlsBAhuZXdNaW5lcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEEHJld2FyZEFkZHJlc3NIZXgJANwEAQUNcmV3YXJkQWRkcmVzcwQFY2hlY2sJARJjaGVja1Jld2FyZEFkZHJlc3MBBRByZXdhcmRBZGRyZXNzSGV4AwkAAAIFBWNoZWNrBQVjaGVjawQJbmV3TWluZXJzAwkAAAIJAJADAQUJYWxsTWluZXJzAAAFCG5ld01pbmVyCQCsAgIJAKwCAgUMYWxsTWluZXJzU3RyBQNTRVAFCG5ld01pbmVyBBhkZWxldGVPbGRSZXdhcmRBZGRyZXNzUGsEByRtYXRjaDAJAKIIAQkBFW1pbmVyUmV3YXJkQWRkcmVzc0tleQEFCG5ld01pbmVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQKb2xkQWRkcmVzcwUHJG1hdGNoMAMJAAACBQpvbGRBZGRyZXNzCQDcBAEFDXJld2FyZEFkZHJlc3MFA25pbAkAzAgCCQELRGVsZXRlRW50cnkBCQEKbWluZXJQa0tleQEFCm9sZEFkZHJlc3MFA25pbAUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUMYWxsTWluZXJzS2V5BQluZXdNaW5lcnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFW1pbmVyUmV3YXJkQWRkcmVzc0tleQEFCG5ld01pbmVyCQCsAgICAjB4BRByZXdhcmRBZGRyZXNzSGV4CQDMCAIJAQtCaW5hcnlFbnRyeQIJAQptaW5lclBrS2V5AQUQcmV3YXJkQWRkcmVzc0hleAgFAWkVb3JpZ2luQ2FsbGVyUHVibGljS2V5BQNuaWwFGGRlbGV0ZU9sZFJld2FyZEFkZHJlc3NQawkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVsZWF2ZQAEDGxlYXZpbmdNaW5lcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIKARBza2lwTGVhdmluZ01pbmVyAgNhY2MFbWluZXIDCQAAAgUFbWluZXIFDGxlYXZpbmdNaW5lcgUDYWNjCQDNCAIFA2FjYwUFbWluZXIED3JlbWFpbmluZ01pbmVycwoAAiRsBQlhbGxNaW5lcnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEHNraXBMZWF2aW5nTWluZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgQNcmV3YXJkQWRkcktleQkBFW1pbmVyUmV3YXJkQWRkcmVzc0tleQEFDGxlYXZpbmdNaW5lcgQRcHJldlJld2FyZEFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQ1yZXdhcmRBZGRyS2V5AhZtaW5lciBoYXMgbmV2ZXIgam9pbmVkAwkAAAIFDnRoaXNFcG9jaE1pbmVyCAUBaQxvcmlnaW5DYWxsZXIJAAIBAhxkZXNpZ25hdGVkIG1pbmVyIGNhbid0IGxlYXZlCQDMCAIJAQtTdHJpbmdFbnRyeQIFDGFsbE1pbmVyc0tleQkAugkCBQ9yZW1haW5pbmdNaW5lcnMFA1NFUAkAzAgCCQELRGVsZXRlRW50cnkBBQ1yZXdhcmRBZGRyS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEJAQptaW5lclBrS2V5AQURcHJldlJld2FyZEFkZHJlc3MFA25pbAFpAQh3aXRoZHJhdwQMYmxvY2tIYXNoSGV4C21lcmtsZVByb29mFHRyYW5zZmVySW5kZXhJbkJsb2NrBmFtb3VudAQPY2hlY2tBY3RpdmF0aW9uCQEdcmVxdWlyZUVsVG9DbFRyYW5zZmVyc0VuYWJsZWQAAwkAAAIFD2NoZWNrQWN0aXZhdGlvbgUPY2hlY2tBY3RpdmF0aW9uBBF3aXRoZHJhd0Jsb2NrTWV0YQkBCWJsb2NrTWV0YQEFDGJsb2NrSGFzaEhleAQTd2l0aGRyYXdCbG9ja0hlaWdodAgFEXdpdGhkcmF3QmxvY2tNZXRhAl8xBBRmaW5hbGl6ZWRCbG9ja0hlaWdodAgJAQlibG9ja01ldGEBCQERQGV4dHJOYXRpdmUoMTA1OCkBBRFmaW5hbGl6ZWRCbG9ja0tleQJfMQQYbWFpbkNoYWluTGFzdEJsb2NrSGVpZ2h0CAkBCWJsb2NrTWV0YQEFEm1haW5DaGFpbkxhc3RCbG9jawJfMQMJAGYCBRN3aXRoZHJhd0Jsb2NrSGVpZ2h0BRRmaW5hbGl6ZWRCbG9ja0hlaWdodAkAAgEJAKwCAgkArAICCQCsAgICCkVMIGJsb2NrICMJAKQDAQUTd2l0aGRyYXdCbG9ja0hlaWdodAItIGlzIG5vdCBmaW5hbGl6ZWQuIFRoZSBjdXJyZW50IGZpbmFsaXplZCBpcyAjCQCkAwEFFGZpbmFsaXplZEJsb2NrSGVpZ2h0BBR3aXRoZHJhd0Jsb2NrQ2hhaW5JZAgFEXdpdGhkcmF3QmxvY2tNZXRhAl81BAtpc01haW5DaGFpbgkAAAIFFHdpdGhkcmF3QmxvY2tDaGFpbklkBQttYWluQ2hhaW5JZAQScmVsYXRlc1RvTWFpbkNoYWluBAckbWF0Y2gwCQCfCAEJARRjaGFpbkZvcmtlZEhlaWdodEtleQEFFHdpdGhkcmF3QmxvY2tDaGFpbklkAwkAAQIFByRtYXRjaDACA0ludAQMZm9ya2VkSGVpZ2h0BQckbWF0Y2gwCQBmAgUMZm9ya2VkSGVpZ2h0BRN3aXRoZHJhd0Jsb2NrSGVpZ2h0CQACAQkArAICCQCsAgIJAKwCAgUMYmxvY2tIYXNoSGV4Ah0gaXMgb24gYW4gYWx0ZXJuYXRpdmUgY2hhaW4gIwkApAMBBRR3aXRoZHJhd0Jsb2NrQ2hhaW5JZAI4IHRoYXQgd2FzIG5vdCBhcHByb3ZlZCBieSBtYWpvcml0eS4gV2FpdCBmb3Igc29tZSBibG9ja3MDAwULaXNNYWluQ2hhaW4GBRJyZWxhdGVzVG9NYWluQ2hhaW4ECXJlY2lwaWVudAgFAWkMb3JpZ2luQ2FsbGVyBA9yZWNpcGllbnRQa0hhc2gJAMkBAgkAygECCAUJcmVjaXBpZW50BWJ5dGVzAAIFFFBVQkxJQ19LRVlfSEFTSF9TSVpFBA96ZXJvQW1vdW50Qnl0ZXMBLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAthbW91bnRCeXRlcwkAmgMBBQZhbW91bnQEC2VsRXZlbnREYXRhCQDLAQIJAMsBAgUPcmVjaXBpZW50UGtIYXNoCQDJAQIFD3plcm9BbW91bnRCeXRlcwkAZQIJAMgBAQUPemVyb0Ftb3VudEJ5dGVzCQDIAQEFC2Ftb3VudEJ5dGVzBQthbW91bnRCeXRlcwQRZWxFdmVudERhdGFEaWdlc3QJAPAVAQULZWxFdmVudERhdGEEEmNhbGN1bGF0ZWRSb290SGFzaAkAvQUDBQttZXJrbGVQcm9vZgURZWxFdmVudERhdGFEaWdlc3QFFHRyYW5zZmVySW5kZXhJbkJsb2NrBBBleHBlY3RlZFJvb3RIYXNoCAURd2l0aGRyYXdCbG9ja01ldGECXzYDCQAAAgUSY2FsY3VsYXRlZFJvb3RIYXNoBRBleHBlY3RlZFJvb3RIYXNoBAd0b2tlbklkCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFCnRva2VuSWRLZXkEDHRyYW5zZmVyc0tleQkBF2Jsb2NrRWxUb0NsVHJhbnNmZXJzS2V5AQUMYmxvY2tIYXNoSGV4CQDMCAIJAQdSZWlzc3VlAwUHdG9rZW5JZAUGYW1vdW50BgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQlyZWNpcGllbnQFBmFtb3VudAUHdG9rZW5JZAkAzAgCCQELU3RyaW5nRW50cnkCBQx0cmFuc2ZlcnNLZXkJAQlzZXRPckZhaWwCCQELdmFsdWVPckVsc2UCCQCiCAEFDHRyYW5zZmVyc0tleQIABRR0cmFuc2ZlckluZGV4SW5CbG9jawUDbmlsCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFEV4cGVjdGVkIHJvb3QgaGFzaDogCQDcBAEFEGV4cGVjdGVkUm9vdEhhc2gCBywgZ290OiAJANwEAQUSY2FsY3VsYXRlZFJvb3RIYXNoAhUuIEV2ZW50IGRhdGEgZGlnZXN0OiAJANoEAQURZWxFdmVudERhdGFEaWdlc3QJAAIBCQCsAgIJAKwCAgIJRXhwZWN0ZWQgBQxibG9ja0hhc2hIZXgCLyB0byBiZSBlaXRoZXIgb24gdGhlIG1haW4gY2hhaW4gb3IgcmVsYXRlIHRvIGl0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBXNldHVwBBNnZW5lc2lzQmxvY2tIYXNoSGV4EW1pbmVyUmV3YXJkSW5Hd2VpGXN0YWtpbmdDb250cmFjdEFkZHJlc3NCNTgSZWxCcmlkZ2VBZGRyZXNzSGV4AwkBD2lzQ29udHJhY3RTZXR1cAAJAAIBAiRUaGUgY29udHJhY3QgaGFzIGJlZW4gYWxyZWFkeSBzZXQgdXADCQBmAgAABRFtaW5lclJld2FyZEluR3dlaQkAAgECJFRoZSBtaW5lciByZXdhcmQgbXVzdCBiZSBub25uZWdhdGl2ZQQQZ2VuZXNpc0Jsb2NrSGFzaAkA3QQBBRNnZW5lc2lzQmxvY2tIYXNoSGV4BAdlbXB0eVBrASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQTZ2VuZXNpc01pbmVyQWRkcmVzcwkApwgBBQdlbXB0eVBrBBdnZW5lc2lzRXRoUmV3YXJkQWRkcmVzcwEUAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWdlbmVzaXNCbG9ja1JlZmVyZW5jZUhhc2gCQDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEBWlzc3VlCQDCCAUCBVVOSVQwAgxOYXRpdmUgdG9rZW4AAAAIBgQHdG9rZW5JZAkAuAgBBQVpc3N1ZQkAzAgCCQEQbWtCbG9ja01ldGFFbnRyeQYFE2dlbmVzaXNCbG9ja0hhc2hIZXgAAAUZZ2VuZXNpc0Jsb2NrUmVmZXJlbmNlSGFzaAUTZ2VuZXNpc01pbmVyQWRkcmVzcwULbWFpbkNoYWluSWQCAAkAzAgCCQELU3RyaW5nRW50cnkCCQEUY2hhaW5GaXJzdEJsb2NrSWRLZXkBAAAFE2dlbmVzaXNCbG9ja0hhc2hIZXgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGNoYWluTWV0YUtleQEAAAkArAICAgIwLAUTZ2VuZXNpc0Jsb2NrSGFzaEhleAkAzAgCCQEMSW50ZWdlckVudHJ5AgUObWluZXJSZXdhcmRLZXkFEW1pbmVyUmV3YXJkSW5Hd2VpCQDMCAIJAQtTdHJpbmdFbnRyeQIFGXN0YWtpbmdDb250cmFjdEFkZHJlc3NLZXkFGXN0YWtpbmdDb250cmFjdEFkZHJlc3NCNTgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGVwb2NoTWV0YUtleQEFBmhlaWdodAkArAICCQCsAgIJAKUIAQUTZ2VuZXNpc01pbmVyQWRkcmVzcwIDLDAsBRNnZW5lc2lzQmxvY2tIYXNoSGV4CQDMCAIJAQtTdHJpbmdFbnRyeQIFEWZpbmFsaXplZEJsb2NrS2V5BRNnZW5lc2lzQmxvY2tIYXNoSGV4CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNwcmV2UmFuZGFvSGVpZ2h0S2V5AAAJAMwIAgkBDEludGVnZXJFbnRyeQIFF2VsVG9DbFRyYW5zZmVyc0Vwb2NoS2V5AAAJAMwIAgUFaXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgUKdG9rZW5JZEtleQkA2AQBBQd0b2tlbklkCQDMCAIJAQtTdHJpbmdFbnRyeQIFEmVsQnJpZGdlQWRkcmVzc0tleQkArAICAgIweAUSZWxCcmlkZ2VBZGRyZXNzSGV4BQNuaWwBaQEUc2V0dXBFbFRvQ2xUcmFuc2ZlcnMCEGFjdGl2YXRpb25IZWlnaHQSZWxCcmlkZ2VBZGRyZXNzSGV4AwkBCWlzRGVmaW5lZAEJAJ8IAQUXZWxUb0NsVHJhbnNmZXJzRXBvY2hLZXkJAAIBAiVFTCB0byBDTCB0cmFuc2ZlcnMgZmVhdHVyZSB3YXMgc2V0IHVwBAVpc3N1ZQkAwggFAgVVTklUMAIMTmF0aXZlIHRva2VuAAAACAYEB3Rva2VuSWQJALgIAQUFaXNzdWUJAMwIAgkBDEludGVnZXJFbnRyeQIFF2VsVG9DbFRyYW5zZmVyc0Vwb2NoS2V5BRBhY3RpdmF0aW9uSGVpZ2h0CQDMCAIFBWlzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIFCnRva2VuSWRLZXkJANgEAQUHdG9rZW5JZAkAzAgCCQELU3RyaW5nRW50cnkCBRJlbEJyaWRnZUFkZHJlc3NLZXkJAKwCAgICMHgFEmVsQnJpZGdlQWRkcmVzc0hleAUDbmlsACfyX+E=", "height": 3197802, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FNjNKot193WRkSkpK9FPbckjMik1WXVhi6NsfbDPkqLL Next: Eh7NKbyaoxgEJ4BwqmwtiBQho4gcdExwKQ9ZwLmSAcYj Diff:
OldNewDifferences
1313
1414 let f = 26
1515
16-let g = "thisEpochData"
16+let g = 20
1717
18-let h = "allMiners"
18+let h = "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1919
20-let i = "mainChainId"
20+let i = "thisEpochData"
2121
22-let j = "lastChainId"
22+let j = "allMiners"
2323
24-let k = "firstValidAltChainId"
24+let k = "mainChainId"
2525
26-let l = "minerReward"
26+let l = "lastChainId"
2727
28-let m = "stakingContractAddress"
28+let m = "firstValidAltChainId"
2929
30-let n = "block_0x"
30+let n = "minerReward"
3131
32-let o = "finalizedBlock"
32+let o = "stakingContractAddress"
3333
34-func p (q) = {
35- let r = toString(q)
36- let s = size(r)
37- if ((1 == s))
38- then ("0000000" + r)
39- else if ((2 == s))
40- then ("000000" + r)
41- else if ((3 == s))
42- then ("00000" + r)
43- else if ((4 == s))
44- then ("0000" + r)
45- else if ((5 == s))
46- then ("000" + r)
47- else if ((6 == s))
48- then ("00" + r)
49- else if ((7 == s))
50- then ("0" + r)
51- else r
34+let p = "block_0x"
35+
36+let q = "finalizedBlock"
37+
38+let r = "tokenId"
39+
40+let s = "elBridgeAddress"
41+
42+let t = "prevRandaoHeight"
43+
44+let u = "elToClTransfersEpoch"
45+
46+func v (w) = {
47+ let x = toString(w)
48+ let y = size(x)
49+ if ((1 == y))
50+ then ("0000000" + x)
51+ else if ((2 == y))
52+ then ("000000" + x)
53+ else if ((3 == y))
54+ then ("00000" + x)
55+ else if ((4 == y))
56+ then ("0000" + x)
57+ else if ((5 == y))
58+ then ("000" + x)
59+ else if ((6 == y))
60+ then ("00" + x)
61+ else if ((7 == y))
62+ then ("0" + x)
63+ else x
5264 }
5365
5466
55-func t (u) = ("epoch_" + p(u))
67+func z (A) = ("elToClTransfers_0x" + A)
5668
5769
58-func v (w) = (("chain" + toString(w)) + "FirstBlock")
70+func B (C) = ("epoch_" + v(C))
5971
6072
61-func x (w) = ("chain_" + p(w))
73+func D (E) = (("chain" + toString(E)) + "FirstBlock")
6274
6375
64-func y (w,z) = ((("chain_" + p(w)) + "_") + toString(z))
76+func F (E) = ("chain_" + v(E))
6577
6678
67-func A (w) = (("chain" + toString(w)) + "Supporters")
79+func G (E,H) = ((("chain_" + v(E)) + "_") + toString(H))
6880
6981
70-func B (C) = (("miner_" + C) + "_RewardAddress")
82+func I (E) = (("chain_" + v(E)) + "ForkedHeight")
7183
7284
73-func D (E) = (("miner_0x" + E) + "_PK")
85+func J (E) = (("chain" + toString(E)) + "Supporters")
7486
7587
76-func F (z) = (("miner_" + toString(z)) + "_ChainId")
88+func K (L) = (("miner_" + L) + "_RewardAddress")
7789
7890
79-let G = {
80- let s = getString(this, m)
81- if ($isInstanceOf(s, "String"))
91+func M (N) = (("miner_0x" + N) + "_PK")
92+
93+
94+func O (H) = (("miner_" + toString(H)) + "_ChainId")
95+
96+
97+let P = valueOrElse(getInteger(this, u), a)
98+
99+func Q () = if ((P > height))
100+ then unit
101+ else throw((("EL to CL transfers activated on epoch #" + toString(height)) + ". Upgrade your client"))
102+
103+
104+func R () = if ((height >= P))
105+ then unit
106+ else throw(((("EL to CL transfers haven't activated on epoch #" + toString(height)) + ". Wait for activation on #") + toString(P)))
107+
108+
109+let S = {
110+ let y = getString(this, o)
111+ if ($isInstanceOf(y, "String"))
82112 then {
83- let r = s
84- valueOrErrorMessage(addressFromString(r), ("invalid staking contract address: " + r))
113+ let x = y
114+ valueOrErrorMessage(addressFromString(x), ("invalid staking contract address: " + x))
85115 }
86- else Address(getBinaryValue(this, m))
116+ else Address(getBinaryValue(this, o))
87117 }
88118
89-func H (I) = {
90- let s = getString(G, ("%s__" + toString(I)))
91- if ($isInstanceOf(s, "String"))
119+func T (U) = {
120+ let y = getString(S, ("%s__" + toString(U)))
121+ if ($isInstanceOf(y, "String"))
92122 then {
93- let J = s
94- let K = split(J, "__")
95- let L = parseIntValue(K[1])
96- let M = parseIntValue(K[2])
97- let N = parseIntValue(K[3])
98- let O = parseIntValue(K[4])
99- if ((height >= N))
100- then O
101- else if ((height >= L))
102- then M
123+ let V = y
124+ let W = split(V, "__")
125+ let X = parseIntValue(W[1])
126+ let Y = parseIntValue(W[2])
127+ let Z = parseIntValue(W[3])
128+ let aa = parseIntValue(W[4])
129+ if ((height >= Z))
130+ then aa
131+ else if ((height >= X))
132+ then Y
103133 else 0
104134 }
105135 else 0
106136 }
107137
108138
109-func P (w) = {
110- let r = getStringValue(x(w))
111- let Q = split(r, d)
112- $Tuple2(parseIntValue(Q[0]), Q[1])
139+func ab (E) = {
140+ let x = getStringValue(F(E))
141+ let ac = split(x, d)
142+ $Tuple2(parseIntValue(ac[0]), ac[1])
113143 }
114144
115145
116-let R = valueOrElse(getInteger(i), 0)
146+let ad = valueOrElse(getInteger(k), 0)
117147
118-let S = P(R)
148+let ae = ab(ad)
119149
120-let T = S._1
150+let af = ae._1
121151
122-let U = S._2
152+let ag = ae._2
123153
124-func V (u) = {
125- let s = getString(t(u))
126- if ($isInstanceOf(s, "String"))
154+func ah (C) = {
155+ let y = getString(B(C))
156+ if ($isInstanceOf(y, "String"))
127157 then {
128- let r = s
129- let W = split(r, d)
130- $Tuple3(addressFromStringValue(W[0]), parseIntValue(W[1]), W[2])
158+ let x = y
159+ let ai = split(x, d)
160+ $Tuple3(addressFromStringValue(ai[0]), parseIntValue(ai[1]), ai[2])
131161 }
132162 else unit
133163 }
134164
135165
136-let X = {
137- let s = V(height)
138- if ($isInstanceOf(s, "(Address, Int, String)"))
166+let aj = {
167+ let y = ah(height)
168+ if ($isInstanceOf(y, "(Address, Int, String)"))
139169 then {
140- let Y = s
141- Y
170+ let ak = y
171+ ak
142172 }
143173 else {
144- let Z = getString(g)
145- if ($isInstanceOf(Z, "String"))
174+ let al = getString(i)
175+ if ($isInstanceOf(al, "String"))
146176 then {
147- let aa = Z
148- let ab = split(aa, d)
149- let ac = parseIntValue(ab[0])
150- $Tuple3(if ((ac == height))
151- then addressFromStringValue(ab[1])
177+ let am = al
178+ let an = split(am, d)
179+ let ao = parseIntValue(an[0])
180+ $Tuple3(if ((ao == height))
181+ then addressFromStringValue(an[1])
152182 else unit, 0, "")
153183 }
154184 else $Tuple3(unit, 0, "")
155185 }
156186 }
157187
158-let ad = X._1
188+let ap = aj._1
159189
160-let ae = X._2
190+let aq = aj._2
161191
162-let af = X._3
192+let ar = aj._3
163193
164-let ag = valueOrElse(getString(h), "")
194+let as = valueOrElse(getString(j), "")
165195
166-let ah = {
167- let s = ag
168- if (("" == s))
196+let at = {
197+ let y = as
198+ if (("" == y))
169199 then nil
170- else if ($isInstanceOf(s, "String"))
200+ else if ($isInstanceOf(y, "String"))
171201 then {
172- let ai = s
173- split_4C(ai, d)
202+ let au = y
203+ split_4C(au, d)
174204 }
175205 else throw("Match error")
176206 }
177207
178-func aj (ak) = {
179- let al = getBinaryValue((n + ak))
180- let am = toInt(al)
181- let an = toInt(al, 8)
182- let ao = take(drop(al, 16), e)
183- let ap = takeRight(al, f)
184- $Tuple4(am, an, ao, ap)
185- }
186-
187-
188-func aq (z,w) = {
189- let s = getInteger(y(w, z))
190- if ($isInstanceOf(s, "Int"))
191- then {
192- let ar = s
193- ar
194- }
208+func av (aw) = {
209+ let ax = getBinaryValue((p + aw))
210+ let ay = toInt(ax)
211+ let az = toInt(ax, 8)
212+ let aA = take(drop(ax, 16), e)
213+ let aB = take(drop(ax, (16 + e)), f)
214+ if ((P > az))
215+ then $Tuple6(ay, az, aA, aB, 0, base58'')
195216 else {
196- let as = getStringValue(((("chain" + toString(w)) + "LastMinedBy") + toString(z)))
197- aj(as)._1
217+ let E = toInt(drop(ax, ((16 + e) + f)))
218+ let aC = drop(ax, ((24 + e) + f))
219+ $Tuple6(ay, az, aA, aB, E, aC)
198220 }
199221 }
200222
201223
202-let at = {
203- let au = {
204- let s = lastBlock.vrf
205- if ($isInstanceOf(s, "ByteVector"))
224+func aD (A,ay,aE,aB,E,aF) = {
225+ let aG = toBytes(height)
226+ let aH = (((((toBytes(ay) + aG) + fromBase16String(aE)) + aB.bytes) + toBytes(E)) + fromBase16String(aF))
227+ BinaryEntry((p + A), aH)
228+ }
229+
230+
231+func aI (H,E) = {
232+ let y = getInteger(G(E, H))
233+ if ($isInstanceOf(y, "Int"))
234+ then {
235+ let aJ = y
236+ aJ
237+ }
238+ else {
239+ let aK = getStringValue(((("chain" + toString(E)) + "LastMinedBy") + toString(H)))
240+ av(aK)._1
241+ }
242+ }
243+
244+
245+let aL = {
246+ let aM = {
247+ let y = lastBlock.vrf
248+ if ($isInstanceOf(y, "ByteVector"))
206249 then {
207- let av = s
208- av
250+ let aN = y
251+ aN
209252 }
210253 else lastBlock.generationSignature
211254 }
212- func aw (ax,z) = {
213- let ay = ax
214- let az = ay._1
215- let aA = ay._2
216- let aB = ay._3
217- let aC = ay._4
218- let aD = addressFromStringValue(z)
219- let aE = wavesBalance(aD).generating
220- let aF = H(aD)
221- if (if ((c > aE))
255+ func aO (aP,H) = {
256+ let aQ = aP
257+ let aR = aQ._1
258+ let aS = aQ._2
259+ let aT = aQ._3
260+ let aU = aQ._4
261+ let aV = addressFromStringValue(H)
262+ let aW = wavesBalance(aV).generating
263+ let aX = T(aV)
264+ if (if ((c > aW))
222265 then true
223- else (0 >= aF))
224- then ax
266+ else (0 >= aX))
267+ then aP
225268 else {
226- let aG = calculateDelay(aD, aF)
227- if ((az > aG))
228- then $Tuple4(aG, z, (aB + aF), (aC :+ z))
229- else $Tuple4(az, aA, (aB + aF), (aC :+ z))
269+ let aY = calculateDelay(aV, aX)
270+ if ((aR > aY))
271+ then $Tuple4(aY, H, (aT + aX), (aU :+ H))
272+ else $Tuple4(aR, aS, (aT + aX), (aU :+ H))
230273 }
231274 }
232275
233- let aH = ah
234- let aI = size(aH)
235- let aJ = $Tuple4(a, "", 0, nil)
236- func aK (aL,aM) = if ((aM >= aI))
237- then aL
238- else aw(aL, aH[aM])
276+ let aZ = at
277+ let ba = size(aZ)
278+ let bb = $Tuple4(a, "", 0, nil)
279+ func bc (bd,be) = if ((be >= ba))
280+ then bd
281+ else aO(bd, aZ[be])
239282
240- func aN (aL,aM) = if ((aM >= aI))
241- then aL
283+ func bf (bd,be) = if ((be >= ba))
284+ then bd
242285 else throw("List size exceeds 50")
243286
244- aN(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aJ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
287+ bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
245288 }
246289
247-let aO = at._1
290+let bg = aL._1
248291
249-let aP = at._2
292+let bh = aL._2
250293
251-let aQ = at._3
294+let bi = aL._3
252295
253-let aR = at._4
296+let bj = aL._4
254297
255-func aS (w) = P(w)._2
298+func bk (E) = ab(E)._2
256299
257300
258-let aT = aj(U)
301+let bl = av(ag)
259302
260-let aU = aT._1
303+let bm = bl._1
261304
262-let aV = aT._2
305+let bn = bl._2
263306
264-let aW = aT._3
307+let bo = bl._3
265308
266-let aX = aT._4
309+let bp = bl._4
267310
268-func aY (aZ,ba,bb) = {
269- let bc = split_4C("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "")
270- let bd = (aQ / 2)
271- func be (ax,bf) = {
272- let bg = ax
273- let ac = bg._1
274- let bh = bg._2
275- let bi = bg._3
276- let aC = bg._4
277- let s = bi
278- if ($isInstanceOf(s, "Unit"))
311+let bq = bl._5
312+
313+let br = bl._6
314+
315+func bs (bt,bu,bv) = {
316+ let bw = split_4C("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "")
317+ let bx = (bi / 2)
318+ func by (aP,bz) = {
319+ let bA = aP
320+ let ao = bA._1
321+ let bB = bA._2
322+ let bC = bA._3
323+ let aU = bA._4
324+ let y = bC
325+ if ($isInstanceOf(y, "Unit"))
279326 then {
280- let bj = if ((ac == height))
281- then $Tuple3(aZ, ba, bb)
282- else value(V(ac))
283- let z = bj._1
284- let bk = bj._2
285- let bl = bj._3
286- if ((bk == 0))
287- then $Tuple4(ac, bh, bl, ah)
327+ let bD = if ((ao == height))
328+ then $Tuple3(bt, bu, bv)
329+ else value(ah(ao))
330+ let H = bD._1
331+ let bE = bD._2
332+ let bF = bD._3
333+ if ((bE == 0))
334+ then $Tuple4(ao, bB, bF, at)
288335 else {
289- let bm = if (containsElement(aC, z))
290- then $Tuple2(bh, aC)
291- else $Tuple2((bh + H(z)), z :: aC)
292- let bn = bm._1
293- let bo = bm._2
294- if ((bn > bd))
295- then $Tuple4(ac, bn, bl, ah)
296- else $Tuple4(bk, bn, unit, bo)
336+ let bG = if (containsElement(aU, H))
337+ then $Tuple2(bB, aU)
338+ else $Tuple2((bB + T(H)), H :: aU)
339+ let bH = bG._1
340+ let bI = bG._2
341+ if ((bH > bx))
342+ then $Tuple4(ao, bH, bF, at)
343+ else $Tuple4(bE, bH, unit, bI)
297344 }
298345 }
299- else ax
346+ else aP
300347 }
301348
302- let bp = {
303- let aH = (bc ++ bc)
304- let aI = size(aH)
305- let aJ = $Tuple4(height, 0, unit, nil)
306- func aK (aL,aM) = if ((aM >= aI))
307- then aL
308- else be(aL, aH[aM])
349+ let bJ = {
350+ let aZ = (bw ++ bw)
351+ let ba = size(aZ)
352+ let bb = $Tuple4(height, 0, unit, nil)
353+ func bc (bd,be) = if ((be >= ba))
354+ then bd
355+ else by(bd, aZ[be])
309356
310- func aN (aL,aM) = if ((aM >= aI))
311- then aL
357+ func bf (bd,be) = if ((be >= ba))
358+ then bd
312359 else throw("List size exceeds 200")
313360
314- aN(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aJ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100), 101), 102), 103), 104), 105), 106), 107), 108), 109), 110), 111), 112), 113), 114), 115), 116), 117), 118), 119), 120), 121), 122), 123), 124), 125), 126), 127), 128), 129), 130), 131), 132), 133), 134), 135), 136), 137), 138), 139), 140), 141), 142), 143), 144), 145), 146), 147), 148), 149), 150), 151), 152), 153), 154), 155), 156), 157), 158), 159), 160), 161), 162), 163), 164), 165), 166), 167), 168), 169), 170), 171), 172), 173), 174), 175), 176), 177), 178), 179), 180), 181), 182), 183), 184), 185), 186), 187), 188), 189), 190), 191), 192), 193), 194), 195), 196), 197), 198), 199), 200)
361+ bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100), 101), 102), 103), 104), 105), 106), 107), 108), 109), 110), 111), 112), 113), 114), 115), 116), 117), 118), 119), 120), 121), 122), 123), 124), 125), 126), 127), 128), 129), 130), 131), 132), 133), 134), 135), 136), 137), 138), 139), 140), 141), 142), 143), 144), 145), 146), 147), 148), 149), 150), 151), 152), 153), 154), 155), 156), 157), 158), 159), 160), 161), 162), 163), 164), 165), 166), 167), 168), 169), 170), 171), 172), 173), 174), 175), 176), 177), 178), 179), 180), 181), 182), 183), 184), 185), 186), 187), 188), 189), 190), 191), 192), 193), 194), 195), 196), 197), 198), 199), 200)
315362 }
316- let bq = bp._1
317- let bh = bp._2
318- let br = bp._3
319- let bs = bp._4
320- let s = br
321- if ($isInstanceOf(s, "String"))
363+ let bK = bJ._1
364+ let bB = bJ._2
365+ let bL = bJ._3
366+ let bM = bJ._4
367+ let y = bL
368+ if ($isInstanceOf(y, "String"))
322369 then {
323- let bt = s
324- bt
370+ let bN = y
371+ bN
325372 }
326- else value(V(bq))._3
373+ else value(ah(bK))._3
327374 }
328375
329376
330-func bu (w) = {
331- func bv (bw,bx) = {
332- let by = bw
333- let bh = by._1
334- let bz = by._2
335- let bA = addressFromStringValue(bx)
336- if (containsElement(bz, bA))
337- then bw
377+func bO (E) = {
378+ func bP (bQ,bR) = {
379+ let bS = bQ
380+ let bB = bS._1
381+ let bT = bS._2
382+ let bU = addressFromStringValue(bR)
383+ if (containsElement(bT, bU))
384+ then bQ
338385 else {
339- let bB = H(bA)
340- $Tuple2((bh + bB), (bz :+ bA))
386+ let bV = T(bU)
387+ $Tuple2((bB + bV), (bT :+ bU))
341388 }
342389 }
343390
344- let bC = split_4C(getStringValue(A(w)), d)
345- let bD = {
346- let aH = bC
347- let aI = size(aH)
348- let aJ = $Tuple2(0, nil)
349- func aK (aL,aM) = if ((aM >= aI))
350- then aL
351- else bv(aL, aH[aM])
391+ let bW = split_4C(getStringValue(J(E)), d)
392+ let bX = {
393+ let aZ = bW
394+ let ba = size(aZ)
395+ let bb = $Tuple2(0, nil)
396+ func bc (bd,be) = if ((be >= ba))
397+ then bd
398+ else bP(bd, aZ[be])
352399
353- func aN (aL,aM) = if ((aM >= aI))
354- then aL
400+ func bf (bd,be) = if ((be >= ba))
401+ then bd
355402 else throw("List size exceeds 100")
356403
357- aN(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aJ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
404+ bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
358405 }
359- let bB = bD._1
360- let bE = bD._2
361- bB
406+ let bV = bX._1
407+ let bY = bX._2
408+ bV
362409 }
363410
364411
365-func bF () = isDefined(getInteger(l))
412+func bZ () = isDefined(getInteger(n))
366413
367414
368-func bG (bA) = if ((toString(bA) != aP))
369- then throw(((((toBase58String(bA.bytes) + " is not allowed to mine in ") + toString(height)) + " epoch. Expected ") + aP))
415+func ca (bU) = if ((toString(bU) != bh))
416+ then throw(((((toBase58String(bU.bytes) + " is not allowed to mine in ") + toString(height)) + " epoch. Expected ") + bh))
370417 else unit
371418
372419
373-func bH (bI,bJ) = if ((bI == bJ))
420+func cb (cc,cd) = if ((cc == cd))
374421 then unit
375- else throw(((("Expected a reference to the chain last block: 0x" + bJ) + ". Got: 0x") + bI))
422+ else throw(((("Expected a reference to the chain last block: 0x" + cd) + ". Got: 0x") + cc))
376423
377424
378-func bK (w) = {
379- let bL = getStringValue(v(w))
380- let bM = valueOrElse(getInteger(k), 0)
381- if ((bM > w))
425+func ce (E) = {
426+ let cf = getStringValue(D(E))
427+ let cg = valueOrElse(getInteger(m), 0)
428+ if ((cg > E))
382429 then true
383- else (aj(getStringValue(o))._1 > aj(bL)._1)
430+ else (av(getStringValue(q))._1 > av(cf)._1)
384431 }
385432
386433
387-func bN (z) = valueOrElse(getInteger(F(z)), getInteger(("chainIdOf" + toString(z))))
434+func ch (H) = valueOrElse(getInteger(O(H)), getInteger(("chainIdOf" + toString(H))))
388435
389436
390-func bO (bA,bP,bQ) = {
391- let bR = {
392- let s = bQ
393- if ($isInstanceOf(s, "String"))
437+func ci (bU,cj,ck) = {
438+ let cl = {
439+ let y = ck
440+ if ($isInstanceOf(y, "String"))
394441 then {
395- let as = s
396- let bS = aq(bA, R)
397- ((aj(as)._1 + 1) > bS)
442+ let aK = y
443+ let cm = aI(bU, ad)
444+ ((av(aK)._1 + 1) > cm)
398445 }
399446 else true
400447 }
401- let s = bN(bA)
402- if ($isInstanceOf(s, "Int"))
448+ let y = ch(bU)
449+ if ($isInstanceOf(y, "Int"))
403450 then {
404- let bT = s
405- if (if ((bT == bP))
451+ let cn = y
452+ if (if ((cn == cj))
406453 then true
407- else if (bK(bT))
408- then bR
454+ else if (ce(cn))
455+ then cl
409456 else false)
410457 then unit
411- else throw(("miner is mining other chain " + toString(bT)))
458+ else throw(("miner is mining other chain " + toString(cn)))
412459 }
413460 else unit
414461 }
415462
416463
417-func bU (u) = if ((u == height))
464+func co (C) = if ((C == height))
418465 then unit
419- else throw(((("Expected block from epoch " + toString(height)) + ". Got ") + toString(u)))
466+ else throw(((("Expected block from epoch " + toString(height)) + ". Got ") + toString(C)))
420467
421468
422-func bV (w,bA) = {
423- let bW = getStringValue(A(w))
424- let bX = split_4C(bW, d)
425- if (containsElement(bX, toString(bA)))
469+func cp (E,bU) = {
470+ let cq = getStringValue(J(E))
471+ let cr = split_4C(cq, d)
472+ if (containsElement(cr, toString(bU)))
426473 then nil
427- else [StringEntry(A(w), ((bW + d) + toString(bA)))]
474+ else [StringEntry(J(E), ((cq + d) + toString(bU)))]
428475 }
429476
430477
431-func bY (bZ) = {
432- let ca = fromBase16String(bZ)
433- if ((size(ca) != 32))
478+func cs (ct,cu) = if ((0 > cu))
479+ then throw(("Can't withdraw at negative index: " + toString(cu)))
480+ else {
481+ let cv = size(ct)
482+ if ((cu >= cv))
483+ then {
484+ let cw = (cu - cv)
485+ if ((cw > size(h)))
486+ then throw((("Can't add " + toString(cw)) + " empty flags. Contact with developers"))
487+ else ((ct + take(h, cw)) + "1")
488+ }
489+ else {
490+ let cx = drop(ct, cu)
491+ let cy = take(cx, 1)
492+ if ((cy == "0"))
493+ then ((take(ct, cu) + "1") + drop(cx, 1))
494+ else throw((("Transfer #" + toString(cu)) + " has been already taken"))
495+ }
496+ }
497+
498+
499+func cz (cA) = {
500+ let cB = fromBase16String(cA)
501+ if ((size(cB) != 32))
434502 then throw("invalid block id length")
435- else bZ
503+ else cA
436504 }
437505
438506
439-func cb (cc,cd,bk) = {
440- let ce = aj(getStringValue(o))._1
441- let cf = aY(cc, bk, cd)
442- if ((cf == cd))
443- then [StringEntry(o, cf)]
444- else if ((aj(cf)._1 > ce))
445- then [StringEntry(o, cf)]
446- else nil
507+func cC (cD,cE,bE) = {
508+ let cF = av(getStringValue(q))._1
509+ let cG = bs(cD, bE, cE)
510+ if (if ((cG == cE))
511+ then true
512+ else (av(cG)._1 > cF))
513+ then [StringEntry(q, cG)]
514+ else nil
447515 }
448516
449517
450-@Callable(q)
451-func appendBlock (cg,ch) = if ((ad != q.originCaller))
452- then {
453- let s = ad
454- if ($isInstanceOf(s, "Address"))
518+@Callable(w)
519+func appendBlock (A,cH) = {
520+ let cI = Q()
521+ if ((cI == cI))
522+ then if ((ap != w.originCaller))
455523 then {
456- let ci = s
457- throw(("not allowed to forge blocks in this epoch, expected from " + toString(ci)))
524+ let y = ap
525+ if ($isInstanceOf(y, "Address"))
526+ then {
527+ let cJ = y
528+ throw(("not allowed to forge blocks in this epoch, expected from " + toString(cJ)))
529+ }
530+ else throw("not allowed to forge blocks in this epoch, epoch miner is absent")
458531 }
459- else throw("not allowed to forge blocks in this epoch, epoch miner is absent")
460- }
461- else {
462- let w = valueOrElse(bN(q.originCaller), R)
463- let cj = P(w)
464- let ck = cj._1
465- let cl = cj._2
466- let cm = bH(ch, cl)
467- if ((cm == cm))
468- then {
469- let cn = (ck + 1)
470- let co = (((toBytes(cn) + toBytes(height)) + fromBase16String(cl)) + q.originCaller.bytes)
471- let as = bY(cg)
472-[BinaryEntry((n + cg), co), IntegerEntry(y(w, q.originCaller), cn), StringEntry(x(w), ((toString(cn) + d) + cg)), StringEntry(t(height), ((((toString(value(ad)) + d) + toString(ae)) + d) + cg))]
532+ else {
533+ let E = valueOrElse(ch(w.originCaller), ad)
534+ let cK = ab(E)
535+ let cL = cK._1
536+ let cM = cK._2
537+ let cN = cb(cH, cM)
538+ if ((cN == cN))
539+ then {
540+ let cO = (cL + 1)
541+ let cP = (((toBytes(cO) + toBytes(height)) + fromBase16String(cM)) + w.originCaller.bytes)
542+ let cQ = cz(A)
543+ if ((cQ == cQ))
544+ then [BinaryEntry((p + A), cP), IntegerEntry(G(E, w.originCaller), cO), StringEntry(F(E), ((toString(cO) + d) + A)), StringEntry(B(height), ((((toString(value(ap)) + d) + toString(aq)) + d) + A))]
545+ else throw("Strict value is not equal to itself.")
546+ }
547+ else throw("Strict value is not equal to itself.")
473548 }
474- else throw("Strict value is not equal to itself.")
475- }
549+ else throw("Strict value is not equal to itself.")
550+ }
476551
477552
478553
479-@Callable(q)
480-func extendMainChain (cg,ch,u) = {
481- let cp = bU(u)
482- if ((cp == cp))
554+@Callable(w)
555+func appendBlock_v2 (A,cH,aF) = {
556+ let cI = R()
557+ if ((cI == cI))
558+ then if ((ap != w.originCaller))
559+ then {
560+ let y = ap
561+ if ($isInstanceOf(y, "Address"))
562+ then {
563+ let cJ = y
564+ throw(("not allowed to forge blocks in this epoch, expected from " + toString(cJ)))
565+ }
566+ else throw("not allowed to forge blocks in this epoch, epoch miner is absent")
567+ }
568+ else {
569+ let E = valueOrElse(ch(w.originCaller), ad)
570+ let cR = ab(E)
571+ let cL = cR._1
572+ let cM = cR._2
573+ let cN = cb(cH, cM)
574+ if ((cN == cN))
575+ then {
576+ let cO = (cL + 1)
577+ let cQ = cz(A)
578+ if ((cQ == cQ))
579+ then [aD(A, cO, cM, w.originCaller, E, aF), IntegerEntry(G(E, w.originCaller), cO), StringEntry(F(E), ((toString(cO) + d) + A)), StringEntry(B(height), ((((toString(value(ap)) + d) + toString(aq)) + d) + A))]
580+ else throw("Strict value is not equal to itself.")
581+ }
582+ else throw("Strict value is not equal to itself.")
583+ }
584+ else throw("Strict value is not equal to itself.")
585+ }
586+
587+
588+
589+@Callable(w)
590+func extendMainChain (A,cH,C) = {
591+ let cI = Q()
592+ if ((cI == cI))
483593 then {
484- let cq = bG(q.originCaller)
485- if ((cq == cq))
594+ let cQ = cz(A)
595+ if ((cQ == cQ))
486596 then {
487- let cr = bO(q.originCaller, R, unit)
488- if ((cr == cr))
597+ let cS = co(C)
598+ if ((cS == cS))
489599 then {
490- let cm = bH(ch, U)
491- if ((cm == cm))
600+ let cT = ca(w.originCaller)
601+ if ((cT == cT))
492602 then {
493- let cs = {
494- let s = V(height)
495- if ($isInstanceOf(s, "Unit"))
496- then StringEntry(t(height), ((((toString(q.originCaller) + d) + toString(aV)) + d) + cg))
497- else {
498- let ct = s
499- throw("Epoch already started")
500- }
501- }
502- let cu = cb(q.originCaller, cg, aV)
503- let cn = (T + 1)
504- let co = (((toBytes(cn) + toBytes(height)) + fromBase16String(U)) + q.originCaller.bytes)
505- ([BinaryEntry((n + cg), co), StringEntry(x(R), ((toString(cn) + d) + cg)), IntegerEntry(F(q.originCaller), R), IntegerEntry(y(R, q.originCaller), cn), cs] ++ cu)
603+ let cU = ci(w.originCaller, ad, unit)
604+ if ((cU == cU))
605+ then {
606+ let cN = cb(cH, ag)
607+ if ((cN == cN))
608+ then {
609+ let cV = {
610+ let y = ah(height)
611+ if ($isInstanceOf(y, "Unit"))
612+ then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(bn)) + d) + A))
613+ else {
614+ let cW = y
615+ throw("Epoch already started")
616+ }
617+ }
618+ let cX = cC(w.originCaller, A, bn)
619+ let cO = (af + 1)
620+ let cP = (((toBytes(cO) + toBytes(height)) + fromBase16String(ag)) + w.originCaller.bytes)
621+ ([BinaryEntry((p + A), cP), StringEntry(F(ad), ((toString(cO) + d) + A)), IntegerEntry(O(w.originCaller), ad), IntegerEntry(G(ad, w.originCaller), cO), cV] ++ cX)
622+ }
623+ else throw("Strict value is not equal to itself.")
624+ }
625+ else throw("Strict value is not equal to itself.")
506626 }
507627 else throw("Strict value is not equal to itself.")
508628 }
515635
516636
517637
518-@Callable(q)
519-func startAltChain (cg,ch,u) = {
520- let cp = bU(u)
521- if ((cp == cp))
638+@Callable(w)
639+func extendMainChain_v2 (A,cH,C,aF) = {
640+ let cI = R()
641+ if ((cI == cI))
522642 then {
523- let cq = bG(q.originCaller)
524- if ((cq == cq))
643+ let cQ = cz(A)
644+ if ((cQ == cQ))
525645 then {
526- let cv = aj(ch)
527- let cw = cv._1
528- let cx = cv._2
529- let cy = cv._3
530- let cz = cv._4
531- let cA = aj(getStringValue(o))._2
532- let cB = if ((cx >= cA))
533- then cx
534- else throw((((("can not start alt chain from epoch " + toString(cx)) + ", epoch ") + toString(cA)) + " is finalized"))
535- let cr = bO(q.originCaller, R, ch)
536- if ((cr == cr))
646+ let cS = co(C)
647+ if ((cS == cS))
537648 then {
538- let cC = (valueOrElse(getInteger(j), 0) + 1)
539- let cD = aj(ch)._1
540- let cn = (cD + 1)
541- let co = (((toBytes(cn) + toBytes(height)) + fromBase16String(ch)) + q.originCaller.bytes)
542- let cs = {
543- let s = V(height)
544- if ($isInstanceOf(s, "Unit"))
545- then StringEntry(t(height), ((((toString(q.originCaller) + d) + toString(cB)) + d) + cg))
546- else {
547- let ct = s
548- throw("Epoch already started")
549- }
550- }
551-[cs, BinaryEntry((n + cg), co), StringEntry(v(cC), cg), StringEntry(x(cC), ((toString(cn) + d) + cg)), IntegerEntry(F(q.originCaller), cC), IntegerEntry(y(cC, q.originCaller), cn), IntegerEntry(y(R, q.originCaller), cD), StringEntry(A(cC), toString(q.originCaller)), IntegerEntry(j, cC)]
552- }
553- else throw("Strict value is not equal to itself.")
554- }
555- else throw("Strict value is not equal to itself.")
556- }
557- else throw("Strict value is not equal to itself.")
558- }
559-
560-
561-
562-@Callable(q)
563-func extendAltChain (w,cg,ch,u) = {
564- let cp = bU(u)
565- if ((cp == cp))
566- then {
567- let cq = bG(q.originCaller)
568- if ((cq == cq))
569- then {
570- let cr = bO(q.originCaller, w, toBase16String(aj(getStringValue(v(w)))._3))
571- if ((cr == cr))
572- then {
573- let cE = P(w)
574- let ck = cE._1
575- let cF = cE._2
576- let cm = bH(ch, cF)
577- if ((cm == cm))
649+ let cT = ca(w.originCaller)
650+ if ((cT == cT))
578651 then {
579- let cn = (ck + 1)
580- let bk = aj(ch)._2
581- let cG = if ((bu(w) > (aQ / 2)))
652+ let cU = ci(w.originCaller, ad, unit)
653+ if ((cU == cU))
582654 then {
583- let cu = cb(q.originCaller, cg, bk)
584- ([IntegerEntry(i, w), IntegerEntry(k, (valueOrElse(getInteger(j), 0) + 1))] ++ cu)
655+ let cN = cb(cH, ag)
656+ if ((cN == cN))
657+ then {
658+ let cV = {
659+ let y = ah(height)
660+ if ($isInstanceOf(y, "Unit"))
661+ then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(bn)) + d) + A))
662+ else {
663+ let cW = y
664+ throw("Epoch already started")
665+ }
666+ }
667+ let cX = cC(w.originCaller, A, bn)
668+ let cO = (af + 1)
669+ ([aD(A, cO, ag, w.originCaller, ad, aF), StringEntry(F(ad), ((toString(cO) + d) + A)), IntegerEntry(O(w.originCaller), ad), IntegerEntry(G(ad, w.originCaller), cO), cV] ++ cX)
670+ }
671+ else throw("Strict value is not equal to itself.")
585672 }
586- else nil
587- let cs = {
588- let s = V(height)
589- if ($isInstanceOf(s, "Unit"))
590- then StringEntry(t(height), ((((toString(q.originCaller) + d) + toString(bk)) + d) + cg))
591- else {
592- let ct = s
593- throw("Epoch already started")
594- }
595- }
596- let cH = if (if ((cG == nil))
597- then (valueOrElse(bN(q.originCaller), 0) != w)
598- else false)
599- then [IntegerEntry(y(R, q.originCaller), aj(getStringValue(v(w)))._1)]
600- else nil
601- let co = (((toBytes(cn) + toBytes(height)) + fromBase16String(ch)) + q.originCaller.bytes)
602- ((([BinaryEntry((n + cg), co), StringEntry(x(w), ((toString(cn) + d) + cg)), cs, IntegerEntry(F(q.originCaller), w), IntegerEntry(y(w, q.originCaller), cn)] ++ cG) ++ bV(w, q.originCaller)) ++ cH)
673+ else throw("Strict value is not equal to itself.")
603674 }
604675 else throw("Strict value is not equal to itself.")
605676 }
612683
613684
614685
615-@Callable(q)
616-func join (E) = {
617- func cI (I) = {
618- let s = getBinary(D(I))
619- if ($isInstanceOf(s, "ByteVector"))
686+@Callable(w)
687+func startAltChain (A,cH,C) = {
688+ let cI = Q()
689+ if ((cI == cI))
690+ then {
691+ let cQ = cz(A)
692+ if ((cQ == cQ))
693+ then {
694+ let cS = co(C)
695+ if ((cS == cS))
696+ then {
697+ let cT = ca(w.originCaller)
698+ if ((cT == cT))
699+ then {
700+ let cY = av(cH)
701+ let cZ = cY._1
702+ let da = cY._2
703+ let db = cY._3
704+ let dc = cY._4
705+ let dd = cY._5
706+ let de = cY._6
707+ let df = av(getStringValue(q))._2
708+ let dg = if ((da >= df))
709+ then da
710+ else throw((((("can not start alt chain from epoch " + toString(da)) + ", epoch ") + toString(df)) + " is finalized"))
711+ let cU = ci(w.originCaller, ad, cH)
712+ if ((cU == cU))
713+ then {
714+ let dh = (valueOrElse(getInteger(l), 0) + 1)
715+ let cO = (av(cH)._1 + 1)
716+ let cP = (((toBytes(cO) + toBytes(height)) + fromBase16String(cH)) + w.originCaller.bytes)
717+ let cV = {
718+ let y = ah(height)
719+ if ($isInstanceOf(y, "Unit"))
720+ then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(dg)) + d) + A))
721+ else {
722+ let cW = y
723+ throw("Epoch already started")
724+ }
725+ }
726+[cV, BinaryEntry((p + A), cP), StringEntry(D(dh), A), StringEntry(F(dh), ((toString(cO) + d) + A)), IntegerEntry(O(w.originCaller), dh), IntegerEntry(G(dh, w.originCaller), cO), IntegerEntry(G(ad, w.originCaller), cO), StringEntry(J(dh), toString(w.originCaller)), IntegerEntry(l, dh)]
727+ }
728+ else throw("Strict value is not equal to itself.")
729+ }
730+ else throw("Strict value is not equal to itself.")
731+ }
732+ else throw("Strict value is not equal to itself.")
733+ }
734+ else throw("Strict value is not equal to itself.")
735+ }
736+ else throw("Strict value is not equal to itself.")
737+ }
738+
739+
740+
741+@Callable(w)
742+func startAltChain_v2 (A,cH,C,aF) = {
743+ let cI = R()
744+ if ((cI == cI))
745+ then {
746+ let cQ = cz(A)
747+ if ((cQ == cQ))
748+ then {
749+ let cS = co(C)
750+ if ((cS == cS))
751+ then {
752+ let cT = ca(w.originCaller)
753+ if ((cT == cT))
754+ then {
755+ let di = av(cH)
756+ let cZ = di._1
757+ let da = di._2
758+ let db = di._3
759+ let dc = di._4
760+ let dd = di._5
761+ let de = di._6
762+ let df = av(getStringValue(q))._2
763+ let dg = if ((da >= df))
764+ then da
765+ else throw((((("can not start alt chain from epoch " + toString(da)) + ", epoch ") + toString(df)) + " is finalized"))
766+ let cU = ci(w.originCaller, ad, cH)
767+ if ((cU == cU))
768+ then {
769+ let dh = (valueOrElse(getInteger(l), 0) + 1)
770+ let cO = (av(cH)._1 + 1)
771+ let cV = {
772+ let y = ah(height)
773+ if ($isInstanceOf(y, "Unit"))
774+ then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(dg)) + d) + A))
775+ else {
776+ let cW = y
777+ throw("Epoch already started")
778+ }
779+ }
780+[cV, aD(A, cO, cH, w.originCaller, dh, aF), StringEntry(D(dh), A), StringEntry(F(dh), ((toString(cO) + d) + A)), IntegerEntry(O(w.originCaller), dh), IntegerEntry(G(dh, w.originCaller), cO), IntegerEntry(G(ad, w.originCaller), cO), StringEntry(J(dh), toString(w.originCaller)), IntegerEntry(l, dh)]
781+ }
782+ else throw("Strict value is not equal to itself.")
783+ }
784+ else throw("Strict value is not equal to itself.")
785+ }
786+ else throw("Strict value is not equal to itself.")
787+ }
788+ else throw("Strict value is not equal to itself.")
789+ }
790+ else throw("Strict value is not equal to itself.")
791+ }
792+
793+
794+
795+@Callable(w)
796+func extendAltChain (E,A,cH,C) = {
797+ let cI = Q()
798+ if ((cI == cI))
799+ then {
800+ let cQ = cz(A)
801+ if ((cQ == cQ))
802+ then {
803+ let cS = co(C)
804+ if ((cS == cS))
805+ then {
806+ let cT = ca(w.originCaller)
807+ if ((cT == cT))
808+ then {
809+ let dj = av(getStringValue(D(E)))
810+ let cU = ci(w.originCaller, E, toBase16String(dj._3))
811+ if ((cU == cU))
812+ then {
813+ let dk = ab(E)
814+ let cL = dk._1
815+ let dl = dk._2
816+ let cN = cb(cH, dl)
817+ if ((cN == cN))
818+ then {
819+ let cO = (cL + 1)
820+ let bE = av(cH)._2
821+ let dm = if ((bO(E) > (bi / 2)))
822+ then {
823+ let dn = valueOrElse(getInteger(l), 0)
824+ let cX = cC(w.originCaller, A, bE)
825+ ([IntegerEntry(I(ad), dj._1), IntegerEntry(k, E), IntegerEntry(m, (dn + 1))] ++ cX)
826+ }
827+ else nil
828+ let cV = {
829+ let y = ah(height)
830+ if ($isInstanceOf(y, "Unit"))
831+ then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(bE)) + d) + A))
832+ else {
833+ let cW = y
834+ throw("Epoch already started")
835+ }
836+ }
837+ let do = if (if ((dm == nil))
838+ then (valueOrElse(ch(w.originCaller), 0) != E)
839+ else false)
840+ then [IntegerEntry(G(ad, w.originCaller), dj._1)]
841+ else nil
842+ let cP = (((toBytes(cO) + toBytes(height)) + fromBase16String(cH)) + w.originCaller.bytes)
843+ ((([BinaryEntry((p + A), cP), StringEntry(F(E), ((toString(cO) + d) + A)), cV, IntegerEntry(O(w.originCaller), E), IntegerEntry(G(E, w.originCaller), cO)] ++ dm) ++ cp(E, w.originCaller)) ++ do)
844+ }
845+ else throw("Strict value is not equal to itself.")
846+ }
847+ else throw("Strict value is not equal to itself.")
848+ }
849+ else throw("Strict value is not equal to itself.")
850+ }
851+ else throw("Strict value is not equal to itself.")
852+ }
853+ else throw("Strict value is not equal to itself.")
854+ }
855+ else throw("Strict value is not equal to itself.")
856+ }
857+
858+
859+
860+@Callable(w)
861+func extendAltChain_v2 (E,A,cH,C,aF) = {
862+ let cI = R()
863+ if ((cI == cI))
864+ then {
865+ let cQ = cz(A)
866+ if ((cQ == cQ))
867+ then {
868+ let cS = co(C)
869+ if ((cS == cS))
870+ then {
871+ let cT = ca(w.originCaller)
872+ if ((cT == cT))
873+ then {
874+ let dj = av(getStringValue(D(E)))
875+ let cU = ci(w.originCaller, E, toBase16String(dj._3))
876+ if ((cU == cU))
877+ then {
878+ let dp = ab(E)
879+ let cL = dp._1
880+ let dl = dp._2
881+ let cN = cb(cH, dl)
882+ if ((cN == cN))
883+ then {
884+ let cO = (cL + 1)
885+ let bE = av(cH)._2
886+ let dm = if ((bO(E) > (bi / 2)))
887+ then {
888+ let dn = valueOrElse(getInteger(l), 0)
889+ let cX = cC(w.originCaller, A, bE)
890+ ([IntegerEntry(I(ad), dj._1), IntegerEntry(k, E), IntegerEntry(m, (dn + 1))] ++ cX)
891+ }
892+ else nil
893+ let cV = {
894+ let y = ah(height)
895+ if ($isInstanceOf(y, "Unit"))
896+ then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(bE)) + d) + A))
897+ else {
898+ let cW = y
899+ throw("Epoch already started")
900+ }
901+ }
902+ let do = if (if ((dm == nil))
903+ then (valueOrElse(ch(w.originCaller), 0) != E)
904+ else false)
905+ then [IntegerEntry(G(ad, w.originCaller), dj._1)]
906+ else nil
907+ ((([aD(A, cO, cH, w.originCaller, E, aF), StringEntry(F(E), ((toString(cO) + d) + A)), cV, IntegerEntry(O(w.originCaller), E), IntegerEntry(G(E, w.originCaller), cO)] ++ dm) ++ cp(E, w.originCaller)) ++ do)
908+ }
909+ else throw("Strict value is not equal to itself.")
910+ }
911+ else throw("Strict value is not equal to itself.")
912+ }
913+ else throw("Strict value is not equal to itself.")
914+ }
915+ else throw("Strict value is not equal to itself.")
916+ }
917+ else throw("Strict value is not equal to itself.")
918+ }
919+ else throw("Strict value is not equal to itself.")
920+ }
921+
922+
923+
924+@Callable(w)
925+func join (N) = {
926+ func dq (U) = {
927+ let y = getBinary(M(U))
928+ if ($isInstanceOf(y, "ByteVector"))
620929 then {
621- let cJ = s
622- if ((cJ == q.originCallerPublicKey))
930+ let dr = y
931+ if ((dr == w.originCallerPublicKey))
623932 then unit
624- else throw(((("L2 miner address " + I) + " is already linked with ") + toBase58String(cJ)))
933+ else throw(((("L2 miner address " + U) + " is already linked with ") + toBase58String(dr)))
625934 }
626935 else unit
627936 }
628937
629- if (!(bF()))
938+ if (!(bZ()))
630939 then throw("The contract has not yet set up")
631- else if ((c > wavesBalance(q.originCaller).generating))
632- then throw(((("Insufficient generating balance: " + toString(wavesBalance(q.originCaller).generating)) + ". Required: ") + toString(c)))
633- else if ((size(E) != 20))
940+ else if ((c > wavesBalance(w.originCaller).generating))
941+ then throw(((("Insufficient generating balance: " + toString(wavesBalance(w.originCaller).generating)) + ". Required: ") + toString(c)))
942+ else if ((size(N) != 20))
634943 then throw("rewardAddress should be an L2 address")
635- else if ((size(ah) >= 50))
944+ else if ((size(at) >= 50))
636945 then throw("too many miners")
637946 else {
638- func cK (cL,z) = if (cL)
947+ func ds (dt,H) = if (dt)
639948 then true
640- else (z == toString(q.originCaller))
949+ else (H == toString(w.originCaller))
641950
642- let cM = {
643- let aH = ah
644- let aI = size(aH)
645- let aJ = false
646- func aK (aL,aM) = if ((aM >= aI))
647- then aL
648- else cK(aL, aH[aM])
951+ let du = {
952+ let aZ = at
953+ let ba = size(aZ)
954+ let bb = false
955+ func bc (bd,be) = if ((be >= ba))
956+ then bd
957+ else ds(bd, aZ[be])
649958
650- func aN (aL,aM) = if ((aM >= aI))
651- then aL
959+ func bf (bd,be) = if ((be >= ba))
960+ then bd
652961 else throw("List size exceeds 50")
653962
654- aN(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aJ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
963+ bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
655964 }
656- if (cM)
965+ if (du)
657966 then nil
658967 else {
659- let cN = toString(q.originCaller)
660- let cO = toBase16String(E)
661- let cP = cI(cO)
662- if ((cP == cP))
968+ let dv = toString(w.originCaller)
969+ let dw = toBase16String(N)
970+ let dx = dq(dw)
971+ if ((dx == dx))
663972 then {
664- let bo = if ((size(ah) == 0))
665- then cN
666- else ((ag + d) + cN)
667- let cQ = {
668- let s = getString(B(cN))
669- if ($isInstanceOf(s, "String"))
973+ let bI = if ((size(at) == 0))
974+ then dv
975+ else ((as + d) + dv)
976+ let dy = {
977+ let y = getString(K(dv))
978+ if ($isInstanceOf(y, "String"))
670979 then {
671- let cR = s
672- if ((cR == toBase16String(E)))
980+ let dz = y
981+ if ((dz == toBase16String(N)))
673982 then nil
674- else [DeleteEntry(D(cR))]
983+ else [DeleteEntry(M(dz))]
675984 }
676985 else nil
677986 }
678- ([StringEntry(h, bo), StringEntry(B(cN), ("0x" + cO)), BinaryEntry(D(cO), q.originCallerPublicKey)] ++ cQ)
987+ ([StringEntry(j, bI), StringEntry(K(dv), ("0x" + dw)), BinaryEntry(M(dw), w.originCallerPublicKey)] ++ dy)
679988 }
680989 else throw("Strict value is not equal to itself.")
681990 }
684993
685994
686995
687-@Callable(q)
996+@Callable(w)
688997 func leave () = {
689- let cS = toString(q.originCaller)
690- func cT (bw,z) = if ((z == cS))
691- then bw
692- else (bw :+ z)
998+ let dA = toString(w.originCaller)
999+ func dB (bQ,H) = if ((H == dA))
1000+ then bQ
1001+ else (bQ :+ H)
6931002
694- let cU = {
695- let aH = ah
696- let aI = size(aH)
697- let aJ = nil
698- func aK (aL,aM) = if ((aM >= aI))
699- then aL
700- else cT(aL, aH[aM])
1003+ let dC = {
1004+ let aZ = at
1005+ let ba = size(aZ)
1006+ let bb = nil
1007+ func bc (bd,be) = if ((be >= ba))
1008+ then bd
1009+ else dB(bd, aZ[be])
7011010
702- func aN (aL,aM) = if ((aM >= aI))
703- then aL
1011+ func bf (bd,be) = if ((be >= ba))
1012+ then bd
7041013 else throw("List size exceeds 50")
7051014
706- aN(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aJ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
1015+ bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
7071016 }
708- let cV = B(cS)
709- let cW = valueOrErrorMessage(getString(this, cV), "miner has never joined")
710- if ((ad == q.originCaller))
1017+ let dD = K(dA)
1018+ let dE = valueOrErrorMessage(getString(this, dD), "miner has never joined")
1019+ if ((ap == w.originCaller))
7111020 then throw("designated miner can't leave")
712- else [StringEntry(h, makeString_2C(cU, d)), DeleteEntry(cV), DeleteEntry(D(cW))]
1021+ else [StringEntry(j, makeString_2C(dC, d)), DeleteEntry(dD), DeleteEntry(M(dE))]
7131022 }
7141023
7151024
7161025
717-@Callable(q)
718-func setup (cX,cY,cZ) = if (bF())
1026+@Callable(w)
1027+func withdraw (A,dF,dG,dH) = {
1028+ let dI = R()
1029+ if ((dI == dI))
1030+ then {
1031+ let dJ = av(A)
1032+ let dK = dJ._1
1033+ let dL = av(getStringValue(q))._1
1034+ let dM = av(ag)._1
1035+ if ((dK > dL))
1036+ then throw(((("EL block #" + toString(dK)) + " is not finalized. The current finalized is #") + toString(dL)))
1037+ else {
1038+ let dN = dJ._5
1039+ let dO = (dN == ad)
1040+ let dP = {
1041+ let y = getInteger(I(dN))
1042+ if ($isInstanceOf(y, "Int"))
1043+ then {
1044+ let dQ = y
1045+ (dQ > dK)
1046+ }
1047+ else throw((((A + " is on an alternative chain #") + toString(dN)) + " that was not approved by majority. Wait for some blocks"))
1048+ }
1049+ if (if (dO)
1050+ then true
1051+ else dP)
1052+ then {
1053+ let dR = w.originCaller
1054+ let dS = take(drop(dR.bytes, 2), g)
1055+ let dT = base58'11111111111111111111111111111111111111111111'
1056+ let dU = toBytes(dH)
1057+ let dV = ((dS + take(dT, (size(dT) - size(dU)))) + dU)
1058+ let dW = blake2b256_16Kb(dV)
1059+ let dX = createMerkleRoot(dF, dW, dG)
1060+ let dY = dJ._6
1061+ if ((dX == dY))
1062+ then {
1063+ let dZ = fromBase58String(getStringValue(r))
1064+ let ea = z(A)
1065+[Reissue(dZ, dH, true), ScriptTransfer(dR, dH, dZ), StringEntry(ea, cs(valueOrElse(getString(ea), ""), dG))]
1066+ }
1067+ else throw(((((("Expected root hash: " + toBase16String(dY)) + ", got: ") + toBase16String(dX)) + ". Event data digest: ") + toBase64String(dW)))
1068+ }
1069+ else throw((("Expected " + A) + " to be either on the main chain or relate to it"))
1070+ }
1071+ }
1072+ else throw("Strict value is not equal to itself.")
1073+ }
1074+
1075+
1076+
1077+@Callable(w)
1078+func setup (eb,ec,ed,ee) = if (bZ())
7191079 then throw("The contract has been already set up")
1080+ else if ((0 > ec))
1081+ then throw("The miner reward must be nonnegative")
1082+ else {
1083+ let ef = fromBase16String(eb)
1084+ let eg = base58'11111111111111111111111111111111'
1085+ let eh = addressFromPublicKey(eg)
1086+ let ei = base58'11111111111111111111'
1087+ let ej = "0000000000000000000000000000000000000000000000000000000000000000"
1088+ let ek = Issue("UNIT0", "Native token", 0, 8, true)
1089+ let dZ = calculateAssetId(ek)
1090+[aD(eb, 0, ej, eh, ad, ""), StringEntry(D(0), eb), StringEntry(F(0), ("0," + eb)), IntegerEntry(n, ec), StringEntry(o, ed), StringEntry(B(height), ((toString(eh) + ",0,") + eb)), StringEntry(q, eb), IntegerEntry(t, 0), IntegerEntry(u, 0), ek, StringEntry(r, toBase58String(dZ)), StringEntry(s, ("0x" + ee))]
1091+ }
1092+
1093+
1094+
1095+@Callable(w)
1096+func setupElToClTransfers (el,ee) = if (isDefined(getInteger(u)))
1097+ then throw("EL to CL transfers feature was set up")
7201098 else {
721- let da = fromBase16String(cX)
722- let db = base58'11111111111111111111111111111111'
723- let dc = addressFromPublicKey(db)
724- let dd = base58'11111111111111111111'
725- let de = base58'11111111111111111111111111111111'
726- let df = (((toBytes(0) + toBytes(height)) + de) + dc.bytes)
727-[BinaryEntry((n + cX), df), StringEntry(v(0), cX), StringEntry(x(0), ("0," + cX)), IntegerEntry(l, cY), StringEntry(m, cZ), StringEntry(t(height), ((toString(dc) + ",0,") + cX)), StringEntry(o, cX)]
1099+ let ek = Issue("UNIT0", "Native token", 0, 8, true)
1100+ let dZ = calculateAssetId(ek)
1101+[IntegerEntry(u, el), ek, StringEntry(r, toBase58String(dZ)), StringEntry(s, ("0x" + ee))]
7281102 }
7291103
7301104
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 8 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 9223372036854775807
55
66 let b = 100000000
77
88 let c = (20000 * b)
99
1010 let d = ","
1111
1212 let e = 32
1313
1414 let f = 26
1515
16-let g = "thisEpochData"
16+let g = 20
1717
18-let h = "allMiners"
18+let h = "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
1919
20-let i = "mainChainId"
20+let i = "thisEpochData"
2121
22-let j = "lastChainId"
22+let j = "allMiners"
2323
24-let k = "firstValidAltChainId"
24+let k = "mainChainId"
2525
26-let l = "minerReward"
26+let l = "lastChainId"
2727
28-let m = "stakingContractAddress"
28+let m = "firstValidAltChainId"
2929
30-let n = "block_0x"
30+let n = "minerReward"
3131
32-let o = "finalizedBlock"
32+let o = "stakingContractAddress"
3333
34-func p (q) = {
35- let r = toString(q)
36- let s = size(r)
37- if ((1 == s))
38- then ("0000000" + r)
39- else if ((2 == s))
40- then ("000000" + r)
41- else if ((3 == s))
42- then ("00000" + r)
43- else if ((4 == s))
44- then ("0000" + r)
45- else if ((5 == s))
46- then ("000" + r)
47- else if ((6 == s))
48- then ("00" + r)
49- else if ((7 == s))
50- then ("0" + r)
51- else r
34+let p = "block_0x"
35+
36+let q = "finalizedBlock"
37+
38+let r = "tokenId"
39+
40+let s = "elBridgeAddress"
41+
42+let t = "prevRandaoHeight"
43+
44+let u = "elToClTransfersEpoch"
45+
46+func v (w) = {
47+ let x = toString(w)
48+ let y = size(x)
49+ if ((1 == y))
50+ then ("0000000" + x)
51+ else if ((2 == y))
52+ then ("000000" + x)
53+ else if ((3 == y))
54+ then ("00000" + x)
55+ else if ((4 == y))
56+ then ("0000" + x)
57+ else if ((5 == y))
58+ then ("000" + x)
59+ else if ((6 == y))
60+ then ("00" + x)
61+ else if ((7 == y))
62+ then ("0" + x)
63+ else x
5264 }
5365
5466
55-func t (u) = ("epoch_" + p(u))
67+func z (A) = ("elToClTransfers_0x" + A)
5668
5769
58-func v (w) = (("chain" + toString(w)) + "FirstBlock")
70+func B (C) = ("epoch_" + v(C))
5971
6072
61-func x (w) = ("chain_" + p(w))
73+func D (E) = (("chain" + toString(E)) + "FirstBlock")
6274
6375
64-func y (w,z) = ((("chain_" + p(w)) + "_") + toString(z))
76+func F (E) = ("chain_" + v(E))
6577
6678
67-func A (w) = (("chain" + toString(w)) + "Supporters")
79+func G (E,H) = ((("chain_" + v(E)) + "_") + toString(H))
6880
6981
70-func B (C) = (("miner_" + C) + "_RewardAddress")
82+func I (E) = (("chain_" + v(E)) + "ForkedHeight")
7183
7284
73-func D (E) = (("miner_0x" + E) + "_PK")
85+func J (E) = (("chain" + toString(E)) + "Supporters")
7486
7587
76-func F (z) = (("miner_" + toString(z)) + "_ChainId")
88+func K (L) = (("miner_" + L) + "_RewardAddress")
7789
7890
79-let G = {
80- let s = getString(this, m)
81- if ($isInstanceOf(s, "String"))
91+func M (N) = (("miner_0x" + N) + "_PK")
92+
93+
94+func O (H) = (("miner_" + toString(H)) + "_ChainId")
95+
96+
97+let P = valueOrElse(getInteger(this, u), a)
98+
99+func Q () = if ((P > height))
100+ then unit
101+ else throw((("EL to CL transfers activated on epoch #" + toString(height)) + ". Upgrade your client"))
102+
103+
104+func R () = if ((height >= P))
105+ then unit
106+ else throw(((("EL to CL transfers haven't activated on epoch #" + toString(height)) + ". Wait for activation on #") + toString(P)))
107+
108+
109+let S = {
110+ let y = getString(this, o)
111+ if ($isInstanceOf(y, "String"))
82112 then {
83- let r = s
84- valueOrErrorMessage(addressFromString(r), ("invalid staking contract address: " + r))
113+ let x = y
114+ valueOrErrorMessage(addressFromString(x), ("invalid staking contract address: " + x))
85115 }
86- else Address(getBinaryValue(this, m))
116+ else Address(getBinaryValue(this, o))
87117 }
88118
89-func H (I) = {
90- let s = getString(G, ("%s__" + toString(I)))
91- if ($isInstanceOf(s, "String"))
119+func T (U) = {
120+ let y = getString(S, ("%s__" + toString(U)))
121+ if ($isInstanceOf(y, "String"))
92122 then {
93- let J = s
94- let K = split(J, "__")
95- let L = parseIntValue(K[1])
96- let M = parseIntValue(K[2])
97- let N = parseIntValue(K[3])
98- let O = parseIntValue(K[4])
99- if ((height >= N))
100- then O
101- else if ((height >= L))
102- then M
123+ let V = y
124+ let W = split(V, "__")
125+ let X = parseIntValue(W[1])
126+ let Y = parseIntValue(W[2])
127+ let Z = parseIntValue(W[3])
128+ let aa = parseIntValue(W[4])
129+ if ((height >= Z))
130+ then aa
131+ else if ((height >= X))
132+ then Y
103133 else 0
104134 }
105135 else 0
106136 }
107137
108138
109-func P (w) = {
110- let r = getStringValue(x(w))
111- let Q = split(r, d)
112- $Tuple2(parseIntValue(Q[0]), Q[1])
139+func ab (E) = {
140+ let x = getStringValue(F(E))
141+ let ac = split(x, d)
142+ $Tuple2(parseIntValue(ac[0]), ac[1])
113143 }
114144
115145
116-let R = valueOrElse(getInteger(i), 0)
146+let ad = valueOrElse(getInteger(k), 0)
117147
118-let S = P(R)
148+let ae = ab(ad)
119149
120-let T = S._1
150+let af = ae._1
121151
122-let U = S._2
152+let ag = ae._2
123153
124-func V (u) = {
125- let s = getString(t(u))
126- if ($isInstanceOf(s, "String"))
154+func ah (C) = {
155+ let y = getString(B(C))
156+ if ($isInstanceOf(y, "String"))
127157 then {
128- let r = s
129- let W = split(r, d)
130- $Tuple3(addressFromStringValue(W[0]), parseIntValue(W[1]), W[2])
158+ let x = y
159+ let ai = split(x, d)
160+ $Tuple3(addressFromStringValue(ai[0]), parseIntValue(ai[1]), ai[2])
131161 }
132162 else unit
133163 }
134164
135165
136-let X = {
137- let s = V(height)
138- if ($isInstanceOf(s, "(Address, Int, String)"))
166+let aj = {
167+ let y = ah(height)
168+ if ($isInstanceOf(y, "(Address, Int, String)"))
139169 then {
140- let Y = s
141- Y
170+ let ak = y
171+ ak
142172 }
143173 else {
144- let Z = getString(g)
145- if ($isInstanceOf(Z, "String"))
174+ let al = getString(i)
175+ if ($isInstanceOf(al, "String"))
146176 then {
147- let aa = Z
148- let ab = split(aa, d)
149- let ac = parseIntValue(ab[0])
150- $Tuple3(if ((ac == height))
151- then addressFromStringValue(ab[1])
177+ let am = al
178+ let an = split(am, d)
179+ let ao = parseIntValue(an[0])
180+ $Tuple3(if ((ao == height))
181+ then addressFromStringValue(an[1])
152182 else unit, 0, "")
153183 }
154184 else $Tuple3(unit, 0, "")
155185 }
156186 }
157187
158-let ad = X._1
188+let ap = aj._1
159189
160-let ae = X._2
190+let aq = aj._2
161191
162-let af = X._3
192+let ar = aj._3
163193
164-let ag = valueOrElse(getString(h), "")
194+let as = valueOrElse(getString(j), "")
165195
166-let ah = {
167- let s = ag
168- if (("" == s))
196+let at = {
197+ let y = as
198+ if (("" == y))
169199 then nil
170- else if ($isInstanceOf(s, "String"))
200+ else if ($isInstanceOf(y, "String"))
171201 then {
172- let ai = s
173- split_4C(ai, d)
202+ let au = y
203+ split_4C(au, d)
174204 }
175205 else throw("Match error")
176206 }
177207
178-func aj (ak) = {
179- let al = getBinaryValue((n + ak))
180- let am = toInt(al)
181- let an = toInt(al, 8)
182- let ao = take(drop(al, 16), e)
183- let ap = takeRight(al, f)
184- $Tuple4(am, an, ao, ap)
185- }
186-
187-
188-func aq (z,w) = {
189- let s = getInteger(y(w, z))
190- if ($isInstanceOf(s, "Int"))
191- then {
192- let ar = s
193- ar
194- }
208+func av (aw) = {
209+ let ax = getBinaryValue((p + aw))
210+ let ay = toInt(ax)
211+ let az = toInt(ax, 8)
212+ let aA = take(drop(ax, 16), e)
213+ let aB = take(drop(ax, (16 + e)), f)
214+ if ((P > az))
215+ then $Tuple6(ay, az, aA, aB, 0, base58'')
195216 else {
196- let as = getStringValue(((("chain" + toString(w)) + "LastMinedBy") + toString(z)))
197- aj(as)._1
217+ let E = toInt(drop(ax, ((16 + e) + f)))
218+ let aC = drop(ax, ((24 + e) + f))
219+ $Tuple6(ay, az, aA, aB, E, aC)
198220 }
199221 }
200222
201223
202-let at = {
203- let au = {
204- let s = lastBlock.vrf
205- if ($isInstanceOf(s, "ByteVector"))
224+func aD (A,ay,aE,aB,E,aF) = {
225+ let aG = toBytes(height)
226+ let aH = (((((toBytes(ay) + aG) + fromBase16String(aE)) + aB.bytes) + toBytes(E)) + fromBase16String(aF))
227+ BinaryEntry((p + A), aH)
228+ }
229+
230+
231+func aI (H,E) = {
232+ let y = getInteger(G(E, H))
233+ if ($isInstanceOf(y, "Int"))
234+ then {
235+ let aJ = y
236+ aJ
237+ }
238+ else {
239+ let aK = getStringValue(((("chain" + toString(E)) + "LastMinedBy") + toString(H)))
240+ av(aK)._1
241+ }
242+ }
243+
244+
245+let aL = {
246+ let aM = {
247+ let y = lastBlock.vrf
248+ if ($isInstanceOf(y, "ByteVector"))
206249 then {
207- let av = s
208- av
250+ let aN = y
251+ aN
209252 }
210253 else lastBlock.generationSignature
211254 }
212- func aw (ax,z) = {
213- let ay = ax
214- let az = ay._1
215- let aA = ay._2
216- let aB = ay._3
217- let aC = ay._4
218- let aD = addressFromStringValue(z)
219- let aE = wavesBalance(aD).generating
220- let aF = H(aD)
221- if (if ((c > aE))
255+ func aO (aP,H) = {
256+ let aQ = aP
257+ let aR = aQ._1
258+ let aS = aQ._2
259+ let aT = aQ._3
260+ let aU = aQ._4
261+ let aV = addressFromStringValue(H)
262+ let aW = wavesBalance(aV).generating
263+ let aX = T(aV)
264+ if (if ((c > aW))
222265 then true
223- else (0 >= aF))
224- then ax
266+ else (0 >= aX))
267+ then aP
225268 else {
226- let aG = calculateDelay(aD, aF)
227- if ((az > aG))
228- then $Tuple4(aG, z, (aB + aF), (aC :+ z))
229- else $Tuple4(az, aA, (aB + aF), (aC :+ z))
269+ let aY = calculateDelay(aV, aX)
270+ if ((aR > aY))
271+ then $Tuple4(aY, H, (aT + aX), (aU :+ H))
272+ else $Tuple4(aR, aS, (aT + aX), (aU :+ H))
230273 }
231274 }
232275
233- let aH = ah
234- let aI = size(aH)
235- let aJ = $Tuple4(a, "", 0, nil)
236- func aK (aL,aM) = if ((aM >= aI))
237- then aL
238- else aw(aL, aH[aM])
276+ let aZ = at
277+ let ba = size(aZ)
278+ let bb = $Tuple4(a, "", 0, nil)
279+ func bc (bd,be) = if ((be >= ba))
280+ then bd
281+ else aO(bd, aZ[be])
239282
240- func aN (aL,aM) = if ((aM >= aI))
241- then aL
283+ func bf (bd,be) = if ((be >= ba))
284+ then bd
242285 else throw("List size exceeds 50")
243286
244- aN(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aJ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
287+ bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
245288 }
246289
247-let aO = at._1
290+let bg = aL._1
248291
249-let aP = at._2
292+let bh = aL._2
250293
251-let aQ = at._3
294+let bi = aL._3
252295
253-let aR = at._4
296+let bj = aL._4
254297
255-func aS (w) = P(w)._2
298+func bk (E) = ab(E)._2
256299
257300
258-let aT = aj(U)
301+let bl = av(ag)
259302
260-let aU = aT._1
303+let bm = bl._1
261304
262-let aV = aT._2
305+let bn = bl._2
263306
264-let aW = aT._3
307+let bo = bl._3
265308
266-let aX = aT._4
309+let bp = bl._4
267310
268-func aY (aZ,ba,bb) = {
269- let bc = split_4C("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "")
270- let bd = (aQ / 2)
271- func be (ax,bf) = {
272- let bg = ax
273- let ac = bg._1
274- let bh = bg._2
275- let bi = bg._3
276- let aC = bg._4
277- let s = bi
278- if ($isInstanceOf(s, "Unit"))
311+let bq = bl._5
312+
313+let br = bl._6
314+
315+func bs (bt,bu,bv) = {
316+ let bw = split_4C("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "")
317+ let bx = (bi / 2)
318+ func by (aP,bz) = {
319+ let bA = aP
320+ let ao = bA._1
321+ let bB = bA._2
322+ let bC = bA._3
323+ let aU = bA._4
324+ let y = bC
325+ if ($isInstanceOf(y, "Unit"))
279326 then {
280- let bj = if ((ac == height))
281- then $Tuple3(aZ, ba, bb)
282- else value(V(ac))
283- let z = bj._1
284- let bk = bj._2
285- let bl = bj._3
286- if ((bk == 0))
287- then $Tuple4(ac, bh, bl, ah)
327+ let bD = if ((ao == height))
328+ then $Tuple3(bt, bu, bv)
329+ else value(ah(ao))
330+ let H = bD._1
331+ let bE = bD._2
332+ let bF = bD._3
333+ if ((bE == 0))
334+ then $Tuple4(ao, bB, bF, at)
288335 else {
289- let bm = if (containsElement(aC, z))
290- then $Tuple2(bh, aC)
291- else $Tuple2((bh + H(z)), z :: aC)
292- let bn = bm._1
293- let bo = bm._2
294- if ((bn > bd))
295- then $Tuple4(ac, bn, bl, ah)
296- else $Tuple4(bk, bn, unit, bo)
336+ let bG = if (containsElement(aU, H))
337+ then $Tuple2(bB, aU)
338+ else $Tuple2((bB + T(H)), H :: aU)
339+ let bH = bG._1
340+ let bI = bG._2
341+ if ((bH > bx))
342+ then $Tuple4(ao, bH, bF, at)
343+ else $Tuple4(bE, bH, unit, bI)
297344 }
298345 }
299- else ax
346+ else aP
300347 }
301348
302- let bp = {
303- let aH = (bc ++ bc)
304- let aI = size(aH)
305- let aJ = $Tuple4(height, 0, unit, nil)
306- func aK (aL,aM) = if ((aM >= aI))
307- then aL
308- else be(aL, aH[aM])
349+ let bJ = {
350+ let aZ = (bw ++ bw)
351+ let ba = size(aZ)
352+ let bb = $Tuple4(height, 0, unit, nil)
353+ func bc (bd,be) = if ((be >= ba))
354+ then bd
355+ else by(bd, aZ[be])
309356
310- func aN (aL,aM) = if ((aM >= aI))
311- then aL
357+ func bf (bd,be) = if ((be >= ba))
358+ then bd
312359 else throw("List size exceeds 200")
313360
314- aN(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aJ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100), 101), 102), 103), 104), 105), 106), 107), 108), 109), 110), 111), 112), 113), 114), 115), 116), 117), 118), 119), 120), 121), 122), 123), 124), 125), 126), 127), 128), 129), 130), 131), 132), 133), 134), 135), 136), 137), 138), 139), 140), 141), 142), 143), 144), 145), 146), 147), 148), 149), 150), 151), 152), 153), 154), 155), 156), 157), 158), 159), 160), 161), 162), 163), 164), 165), 166), 167), 168), 169), 170), 171), 172), 173), 174), 175), 176), 177), 178), 179), 180), 181), 182), 183), 184), 185), 186), 187), 188), 189), 190), 191), 192), 193), 194), 195), 196), 197), 198), 199), 200)
361+ bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100), 101), 102), 103), 104), 105), 106), 107), 108), 109), 110), 111), 112), 113), 114), 115), 116), 117), 118), 119), 120), 121), 122), 123), 124), 125), 126), 127), 128), 129), 130), 131), 132), 133), 134), 135), 136), 137), 138), 139), 140), 141), 142), 143), 144), 145), 146), 147), 148), 149), 150), 151), 152), 153), 154), 155), 156), 157), 158), 159), 160), 161), 162), 163), 164), 165), 166), 167), 168), 169), 170), 171), 172), 173), 174), 175), 176), 177), 178), 179), 180), 181), 182), 183), 184), 185), 186), 187), 188), 189), 190), 191), 192), 193), 194), 195), 196), 197), 198), 199), 200)
315362 }
316- let bq = bp._1
317- let bh = bp._2
318- let br = bp._3
319- let bs = bp._4
320- let s = br
321- if ($isInstanceOf(s, "String"))
363+ let bK = bJ._1
364+ let bB = bJ._2
365+ let bL = bJ._3
366+ let bM = bJ._4
367+ let y = bL
368+ if ($isInstanceOf(y, "String"))
322369 then {
323- let bt = s
324- bt
370+ let bN = y
371+ bN
325372 }
326- else value(V(bq))._3
373+ else value(ah(bK))._3
327374 }
328375
329376
330-func bu (w) = {
331- func bv (bw,bx) = {
332- let by = bw
333- let bh = by._1
334- let bz = by._2
335- let bA = addressFromStringValue(bx)
336- if (containsElement(bz, bA))
337- then bw
377+func bO (E) = {
378+ func bP (bQ,bR) = {
379+ let bS = bQ
380+ let bB = bS._1
381+ let bT = bS._2
382+ let bU = addressFromStringValue(bR)
383+ if (containsElement(bT, bU))
384+ then bQ
338385 else {
339- let bB = H(bA)
340- $Tuple2((bh + bB), (bz :+ bA))
386+ let bV = T(bU)
387+ $Tuple2((bB + bV), (bT :+ bU))
341388 }
342389 }
343390
344- let bC = split_4C(getStringValue(A(w)), d)
345- let bD = {
346- let aH = bC
347- let aI = size(aH)
348- let aJ = $Tuple2(0, nil)
349- func aK (aL,aM) = if ((aM >= aI))
350- then aL
351- else bv(aL, aH[aM])
391+ let bW = split_4C(getStringValue(J(E)), d)
392+ let bX = {
393+ let aZ = bW
394+ let ba = size(aZ)
395+ let bb = $Tuple2(0, nil)
396+ func bc (bd,be) = if ((be >= ba))
397+ then bd
398+ else bP(bd, aZ[be])
352399
353- func aN (aL,aM) = if ((aM >= aI))
354- then aL
400+ func bf (bd,be) = if ((be >= ba))
401+ then bd
355402 else throw("List size exceeds 100")
356403
357- aN(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aJ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
404+ bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
358405 }
359- let bB = bD._1
360- let bE = bD._2
361- bB
406+ let bV = bX._1
407+ let bY = bX._2
408+ bV
362409 }
363410
364411
365-func bF () = isDefined(getInteger(l))
412+func bZ () = isDefined(getInteger(n))
366413
367414
368-func bG (bA) = if ((toString(bA) != aP))
369- then throw(((((toBase58String(bA.bytes) + " is not allowed to mine in ") + toString(height)) + " epoch. Expected ") + aP))
415+func ca (bU) = if ((toString(bU) != bh))
416+ then throw(((((toBase58String(bU.bytes) + " is not allowed to mine in ") + toString(height)) + " epoch. Expected ") + bh))
370417 else unit
371418
372419
373-func bH (bI,bJ) = if ((bI == bJ))
420+func cb (cc,cd) = if ((cc == cd))
374421 then unit
375- else throw(((("Expected a reference to the chain last block: 0x" + bJ) + ". Got: 0x") + bI))
422+ else throw(((("Expected a reference to the chain last block: 0x" + cd) + ". Got: 0x") + cc))
376423
377424
378-func bK (w) = {
379- let bL = getStringValue(v(w))
380- let bM = valueOrElse(getInteger(k), 0)
381- if ((bM > w))
425+func ce (E) = {
426+ let cf = getStringValue(D(E))
427+ let cg = valueOrElse(getInteger(m), 0)
428+ if ((cg > E))
382429 then true
383- else (aj(getStringValue(o))._1 > aj(bL)._1)
430+ else (av(getStringValue(q))._1 > av(cf)._1)
384431 }
385432
386433
387-func bN (z) = valueOrElse(getInteger(F(z)), getInteger(("chainIdOf" + toString(z))))
434+func ch (H) = valueOrElse(getInteger(O(H)), getInteger(("chainIdOf" + toString(H))))
388435
389436
390-func bO (bA,bP,bQ) = {
391- let bR = {
392- let s = bQ
393- if ($isInstanceOf(s, "String"))
437+func ci (bU,cj,ck) = {
438+ let cl = {
439+ let y = ck
440+ if ($isInstanceOf(y, "String"))
394441 then {
395- let as = s
396- let bS = aq(bA, R)
397- ((aj(as)._1 + 1) > bS)
442+ let aK = y
443+ let cm = aI(bU, ad)
444+ ((av(aK)._1 + 1) > cm)
398445 }
399446 else true
400447 }
401- let s = bN(bA)
402- if ($isInstanceOf(s, "Int"))
448+ let y = ch(bU)
449+ if ($isInstanceOf(y, "Int"))
403450 then {
404- let bT = s
405- if (if ((bT == bP))
451+ let cn = y
452+ if (if ((cn == cj))
406453 then true
407- else if (bK(bT))
408- then bR
454+ else if (ce(cn))
455+ then cl
409456 else false)
410457 then unit
411- else throw(("miner is mining other chain " + toString(bT)))
458+ else throw(("miner is mining other chain " + toString(cn)))
412459 }
413460 else unit
414461 }
415462
416463
417-func bU (u) = if ((u == height))
464+func co (C) = if ((C == height))
418465 then unit
419- else throw(((("Expected block from epoch " + toString(height)) + ". Got ") + toString(u)))
466+ else throw(((("Expected block from epoch " + toString(height)) + ". Got ") + toString(C)))
420467
421468
422-func bV (w,bA) = {
423- let bW = getStringValue(A(w))
424- let bX = split_4C(bW, d)
425- if (containsElement(bX, toString(bA)))
469+func cp (E,bU) = {
470+ let cq = getStringValue(J(E))
471+ let cr = split_4C(cq, d)
472+ if (containsElement(cr, toString(bU)))
426473 then nil
427- else [StringEntry(A(w), ((bW + d) + toString(bA)))]
474+ else [StringEntry(J(E), ((cq + d) + toString(bU)))]
428475 }
429476
430477
431-func bY (bZ) = {
432- let ca = fromBase16String(bZ)
433- if ((size(ca) != 32))
478+func cs (ct,cu) = if ((0 > cu))
479+ then throw(("Can't withdraw at negative index: " + toString(cu)))
480+ else {
481+ let cv = size(ct)
482+ if ((cu >= cv))
483+ then {
484+ let cw = (cu - cv)
485+ if ((cw > size(h)))
486+ then throw((("Can't add " + toString(cw)) + " empty flags. Contact with developers"))
487+ else ((ct + take(h, cw)) + "1")
488+ }
489+ else {
490+ let cx = drop(ct, cu)
491+ let cy = take(cx, 1)
492+ if ((cy == "0"))
493+ then ((take(ct, cu) + "1") + drop(cx, 1))
494+ else throw((("Transfer #" + toString(cu)) + " has been already taken"))
495+ }
496+ }
497+
498+
499+func cz (cA) = {
500+ let cB = fromBase16String(cA)
501+ if ((size(cB) != 32))
434502 then throw("invalid block id length")
435- else bZ
503+ else cA
436504 }
437505
438506
439-func cb (cc,cd,bk) = {
440- let ce = aj(getStringValue(o))._1
441- let cf = aY(cc, bk, cd)
442- if ((cf == cd))
443- then [StringEntry(o, cf)]
444- else if ((aj(cf)._1 > ce))
445- then [StringEntry(o, cf)]
446- else nil
507+func cC (cD,cE,bE) = {
508+ let cF = av(getStringValue(q))._1
509+ let cG = bs(cD, bE, cE)
510+ if (if ((cG == cE))
511+ then true
512+ else (av(cG)._1 > cF))
513+ then [StringEntry(q, cG)]
514+ else nil
447515 }
448516
449517
450-@Callable(q)
451-func appendBlock (cg,ch) = if ((ad != q.originCaller))
452- then {
453- let s = ad
454- if ($isInstanceOf(s, "Address"))
518+@Callable(w)
519+func appendBlock (A,cH) = {
520+ let cI = Q()
521+ if ((cI == cI))
522+ then if ((ap != w.originCaller))
455523 then {
456- let ci = s
457- throw(("not allowed to forge blocks in this epoch, expected from " + toString(ci)))
524+ let y = ap
525+ if ($isInstanceOf(y, "Address"))
526+ then {
527+ let cJ = y
528+ throw(("not allowed to forge blocks in this epoch, expected from " + toString(cJ)))
529+ }
530+ else throw("not allowed to forge blocks in this epoch, epoch miner is absent")
458531 }
459- else throw("not allowed to forge blocks in this epoch, epoch miner is absent")
460- }
461- else {
462- let w = valueOrElse(bN(q.originCaller), R)
463- let cj = P(w)
464- let ck = cj._1
465- let cl = cj._2
466- let cm = bH(ch, cl)
467- if ((cm == cm))
468- then {
469- let cn = (ck + 1)
470- let co = (((toBytes(cn) + toBytes(height)) + fromBase16String(cl)) + q.originCaller.bytes)
471- let as = bY(cg)
472-[BinaryEntry((n + cg), co), IntegerEntry(y(w, q.originCaller), cn), StringEntry(x(w), ((toString(cn) + d) + cg)), StringEntry(t(height), ((((toString(value(ad)) + d) + toString(ae)) + d) + cg))]
532+ else {
533+ let E = valueOrElse(ch(w.originCaller), ad)
534+ let cK = ab(E)
535+ let cL = cK._1
536+ let cM = cK._2
537+ let cN = cb(cH, cM)
538+ if ((cN == cN))
539+ then {
540+ let cO = (cL + 1)
541+ let cP = (((toBytes(cO) + toBytes(height)) + fromBase16String(cM)) + w.originCaller.bytes)
542+ let cQ = cz(A)
543+ if ((cQ == cQ))
544+ then [BinaryEntry((p + A), cP), IntegerEntry(G(E, w.originCaller), cO), StringEntry(F(E), ((toString(cO) + d) + A)), StringEntry(B(height), ((((toString(value(ap)) + d) + toString(aq)) + d) + A))]
545+ else throw("Strict value is not equal to itself.")
546+ }
547+ else throw("Strict value is not equal to itself.")
473548 }
474- else throw("Strict value is not equal to itself.")
475- }
549+ else throw("Strict value is not equal to itself.")
550+ }
476551
477552
478553
479-@Callable(q)
480-func extendMainChain (cg,ch,u) = {
481- let cp = bU(u)
482- if ((cp == cp))
554+@Callable(w)
555+func appendBlock_v2 (A,cH,aF) = {
556+ let cI = R()
557+ if ((cI == cI))
558+ then if ((ap != w.originCaller))
559+ then {
560+ let y = ap
561+ if ($isInstanceOf(y, "Address"))
562+ then {
563+ let cJ = y
564+ throw(("not allowed to forge blocks in this epoch, expected from " + toString(cJ)))
565+ }
566+ else throw("not allowed to forge blocks in this epoch, epoch miner is absent")
567+ }
568+ else {
569+ let E = valueOrElse(ch(w.originCaller), ad)
570+ let cR = ab(E)
571+ let cL = cR._1
572+ let cM = cR._2
573+ let cN = cb(cH, cM)
574+ if ((cN == cN))
575+ then {
576+ let cO = (cL + 1)
577+ let cQ = cz(A)
578+ if ((cQ == cQ))
579+ then [aD(A, cO, cM, w.originCaller, E, aF), IntegerEntry(G(E, w.originCaller), cO), StringEntry(F(E), ((toString(cO) + d) + A)), StringEntry(B(height), ((((toString(value(ap)) + d) + toString(aq)) + d) + A))]
580+ else throw("Strict value is not equal to itself.")
581+ }
582+ else throw("Strict value is not equal to itself.")
583+ }
584+ else throw("Strict value is not equal to itself.")
585+ }
586+
587+
588+
589+@Callable(w)
590+func extendMainChain (A,cH,C) = {
591+ let cI = Q()
592+ if ((cI == cI))
483593 then {
484- let cq = bG(q.originCaller)
485- if ((cq == cq))
594+ let cQ = cz(A)
595+ if ((cQ == cQ))
486596 then {
487- let cr = bO(q.originCaller, R, unit)
488- if ((cr == cr))
597+ let cS = co(C)
598+ if ((cS == cS))
489599 then {
490- let cm = bH(ch, U)
491- if ((cm == cm))
600+ let cT = ca(w.originCaller)
601+ if ((cT == cT))
492602 then {
493- let cs = {
494- let s = V(height)
495- if ($isInstanceOf(s, "Unit"))
496- then StringEntry(t(height), ((((toString(q.originCaller) + d) + toString(aV)) + d) + cg))
497- else {
498- let ct = s
499- throw("Epoch already started")
500- }
501- }
502- let cu = cb(q.originCaller, cg, aV)
503- let cn = (T + 1)
504- let co = (((toBytes(cn) + toBytes(height)) + fromBase16String(U)) + q.originCaller.bytes)
505- ([BinaryEntry((n + cg), co), StringEntry(x(R), ((toString(cn) + d) + cg)), IntegerEntry(F(q.originCaller), R), IntegerEntry(y(R, q.originCaller), cn), cs] ++ cu)
603+ let cU = ci(w.originCaller, ad, unit)
604+ if ((cU == cU))
605+ then {
606+ let cN = cb(cH, ag)
607+ if ((cN == cN))
608+ then {
609+ let cV = {
610+ let y = ah(height)
611+ if ($isInstanceOf(y, "Unit"))
612+ then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(bn)) + d) + A))
613+ else {
614+ let cW = y
615+ throw("Epoch already started")
616+ }
617+ }
618+ let cX = cC(w.originCaller, A, bn)
619+ let cO = (af + 1)
620+ let cP = (((toBytes(cO) + toBytes(height)) + fromBase16String(ag)) + w.originCaller.bytes)
621+ ([BinaryEntry((p + A), cP), StringEntry(F(ad), ((toString(cO) + d) + A)), IntegerEntry(O(w.originCaller), ad), IntegerEntry(G(ad, w.originCaller), cO), cV] ++ cX)
622+ }
623+ else throw("Strict value is not equal to itself.")
624+ }
625+ else throw("Strict value is not equal to itself.")
506626 }
507627 else throw("Strict value is not equal to itself.")
508628 }
509629 else throw("Strict value is not equal to itself.")
510630 }
511631 else throw("Strict value is not equal to itself.")
512632 }
513633 else throw("Strict value is not equal to itself.")
514634 }
515635
516636
517637
518-@Callable(q)
519-func startAltChain (cg,ch,u) = {
520- let cp = bU(u)
521- if ((cp == cp))
638+@Callable(w)
639+func extendMainChain_v2 (A,cH,C,aF) = {
640+ let cI = R()
641+ if ((cI == cI))
522642 then {
523- let cq = bG(q.originCaller)
524- if ((cq == cq))
643+ let cQ = cz(A)
644+ if ((cQ == cQ))
525645 then {
526- let cv = aj(ch)
527- let cw = cv._1
528- let cx = cv._2
529- let cy = cv._3
530- let cz = cv._4
531- let cA = aj(getStringValue(o))._2
532- let cB = if ((cx >= cA))
533- then cx
534- else throw((((("can not start alt chain from epoch " + toString(cx)) + ", epoch ") + toString(cA)) + " is finalized"))
535- let cr = bO(q.originCaller, R, ch)
536- if ((cr == cr))
646+ let cS = co(C)
647+ if ((cS == cS))
537648 then {
538- let cC = (valueOrElse(getInteger(j), 0) + 1)
539- let cD = aj(ch)._1
540- let cn = (cD + 1)
541- let co = (((toBytes(cn) + toBytes(height)) + fromBase16String(ch)) + q.originCaller.bytes)
542- let cs = {
543- let s = V(height)
544- if ($isInstanceOf(s, "Unit"))
545- then StringEntry(t(height), ((((toString(q.originCaller) + d) + toString(cB)) + d) + cg))
546- else {
547- let ct = s
548- throw("Epoch already started")
549- }
550- }
551-[cs, BinaryEntry((n + cg), co), StringEntry(v(cC), cg), StringEntry(x(cC), ((toString(cn) + d) + cg)), IntegerEntry(F(q.originCaller), cC), IntegerEntry(y(cC, q.originCaller), cn), IntegerEntry(y(R, q.originCaller), cD), StringEntry(A(cC), toString(q.originCaller)), IntegerEntry(j, cC)]
552- }
553- else throw("Strict value is not equal to itself.")
554- }
555- else throw("Strict value is not equal to itself.")
556- }
557- else throw("Strict value is not equal to itself.")
558- }
559-
560-
561-
562-@Callable(q)
563-func extendAltChain (w,cg,ch,u) = {
564- let cp = bU(u)
565- if ((cp == cp))
566- then {
567- let cq = bG(q.originCaller)
568- if ((cq == cq))
569- then {
570- let cr = bO(q.originCaller, w, toBase16String(aj(getStringValue(v(w)))._3))
571- if ((cr == cr))
572- then {
573- let cE = P(w)
574- let ck = cE._1
575- let cF = cE._2
576- let cm = bH(ch, cF)
577- if ((cm == cm))
649+ let cT = ca(w.originCaller)
650+ if ((cT == cT))
578651 then {
579- let cn = (ck + 1)
580- let bk = aj(ch)._2
581- let cG = if ((bu(w) > (aQ / 2)))
652+ let cU = ci(w.originCaller, ad, unit)
653+ if ((cU == cU))
582654 then {
583- let cu = cb(q.originCaller, cg, bk)
584- ([IntegerEntry(i, w), IntegerEntry(k, (valueOrElse(getInteger(j), 0) + 1))] ++ cu)
655+ let cN = cb(cH, ag)
656+ if ((cN == cN))
657+ then {
658+ let cV = {
659+ let y = ah(height)
660+ if ($isInstanceOf(y, "Unit"))
661+ then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(bn)) + d) + A))
662+ else {
663+ let cW = y
664+ throw("Epoch already started")
665+ }
666+ }
667+ let cX = cC(w.originCaller, A, bn)
668+ let cO = (af + 1)
669+ ([aD(A, cO, ag, w.originCaller, ad, aF), StringEntry(F(ad), ((toString(cO) + d) + A)), IntegerEntry(O(w.originCaller), ad), IntegerEntry(G(ad, w.originCaller), cO), cV] ++ cX)
670+ }
671+ else throw("Strict value is not equal to itself.")
585672 }
586- else nil
587- let cs = {
588- let s = V(height)
589- if ($isInstanceOf(s, "Unit"))
590- then StringEntry(t(height), ((((toString(q.originCaller) + d) + toString(bk)) + d) + cg))
591- else {
592- let ct = s
593- throw("Epoch already started")
594- }
595- }
596- let cH = if (if ((cG == nil))
597- then (valueOrElse(bN(q.originCaller), 0) != w)
598- else false)
599- then [IntegerEntry(y(R, q.originCaller), aj(getStringValue(v(w)))._1)]
600- else nil
601- let co = (((toBytes(cn) + toBytes(height)) + fromBase16String(ch)) + q.originCaller.bytes)
602- ((([BinaryEntry((n + cg), co), StringEntry(x(w), ((toString(cn) + d) + cg)), cs, IntegerEntry(F(q.originCaller), w), IntegerEntry(y(w, q.originCaller), cn)] ++ cG) ++ bV(w, q.originCaller)) ++ cH)
673+ else throw("Strict value is not equal to itself.")
603674 }
604675 else throw("Strict value is not equal to itself.")
605676 }
606677 else throw("Strict value is not equal to itself.")
607678 }
608679 else throw("Strict value is not equal to itself.")
609680 }
610681 else throw("Strict value is not equal to itself.")
611682 }
612683
613684
614685
615-@Callable(q)
616-func join (E) = {
617- func cI (I) = {
618- let s = getBinary(D(I))
619- if ($isInstanceOf(s, "ByteVector"))
686+@Callable(w)
687+func startAltChain (A,cH,C) = {
688+ let cI = Q()
689+ if ((cI == cI))
690+ then {
691+ let cQ = cz(A)
692+ if ((cQ == cQ))
693+ then {
694+ let cS = co(C)
695+ if ((cS == cS))
696+ then {
697+ let cT = ca(w.originCaller)
698+ if ((cT == cT))
699+ then {
700+ let cY = av(cH)
701+ let cZ = cY._1
702+ let da = cY._2
703+ let db = cY._3
704+ let dc = cY._4
705+ let dd = cY._5
706+ let de = cY._6
707+ let df = av(getStringValue(q))._2
708+ let dg = if ((da >= df))
709+ then da
710+ else throw((((("can not start alt chain from epoch " + toString(da)) + ", epoch ") + toString(df)) + " is finalized"))
711+ let cU = ci(w.originCaller, ad, cH)
712+ if ((cU == cU))
713+ then {
714+ let dh = (valueOrElse(getInteger(l), 0) + 1)
715+ let cO = (av(cH)._1 + 1)
716+ let cP = (((toBytes(cO) + toBytes(height)) + fromBase16String(cH)) + w.originCaller.bytes)
717+ let cV = {
718+ let y = ah(height)
719+ if ($isInstanceOf(y, "Unit"))
720+ then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(dg)) + d) + A))
721+ else {
722+ let cW = y
723+ throw("Epoch already started")
724+ }
725+ }
726+[cV, BinaryEntry((p + A), cP), StringEntry(D(dh), A), StringEntry(F(dh), ((toString(cO) + d) + A)), IntegerEntry(O(w.originCaller), dh), IntegerEntry(G(dh, w.originCaller), cO), IntegerEntry(G(ad, w.originCaller), cO), StringEntry(J(dh), toString(w.originCaller)), IntegerEntry(l, dh)]
727+ }
728+ else throw("Strict value is not equal to itself.")
729+ }
730+ else throw("Strict value is not equal to itself.")
731+ }
732+ else throw("Strict value is not equal to itself.")
733+ }
734+ else throw("Strict value is not equal to itself.")
735+ }
736+ else throw("Strict value is not equal to itself.")
737+ }
738+
739+
740+
741+@Callable(w)
742+func startAltChain_v2 (A,cH,C,aF) = {
743+ let cI = R()
744+ if ((cI == cI))
745+ then {
746+ let cQ = cz(A)
747+ if ((cQ == cQ))
748+ then {
749+ let cS = co(C)
750+ if ((cS == cS))
751+ then {
752+ let cT = ca(w.originCaller)
753+ if ((cT == cT))
754+ then {
755+ let di = av(cH)
756+ let cZ = di._1
757+ let da = di._2
758+ let db = di._3
759+ let dc = di._4
760+ let dd = di._5
761+ let de = di._6
762+ let df = av(getStringValue(q))._2
763+ let dg = if ((da >= df))
764+ then da
765+ else throw((((("can not start alt chain from epoch " + toString(da)) + ", epoch ") + toString(df)) + " is finalized"))
766+ let cU = ci(w.originCaller, ad, cH)
767+ if ((cU == cU))
768+ then {
769+ let dh = (valueOrElse(getInteger(l), 0) + 1)
770+ let cO = (av(cH)._1 + 1)
771+ let cV = {
772+ let y = ah(height)
773+ if ($isInstanceOf(y, "Unit"))
774+ then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(dg)) + d) + A))
775+ else {
776+ let cW = y
777+ throw("Epoch already started")
778+ }
779+ }
780+[cV, aD(A, cO, cH, w.originCaller, dh, aF), StringEntry(D(dh), A), StringEntry(F(dh), ((toString(cO) + d) + A)), IntegerEntry(O(w.originCaller), dh), IntegerEntry(G(dh, w.originCaller), cO), IntegerEntry(G(ad, w.originCaller), cO), StringEntry(J(dh), toString(w.originCaller)), IntegerEntry(l, dh)]
781+ }
782+ else throw("Strict value is not equal to itself.")
783+ }
784+ else throw("Strict value is not equal to itself.")
785+ }
786+ else throw("Strict value is not equal to itself.")
787+ }
788+ else throw("Strict value is not equal to itself.")
789+ }
790+ else throw("Strict value is not equal to itself.")
791+ }
792+
793+
794+
795+@Callable(w)
796+func extendAltChain (E,A,cH,C) = {
797+ let cI = Q()
798+ if ((cI == cI))
799+ then {
800+ let cQ = cz(A)
801+ if ((cQ == cQ))
802+ then {
803+ let cS = co(C)
804+ if ((cS == cS))
805+ then {
806+ let cT = ca(w.originCaller)
807+ if ((cT == cT))
808+ then {
809+ let dj = av(getStringValue(D(E)))
810+ let cU = ci(w.originCaller, E, toBase16String(dj._3))
811+ if ((cU == cU))
812+ then {
813+ let dk = ab(E)
814+ let cL = dk._1
815+ let dl = dk._2
816+ let cN = cb(cH, dl)
817+ if ((cN == cN))
818+ then {
819+ let cO = (cL + 1)
820+ let bE = av(cH)._2
821+ let dm = if ((bO(E) > (bi / 2)))
822+ then {
823+ let dn = valueOrElse(getInteger(l), 0)
824+ let cX = cC(w.originCaller, A, bE)
825+ ([IntegerEntry(I(ad), dj._1), IntegerEntry(k, E), IntegerEntry(m, (dn + 1))] ++ cX)
826+ }
827+ else nil
828+ let cV = {
829+ let y = ah(height)
830+ if ($isInstanceOf(y, "Unit"))
831+ then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(bE)) + d) + A))
832+ else {
833+ let cW = y
834+ throw("Epoch already started")
835+ }
836+ }
837+ let do = if (if ((dm == nil))
838+ then (valueOrElse(ch(w.originCaller), 0) != E)
839+ else false)
840+ then [IntegerEntry(G(ad, w.originCaller), dj._1)]
841+ else nil
842+ let cP = (((toBytes(cO) + toBytes(height)) + fromBase16String(cH)) + w.originCaller.bytes)
843+ ((([BinaryEntry((p + A), cP), StringEntry(F(E), ((toString(cO) + d) + A)), cV, IntegerEntry(O(w.originCaller), E), IntegerEntry(G(E, w.originCaller), cO)] ++ dm) ++ cp(E, w.originCaller)) ++ do)
844+ }
845+ else throw("Strict value is not equal to itself.")
846+ }
847+ else throw("Strict value is not equal to itself.")
848+ }
849+ else throw("Strict value is not equal to itself.")
850+ }
851+ else throw("Strict value is not equal to itself.")
852+ }
853+ else throw("Strict value is not equal to itself.")
854+ }
855+ else throw("Strict value is not equal to itself.")
856+ }
857+
858+
859+
860+@Callable(w)
861+func extendAltChain_v2 (E,A,cH,C,aF) = {
862+ let cI = R()
863+ if ((cI == cI))
864+ then {
865+ let cQ = cz(A)
866+ if ((cQ == cQ))
867+ then {
868+ let cS = co(C)
869+ if ((cS == cS))
870+ then {
871+ let cT = ca(w.originCaller)
872+ if ((cT == cT))
873+ then {
874+ let dj = av(getStringValue(D(E)))
875+ let cU = ci(w.originCaller, E, toBase16String(dj._3))
876+ if ((cU == cU))
877+ then {
878+ let dp = ab(E)
879+ let cL = dp._1
880+ let dl = dp._2
881+ let cN = cb(cH, dl)
882+ if ((cN == cN))
883+ then {
884+ let cO = (cL + 1)
885+ let bE = av(cH)._2
886+ let dm = if ((bO(E) > (bi / 2)))
887+ then {
888+ let dn = valueOrElse(getInteger(l), 0)
889+ let cX = cC(w.originCaller, A, bE)
890+ ([IntegerEntry(I(ad), dj._1), IntegerEntry(k, E), IntegerEntry(m, (dn + 1))] ++ cX)
891+ }
892+ else nil
893+ let cV = {
894+ let y = ah(height)
895+ if ($isInstanceOf(y, "Unit"))
896+ then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(bE)) + d) + A))
897+ else {
898+ let cW = y
899+ throw("Epoch already started")
900+ }
901+ }
902+ let do = if (if ((dm == nil))
903+ then (valueOrElse(ch(w.originCaller), 0) != E)
904+ else false)
905+ then [IntegerEntry(G(ad, w.originCaller), dj._1)]
906+ else nil
907+ ((([aD(A, cO, cH, w.originCaller, E, aF), StringEntry(F(E), ((toString(cO) + d) + A)), cV, IntegerEntry(O(w.originCaller), E), IntegerEntry(G(E, w.originCaller), cO)] ++ dm) ++ cp(E, w.originCaller)) ++ do)
908+ }
909+ else throw("Strict value is not equal to itself.")
910+ }
911+ else throw("Strict value is not equal to itself.")
912+ }
913+ else throw("Strict value is not equal to itself.")
914+ }
915+ else throw("Strict value is not equal to itself.")
916+ }
917+ else throw("Strict value is not equal to itself.")
918+ }
919+ else throw("Strict value is not equal to itself.")
920+ }
921+
922+
923+
924+@Callable(w)
925+func join (N) = {
926+ func dq (U) = {
927+ let y = getBinary(M(U))
928+ if ($isInstanceOf(y, "ByteVector"))
620929 then {
621- let cJ = s
622- if ((cJ == q.originCallerPublicKey))
930+ let dr = y
931+ if ((dr == w.originCallerPublicKey))
623932 then unit
624- else throw(((("L2 miner address " + I) + " is already linked with ") + toBase58String(cJ)))
933+ else throw(((("L2 miner address " + U) + " is already linked with ") + toBase58String(dr)))
625934 }
626935 else unit
627936 }
628937
629- if (!(bF()))
938+ if (!(bZ()))
630939 then throw("The contract has not yet set up")
631- else if ((c > wavesBalance(q.originCaller).generating))
632- then throw(((("Insufficient generating balance: " + toString(wavesBalance(q.originCaller).generating)) + ". Required: ") + toString(c)))
633- else if ((size(E) != 20))
940+ else if ((c > wavesBalance(w.originCaller).generating))
941+ then throw(((("Insufficient generating balance: " + toString(wavesBalance(w.originCaller).generating)) + ". Required: ") + toString(c)))
942+ else if ((size(N) != 20))
634943 then throw("rewardAddress should be an L2 address")
635- else if ((size(ah) >= 50))
944+ else if ((size(at) >= 50))
636945 then throw("too many miners")
637946 else {
638- func cK (cL,z) = if (cL)
947+ func ds (dt,H) = if (dt)
639948 then true
640- else (z == toString(q.originCaller))
949+ else (H == toString(w.originCaller))
641950
642- let cM = {
643- let aH = ah
644- let aI = size(aH)
645- let aJ = false
646- func aK (aL,aM) = if ((aM >= aI))
647- then aL
648- else cK(aL, aH[aM])
951+ let du = {
952+ let aZ = at
953+ let ba = size(aZ)
954+ let bb = false
955+ func bc (bd,be) = if ((be >= ba))
956+ then bd
957+ else ds(bd, aZ[be])
649958
650- func aN (aL,aM) = if ((aM >= aI))
651- then aL
959+ func bf (bd,be) = if ((be >= ba))
960+ then bd
652961 else throw("List size exceeds 50")
653962
654- aN(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aJ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
963+ bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
655964 }
656- if (cM)
965+ if (du)
657966 then nil
658967 else {
659- let cN = toString(q.originCaller)
660- let cO = toBase16String(E)
661- let cP = cI(cO)
662- if ((cP == cP))
968+ let dv = toString(w.originCaller)
969+ let dw = toBase16String(N)
970+ let dx = dq(dw)
971+ if ((dx == dx))
663972 then {
664- let bo = if ((size(ah) == 0))
665- then cN
666- else ((ag + d) + cN)
667- let cQ = {
668- let s = getString(B(cN))
669- if ($isInstanceOf(s, "String"))
973+ let bI = if ((size(at) == 0))
974+ then dv
975+ else ((as + d) + dv)
976+ let dy = {
977+ let y = getString(K(dv))
978+ if ($isInstanceOf(y, "String"))
670979 then {
671- let cR = s
672- if ((cR == toBase16String(E)))
980+ let dz = y
981+ if ((dz == toBase16String(N)))
673982 then nil
674- else [DeleteEntry(D(cR))]
983+ else [DeleteEntry(M(dz))]
675984 }
676985 else nil
677986 }
678- ([StringEntry(h, bo), StringEntry(B(cN), ("0x" + cO)), BinaryEntry(D(cO), q.originCallerPublicKey)] ++ cQ)
987+ ([StringEntry(j, bI), StringEntry(K(dv), ("0x" + dw)), BinaryEntry(M(dw), w.originCallerPublicKey)] ++ dy)
679988 }
680989 else throw("Strict value is not equal to itself.")
681990 }
682991 }
683992 }
684993
685994
686995
687-@Callable(q)
996+@Callable(w)
688997 func leave () = {
689- let cS = toString(q.originCaller)
690- func cT (bw,z) = if ((z == cS))
691- then bw
692- else (bw :+ z)
998+ let dA = toString(w.originCaller)
999+ func dB (bQ,H) = if ((H == dA))
1000+ then bQ
1001+ else (bQ :+ H)
6931002
694- let cU = {
695- let aH = ah
696- let aI = size(aH)
697- let aJ = nil
698- func aK (aL,aM) = if ((aM >= aI))
699- then aL
700- else cT(aL, aH[aM])
1003+ let dC = {
1004+ let aZ = at
1005+ let ba = size(aZ)
1006+ let bb = nil
1007+ func bc (bd,be) = if ((be >= ba))
1008+ then bd
1009+ else dB(bd, aZ[be])
7011010
702- func aN (aL,aM) = if ((aM >= aI))
703- then aL
1011+ func bf (bd,be) = if ((be >= ba))
1012+ then bd
7041013 else throw("List size exceeds 50")
7051014
706- aN(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aJ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
1015+ bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
7071016 }
708- let cV = B(cS)
709- let cW = valueOrErrorMessage(getString(this, cV), "miner has never joined")
710- if ((ad == q.originCaller))
1017+ let dD = K(dA)
1018+ let dE = valueOrErrorMessage(getString(this, dD), "miner has never joined")
1019+ if ((ap == w.originCaller))
7111020 then throw("designated miner can't leave")
712- else [StringEntry(h, makeString_2C(cU, d)), DeleteEntry(cV), DeleteEntry(D(cW))]
1021+ else [StringEntry(j, makeString_2C(dC, d)), DeleteEntry(dD), DeleteEntry(M(dE))]
7131022 }
7141023
7151024
7161025
717-@Callable(q)
718-func setup (cX,cY,cZ) = if (bF())
1026+@Callable(w)
1027+func withdraw (A,dF,dG,dH) = {
1028+ let dI = R()
1029+ if ((dI == dI))
1030+ then {
1031+ let dJ = av(A)
1032+ let dK = dJ._1
1033+ let dL = av(getStringValue(q))._1
1034+ let dM = av(ag)._1
1035+ if ((dK > dL))
1036+ then throw(((("EL block #" + toString(dK)) + " is not finalized. The current finalized is #") + toString(dL)))
1037+ else {
1038+ let dN = dJ._5
1039+ let dO = (dN == ad)
1040+ let dP = {
1041+ let y = getInteger(I(dN))
1042+ if ($isInstanceOf(y, "Int"))
1043+ then {
1044+ let dQ = y
1045+ (dQ > dK)
1046+ }
1047+ else throw((((A + " is on an alternative chain #") + toString(dN)) + " that was not approved by majority. Wait for some blocks"))
1048+ }
1049+ if (if (dO)
1050+ then true
1051+ else dP)
1052+ then {
1053+ let dR = w.originCaller
1054+ let dS = take(drop(dR.bytes, 2), g)
1055+ let dT = base58'11111111111111111111111111111111111111111111'
1056+ let dU = toBytes(dH)
1057+ let dV = ((dS + take(dT, (size(dT) - size(dU)))) + dU)
1058+ let dW = blake2b256_16Kb(dV)
1059+ let dX = createMerkleRoot(dF, dW, dG)
1060+ let dY = dJ._6
1061+ if ((dX == dY))
1062+ then {
1063+ let dZ = fromBase58String(getStringValue(r))
1064+ let ea = z(A)
1065+[Reissue(dZ, dH, true), ScriptTransfer(dR, dH, dZ), StringEntry(ea, cs(valueOrElse(getString(ea), ""), dG))]
1066+ }
1067+ else throw(((((("Expected root hash: " + toBase16String(dY)) + ", got: ") + toBase16String(dX)) + ". Event data digest: ") + toBase64String(dW)))
1068+ }
1069+ else throw((("Expected " + A) + " to be either on the main chain or relate to it"))
1070+ }
1071+ }
1072+ else throw("Strict value is not equal to itself.")
1073+ }
1074+
1075+
1076+
1077+@Callable(w)
1078+func setup (eb,ec,ed,ee) = if (bZ())
7191079 then throw("The contract has been already set up")
1080+ else if ((0 > ec))
1081+ then throw("The miner reward must be nonnegative")
1082+ else {
1083+ let ef = fromBase16String(eb)
1084+ let eg = base58'11111111111111111111111111111111'
1085+ let eh = addressFromPublicKey(eg)
1086+ let ei = base58'11111111111111111111'
1087+ let ej = "0000000000000000000000000000000000000000000000000000000000000000"
1088+ let ek = Issue("UNIT0", "Native token", 0, 8, true)
1089+ let dZ = calculateAssetId(ek)
1090+[aD(eb, 0, ej, eh, ad, ""), StringEntry(D(0), eb), StringEntry(F(0), ("0," + eb)), IntegerEntry(n, ec), StringEntry(o, ed), StringEntry(B(height), ((toString(eh) + ",0,") + eb)), StringEntry(q, eb), IntegerEntry(t, 0), IntegerEntry(u, 0), ek, StringEntry(r, toBase58String(dZ)), StringEntry(s, ("0x" + ee))]
1091+ }
1092+
1093+
1094+
1095+@Callable(w)
1096+func setupElToClTransfers (el,ee) = if (isDefined(getInteger(u)))
1097+ then throw("EL to CL transfers feature was set up")
7201098 else {
721- let da = fromBase16String(cX)
722- let db = base58'11111111111111111111111111111111'
723- let dc = addressFromPublicKey(db)
724- let dd = base58'11111111111111111111'
725- let de = base58'11111111111111111111111111111111'
726- let df = (((toBytes(0) + toBytes(height)) + de) + dc.bytes)
727-[BinaryEntry((n + cX), df), StringEntry(v(0), cX), StringEntry(x(0), ("0," + cX)), IntegerEntry(l, cY), StringEntry(m, cZ), StringEntry(t(height), ((toString(dc) + ",0,") + cX)), StringEntry(o, cX)]
1099+ let ek = Issue("UNIT0", "Native token", 0, 8, true)
1100+ let dZ = calculateAssetId(ek)
1101+[IntegerEntry(u, el), ek, StringEntry(r, toBase58String(dZ)), StringEntry(s, ("0x" + ee))]
7281102 }
7291103
7301104

github/deemru/w8io/169f3d6 
1049.32 ms