tx · DY5wqCZdAqyxB5Xp8tPDjZGfeEqcGaY7gySvH5FJyNHU

3N2eA4yzXa4wTj7pP8r6G144RRxZW7cmq4p:  -0.01600000 Waves

2023.02.03 07:12 [2432941] smart account 3N2eA4yzXa4wTj7pP8r6G144RRxZW7cmq4p > SELF 0.00000000 Waves

{ "type": 13, "id": "DY5wqCZdAqyxB5Xp8tPDjZGfeEqcGaY7gySvH5FJyNHU", "fee": 1600000, "feeAssetId": null, "timestamp": 1675396327713, "version": 2, "chainId": 84, "sender": "3N2eA4yzXa4wTj7pP8r6G144RRxZW7cmq4p", "senderPublicKey": "Hh3eFP2XFetZSfTxQiM1Ps96f68zi8Zh5ghhCZdjgdFs", "proofs": [ "5x8vJ4WjdKFjyMMqNuULpzaMwae8rPQmpMAuyx8E8eArCcM4u3zrd492kB2QY4mGqmHVtne41TpswA8uDuA3XeJB" ], "script": "base64:BgI5CAISBAoCCAgSBAoCBAgSBAoCAQgSBQoDCAEIEgMKAQgSAwoBCBIDCgEIEgUKAwgICBIGCgQICAgIOgAHVkVSU0lPTgIFMS4xLjUBCWdldFN0ckJ5SwEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFA2tleQIAAAh1bml0VGVzdAcACW9yYWNsZUZlZQkBBXZhbHVlAQkApggBCQEJZ2V0U3RyQnlLAQIPY29uZl9vcmFjbGVfZmVlAAhzaWduRGFwcAkBBXZhbHVlAQkApggBCQEJZ2V0U3RyQnlLAQIRY29uZl9zaWdud2ViX2RhcHAAC2ZlZVJlY2VpdmVyCQEJZ2V0U3RyQnlLAQIRY29uZl9mZWVfcmVjZWl2ZXIADGFydHdvcmtzRGFwcAkBBXZhbHVlAQkApggBCQEJZ2V0U3RyQnlLAQISY29uZl9hcnR3b3Jrc19kYXBwAAh1c2VyRGFwcAMFCHVuaXRUZXN0CQEFdmFsdWUBCQCmCAECIzNNdDRSR01FeWpTV1lBb2NUUHFkNTV3ZEhRUUIzUFUyVUNtCQEFdmFsdWUBCQCmCAEJAQlnZXRTdHJCeUsBAg9jb25mX3VzZXJzX2RhcHAADXdoaXRlbGlzdERhcHAJAQV2YWx1ZQEJAKYIAQkBCWdldFN0ckJ5SwECE2NvbmZfd2hpdGVsaXN0X2RhcHAAC3NpZ25Bc3NldElkCQDZBAEJAQlnZXRTdHJCeUsBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1NJR04AC3VzZG5Bc3NldElkCQDZBAEJAQlnZXRTdHJCeUsBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1VTRE4AC3VzZHRBc3NldElkCQDZBAEJAQlnZXRTdHJCeUsBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1VTRFQADHdhdmVzQXNzZXRJZAEAAAVjaHJpcwkBCWdldFN0ckJ5SwECDGNvbmZfYWRtaW5fMQAHc2lnbkN1dAADAA11c2VyU3VzcGVuZGVkAglTVVNQRU5ERUQAC3VzZXJSZW1vdmVkAgdSRU1PVkVEAAphcnRJbGxlZ2FsAgdJTExFR0FMAAxhcnRTdXNwZW5kZWQCCVNVU1BFTkRFRAAOZGFwcFJ1bm5pbmdLZXkCFGNvbmZfZGFwcF9pc19ydW5uaW5nABFtYWludGVuYW5jZU1TR0tleQIUY29uZl9tYWludGVuYW5jZV9tc2cAC2RhcHBSdW5uaW5nCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDmRhcHBSdW5uaW5nS2V5BgAObWFpbnRlbmFuY2VNU0cJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwURbWFpbnRlbmFuY2VNU0dLZXkCAAAJbnVtU2FsZXNLAgludW1fc2FsZXMBDWdldFVzZXJTdHJCeUsBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAUDa2V5AgVFcnJvcgETZ2V0QXJ0d29ya1JveWFsdGllcwEDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFDGFydHdvcmtzRGFwcAUDa2V5AOgHAQxnZXRBcnRTdHJCeUsBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQxhcnR3b3Jrc0RhcHAFA2tleQIAAQlnZXRJbnRCeUsBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAENa2V5VXNlclN0YXR1cwEEYWRkcgkArAICAgx1c2VyX3N0YXR1c18FBGFkZHIBE2tleUFydHdvcmtSb3lhbHRpZXMCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIOYXJ0X3JveWFsdGllc18FBWFydElkAgFfBQZjYWxsZXIBCWtleVNpZ25JRAIKYXJ0aXN0QWRkcgVhcnRJZAkArAICCQCsAgIJAKwCAgILYXJ0X3NpZ25pZF8FBWFydElkAgFfBQphcnRpc3RBZGRyAQdrZXlGbGFnAgphcnRpc3RBZGRyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfZmxhZ18FBWFydElkAgFfBQphcnRpc3RBZGRyAQprZXlORlREYXRhAQJpZAkArAICAgRuZnRfBQJpZAEKZ2V0U2FsZUtleQQGY2FsbGVyBW5mdElkBWFydElkC2NyZWF0b3JBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDXNhbGUybmRfaW5mb18FBmNhbGxlcgIBXwUFbmZ0SWQCAV8FBWFydElkAgFfBQtjcmVhdG9yQWRkcgEJZ2V0QmlkS2V5BApvZmZlck93bmVyBW5mdElkCXNhbGVPd25lcgdvZmZlcklkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCW9mZmVyMm5kXwUKb2ZmZXJPd25lcgIBXwUFbmZ0SWQCAV8FCXNhbGVPd25lcgIBXwUHb2ZmZXJJZAETZ2V0SW50QnlLRnJvbU9yYWNsZQEDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUJb3JhY2xlRmVlBQNrZXkCH0ludGVnZXIgdW5kZWZpbmUgb3IgMCBpbiBvcmFjbGUAGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UJARNnZXRJbnRCeUtGcm9tT3JhY2xlAQkArAICAhJjZXJ0aWZpY2F0aW9uX2ZlZV8JANgEAQULc2lnbkFzc2V0SWQBEmtleUFydGlzdEFnZW50QWRkcgEKYXJ0aXN0QWRkcgkArAICAg1hcnRpc3RfYWdlbnRfBQphcnRpc3RBZGRyARZrZXlTZWNvbmRhcnlTaGFyZUFnZW50AQphcnRpc3RBZGRyCQCsAgICF2FydGlzdF9hZ2VudF9zZWNvbmRhcnlfBQphcnRpc3RBZGRyARhrZXlBcnRpc3RQdWJsaWNBZ2VudEFkZHIBCmFydGlzdEFkZHIJAKwCAgIUYXJ0aXN0X3B1YmxpY19hZ2VudF8FCmFydGlzdEFkZHIBHGtleVNlY29uZGFyeVNoYXJlUHVibGljQWdlbnQBCmFydGlzdEFkZHIJAKwCAgIeYXJ0aXN0X3B1YmxpY19hZ2VudF9zZWNvbmRhcnlfBQphcnRpc3RBZGRyAQxpZENhbGxlckRhdGUBAWkDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cJAJUKAwkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMIBQlsYXN0QmxvY2sJdGltZXN0YW1wAQlpc1BheW1lbnQBAWkDCQAAAgkAkAMBCAUBaQhwYXltZW50cwAACQACAQITTm8gcGF5bWVudCBhdHRhY2hlZAQHcGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAZhbW91bnQJAQV2YWx1ZQEIBQdwYXltZW50BmFtb3VudAkAlAoCBQdwYXltZW50BQZhbW91bnQBDGFzc2V0SXNWYWxpZAEMYXNzZXREZXRhaWxzAwMDCQAAAggFDGFzc2V0RGV0YWlscwhxdWFudGl0eQABCQAAAggFDGFzc2V0RGV0YWlscwhkZWNpbWFscwAABwkAAAIIBQxhc3NldERldGFpbHMKcmVpc3N1YWJsZQcHCQAAAggFDGFzc2V0RGV0YWlscwZpc3N1ZXIFDGFydHdvcmtzRGFwcAcBDGlzU2lnbkFydE5GVAECaWQEDGFzc2V0RGV0YWlscwkBBXZhbHVlAQkA7AcBBQJpZAkBDGFzc2V0SXNWYWxpZAEFDGFzc2V0RGV0YWlscwEQYWNjZXB0ZWRBc3NldElkcwEHYXNzZXRJZAMDAwMDCQECIT0CBQdhc3NldElkCQDYBAEFC3NpZ25Bc3NldElkCQECIT0CBQdhc3NldElkCQDYBAEFDHdhdmVzQXNzZXRJZAcJAQIhPQIFB2Fzc2V0SWQCBVdBVkVTBwkBAiE9AgUHYXNzZXRJZAkA2AQBBQt1c2RuQXNzZXRJZAcJAQIhPQIFB2Fzc2V0SWQJANgEAQULdXNkdEFzc2V0SWQHBwYBDWdldEJpZEFzc2V0SWQBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUHYXNzZXRJZAEVZ2V0U2FsZU93bmVyQW5kU3RhdHVzAQVuZnRpZAQJc2FsZU93bmVyCQEJZ2V0U3RyQnlLAQkArAICAhZjdXJyZW50X293bmVyX29uX2RhcHBfBQVuZnRpZAMJAAACCQCxAgEFCXNhbGVPd25lcgAACQACAQINTkZUIG5vdCBmb3VuZAQKc2FsZVN0YXR1cwkBCWdldFN0ckJ5SwEJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUJc2FsZU93bmVyAgFfBQVuZnRpZAMJAQIhPQIFCnNhbGVTdGF0dXMCBE9QRU4JAAIBAhBORlQgbm90IGZvciBzYWxlBQlzYWxlT3duZXIBCmdldEJpZERhdGEBA2tleQQHYmlkRGF0YQkBCWdldFN0ckJ5SwEJAKwCAgUDa2V5AgVfT1BFTgMJAAACBQdiaWREYXRhAgAJAAIBAg9PZmZlciBub3QgZm91bmQECmJpZERhdGFBcnIJALUJAgUHYmlkRGF0YQIBXwQHYXNzZXRJZAkBDWdldEJpZEFzc2V0SWQBCQCRAwIFCmJpZERhdGFBcnIAAgkAlQoDBQpiaWREYXRhQXJyBQdhc3NldElkBQdiaWREYXRhAQphcnRJc1ZhbGlkAQlhcnRTdGF0dXMDCQECIT0CBQlhcnRTdGF0dXMFCmFydElsbGVnYWwJAQIhPQIFCWFydFN0YXR1cwUMYXJ0U3VzcGVuZGVkBwEOY2hlY2tBcnRTdGF0dXMCBGFkZHICaWQECWFydFN0YXR1cwkBDGdldEFydFN0ckJ5SwEJAQdrZXlGbGFnAgUEYWRkcgUCaWQDCQEKYXJ0SXNWYWxpZAEFCWFydFN0YXR1cwYJAAIBCQCsAgICHE9yaWdpbmFsIEFydHdvcmsgZmxhZ2dlZCBhcyAFCWFydFN0YXR1cwERY2hlY2tBcnRpc3RTdGF0dXMBBGFkZHIEDGFydGlzdFN0YXR1cwkBDWdldFVzZXJTdHJCeUsBCQENa2V5VXNlclN0YXR1cwEFBGFkZHIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQ11c2VyU3VzcGVuZGVkCQDMCAIFC3VzZXJSZW1vdmVkBQNuaWwFDGFydGlzdFN0YXR1cwkAAgEJAKwCAgIQT3JpZ2luYWwgQXJ0aXN0IAUMYXJ0aXN0U3RhdHVzBgEMY2hlY2tORlRJbmZvAQdhc3NldElkBAduZnREYXRhCQC1CQIJAQxnZXRBcnRTdHJCeUsBCQEKa2V5TkZURGF0YQEFB2Fzc2V0SWQCAV8ECWFydFNpZ25JRAkBDGdldEFydFN0ckJ5SwEJAQlrZXlTaWduSUQCCQCRAwIFB25mdERhdGEABgkAkQMCBQduZnREYXRhAAUDAwkBASEBCQEOY2hlY2tBcnRTdGF0dXMCCQCRAwIFB25mdERhdGEABgkAkQMCBQduZnREYXRhAAUJAQEhAQkBEWNoZWNrQXJ0aXN0U3RhdHVzAQkAkQMCBQduZnREYXRhAAYHCQCWCgQHCQCRAwIFB25mdERhdGEABQkAkQMCBQduZnREYXRhAAYFCWFydFNpZ25JRAkAlgoEBgkAkQMCBQduZnREYXRhAAUJAJEDAgUHbmZ0RGF0YQAGBQlhcnRTaWduSUQBDWNoZWNrQVJURXhpc3QCBWFydElkC2NyZWF0b3JBZGRyBAlhcnRTaWduSUQJAQxnZXRBcnRTdHJCeUsBCQEJa2V5U2lnbklEAgULY3JlYXRvckFkZHIFBWFydElkAwkAAAIJALECAQUJYXJ0U2lnbklEAAAJAAIBAh1BcnR3b3JrIG5vdCBmb3VuZCBvbiBTSUdOIEFydAMDCQEBIQEJAQ5jaGVja0FydFN0YXR1cwIFC2NyZWF0b3JBZGRyBQVhcnRJZAkBASEBCQERY2hlY2tBcnRpc3RTdGF0dXMBBQtjcmVhdG9yQWRkcgcHBgEMc2V0VHJhbnNmZXJzBwZhbW91bnQHYXNzZXRJZAVuZnRpZAtjcmVhdG9yQWRkcglzYWxlT3duZXIGY2FsbGVyBWFydElkBApjcmVhdG9yQ3V0CQETZ2V0QXJ0d29ya1JveWFsdGllcwEJARNrZXlBcnR3b3JrUm95YWx0aWVzAgULY3JlYXRvckFkZHIFBWFydElkBAVhZ2VudAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAkBEmtleUFydGlzdEFnZW50QWRkcgEFC2NyZWF0b3JBZGRyBQtmZWVSZWNlaXZlcgQKYWdlbnRTaGFyZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQh1c2VyRGFwcAkBFmtleVNlY29uZGFyeVNoYXJlQWdlbnQBBQtjcmVhdG9yQWRkcgAABAtwdWJsaWNBZ2VudAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAkBGGtleUFydGlzdFB1YmxpY0FnZW50QWRkcgEFC2NyZWF0b3JBZGRyBQtmZWVSZWNlaXZlcgQQcHVibGljQWdlbnRTaGFyZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQh1c2VyRGFwcAkBHGtleVNlY29uZGFyeVNoYXJlUHVibGljQWdlbnQBBQtjcmVhdG9yQWRkcgAABA1hbW91bnRGb3JTaWduCQBrAwUGYW1vdW50BQdzaWduQ3V0AGQEEGFtb3VudEZvckNyZWF0b3IJAGsDBQZhbW91bnQFCmNyZWF0b3JDdXQAkE4EDmFtb3VudEZvck93bmVyCQBlAgUGYW1vdW50CQBkAgUNYW1vdW50Rm9yU2lnbgUQYW1vdW50Rm9yQ3JlYXRvcgQOYW1vdW50Rm9yQWdlbnQDAwkBAiE9AgUFYWdlbnQFC2ZlZVJlY2VpdmVyCQBmAgUKYWdlbnRTaGFyZQAABwkAawMFBmFtb3VudAUKYWdlbnRTaGFyZQCQTgAABBRhbW91bnRGb3JQdWJsaWNBZ2VudAMDCQECIT0CBQtwdWJsaWNBZ2VudAULZmVlUmVjZWl2ZXIJAGYCBRBwdWJsaWNBZ2VudFNoYXJlAAAHCQBrAwUGYW1vdW50BRBwdWJsaWNBZ2VudFNoYXJlAJBOAAAEC2NvbW1pc3Npb25zAwkBAiE9AgUOYW1vdW50Rm9yQWdlbnQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQULZmVlUmVjZWl2ZXIJAGUCBQ1hbW91bnRGb3JTaWduBQ5hbW91bnRGb3JBZ2VudAUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUFYWdlbnQFDmFtb3VudEZvckFnZW50BQdhc3NldElkBQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyBQ1hbW91bnRGb3JTaWduBQdhc3NldElkBQNuaWwECmNyZWF0b3JGZWUDCQECIT0CBRRhbW91bnRGb3JQdWJsaWNBZ2VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQtwdWJsaWNBZ2VudAUUYW1vdW50Rm9yUHVibGljQWdlbnQFB2Fzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2NyZWF0b3JBZGRyCQBlAgUQYW1vdW50Rm9yQ3JlYXRvcgUUYW1vdW50Rm9yUHVibGljQWdlbnQFB2Fzc2V0SWQFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQULY3JlYXRvckFkZHIFEGFtb3VudEZvckNyZWF0b3IFB2Fzc2V0SWQFA25pbAQIb3duZXJGZWUJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQlzYWxlT3duZXIFDmFtb3VudEZvck93bmVyBQdhc3NldElkBAxjb2xsZWN0b3JORlQJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZjYWxsZXIAAQkA2QQBBQVuZnRpZAkAlgoEBQtjb21taXNzaW9ucwUKY3JlYXRvckZlZQUIb3duZXJGZWUFDGNvbGxlY3Rvck5GVAEPdmFsaWRhdGVNaW5TZWxsAgdhc3NldElkBXByaWNlBAxtaW5TZWxsV2F2ZXMDBQh1bml0VGVzdAAKCQETZ2V0SW50QnlLRnJvbU9yYWNsZQECDndhdmVzX21pbl9zZWxsBAttaW5TZWxsVXNkbgDAhD0EC21pblNlbGxTaWduAwUIdW5pdFRlc3QAAQkAaAIFGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UAAgMDAwMDAwkAAAIFB2Fzc2V0SWQJANgEAQULdXNkbkFzc2V0SWQJAGYCBQttaW5TZWxsVXNkbgUFcHJpY2UHCQECIT0CBQVwcmljZQAABwYDAwkAAAIFB2Fzc2V0SWQJANgEAQULdXNkdEFzc2V0SWQJAGYCBQttaW5TZWxsVXNkbgUFcHJpY2UHCQECIT0CBQVwcmljZQAABwYDAwkAAAIFB2Fzc2V0SWQJANgEAQULc2lnbkFzc2V0SWQJAGYCBQttaW5TZWxsU2lnbgUFcHJpY2UHCQECIT0CBQVwcmljZQAABwYDAwMJAAACBQdhc3NldElkCQDYBAEFDHdhdmVzQXNzZXRJZAYJAAACBQdhc3NldElkAgVXQVZFUwkAZgIFDG1pblNlbGxXYXZlcwUFcHJpY2UHCQECIT0CBQVwcmljZQAABwcGAQ9wcm92aWRlQmFzZURhdGECAWkFbmZ0SWQEDSR0MDEwODI2MTA4NjYJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDEwODI2MTA4NjYCXzEEBmNhbGxlcggFDSR0MDEwODI2MTA4NjYCXzIEBGRhdGUIBQ0kdDAxMDgyNjEwODY2Al8zBA0kdDAxMDg2OTEwOTM4CQEMY2hlY2tORlRJbmZvAQUFbmZ0SWQECmlzVmFsaWRORlQIBQ0kdDAxMDg2OTEwOTM4Al8xBAVhcnRJZAgFDSR0MDEwODY5MTA5MzgCXzIEC2NyZWF0b3JBZGRyCAUNJHQwMTA4NjkxMDkzOAJfMwQJYXJ0U2lnbklECAUNJHQwMTA4NjkxMDkzOAJfNAkAmQoHBQJpZAUGY2FsbGVyBQRkYXRlBQppc1ZhbGlkTkZUBQVhcnRJZAULY3JlYXRvckFkZHIFCWFydFNpZ25JRAEOdXBkYXRlTnVtU2FsZXMABAhudW1TYWxlcwkBCWdldEludEJ5SwEFCW51bVNhbGVzSwkBDEludGVnZXJFbnRyeQIFCW51bVNhbGVzSwkAZAIFCG51bVNhbGVzAAEJBmludm9rZQEHc2V0Q29uZgIDa2V5A3ZhbAQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgMJAQhjb250YWlucwIFA2tleQIFY29uZl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUDa2V5BQN2YWwFA25pbAkAAgECIEVudHJpZXMgc3RhcnRpbmcgd2l0aCBjb25mXyBvbmx5CQACAQIiWW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhpcwZpbnZva2UBCmFwcFJ1bm5pbmcCBmlzTGl2ZQdtZXNzYWdlBAZjYWxsZXIJAKUIAQgFBmludm9rZQZjYWxsZXIEAmlkCQDYBAEIBQZpbnZva2UNdHJhbnNhY3Rpb25JZAMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDmRhcHBSdW5uaW5nS2V5BQZpc0xpdmUJAMwIAgkBC1N0cmluZ0VudHJ5AgURbWFpbnRlbmFuY2VNU0dLZXkFB21lc3NhZ2UFA25pbAkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMBaQEHc2VsbE5GVAIFcHJpY2UFYXNzZXQEDSR0MDEyMDAzMTIwMzkJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAUNJHQwMTIwMDMxMjAzOQJfMQQGYW1vdW50CAUNJHQwMTIwMDMxMjAzOQJfMgMJAQIhPQIFBmFtb3VudAABCQACAQIPTm8gTkZUIGF0dGFjaGVkBAVuZnRJZAMDCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkBDGlzU2lnbkFydE5GVAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQHCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQJAAIBAhtPbmx5IFNJR04gQXJ0IE5GVCBhY2NlcHRlZC4EDSR0MDEyMjczMTIzNjYJAQ9wcm92aWRlQmFzZURhdGECBQFpBQVuZnRJZAQCaWQIBQ0kdDAxMjI3MzEyMzY2Al8xBAZjYWxsZXIIBQ0kdDAxMjI3MzEyMzY2Al8yBARkYXRlCAUNJHQwMTIyNzMxMjM2NgJfMwQKaXNWYWxpZE5GVAgFDSR0MDEyMjczMTIzNjYCXzQEBWFydElkCAUNJHQwMTIyNzMxMjM2NgJfNQQLY3JlYXRvckFkZHIIBQ0kdDAxMjI3MzEyMzY2Al82BAlhcnRTaWduSUQIBQ0kdDAxMjI3MzEyMzY2Al83AwkAAAIJALECAQUJYXJ0U2lnbklEAAAJAAIBAh1BcnR3b3JrIG5vdCBmb3VuZCBvbiBTSUdOIEFydAMJAQEhAQUKaXNWYWxpZE5GVAkAAgECD05vdCBhIHZhbGlkIG5mdAMJAQEhAQkBEGFjY2VwdGVkQXNzZXRJZHMBBQVhc3NldAkAAgECJ09ubHkgU0lHTiwgVVNETiwgVVNEVCBvciBXQVZFUyBhY2NlcHRlZAMJAQEhAQkBD3ZhbGlkYXRlTWluU2VsbAIFBWFzc2V0BQVwcmljZQkAAgECGFdyb25nIG1pbmltdW0gc2VsbCBwcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAQpnZXRTYWxlS2V5BAUGY2FsbGVyBQVuZnRJZAUFYXJ0SWQFC2NyZWF0b3JBZGRyAgVfT1BFTgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApAMBBQRkYXRlAgFfCQCkAwEFBXByaWNlAgFfBQVhc3NldAIBXwUFbmZ0SWQCAV8FBWFydElkAgFfBQtjcmVhdG9yQWRkcgIBXwUCaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgIPc2FsZTJuZF9zdGF0dXNfBQZjYWxsZXICAV8FBW5mdElkAgRPUEVOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgIWY3VycmVudF9vd25lcl9vbl9kYXBwXwUFbmZ0SWQFBmNhbGxlcgUDbmlsAWkBD3VwZGF0ZVNhbGVQcmljZQMFbmZ0SWQFcHJpY2UFYXNzZXQEDSR0MDEzMjQ2MTMzMzkJAQ9wcm92aWRlQmFzZURhdGECBQFpBQVuZnRJZAQCaWQIBQ0kdDAxMzI0NjEzMzM5Al8xBAZjYWxsZXIIBQ0kdDAxMzI0NjEzMzM5Al8yBARkYXRlCAUNJHQwMTMyNDYxMzMzOQJfMwQKaXNWYWxpZE5GVAgFDSR0MDEzMjQ2MTMzMzkCXzQEBWFydElkCAUNJHQwMTMyNDYxMzMzOQJfNQQLY3JlYXRvckFkZHIIBQ0kdDAxMzI0NjEzMzM5Al82BAlhcnRTaWduSUQIBQ0kdDAxMzI0NjEzMzM5Al83AwkAAAIJALECAQUJYXJ0U2lnbklEAAAJAAIBAjBBcnR3b3JrIG5vdCBmb3VuZCBvbiBTSUdOIEFydCwgY2FuY2VsIHlvdXIgc2FsZS4DCQEBIQEFCmlzVmFsaWRORlQJAAIBAg9Ob3QgYSB2YWxpZCBuZnQECXNhbGVPd25lcgkBCWdldFN0ckJ5SwEJAKwCAgIWY3VycmVudF9vd25lcl9vbl9kYXBwXwUFbmZ0SWQDCQECIT0CBQlzYWxlT3duZXIFBmNhbGxlcgkAAgECFllvdSBkb24ndCBvd24gdGhpcyBORlQECnNhbGVTdGF0dXMJAQlnZXRTdHJCeUsBCQCsAgIJAKwCAgkArAICAg9zYWxlMm5kX3N0YXR1c18FBmNhbGxlcgIBXwUFbmZ0SWQDCQECIT0CBQpzYWxlU3RhdHVzAgRPUEVOCQACAQIPU2FsZSBub3QgYWN0aXZlAwkBASEBCQEQYWNjZXB0ZWRBc3NldElkcwEFBWFzc2V0CQACAQInT25seSBTSUdOLCBVU0ROLCBVU0RUIG9yIFdBVkVTIGFjY2VwdGVkAwkBASEBCQEPdmFsaWRhdGVNaW5TZWxsAgUFYXNzZXQFBXByaWNlCQACAQIYV3JvbmcgbWluaW11bSBzZWxsIHByaWNlBAdzYWxlS2V5CQEKZ2V0U2FsZUtleQQFBmNhbGxlcgUFbmZ0SWQFBWFydElkBQtjcmVhdG9yQWRkcgQIc2FsZUluZm8JALUJAgkBCWdldFN0ckJ5SwEJAKwCAgUHc2FsZUtleQIFX09QRU4CAV8JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdzYWxlS2V5AgVfT1BFTgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkAkQMCBQhzYWxlSW5mbwAAAgFfCQCkAwEFBXByaWNlAgFfBQVhc3NldAIBXwkAkQMCBQhzYWxlSW5mbwADAgFfCQCRAwIFCHNhbGVJbmZvAAQCAV8JAJEDAgUIc2FsZUluZm8ABQIBXwkAkQMCBQhzYWxlSW5mbwAGBQNuaWwBaQEKY2FuY2VsU2FsZQEFbmZ0SWQEDSR0MDE0NDg3MTQ3MjgJAQ9wcm92aWRlQmFzZURhdGECBQFpBQVuZnRJZAQCaWQIBQ0kdDAxNDQ4NzE0NzI4Al8xBAZjYWxsZXIIBQ0kdDAxNDQ4NzE0NzI4Al8yBARkYXRlCAUNJHQwMTQ0ODcxNDcyOAJfMwQKaXNWYWxpZE5GVAgFDSR0MDE0NDg3MTQ3MjgCXzQEBWFydElkCAUNJHQwMTQ0ODcxNDcyOAJfNQQLY3JlYXRvckFkZHIIBQ0kdDAxNDQ4NzE0NzI4Al82BAlhcnRTaWduSUQIBQ0kdDAxNDQ4NzE0NzI4Al83BAlzYWxlT3duZXIJAQlnZXRTdHJCeUsBCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FBW5mdElkAwkBAiE9AgUJc2FsZU93bmVyBQZjYWxsZXIJAAIBAhZZb3UgZG9uJ3Qgb3duIHRoaXMgTkZUBApzYWxlU3RhdHVzCQEJZ2V0U3RyQnlLAQkArAICCQCsAgIJAKwCAgIPc2FsZTJuZF9zdGF0dXNfBQZjYWxsZXICAV8FBW5mdElkAwkBAiE9AgUKc2FsZVN0YXR1cwIET1BFTgkAAgECD1NhbGUgbm90IGFjdGl2ZQQHc2FsZUtleQkBCmdldFNhbGVLZXkEBQZjYWxsZXIFBW5mdElkBQVhcnRJZAULY3JlYXRvckFkZHIECHNhbGVJbmZvCQEJZ2V0U3RyQnlLAQkArAICBQdzYWxlS2V5AgVfT1BFTgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFB3NhbGVLZXkCBV9PUEVOCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUGY2FsbGVyAgFfBQVuZnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FBW5mdElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFB3NhbGVLZXkCAV8FAmlkAgpfQ0FOQ0VMTEVECQCsAgIJAKwCAgkArAICCQCsAgIFCHNhbGVJbmZvAgtfQ0FOQ0VMTEVEXwkApAMBBQRkYXRlAgFfBQJpZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGY2FsbGVyAAEJANkEAQUFbmZ0SWQFA25pbAFpAQZidXlORlQBBW5mdElkBA0kdDAxNTU1OTE1NjUyCQEPcHJvdmlkZUJhc2VEYXRhAgUBaQUFbmZ0SWQEAmlkCAUNJHQwMTU1NTkxNTY1MgJfMQQGY2FsbGVyCAUNJHQwMTU1NTkxNTY1MgJfMgQEZGF0ZQgFDSR0MDE1NTU5MTU2NTICXzMECmlzVmFsaWRORlQIBQ0kdDAxNTU1OTE1NjUyAl80BAVhcnRJZAgFDSR0MDE1NTU5MTU2NTICXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTU1NTkxNTY1MgJfNgQJYXJ0U2lnbklECAUNJHQwMTU1NTkxNTY1MgJfNwMJAAACCQCxAgEFCWFydFNpZ25JRAAACQACAQIwQXJ0d29yayBub3QgZm91bmQgb24gU0lHTiBBcnQsIGNhbmNlbCB5b3VyIHNhbGUuAwkBASEBBQppc1ZhbGlkTkZUCQACAQIPTm90IGEgdmFsaWQgbmZ0BAlzYWxlT3duZXIJARVnZXRTYWxlT3duZXJBbmRTdGF0dXMBBQVuZnRJZAQHc2FsZUtleQkBCmdldFNhbGVLZXkEBQlzYWxlT3duZXIFBW5mdElkBQVhcnRJZAULY3JlYXRvckFkZHIECHNhbGVJbmZvCQEJZ2V0U3RyQnlLAQkArAICBQdzYWxlS2V5AgVfT1BFTgMJAAACCQCxAgEFCHNhbGVJbmZvAAAJAAIBAg9TYWxlIE5vdCBmb3VuZCEEDXNhbGVJbmZvQXJyYXkJALUJAgUIc2FsZUluZm8CAV8DCQAAAgkAtgkBCQCRAwIFDXNhbGVJbmZvQXJyYXkAAQAACQACAQIKT2ZmZXIgb25seQQNJHQwMTYxNDkxNjE4NQkBCWlzUGF5bWVudAEFAWkEB3BheW1lbnQIBQ0kdDAxNjE0OTE2MTg1Al8xBAZhbW91bnQIBQ0kdDAxNjE0OTE2MTg1Al8yBA9wYXltZW50QXNzZXRTdHIDCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkAgADAwkBAiE9AgkAkQMCBQ1zYWxlSW5mb0FycmF5AAEJAKQDAQUGYW1vdW50BgkBAiE9AgkAkQMCBQ1zYWxlSW5mb0FycmF5AAIFD3BheW1lbnRBc3NldFN0cgkAAgECGlBheW1lbnQgaW5mb3MgZG9uJ3QgbWF0Y2guBA0kdDAxNjY5MTE2ODMwCQEMc2V0VHJhbnNmZXJzBwUGYW1vdW50CAUHcGF5bWVudAdhc3NldElkBQVuZnRJZAULY3JlYXRvckFkZHIFCXNhbGVPd25lcgUGY2FsbGVyBQVhcnRJZAQLY29tbWlzc2lvbnMIBQ0kdDAxNjY5MTE2ODMwAl8xBApjcmVhdG9yRmVlCAUNJHQwMTY2OTExNjgzMAJfMgQIb3duZXJGZWUIBQ0kdDAxNjY5MTE2ODMwAl8zBAxjb2xsZWN0b3JORlQIBQ0kdDAxNjY5MTE2ODMwAl80CQDOCAIJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFB3NhbGVLZXkCBV9PUEVOCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUJc2FsZU93bmVyAgFfBQVuZnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FBW5mdElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFB3NhbGVLZXkCAV8FAmlkAgdfQ0xPU0VECQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQhzYWxlSW5mbwIIX0NMT1NFRF8JAKQDAQUEZGF0ZQIBXwUCaWQCAV8FBmNhbGxlcgkAzAgCCQEOdXBkYXRlTnVtU2FsZXMACQDMCAIFCG93bmVyRmVlCQDMCAIFDGNvbGxlY3Rvck5GVAUDbmlsBQpjcmVhdG9yRmVlBQtjb21taXNzaW9ucwFpAQhzZXRPZmZlcgEFbmZ0SWQEDSR0MDE3MjQxMTczMzgJAQ9wcm92aWRlQmFzZURhdGECBQFpBQVuZnRJZAQCaWQIBQ0kdDAxNzI0MTE3MzM4Al8xBApvZmZlck93bmVyCAUNJHQwMTcyNDExNzMzOAJfMgQEZGF0ZQgFDSR0MDE3MjQxMTczMzgCXzMECmlzVmFsaWRORlQIBQ0kdDAxNzI0MTE3MzM4Al80BAVhcnRJZAgFDSR0MDE3MjQxMTczMzgCXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTcyNDExNzMzOAJfNgQJYXJ0U2lnbklECAUNJHQwMTcyNDExNzMzOAJfNwMJAQEhAQUKaXNWYWxpZE5GVAkAAgECD05vdCBhIHZhbGlkIG5mdAQNJHQwMTczOTkxNzQzNQkBCWlzUGF5bWVudAEFAWkEB3BheW1lbnQIBQ0kdDAxNzM5OTE3NDM1Al8xBAZhbW91bnQIBQ0kdDAxNzM5OTE3NDM1Al8yBAdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAIFV0FWRVMJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAMJAQEhAQkBEGFjY2VwdGVkQXNzZXRJZHMBBQdhc3NldElkCQACAQISYXNzZXQgbm90IGFjY2VwdGVkAwkAAAIFBmFtb3VudAAACQACAQIWT2ZmZXIgb2YgMCBub3QgYWxsb3dlZAMJAQEhAQkBD3ZhbGlkYXRlTWluU2VsbAIFB2Fzc2V0SWQFBmFtb3VudAkAAgECGFdyb25nIG1pbmltdW0gc2VsbCBwcmljZQQJc2FsZU93bmVyCQEVZ2V0U2FsZU93bmVyQW5kU3RhdHVzAQUFbmZ0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQEJZ2V0QmlkS2V5BAUKb2ZmZXJPd25lcgUFbmZ0SWQFCXNhbGVPd25lcgUCaWQCBV9PUEVOCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApAMBBQRkYXRlAgFfCQCkAwEFBmFtb3VudAIBXwUHYXNzZXRJZAIBXwUFbmZ0SWQCAV8FBWFydElkAgFfBQtjcmVhdG9yQWRkcgIBXwUKb2ZmZXJPd25lcgIBXwUCaWQFA25pbAFpAQthY2NlcHRPZmZlcgMFbmZ0SWQHb2ZmZXJJZApvZmZlck93bmVyBA0kdDAxODIzNzE4MzMwCQEPcHJvdmlkZUJhc2VEYXRhAgUBaQUFbmZ0SWQEAmlkCAUNJHQwMTgyMzcxODMzMAJfMQQGY2FsbGVyCAUNJHQwMTgyMzcxODMzMAJfMgQEZGF0ZQgFDSR0MDE4MjM3MTgzMzACXzMECmlzVmFsaWRORlQIBQ0kdDAxODIzNzE4MzMwAl80BAVhcnRJZAgFDSR0MDE4MjM3MTgzMzACXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTgyMzcxODMzMAJfNgQJYXJ0U2lnbklECAUNJHQwMTgyMzcxODMzMAJfNwMJAQEhAQUKaXNWYWxpZE5GVAkAAgECD05vdCBhIHZhbGlkIG5mdAQJc2FsZU93bmVyCQEVZ2V0U2FsZU93bmVyQW5kU3RhdHVzAQUFbmZ0SWQDCQECIT0CBQZjYWxsZXIFCXNhbGVPd25lcgkAAgECIE9ubHkgc2FsZSBvd25lciBjYW4gYWNjZXB0IG9mZmVyBAZiaWRLZXkJAQlnZXRCaWRLZXkEBQpvZmZlck93bmVyBQVuZnRJZAUJc2FsZU93bmVyBQdvZmZlcklkBA0kdDAxODU4NDE4NjM5CQEKZ2V0QmlkRGF0YQEFBmJpZEtleQQKYmlkRGF0YUFycggFDSR0MDE4NTg0MTg2MzkCXzEEB2Fzc2V0SWQIBQ0kdDAxODU4NDE4NjM5Al8yBAdiaWREYXRhCAUNJHQwMTg1ODQxODYzOQJfMwQHc2FsZUtleQkBCmdldFNhbGVLZXkEBQlzYWxlT3duZXIFBW5mdElkBQVhcnRJZAULY3JlYXRvckFkZHIECHNhbGVJbmZvCQEJZ2V0U3RyQnlLAQkArAICBQdzYWxlS2V5AgVfT1BFTgMJAAACCQCxAgEFCHNhbGVJbmZvAAAJAAIBAg9TYWxlIE5vdCBmb3VuZCEEBmFtb3VudAkBBXZhbHVlAQkAtgkBCQCRAwIFCmJpZERhdGFBcnIAAQQNJHQwMTg4NzUxOTAxMwkBDHNldFRyYW5zZmVycwcFBmFtb3VudAUHYXNzZXRJZAUFbmZ0SWQFC2NyZWF0b3JBZGRyBQlzYWxlT3duZXIJAJEDAgUKYmlkRGF0YUFycgAGBQVhcnRJZAQLY29tbWlzc2lvbnMIBQ0kdDAxODg3NTE5MDEzAl8xBApjcmVhdG9yRmVlCAUNJHQwMTg4NzUxOTAxMwJfMgQIb3duZXJGZWUIBQ0kdDAxODg3NTE5MDEzAl8zBAxjb2xsZWN0b3JORlQIBQ0kdDAxODg3NTE5MDEzAl80BAphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEFB2Fzc2V0SWQJANgEAQkBBXZhbHVlAQUHYXNzZXRJZAIFV0FWRVMJAM4IAgkAzggCCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUHc2FsZUtleQIFX09QRU4JAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZiaWRLZXkCBV9PUEVOCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUJc2FsZU93bmVyAgFfBQVuZnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FBW5mdElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGYmlkS2V5AgdfQ0xPU0VECQCsAgIJAKwCAgkArAICCQCsAgIFB2JpZERhdGECCF9DTE9TRURfCQCkAwEFBGRhdGUCAV8FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFB3NhbGVLZXkCAV8FAmlkAgdfQ0xPU0VECQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFCHNhbGVJbmZvAg5fQ0xPU0VELU9GRkVSXwkApAMBBQRkYXRlAgFfBQJpZAIBXwUKb2ZmZXJPd25lcgIBXwkApAMBBQZhbW91bnQCAV8FCmFzc2V0SWRTdHIJAMwIAgkBDnVwZGF0ZU51bVNhbGVzAAkAzAgCBQhvd25lckZlZQkAzAgCBQxjb2xsZWN0b3JORlQFA25pbAUKY3JlYXRvckZlZQULY29tbWlzc2lvbnMBaQELY2FuY2VsT2ZmZXIEBW5mdElkB29mZmVySWQKb2ZmZXJPd25lcglzYWxlT3duZXIEDSR0MDE5ODEzMTk4ODcJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDE5ODEzMTk4ODcCXzEEBmNhbGxlcggFDSR0MDE5ODEzMTk4ODcCXzIEBGRhdGUIBQ0kdDAxOTgxMzE5ODg3Al8zAwMJAQIhPQIFBmNhbGxlcgUKb2ZmZXJPd25lcgkBAiE9AgUGY2FsbGVyBQlzYWxlT3duZXIHCQACAQIdWW91IGNhbm5vdCBjYW5jZWwgdGhpcyBvZmZlci4EBmJpZEtleQkBCWdldEJpZEtleQQFCm9mZmVyT3duZXIFBW5mdElkBQlzYWxlT3duZXIFB29mZmVySWQEDSR0MDIwMDU5MjAxMTQJAQpnZXRCaWREYXRhAQUGYmlkS2V5BApiaWREYXRhQXJyCAUNJHQwMjAwNTkyMDExNAJfMQQHYXNzZXRJZAgFDSR0MDIwMDU5MjAxMTQCXzIEB2JpZERhdGEIBQ0kdDAyMDA1OTIwMTE0Al8zCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUGYmlkS2V5AgVfT1BFTgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBmJpZEtleQIKX0NBTkNFTExFRAkArAICCQCsAgIJAKwCAgkArAICBQdiaWREYXRhAgtfQ0FOQ0VMTEVEXwkApAMBBQRkYXRlAgFfBQJpZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGY2FsbGVyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKYmlkRGF0YUFycgABBQdhc3NldElkBQNuaWwANXCTtg==", "height": 2432941, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HdQQomAiRRN9wadHHGKf68zNdzgKwxPRWp4GwaE5HaBM Next: DKmqewW2WgqVWmd4uwALQekfKvT6Zj84SdtGsPWcu5Ai Diff:
OldNewDifferences
288288
289289
290290 func provideBaseData (i,nftId) = {
291- let $t01079510835 = idCallerDate(i)
292- let id = $t01079510835._1
293- let caller = $t01079510835._2
294- let date = $t01079510835._3
295- let $t01083810907 = checkNFTInfo(nftId)
296- let isValidNFT = $t01083810907._1
297- let artId = $t01083810907._2
298- let creatorAddr = $t01083810907._3
299- let artSignID = $t01083810907._4
291+ let $t01082610866 = idCallerDate(i)
292+ let id = $t01082610866._1
293+ let caller = $t01082610866._2
294+ let date = $t01082610866._3
295+ let $t01086910938 = checkNFTInfo(nftId)
296+ let isValidNFT = $t01086910938._1
297+ let artId = $t01086910938._2
298+ let creatorAddr = $t01086910938._3
299+ let artSignID = $t01086910938._4
300300 $Tuple7(id, caller, date, isValidNFT, artId, creatorAddr, artSignID)
301301 }
302302
332332
333333 @Callable(i)
334334 func sellNFT (price,asset) = {
335- let $t01197212008 = isPayment(i)
336- let payment = $t01197212008._1
337- let amount = $t01197212008._2
335+ let $t01200312039 = isPayment(i)
336+ let payment = $t01200312039._1
337+ let amount = $t01200312039._2
338338 if ((amount != 1))
339339 then throw("No NFT attached")
340340 else {
343343 else false)
344344 then toBase58String(value(payment.assetId))
345345 else throw("Only SIGN Art NFT accepted.")
346- let $t01224212335 = provideBaseData(i, nftId)
347- let id = $t01224212335._1
348- let caller = $t01224212335._2
349- let date = $t01224212335._3
350- let isValidNFT = $t01224212335._4
351- let artId = $t01224212335._5
352- let creatorAddr = $t01224212335._6
353- let artSignID = $t01224212335._7
346+ let $t01227312366 = provideBaseData(i, nftId)
347+ let id = $t01227312366._1
348+ let caller = $t01227312366._2
349+ let date = $t01227312366._3
350+ let isValidNFT = $t01227312366._4
351+ let artId = $t01227312366._5
352+ let creatorAddr = $t01227312366._6
353+ let artSignID = $t01227312366._7
354354 if ((size(artSignID) == 0))
355355 then throw("Artwork not found on SIGN Art")
356356 else if (!(isValidNFT))
367367
368368 @Callable(i)
369369 func updateSalePrice (nftId,price,asset) = {
370- let $t01321513308 = provideBaseData(i, nftId)
371- let id = $t01321513308._1
372- let caller = $t01321513308._2
373- let date = $t01321513308._3
374- let isValidNFT = $t01321513308._4
375- let artId = $t01321513308._5
376- let creatorAddr = $t01321513308._6
377- let artSignID = $t01321513308._7
370+ let $t01324613339 = provideBaseData(i, nftId)
371+ let id = $t01324613339._1
372+ let caller = $t01324613339._2
373+ let date = $t01324613339._3
374+ let isValidNFT = $t01324613339._4
375+ let artId = $t01324613339._5
376+ let creatorAddr = $t01324613339._6
377+ let artSignID = $t01324613339._7
378378 if ((size(artSignID) == 0))
379379 then throw("Artwork not found on SIGN Art, cancel your sale.")
380380 else if (!(isValidNFT))
404404
405405 @Callable(i)
406406 func cancelSale (nftId) = {
407- let $t01445614697 = provideBaseData(i, nftId)
408- let id = $t01445614697._1
409- let caller = $t01445614697._2
410- let date = $t01445614697._3
411- let isValidNFT = $t01445614697._4
412- let artId = $t01445614697._5
413- let creatorAddr = $t01445614697._6
414- let artSignID = $t01445614697._7
407+ let $t01448714728 = provideBaseData(i, nftId)
408+ let id = $t01448714728._1
409+ let caller = $t01448714728._2
410+ let date = $t01448714728._3
411+ let isValidNFT = $t01448714728._4
412+ let artId = $t01448714728._5
413+ let creatorAddr = $t01448714728._6
414+ let artSignID = $t01448714728._7
415415 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
416416 if ((saleOwner != caller))
417417 then throw("You don't own this NFT")
431431
432432 @Callable(i)
433433 func buyNFT (nftId) = {
434- let $t01552815621 = provideBaseData(i, nftId)
435- let id = $t01552815621._1
436- let caller = $t01552815621._2
437- let date = $t01552815621._3
438- let isValidNFT = $t01552815621._4
439- let artId = $t01552815621._5
440- let creatorAddr = $t01552815621._6
441- let artSignID = $t01552815621._7
434+ let $t01555915652 = provideBaseData(i, nftId)
435+ let id = $t01555915652._1
436+ let caller = $t01555915652._2
437+ let date = $t01555915652._3
438+ let isValidNFT = $t01555915652._4
439+ let artId = $t01555915652._5
440+ let creatorAddr = $t01555915652._6
441+ let artSignID = $t01555915652._7
442442 if ((size(artSignID) == 0))
443443 then throw("Artwork not found on SIGN Art, cancel your sale.")
444444 else if (!(isValidNFT))
454454 if ((parseInt(saleInfoArray[1]) == 0))
455455 then throw("Offer only")
456456 else {
457- let $t01611816154 = isPayment(i)
458- let payment = $t01611816154._1
459- let amount = $t01611816154._2
457+ let $t01614916185 = isPayment(i)
458+ let payment = $t01614916185._1
459+ let amount = $t01614916185._2
460460 let paymentAssetStr = if (isDefined(payment.assetId))
461461 then toBase58String(value(payment.assetId))
462462 else ""
465465 else (saleInfoArray[2] != paymentAssetStr))
466466 then throw("Payment infos don't match.")
467467 else {
468- let $t01666016799 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller, artId)
469- let commissions = $t01666016799._1
470- let creatorFee = $t01666016799._2
471- let ownerFee = $t01666016799._3
472- let collectorNFT = $t01666016799._4
468+ let $t01669116830 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller, artId)
469+ let commissions = $t01669116830._1
470+ let creatorFee = $t01669116830._2
471+ let ownerFee = $t01669116830._3
472+ let collectorNFT = $t01669116830._4
473473 (([DeleteEntry((saleKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + saleOwner) + "_") + nftId)), DeleteEntry(("current_owner_on_dapp_" + nftId)), StringEntry((((saleKey + "_") + id) + "_CLOSED"), ((((((saleInfo + "_CLOSED_") + toString(date)) + "_") + id) + "_") + caller)), updateNumSales(), ownerFee, collectorNFT] ++ creatorFee) ++ commissions)
474474 }
475475 }
481481
482482 @Callable(i)
483483 func setOffer (nftId) = {
484- let $t01721017307 = provideBaseData(i, nftId)
485- let id = $t01721017307._1
486- let offerOwner = $t01721017307._2
487- let date = $t01721017307._3
488- let isValidNFT = $t01721017307._4
489- let artId = $t01721017307._5
490- let creatorAddr = $t01721017307._6
491- let artSignID = $t01721017307._7
484+ let $t01724117338 = provideBaseData(i, nftId)
485+ let id = $t01724117338._1
486+ let offerOwner = $t01724117338._2
487+ let date = $t01724117338._3
488+ let isValidNFT = $t01724117338._4
489+ let artId = $t01724117338._5
490+ let creatorAddr = $t01724117338._6
491+ let artSignID = $t01724117338._7
492492 if (!(isValidNFT))
493493 then throw("Not a valid nft")
494494 else {
495- let $t01736817404 = isPayment(i)
496- let payment = $t01736817404._1
497- let amount = $t01736817404._2
495+ let $t01739917435 = isPayment(i)
496+ let payment = $t01739917435._1
497+ let amount = $t01739917435._2
498498 let assetId = if (!(isDefined(payment.assetId)))
499499 then "WAVES"
500500 else toBase58String(value(payment.assetId))
515515
516516 @Callable(i)
517517 func acceptOffer (nftId,offerId,offerOwner) = {
518- let $t01820618299 = provideBaseData(i, nftId)
519- let id = $t01820618299._1
520- let caller = $t01820618299._2
521- let date = $t01820618299._3
522- let isValidNFT = $t01820618299._4
523- let artId = $t01820618299._5
524- let creatorAddr = $t01820618299._6
525- let artSignID = $t01820618299._7
518+ let $t01823718330 = provideBaseData(i, nftId)
519+ let id = $t01823718330._1
520+ let caller = $t01823718330._2
521+ let date = $t01823718330._3
522+ let isValidNFT = $t01823718330._4
523+ let artId = $t01823718330._5
524+ let creatorAddr = $t01823718330._6
525+ let artSignID = $t01823718330._7
526526 if (!(isValidNFT))
527527 then throw("Not a valid nft")
528528 else {
531531 then throw("Only sale owner can accept offer")
532532 else {
533533 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
534- let $t01855318608 = getBidData(bidKey)
535- let bidDataArr = $t01855318608._1
536- let assetId = $t01855318608._2
537- let bidData = $t01855318608._3
534+ let $t01858418639 = getBidData(bidKey)
535+ let bidDataArr = $t01858418639._1
536+ let assetId = $t01858418639._2
537+ let bidData = $t01858418639._3
538538 let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
539539 let saleInfo = getStrByK((saleKey + "_OPEN"))
540540 if ((size(saleInfo) == 0))
541541 then throw("Sale Not found!")
542542 else {
543543 let amount = value(parseInt(bidDataArr[1]))
544- let $t01884418982 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6], artId)
545- let commissions = $t01884418982._1
546- let creatorFee = $t01884418982._2
547- let ownerFee = $t01884418982._3
548- let collectorNFT = $t01884418982._4
544+ let $t01887519013 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6], artId)
545+ let commissions = $t01887519013._1
546+ let creatorFee = $t01887519013._2
547+ let ownerFee = $t01887519013._3
548+ let collectorNFT = $t01887519013._4
549549 let assetIdStr = if (isDefined(assetId))
550550 then toBase58String(value(assetId))
551551 else "WAVES"
559559
560560 @Callable(i)
561561 func cancelOffer (nftId,offerId,offerOwner,saleOwner) = {
562- let $t01978219856 = idCallerDate(i)
563- let id = $t01978219856._1
564- let caller = $t01978219856._2
565- let date = $t01978219856._3
562+ let $t01981319887 = idCallerDate(i)
563+ let id = $t01981319887._1
564+ let caller = $t01981319887._2
565+ let date = $t01981319887._3
566566 if (if ((caller != offerOwner))
567567 then (caller != saleOwner)
568568 else false)
569569 then throw("You cannot cancel this offer.")
570570 else {
571571 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
572- let $t02002820083 = getBidData(bidKey)
573- let bidDataArr = $t02002820083._1
574- let assetId = $t02002820083._2
575- let bidData = $t02002820083._3
572+ let $t02005920114 = getBidData(bidKey)
573+ let bidDataArr = $t02005920114._1
574+ let assetId = $t02005920114._2
575+ let bidData = $t02005920114._3
576576 [DeleteEntry((bidKey + "_OPEN")), StringEntry((bidKey + "_CANCELLED"), ((((bidData + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
577577 }
578578 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let VERSION = "1.1.5"
55
66 func getStrByK (key) = valueOrElse(getString(this, key), "")
77
88
99 let unitTest = false
1010
1111 let oracleFee = value(addressFromString(getStrByK("conf_oracle_fee")))
1212
1313 let signDapp = value(addressFromString(getStrByK("conf_signweb_dapp")))
1414
1515 let feeReceiver = getStrByK("conf_fee_receiver")
1616
1717 let artworksDapp = value(addressFromString(getStrByK("conf_artworks_dapp")))
1818
1919 let userDapp = if (unitTest)
2020 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
2121 else value(addressFromString(getStrByK("conf_users_dapp")))
2222
2323 let whitelistDapp = value(addressFromString(getStrByK("conf_whitelist_dapp")))
2424
2525 let signAssetId = fromBase58String(getStrByK("conf_accepted_asset_SIGN"))
2626
2727 let usdnAssetId = fromBase58String(getStrByK("conf_accepted_asset_USDN"))
2828
2929 let usdtAssetId = fromBase58String(getStrByK("conf_accepted_asset_USDT"))
3030
3131 let wavesAssetId = base58''
3232
3333 let chris = getStrByK("conf_admin_1")
3434
3535 let signCut = 3
3636
3737 let userSuspended = "SUSPENDED"
3838
3939 let userRemoved = "REMOVED"
4040
4141 let artIllegal = "ILLEGAL"
4242
4343 let artSuspended = "SUSPENDED"
4444
4545 let dappRunningKey = "conf_dapp_is_running"
4646
4747 let maintenanceMSGKey = "conf_maintenance_msg"
4848
4949 let dappRunning = valueOrElse(getBoolean(this, dappRunningKey), true)
5050
5151 let maintenanceMSG = valueOrElse(getString(this, maintenanceMSGKey), "")
5252
5353 let numSalesK = "num_sales"
5454
5555 func getUserStrByK (key) = valueOrElse(getString(userDapp, key), "Error")
5656
5757
5858 func getArtworkRoyalties (key) = valueOrElse(getInteger(artworksDapp, key), 1000)
5959
6060
6161 func getArtStrByK (key) = valueOrElse(getString(artworksDapp, key), "")
6262
6363
6464 func getIntByK (key) = valueOrElse(getInteger(this, key), 0)
6565
6666
6767 func keyUserStatus (addr) = ("user_status_" + addr)
6868
6969
7070 func keyArtworkRoyalties (caller,artId) = ((("art_royalties_" + artId) + "_") + caller)
7171
7272
7373 func keySignID (artistAddr,artId) = ((("art_signid_" + artId) + "_") + artistAddr)
7474
7575
7676 func keyFlag (artistAddr,artId) = ((("art_flag_" + artId) + "_") + artistAddr)
7777
7878
7979 func keyNFTData (id) = ("nft_" + id)
8080
8181
8282 func getSaleKey (caller,nftId,artId,creatorAddr) = ((((((("sale2nd_info_" + caller) + "_") + nftId) + "_") + artId) + "_") + creatorAddr)
8383
8484
8585 func getBidKey (offerOwner,nftId,saleOwner,offerId) = ((((((("offer2nd_" + offerOwner) + "_") + nftId) + "_") + saleOwner) + "_") + offerId)
8686
8787
8888 func getIntByKFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
8989
9090
9191 let currentCertificationPrice = getIntByKFromOracle(("certification_fee_" + toBase58String(signAssetId)))
9292
9393 func keyArtistAgentAddr (artistAddr) = ("artist_agent_" + artistAddr)
9494
9595
9696 func keySecondaryShareAgent (artistAddr) = ("artist_agent_secondary_" + artistAddr)
9797
9898
9999 func keyArtistPublicAgentAddr (artistAddr) = ("artist_public_agent_" + artistAddr)
100100
101101
102102 func keySecondarySharePublicAgent (artistAddr) = ("artist_public_agent_secondary_" + artistAddr)
103103
104104
105105 func idCallerDate (i) = if (!(dappRunning))
106106 then throw(maintenanceMSG)
107107 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
108108
109109
110110 func isPayment (i) = if ((size(i.payments) == 0))
111111 then throw("No payment attached")
112112 else {
113113 let payment = value(i.payments[0])
114114 let amount = value(payment.amount)
115115 $Tuple2(payment, amount)
116116 }
117117
118118
119119 func assetIsValid (assetDetails) = if (if (if ((assetDetails.quantity == 1))
120120 then (assetDetails.decimals == 0)
121121 else false)
122122 then (assetDetails.reissuable == false)
123123 else false)
124124 then (assetDetails.issuer == artworksDapp)
125125 else false
126126
127127
128128 func isSignArtNFT (id) = {
129129 let assetDetails = value(assetInfo(id))
130130 assetIsValid(assetDetails)
131131 }
132132
133133
134134 func acceptedAssetIds (assetId) = if (if (if (if (if ((assetId != toBase58String(signAssetId)))
135135 then (assetId != toBase58String(wavesAssetId))
136136 else false)
137137 then (assetId != "WAVES")
138138 else false)
139139 then (assetId != toBase58String(usdnAssetId))
140140 else false)
141141 then (assetId != toBase58String(usdtAssetId))
142142 else false)
143143 then false
144144 else true
145145
146146
147147 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
148148 then unit
149149 else fromBase58String(assetId)
150150
151151
152152 func getSaleOwnerAndStatus (nftid) = {
153153 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftid))
154154 if ((size(saleOwner) == 0))
155155 then throw("NFT not found")
156156 else {
157157 let saleStatus = getStrByK(((("sale2nd_status_" + saleOwner) + "_") + nftid))
158158 if ((saleStatus != "OPEN"))
159159 then throw("NFT not for sale")
160160 else saleOwner
161161 }
162162 }
163163
164164
165165 func getBidData (key) = {
166166 let bidData = getStrByK((key + "_OPEN"))
167167 if ((bidData == ""))
168168 then throw("Offer not found")
169169 else {
170170 let bidDataArr = split(bidData, "_")
171171 let assetId = getBidAssetId(bidDataArr[2])
172172 $Tuple3(bidDataArr, assetId, bidData)
173173 }
174174 }
175175
176176
177177 func artIsValid (artStatus) = if ((artStatus != artIllegal))
178178 then (artStatus != artSuspended)
179179 else false
180180
181181
182182 func checkArtStatus (addr,id) = {
183183 let artStatus = getArtStrByK(keyFlag(addr, id))
184184 if (artIsValid(artStatus))
185185 then true
186186 else throw(("Original Artwork flagged as " + artStatus))
187187 }
188188
189189
190190 func checkArtistStatus (addr) = {
191191 let artistStatus = getUserStrByK(keyUserStatus(addr))
192192 if (containsElement([userSuspended, userRemoved], artistStatus))
193193 then throw(("Original Artist " + artistStatus))
194194 else true
195195 }
196196
197197
198198 func checkNFTInfo (assetId) = {
199199 let nftData = split(getArtStrByK(keyNFTData(assetId)), "_")
200200 let artSignID = getArtStrByK(keySignID(nftData[6], nftData[5]))
201201 if (if (!(checkArtStatus(nftData[6], nftData[5])))
202202 then !(checkArtistStatus(nftData[6]))
203203 else false)
204204 then $Tuple4(false, nftData[5], nftData[6], artSignID)
205205 else $Tuple4(true, nftData[5], nftData[6], artSignID)
206206 }
207207
208208
209209 func checkARTExist (artId,creatorAddr) = {
210210 let artSignID = getArtStrByK(keySignID(creatorAddr, artId))
211211 if ((size(artSignID) == 0))
212212 then throw("Artwork not found on SIGN Art")
213213 else if (if (!(checkArtStatus(creatorAddr, artId)))
214214 then !(checkArtistStatus(creatorAddr))
215215 else false)
216216 then false
217217 else true
218218 }
219219
220220
221221 func setTransfers (amount,assetId,nftid,creatorAddr,saleOwner,caller,artId) = {
222222 let creatorCut = getArtworkRoyalties(keyArtworkRoyalties(creatorAddr, artId))
223223 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(creatorAddr)), feeReceiver)
224224 let agentShare = valueOrElse(getInteger(userDapp, keySecondaryShareAgent(creatorAddr)), 0)
225225 let publicAgent = valueOrElse(getString(userDapp, keyArtistPublicAgentAddr(creatorAddr)), feeReceiver)
226226 let publicAgentShare = valueOrElse(getInteger(userDapp, keySecondarySharePublicAgent(creatorAddr)), 0)
227227 let amountForSign = fraction(amount, signCut, 100)
228228 let amountForCreator = fraction(amount, creatorCut, 10000)
229229 let amountForOwner = (amount - (amountForSign + amountForCreator))
230230 let amountForAgent = if (if ((agent != feeReceiver))
231231 then (agentShare > 0)
232232 else false)
233233 then fraction(amount, agentShare, 10000)
234234 else 0
235235 let amountForPublicAgent = if (if ((publicAgent != feeReceiver))
236236 then (publicAgentShare > 0)
237237 else false)
238238 then fraction(amount, publicAgentShare, 10000)
239239 else 0
240240 let commissions = if ((amountForAgent != 0))
241241 then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
242242 else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
243243 let creatorFee = if ((amountForPublicAgent != 0))
244244 then [ScriptTransfer(Address(fromBase58String(publicAgent)), amountForPublicAgent, assetId), ScriptTransfer(Address(fromBase58String(creatorAddr)), (amountForCreator - amountForPublicAgent), assetId)]
245245 else [ScriptTransfer(Address(fromBase58String(creatorAddr)), amountForCreator, assetId)]
246246 let ownerFee = ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, assetId)
247247 let collectorNFT = ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftid))
248248 $Tuple4(commissions, creatorFee, ownerFee, collectorNFT)
249249 }
250250
251251
252252 func validateMinSell (assetId,price) = {
253253 let minSellWaves = if (unitTest)
254254 then 10
255255 else getIntByKFromOracle("waves_min_sell")
256256 let minSellUsdn = 1000000
257257 let minSellSign = if (unitTest)
258258 then 1
259259 else (currentCertificationPrice * 2)
260260 if (if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
261261 then (minSellUsdn > price)
262262 else false)
263263 then (price != 0)
264264 else false)
265265 then true
266266 else if (if ((assetId == toBase58String(usdtAssetId)))
267267 then (minSellUsdn > price)
268268 else false)
269269 then (price != 0)
270270 else false)
271271 then true
272272 else if (if ((assetId == toBase58String(signAssetId)))
273273 then (minSellSign > price)
274274 else false)
275275 then (price != 0)
276276 else false)
277277 then true
278278 else if (if (if ((assetId == toBase58String(wavesAssetId)))
279279 then true
280280 else (assetId == "WAVES"))
281281 then (minSellWaves > price)
282282 else false)
283283 then (price != 0)
284284 else false)
285285 then false
286286 else true
287287 }
288288
289289
290290 func provideBaseData (i,nftId) = {
291- let $t01079510835 = idCallerDate(i)
292- let id = $t01079510835._1
293- let caller = $t01079510835._2
294- let date = $t01079510835._3
295- let $t01083810907 = checkNFTInfo(nftId)
296- let isValidNFT = $t01083810907._1
297- let artId = $t01083810907._2
298- let creatorAddr = $t01083810907._3
299- let artSignID = $t01083810907._4
291+ let $t01082610866 = idCallerDate(i)
292+ let id = $t01082610866._1
293+ let caller = $t01082610866._2
294+ let date = $t01082610866._3
295+ let $t01086910938 = checkNFTInfo(nftId)
296+ let isValidNFT = $t01086910938._1
297+ let artId = $t01086910938._2
298+ let creatorAddr = $t01086910938._3
299+ let artSignID = $t01086910938._4
300300 $Tuple7(id, caller, date, isValidNFT, artId, creatorAddr, artSignID)
301301 }
302302
303303
304304 func updateNumSales () = {
305305 let numSales = getIntByK(numSalesK)
306306 IntegerEntry(numSalesK, (numSales + 1))
307307 }
308308
309309
310310 @Callable(invoke)
311311 func setConf (key,val) = {
312312 let caller = toString(invoke.caller)
313313 if (containsElement([chris, toString(this)], caller))
314314 then if (contains(key, "conf_"))
315315 then [StringEntry(key, val)]
316316 else throw("Entries starting with conf_ only")
317317 else throw("You are not allowed to change this")
318318 }
319319
320320
321321
322322 @Callable(invoke)
323323 func appRunning (isLive,message) = {
324324 let caller = toString(invoke.caller)
325325 let id = toBase58String(invoke.transactionId)
326326 if (containsElement([chris, toString(this)], caller))
327327 then [BooleanEntry(dappRunningKey, isLive), StringEntry(maintenanceMSGKey, message)]
328328 else throw("You are not allowed to change this")
329329 }
330330
331331
332332
333333 @Callable(i)
334334 func sellNFT (price,asset) = {
335- let $t01197212008 = isPayment(i)
336- let payment = $t01197212008._1
337- let amount = $t01197212008._2
335+ let $t01200312039 = isPayment(i)
336+ let payment = $t01200312039._1
337+ let amount = $t01200312039._2
338338 if ((amount != 1))
339339 then throw("No NFT attached")
340340 else {
341341 let nftId = if (if (isDefined(payment.assetId))
342342 then isSignArtNFT(value(payment.assetId))
343343 else false)
344344 then toBase58String(value(payment.assetId))
345345 else throw("Only SIGN Art NFT accepted.")
346- let $t01224212335 = provideBaseData(i, nftId)
347- let id = $t01224212335._1
348- let caller = $t01224212335._2
349- let date = $t01224212335._3
350- let isValidNFT = $t01224212335._4
351- let artId = $t01224212335._5
352- let creatorAddr = $t01224212335._6
353- let artSignID = $t01224212335._7
346+ let $t01227312366 = provideBaseData(i, nftId)
347+ let id = $t01227312366._1
348+ let caller = $t01227312366._2
349+ let date = $t01227312366._3
350+ let isValidNFT = $t01227312366._4
351+ let artId = $t01227312366._5
352+ let creatorAddr = $t01227312366._6
353+ let artSignID = $t01227312366._7
354354 if ((size(artSignID) == 0))
355355 then throw("Artwork not found on SIGN Art")
356356 else if (!(isValidNFT))
357357 then throw("Not a valid nft")
358358 else if (!(acceptedAssetIds(asset)))
359359 then throw("Only SIGN, USDN, USDT or WAVES accepted")
360360 else if (!(validateMinSell(asset, price)))
361361 then throw("Wrong minimum sell price")
362362 else [StringEntry((getSaleKey(caller, nftId, artId, creatorAddr) + "_OPEN"), ((((((((((((toString(date) + "_") + toString(price)) + "_") + asset) + "_") + nftId) + "_") + artId) + "_") + creatorAddr) + "_") + id)), StringEntry(((("sale2nd_status_" + caller) + "_") + nftId), "OPEN"), StringEntry(("current_owner_on_dapp_" + nftId), caller)]
363363 }
364364 }
365365
366366
367367
368368 @Callable(i)
369369 func updateSalePrice (nftId,price,asset) = {
370- let $t01321513308 = provideBaseData(i, nftId)
371- let id = $t01321513308._1
372- let caller = $t01321513308._2
373- let date = $t01321513308._3
374- let isValidNFT = $t01321513308._4
375- let artId = $t01321513308._5
376- let creatorAddr = $t01321513308._6
377- let artSignID = $t01321513308._7
370+ let $t01324613339 = provideBaseData(i, nftId)
371+ let id = $t01324613339._1
372+ let caller = $t01324613339._2
373+ let date = $t01324613339._3
374+ let isValidNFT = $t01324613339._4
375+ let artId = $t01324613339._5
376+ let creatorAddr = $t01324613339._6
377+ let artSignID = $t01324613339._7
378378 if ((size(artSignID) == 0))
379379 then throw("Artwork not found on SIGN Art, cancel your sale.")
380380 else if (!(isValidNFT))
381381 then throw("Not a valid nft")
382382 else {
383383 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
384384 if ((saleOwner != caller))
385385 then throw("You don't own this NFT")
386386 else {
387387 let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + nftId))
388388 if ((saleStatus != "OPEN"))
389389 then throw("Sale not active")
390390 else if (!(acceptedAssetIds(asset)))
391391 then throw("Only SIGN, USDN, USDT or WAVES accepted")
392392 else if (!(validateMinSell(asset, price)))
393393 then throw("Wrong minimum sell price")
394394 else {
395395 let saleKey = getSaleKey(caller, nftId, artId, creatorAddr)
396396 let saleInfo = split(getStrByK((saleKey + "_OPEN")), "_")
397397 [StringEntry((saleKey + "_OPEN"), ((((((((((((saleInfo[0] + "_") + toString(price)) + "_") + asset) + "_") + saleInfo[3]) + "_") + saleInfo[4]) + "_") + saleInfo[5]) + "_") + saleInfo[6]))]
398398 }
399399 }
400400 }
401401 }
402402
403403
404404
405405 @Callable(i)
406406 func cancelSale (nftId) = {
407- let $t01445614697 = provideBaseData(i, nftId)
408- let id = $t01445614697._1
409- let caller = $t01445614697._2
410- let date = $t01445614697._3
411- let isValidNFT = $t01445614697._4
412- let artId = $t01445614697._5
413- let creatorAddr = $t01445614697._6
414- let artSignID = $t01445614697._7
407+ let $t01448714728 = provideBaseData(i, nftId)
408+ let id = $t01448714728._1
409+ let caller = $t01448714728._2
410+ let date = $t01448714728._3
411+ let isValidNFT = $t01448714728._4
412+ let artId = $t01448714728._5
413+ let creatorAddr = $t01448714728._6
414+ let artSignID = $t01448714728._7
415415 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
416416 if ((saleOwner != caller))
417417 then throw("You don't own this NFT")
418418 else {
419419 let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + nftId))
420420 if ((saleStatus != "OPEN"))
421421 then throw("Sale not active")
422422 else {
423423 let saleKey = getSaleKey(caller, nftId, artId, creatorAddr)
424424 let saleInfo = getStrByK((saleKey + "_OPEN"))
425425 [DeleteEntry((saleKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + caller) + "_") + nftId)), DeleteEntry(("current_owner_on_dapp_" + nftId)), StringEntry((((saleKey + "_") + id) + "_CANCELLED"), ((((saleInfo + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftId))]
426426 }
427427 }
428428 }
429429
430430
431431
432432 @Callable(i)
433433 func buyNFT (nftId) = {
434- let $t01552815621 = provideBaseData(i, nftId)
435- let id = $t01552815621._1
436- let caller = $t01552815621._2
437- let date = $t01552815621._3
438- let isValidNFT = $t01552815621._4
439- let artId = $t01552815621._5
440- let creatorAddr = $t01552815621._6
441- let artSignID = $t01552815621._7
434+ let $t01555915652 = provideBaseData(i, nftId)
435+ let id = $t01555915652._1
436+ let caller = $t01555915652._2
437+ let date = $t01555915652._3
438+ let isValidNFT = $t01555915652._4
439+ let artId = $t01555915652._5
440+ let creatorAddr = $t01555915652._6
441+ let artSignID = $t01555915652._7
442442 if ((size(artSignID) == 0))
443443 then throw("Artwork not found on SIGN Art, cancel your sale.")
444444 else if (!(isValidNFT))
445445 then throw("Not a valid nft")
446446 else {
447447 let saleOwner = getSaleOwnerAndStatus(nftId)
448448 let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
449449 let saleInfo = getStrByK((saleKey + "_OPEN"))
450450 if ((size(saleInfo) == 0))
451451 then throw("Sale Not found!")
452452 else {
453453 let saleInfoArray = split(saleInfo, "_")
454454 if ((parseInt(saleInfoArray[1]) == 0))
455455 then throw("Offer only")
456456 else {
457- let $t01611816154 = isPayment(i)
458- let payment = $t01611816154._1
459- let amount = $t01611816154._2
457+ let $t01614916185 = isPayment(i)
458+ let payment = $t01614916185._1
459+ let amount = $t01614916185._2
460460 let paymentAssetStr = if (isDefined(payment.assetId))
461461 then toBase58String(value(payment.assetId))
462462 else ""
463463 if (if ((saleInfoArray[1] != toString(amount)))
464464 then true
465465 else (saleInfoArray[2] != paymentAssetStr))
466466 then throw("Payment infos don't match.")
467467 else {
468- let $t01666016799 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller, artId)
469- let commissions = $t01666016799._1
470- let creatorFee = $t01666016799._2
471- let ownerFee = $t01666016799._3
472- let collectorNFT = $t01666016799._4
468+ let $t01669116830 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller, artId)
469+ let commissions = $t01669116830._1
470+ let creatorFee = $t01669116830._2
471+ let ownerFee = $t01669116830._3
472+ let collectorNFT = $t01669116830._4
473473 (([DeleteEntry((saleKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + saleOwner) + "_") + nftId)), DeleteEntry(("current_owner_on_dapp_" + nftId)), StringEntry((((saleKey + "_") + id) + "_CLOSED"), ((((((saleInfo + "_CLOSED_") + toString(date)) + "_") + id) + "_") + caller)), updateNumSales(), ownerFee, collectorNFT] ++ creatorFee) ++ commissions)
474474 }
475475 }
476476 }
477477 }
478478 }
479479
480480
481481
482482 @Callable(i)
483483 func setOffer (nftId) = {
484- let $t01721017307 = provideBaseData(i, nftId)
485- let id = $t01721017307._1
486- let offerOwner = $t01721017307._2
487- let date = $t01721017307._3
488- let isValidNFT = $t01721017307._4
489- let artId = $t01721017307._5
490- let creatorAddr = $t01721017307._6
491- let artSignID = $t01721017307._7
484+ let $t01724117338 = provideBaseData(i, nftId)
485+ let id = $t01724117338._1
486+ let offerOwner = $t01724117338._2
487+ let date = $t01724117338._3
488+ let isValidNFT = $t01724117338._4
489+ let artId = $t01724117338._5
490+ let creatorAddr = $t01724117338._6
491+ let artSignID = $t01724117338._7
492492 if (!(isValidNFT))
493493 then throw("Not a valid nft")
494494 else {
495- let $t01736817404 = isPayment(i)
496- let payment = $t01736817404._1
497- let amount = $t01736817404._2
495+ let $t01739917435 = isPayment(i)
496+ let payment = $t01739917435._1
497+ let amount = $t01739917435._2
498498 let assetId = if (!(isDefined(payment.assetId)))
499499 then "WAVES"
500500 else toBase58String(value(payment.assetId))
501501 if (!(acceptedAssetIds(assetId)))
502502 then throw("asset not accepted")
503503 else if ((amount == 0))
504504 then throw("Offer of 0 not allowed")
505505 else if (!(validateMinSell(assetId, amount)))
506506 then throw("Wrong minimum sell price")
507507 else {
508508 let saleOwner = getSaleOwnerAndStatus(nftId)
509509 [StringEntry((getBidKey(offerOwner, nftId, saleOwner, id) + "_OPEN"), ((((((((((((((toString(date) + "_") + toString(amount)) + "_") + assetId) + "_") + nftId) + "_") + artId) + "_") + creatorAddr) + "_") + offerOwner) + "_") + id))]
510510 }
511511 }
512512 }
513513
514514
515515
516516 @Callable(i)
517517 func acceptOffer (nftId,offerId,offerOwner) = {
518- let $t01820618299 = provideBaseData(i, nftId)
519- let id = $t01820618299._1
520- let caller = $t01820618299._2
521- let date = $t01820618299._3
522- let isValidNFT = $t01820618299._4
523- let artId = $t01820618299._5
524- let creatorAddr = $t01820618299._6
525- let artSignID = $t01820618299._7
518+ let $t01823718330 = provideBaseData(i, nftId)
519+ let id = $t01823718330._1
520+ let caller = $t01823718330._2
521+ let date = $t01823718330._3
522+ let isValidNFT = $t01823718330._4
523+ let artId = $t01823718330._5
524+ let creatorAddr = $t01823718330._6
525+ let artSignID = $t01823718330._7
526526 if (!(isValidNFT))
527527 then throw("Not a valid nft")
528528 else {
529529 let saleOwner = getSaleOwnerAndStatus(nftId)
530530 if ((caller != saleOwner))
531531 then throw("Only sale owner can accept offer")
532532 else {
533533 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
534- let $t01855318608 = getBidData(bidKey)
535- let bidDataArr = $t01855318608._1
536- let assetId = $t01855318608._2
537- let bidData = $t01855318608._3
534+ let $t01858418639 = getBidData(bidKey)
535+ let bidDataArr = $t01858418639._1
536+ let assetId = $t01858418639._2
537+ let bidData = $t01858418639._3
538538 let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
539539 let saleInfo = getStrByK((saleKey + "_OPEN"))
540540 if ((size(saleInfo) == 0))
541541 then throw("Sale Not found!")
542542 else {
543543 let amount = value(parseInt(bidDataArr[1]))
544- let $t01884418982 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6], artId)
545- let commissions = $t01884418982._1
546- let creatorFee = $t01884418982._2
547- let ownerFee = $t01884418982._3
548- let collectorNFT = $t01884418982._4
544+ let $t01887519013 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6], artId)
545+ let commissions = $t01887519013._1
546+ let creatorFee = $t01887519013._2
547+ let ownerFee = $t01887519013._3
548+ let collectorNFT = $t01887519013._4
549549 let assetIdStr = if (isDefined(assetId))
550550 then toBase58String(value(assetId))
551551 else "WAVES"
552552 (([DeleteEntry((saleKey + "_OPEN")), DeleteEntry((bidKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + saleOwner) + "_") + nftId)), DeleteEntry(("current_owner_on_dapp_" + nftId)), StringEntry((bidKey + "_CLOSED"), ((((bidData + "_CLOSED_") + toString(date)) + "_") + id)), StringEntry((((saleKey + "_") + id) + "_CLOSED"), ((((((((((saleInfo + "_CLOSED-OFFER_") + toString(date)) + "_") + id) + "_") + offerOwner) + "_") + toString(amount)) + "_") + assetIdStr)), updateNumSales(), ownerFee, collectorNFT] ++ creatorFee) ++ commissions)
553553 }
554554 }
555555 }
556556 }
557557
558558
559559
560560 @Callable(i)
561561 func cancelOffer (nftId,offerId,offerOwner,saleOwner) = {
562- let $t01978219856 = idCallerDate(i)
563- let id = $t01978219856._1
564- let caller = $t01978219856._2
565- let date = $t01978219856._3
562+ let $t01981319887 = idCallerDate(i)
563+ let id = $t01981319887._1
564+ let caller = $t01981319887._2
565+ let date = $t01981319887._3
566566 if (if ((caller != offerOwner))
567567 then (caller != saleOwner)
568568 else false)
569569 then throw("You cannot cancel this offer.")
570570 else {
571571 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
572- let $t02002820083 = getBidData(bidKey)
573- let bidDataArr = $t02002820083._1
574- let assetId = $t02002820083._2
575- let bidData = $t02002820083._3
572+ let $t02005920114 = getBidData(bidKey)
573+ let bidDataArr = $t02005920114._1
574+ let assetId = $t02005920114._2
575+ let bidData = $t02005920114._3
576576 [DeleteEntry((bidKey + "_OPEN")), StringEntry((bidKey + "_CANCELLED"), ((((bidData + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
577577 }
578578 }
579579
580580

github/deemru/w8io/3ef1775 
112.08 ms