tx · HeYyhug9i9h58aozPHNhKq3i6iWJyNB6CGon2K2m7RjE

3PDBLdsUrcsiPxNbt8g2gQVoefKgzt3kJzV:  -0.02200000 Waves

2022.07.14 11:46 [3204735] smart account 3PDBLdsUrcsiPxNbt8g2gQVoefKgzt3kJzV > SELF 0.00000000 Waves

{ "type": 13, "id": "HeYyhug9i9h58aozPHNhKq3i6iWJyNB6CGon2K2m7RjE", "fee": 2200000, "feeAssetId": null, "timestamp": 1657788354083, "version": 2, "chainId": 87, "sender": "3PDBLdsUrcsiPxNbt8g2gQVoefKgzt3kJzV", "senderPublicKey": "FJN1qxUehh3hhFX9NAXWBFbSKT2sTzc2pjTJ1JxjQdBh", "proofs": [ "5M7z8AgbCKwPwsn6dBFmA9Ues8NhZCzyF6SvZ76nJH2czpVCugFUzarjBejFKm3XDyRYVwoBeUDUWsU5vyqP1iuY" ], "script": "base64:BgJaCAISBAoCCAgSDgoMCAgICAgICAgICAgIEg0KCwgICAgICAgICAgIEgYKBAgICAgSBAoCCAgSBwoFCAEBCAESBAoCCAgSBAoCCAgSBgoECAgICBIGCgQICAgISgAHVkVSU0lPTgB0AQ5nZXRTdHJpbmdCeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFA2tleQIAAAh1bml0VGVzdAcACW9yYWNsZUZlZQkBBXZhbHVlAQkApggBCQEOZ2V0U3RyaW5nQnlLZXkBAg9jb25mX29yYWNsZV9mZWUACHNpZ25EYXBwCQEFdmFsdWUBCQCmCAEJAQ5nZXRTdHJpbmdCeUtleQECEWNvbmZfc2lnbndlYl9kYXBwAAtmZWVSZWNlaXZlcgkBDmdldFN0cmluZ0J5S2V5AQIRY29uZl9mZWVfcmVjZWl2ZXIACHVzZXJEYXBwAwUIdW5pdFRlc3QJAQV2YWx1ZQEJAKYIAQIjM010NFJHTUV5alNXWUFvY1RQcWQ1NXdkSFFRQjNQVTJVQ20JAQV2YWx1ZQEJAKYIAQkBDmdldFN0cmluZ0J5S2V5AQIPY29uZl91c2Vyc19kYXBwAA13aGl0ZWxpc3REYXBwCQEFdmFsdWUBCQCmCAEJAQ5nZXRTdHJpbmdCeUtleQECE2NvbmZfd2hpdGVsaXN0X2RhcHAAC3NpZ25Bc3NldElkCQDZBAEJAQ5nZXRTdHJpbmdCeUtleQECGGNvbmZfYWNjZXB0ZWRfYXNzZXRfU0lHTgALdXNkbkFzc2V0SWQJANkEAQkBDmdldFN0cmluZ0J5S2V5AQIYY29uZl9hY2NlcHRlZF9hc3NldF9VU0ROAAx3YXZlc0Fzc2V0SWQBAAAFY2hyaXMJAQ5nZXRTdHJpbmdCeUtleQECDGNvbmZfYWRtaW5fMQAEam9lcAkBDmdldFN0cmluZ0J5S2V5AQIMY29uZl9hZG1pbl8yARlnZXRJbnRlZ2VyQnlLZXlGcm9tT3JhY2xlAQNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQlvcmFjbGVGZWUFA2tleQIfSW50ZWdlciB1bmRlZmluZSBvciAwIGluIG9yYWNsZQEPZ2V0SW50ZWdlckJ5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAABDmNoZWNrV2hpdGVsaXN0AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNd2hpdGVsaXN0RGFwcAUDa2V5AAABD2dldEJvb2xlYW5CeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFA2tleQcAB3NpZ25DdXQABwALdXNkbldhdmVDdXQACgAOZGVmYXVsdExpY2VuY2UJAQ5nZXRTdHJpbmdCeUtleQECFGNvbmZfZGVmYXVsdF9saWNlbmNlABJkZWZhdWx0SGFzaExpY2VuY2UJAQ5nZXRTdHJpbmdCeUtleQECGWNvbmZfZGVmYXVsdF9saWNlbmNlX2hhc2gAC2RhcHBSdW5uaW5nCQELdmFsdWVPckVsc2UCCQCbCAIFCHVzZXJEYXBwAhRjb25mX2RhcHBfaXNfcnVubmluZwYADm1haW50ZW5hbmNlTVNHCQELdmFsdWVPckVsc2UCCQCdCAIFCHVzZXJEYXBwAhRjb25mX21haW50ZW5hbmNlX21zZwIAAA11c2VyU3VzcGVuZGVkAglTVVNQRU5ERUQAC3VzZXJSZW1vdmVkAgdSRU1PVkVEABB1c2VyVW5yZWdpc3RlcmVkAgxVTlJFR0lTVEVSRUQAC3VzZXJBbGxvd2VkAgdBTExPV0VEABljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlCQEZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZQEJAKwCAgISY2VydGlmaWNhdGlvbl9mZWVfCQDYBAEFC3NpZ25Bc3NldElkARRjaGVja1NpZ25DZXJ0aWZpY2F0ZQMGc2lnbklEBU93bmVyCnNoYTI1Nkhhc2gEByRtYXRjaDAJAJ0IAgUIc2lnbkRhcHAJAKwCAgkArAICCQCsAgICCGRhdGFfZmNfBQZzaWduSUQCAV8FBU93bmVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAMJAQhjb250YWlucwIFAWEFCnNoYTI1Nkhhc2gGBwcBC3ZhbGlkYXRlQ0lEAQNjaWQDCQEIY29udGFpbnMCBQNjaWQCAS8DAwkAZgIATAkAsQIBBQNjaWQJAAACCQCxAgEJAJEDAgkAtQkCBQNjaWQCAS8AAAA7BwkAZgIAEAkAsQIBCQCRAwIJALUJAgUDY2lkAgEvAAEHBwEMdmFsaWRhdGVIYXNoAQRoYXNoCQAAAgkAsQIBBQRoYXNoAEABDWtleVVzZXJTdGF0dXMBBmNhbGxlcgkArAICAgx1c2VyX3N0YXR1c18FBmNhbGxlcgEHa2V5RGF0ZQIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfZGF0ZV8FBWFydElkAgFfBQZjYWxsZXIBB2tleU5hbWUCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIJYXJ0X25hbWVfBQVhcnRJZAIBXwUGY2FsbGVyAQdrZXlEZXNjAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCWFydF9kZXNjXwUFYXJ0SWQCAV8FBmNhbGxlcgENa2V5RGlzcGxheUNpZAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAhBhcnRfZGlzcGxheV9jaWRfBQVhcnRJZAIBXwUGY2FsbGVyAQ1rZXlFeHBvcnRIYXNoAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICEGFydF9leHBvcnRfaGFzaF8FBWFydElkAgFfBQZjYWxsZXIBDGtleUV4cG9ydENpZAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAg9hcnRfZXhwb3J0X2NpZF8FBWFydElkAgFfBQZjYWxsZXIBCmtleU1heE1pbnQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIMYXJ0X21heG1pbnRfBQVhcnRJZAIBXwUGY2FsbGVyAQlrZXlTaWduSUQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgILYXJ0X3NpZ25pZF8FBWFydElkAgFfBQZjYWxsZXIBCWtleUlzc3VlZAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAgthcnRfaXNzdWVkXwUFYXJ0SWQCAV8FBmNhbGxlcgEJa2V5T25TYWxlAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICC2FydF9vbnNhbGVfBQVhcnRJZAIBXwUGY2FsbGVyAQ5rZXlMaWNlbmNlSGFzaAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAhFhcnRfbGljZW5jZV9oYXNoXwUFYXJ0SWQCAV8FBmNhbGxlcgENa2V5TGljZW5jZUNpZAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAhBhcnRfbGljZW5jZV9jaWRfBQVhcnRJZAIBXwUGY2FsbGVyAQdrZXlUYWdzAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCWFydF90YWdzXwUFYXJ0SWQCAV8FBmNhbGxlcgEHa2V5VHlwZQIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfdHlwZV8FBWFydElkAgFfBQZjYWxsZXIBB2tleU5vdGUCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIJYXJ0X25vdGVfBQVhcnRJZAIBXwUGY2FsbGVyAQprZXlDcmF3bGVyAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICEGFydF9jcmF3bGVyX2NpZF8FBWFydElkAgFfBQZjYWxsZXIBCGtleVByaWNlAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCmFydF9wcmljZV8FBWFydElkAgFfBQZjYWxsZXIBCmtleUVuZFNhbGUCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIMYXJ0X2VuZHNhbGVfBQVhcnRJZAIBXwUGY2FsbGVyARJrZXlBc3NldElkQWNjZXB0ZWQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgISYXJ0X2Fzc2V0QWNjZXB0ZWRfBQVhcnRJZAIBXwUGY2FsbGVyAQdrZXlGbGFnAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCWFydF9mbGFnXwUFYXJ0SWQCAV8FBmNhbGxlcgESa2V5QXJ0aXN0QWdlbnRBZGRyAQphcnRpc3RBZGRyCQCsAgICDWFydGlzdF9hZ2VudF8FCmFydGlzdEFkZHIBD2tleVByaW1hcnlTaGFyZQEKYXJ0aXN0QWRkcgkArAICAhVhcnRpc3RfYWdlbnRfcHJpbWFyeV8FCmFydGlzdEFkZHIBEWtleUhhc2hCeVR4aWRBZGRyAgZjYWxsZXIEdHhpZAkArAICCQCsAgIJAKwCAgITZ2V0X2hhc2hieXR4aWRhZGRyXwUEdHhpZAIBXwUGY2FsbGVyAQ5rZXlPd25lckJ5SGFzaAEKc2hhMjU2SGFzaAkArAICAhJnZXRfb3duZXJfYnlfaGFzaF8FCnNoYTI1Nkhhc2gBDWtleWlkQnlTaWduaWQCBmNhbGxlcgZzaWduSWQJAKwCAgkArAICCQCsAgICEmdldF9hcnRpZGJ5c2lnbmlkXwUGc2lnbklkAgFfBQZjYWxsZXIBEmtleVR4aWRCeUhhc2hPd25lcgIKc2hhMjU2SGFzaAZjYWxsZXIJAKwCAgIXZ2V0X3R4aWRfYnlfaGFzaF9vd25lcl8JANgEAQkA1BYBCQCbAwEJAKwCAgUKc2hhMjU2SGFzaAUGY2FsbGVyAQ52YWxpZGF0ZUFsbENJRAMKY2lkRGlzcGxheQljaWRFeHBvcnQKY2lkTGljZW5jZQMJAQEhAQkBC3ZhbGlkYXRlQ0lEAQUKY2lkRGlzcGxheQkAAgECEVdyb25nIERpc3BsYXkgQ0lEAwkBASEBCQELdmFsaWRhdGVDSUQBBQljaWRFeHBvcnQJAAIBAhBXcm9uZyBFeHBvcnQgQ0lEAwMJAQIhPQIFCmNpZExpY2VuY2UCAAkBASEBCQELdmFsaWRhdGVDSUQBBQpjaWRMaWNlbmNlBwkAAgECEVdyb25nIExpY2VuY2UgQ0lEBgEPdmFsaWRhdGVBbGxIYXNoAgxzaGEyNTZFeHBvcnQNc2hhMjU2TGljZW5jZQMJAQEhAQkBDHZhbGlkYXRlSGFzaAEFDHNoYTI1NkV4cG9ydAkAAgECGEV4cG9ydCBIYXNoIDY0IGNoYXIuIG1heAMJAQEhAQkBDHZhbGlkYXRlSGFzaAEFDXNoYTI1NkxpY2VuY2UJAAIBAhlMaWNlbmNlIEhhc2ggNjQgY2hhci4gbWF4BgEOdmFsaWRhdGVTdHJpbmcCA3N0cgNtYXgDCQAAAgkAsQIBBQNzdHIAAAkAAgECGEZpZWxkIGNhbm5vdCBiZSBpcyBlbXB0eQMJAGYCCQCxAgEFA3N0cgUDbWF4CQACAQkArAICBQNzdHICDCBpcyB0b28gbG9uZwYBDHZhbGlkYXRlVXNlcgEGY2FsbGVyBAp1c2VyU3RhdHVzCQELdmFsdWVPckVsc2UCCQCdCAIFCHVzZXJEYXBwCQENa2V5VXNlclN0YXR1cwEFBmNhbGxlcgUQdXNlclVucmVnaXN0ZXJlZAMDCQAAAgUKdXNlclN0YXR1cwUQdXNlclVucmVnaXN0ZXJlZAYJAAACBQp1c2VyU3RhdHVzBQt1c2VyQWxsb3dlZAIuUmVnaXN0ZXIgdGhpcyBhY2NvdW50IGZpcnN0IHdpdGggIkFjY291bnQiIHRhYgMJAAACBQp1c2VyU3RhdHVzBQ11c2VyU3VzcGVuZGVkAhFBY2NvdW50IHN1c3BlbmRlZAMJAAACBQp1c2VyU3RhdHVzBQt1c2VyUmVtb3ZlZAIPQWNjb3VudCByZW1vdmVkAgABCnNldExJY2VuY2UCCmNpZExpY2VuY2UNc2hhMjU2TGljZW5jZQQDY2lkAwkAAAIJALECAQUKY2lkTGljZW5jZQAABQ5kZWZhdWx0TGljZW5jZQUKY2lkTGljZW5jZQQEaGFzaAMJAAACCQCxAgEFDXNoYTI1NkxpY2VuY2UAAAUSZGVmYXVsdEhhc2hMaWNlbmNlBQ1zaGEyNTZMaWNlbmNlCQCUCgIFA2NpZAUEaGFzaAETdmFsaWRhdGVBcnR3b3JrRGF0YQkGY2FsbGVyCmNpZERpc3BsYXkJY2lkRXhwb3J0CmxpY2VuY2VDSUQMc2hhMjU2RXhwb3J0C2xpY2VuY2VIYXNoBG5hbWULZGVzY3JpcHRpb24EdGFncwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQAAAgkAsQIBBQpjaWREaXNwbGF5AAAJAAIBAhtEaXNwbGF5IENJRCBjYW5ub3QgYmUgZW1wdHkDCQEBIQEJAQ52YWxpZGF0ZUFsbENJRAMFCmNpZERpc3BsYXkFCWNpZEV4cG9ydAUKbGljZW5jZUNJRAkAAgECEFByb2JsZW0gd2l0aCBDSUQDCQEBIQEJAQ92YWxpZGF0ZUFsbEhhc2gCBQxzaGEyNTZFeHBvcnQFC2xpY2VuY2VIYXNoCQACAQITUHJvYmxlbSB3aXRoIEhhc2hlcwMJAQEhAQkBDnZhbGlkYXRlU3RyaW5nAgUEbmFtZQBkCQACAQISMTAwIENoYXIuIG1heCBuYW1lAwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQtkZXNjcmlwdGlvbgDoBwkAAgECGjEwMDAgQ2hhci4gbWF4IGRlc2NyaXB0aW9uAwkAZgIJAJADAQkAtQkCBQR0YWdzAgEsAAUJAAIBAgs1IHRhZ3MgbWF4LgIAAQlpc1BheW1lbnQBAWkDCQAAAgkAkAMBCAUBaQhwYXltZW50cwAACQACAQITTm8gcGF5bWVudCBhdHRhY2hlZAQHcGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAZhbW91bnQJAQV2YWx1ZQEIBQdwYXltZW50BmFtb3VudAkAlAoCBQdwYXltZW50BQZhbW91bnQBD3ZhbGlkYXRlUGF5bWVudAEBaQQLJHQwODQzMzg0NjkJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAULJHQwODQzMzg0NjkCXzEEBmFtb3VudAgFCyR0MDg0MzM4NDY5Al8yBAdhc3NldElkAwMJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkCQAAAggFB3BheW1lbnQHYXNzZXRJZAULc2lnbkFzc2V0SWQHCAUHcGF5bWVudAdhc3NldElkCQACAQIrT25seSBTSUdOIHRva2VuIGFjY2VwdGVkIGFzIHRyYW5zYWN0aW9uIGZlZQMJAQIhPQIFBmFtb3VudAUZY3VycmVudENlcnRpZmljYXRpb25QcmljZQkAAgEJAKwCAgIZUGF5bWVudCBhbW91bnQgc2hvdWxkIGJlIAkApAMBBRljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlCQCUCgIFBmFtb3VudAUHYXNzZXRJZAELaXNBcnRNaW50ZWQCCWFkZHJUb1VzZQVhcnRJZAQHJG1hdGNoMAkAmggCBQR0aGlzCQEJa2V5SXNzdWVkAgUJYWRkclRvVXNlBQVhcnRJZAMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDADCQECIT0CBQFiAAAGBwcBFHZhbGlkYXRlUHJpY2VBc3NldElkAwFpDHByaWNlQXNzZXRJZAxhcnR3b3JrUHJpY2UECyR0MDkwNjI5MDk4CQEJaXNQYXltZW50AQUBaQQHcGF5bWVudAgFCyR0MDkwNjI5MDk4Al8xBAZhbW91bnQIBQskdDA5MDYyOTA5OAJfMgQHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQFBHVuaXQDAwkAZgIJALECAQUMcHJpY2VBc3NldElkAAAJAAACCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQFDHByaWNlQXNzZXRJZAcIBQdwYXltZW50B2Fzc2V0SWQJAAIBAg5Xcm9uZyBhc3NldCBpZAMDCQAAAgUHYXNzZXRJZAUEdW5pdAkBAiE9AgUMcHJpY2VBc3NldElkAgAHCQACAQIOV3JvbmcgYXNzZXQgaWQDCQECIT0CBQxhcnR3b3JrUHJpY2UFBmFtb3VudAkAAgECE1BheW1lbnQgZG9uJ3QgbWF0Y2gJAJQKAgUGYW1vdW50BQdhc3NldElkARBhY2NlcHRlZEFzc2V0SWRzAQdhc3NldElkAwMDAwkBAiE9AgUHYXNzZXRJZAkA2AQBBQtzaWduQXNzZXRJZAkBAiE9AgUHYXNzZXRJZAkA2AQBBQx3YXZlc0Fzc2V0SWQHCQECIT0CBQdhc3NldElkAgVXQVZFUwcJAQIhPQIFB2Fzc2V0SWQJANgEAQULdXNkbkFzc2V0SWQHCQACAQIhT25seSBTSUdOLCBVU0ROIG9yIFdBVkVTIGFjY2VwdGVkBgEPdmFsaWRhdGVNaW5TZWxsAgdhc3NldElkBXByaWNlBAxtaW5TZWxsV2F2ZXMDBQh1bml0VGVzdAAKCQEZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZQECDndhdmVzX21pbl9zZWxsBAttaW5TZWxsVXNkbgDAhD0EC21pblNlbGxTaWduAwUIdW5pdFRlc3QAAQkAaAIFGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UAAgMDAwMDCQAAAgUHYXNzZXRJZAkA2AQBBQt1c2RuQXNzZXRJZAkAZgIFC21pblNlbGxVc2RuBQVwcmljZQcJAQIhPQIFBXByaWNlAAAHBgMDCQAAAgUHYXNzZXRJZAkA2AQBBQtzaWduQXNzZXRJZAkAZgIFC21pblNlbGxTaWduBQVwcmljZQcJAQIhPQIFBXByaWNlAAAHBgMDAwkAAAIFB2Fzc2V0SWQJANgEAQUMd2F2ZXNBc3NldElkBgkAAAIFB2Fzc2V0SWQCBVdBVkVTCQBmAgUMbWluU2VsbFdhdmVzBQVwcmljZQcJAQIhPQIFBXByaWNlAAAHCQACAQIYV3JvbmcgbWluaW11bSBzZWxsIHByaWNlBgENZ2V0QmlkQXNzZXRJZAEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwUEdW5pdAkA2QQBBQdhc3NldElkARZnZXRQcmljZUFzc2V0SWRGcm9tQmlkAQpiaWREYXRhS2V5BAdiaWREYXRhCQEOZ2V0U3RyaW5nQnlLZXkBCQCsAgIFCmJpZERhdGFLZXkCBV9PUEVOAwkAAAIFB2JpZERhdGECAAkAAgECDUJpZCBub3QgZm91bmQECmJpZERhdGFBcnIJALUJAgUHYmlkRGF0YQIBXwQJYmlkQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKYmlkRGF0YUFycgABBApiaWRBc3NldElkCQENZ2V0QmlkQXNzZXRJZAEJAJEDAgUKYmlkRGF0YUFycgAAAwkAZwIAAAUJYmlkQW1vdW50CQACAQIMV3JvbmcgYW1vdW50CQCUCgIFCWJpZEFtb3VudAUKYmlkQXNzZXRJZAEMaWRDYWxsZXJEYXRlAQFpAwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHCQCVCgMJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAEHYnV5TWludAUBaQVhcnRJZAZpc3N1ZXIFYmlkSWQIYmlkT3duZXIEDSR0MDExMzIzMTEzODAJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDExMzIzMTEzODACXzEEBmNhbGxlcggFDSR0MDExMzIzMTEzODACXzIEBGRhdGUIBQ0kdDAxMTMyMzExMzgwAl8zBAVpc0JpZAMDAwkAAAIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwUGaXNzdWVyCQECIT0CBQhiaWRPd25lcgIABwkBAiE9AgUFYmlkSWQCAAcGBwQIYmxvY2tFbmQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEKa2V5RW5kU2FsZQIFBmNhbGxlcgUFYXJ0SWQDAwMJAQIhPQIFCGJsb2NrRW5kAAAJAGcCBQZoZWlnaHQFCGJsb2NrRW5kBwkBASEBBQVpc0JpZAcJAAIBAgtTYWxlIGVuZGVkLgQOY2FsbGVySXNJc3N1ZXIJAAACCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMFBmlzc3VlcgQIdG90YWxORlQJAQ9nZXRJbnRlZ2VyQnlLZXkBAhB0b3RhbF9uZnRfaXNzdWVkBAZzaWduSUQJAQ5nZXRTdHJpbmdCeUtleQEJAQlrZXlTaWduSUQCBQZpc3N1ZXIFBWFydElkBAthcnR3b3JrTmFtZQkBDmdldFN0cmluZ0J5S2V5AQkBB2tleU5hbWUCBQZpc3N1ZXIFBWFydElkAwkAAAIFC2FydHdvcmtOYW1lAgAJAAIBAhFBcnQgZG9lc24ndCBleGlzdAQIaXNPblNhbGUJAQ9nZXRCb29sZWFuQnlLZXkBCQEJa2V5T25TYWxlAgUGaXNzdWVyBQVhcnRJZAQKYW1vdW50U29sZAkBD2dldEludGVnZXJCeUtleQEJAQlrZXlJc3N1ZWQCBQZpc3N1ZXIFBWFydElkBAxhcnR3b3JrUHJpY2UDBQ5jYWxsZXJJc0lzc3VlcgkAaAIFGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UAAgkBD2dldEludGVnZXJCeUtleQEJAQhrZXlQcmljZQIFBmlzc3VlcgUFYXJ0SWQEDHByaWNlQXNzZXRJZAMFDmNhbGxlcklzSXNzdWVyCQDYBAEFC3NpZ25Bc3NldElkCQEOZ2V0U3RyaW5nQnlLZXkBCQESa2V5QXNzZXRJZEFjY2VwdGVkAgUGaXNzdWVyBQVhcnRJZAQKbWF4Q2FuU2VsbAkBD2dldEludGVnZXJCeUtleQEJAQprZXlNYXhNaW50AgUGaXNzdWVyBQVhcnRJZAMDAwkBASEBBQVpc0JpZAkBASEBBQ5jYWxsZXJJc0lzc3VlcgcDAwkAZwIAAAUMYXJ0d29ya1ByaWNlBgkBASEBBQhpc09uU2FsZQYJAGcCAAAFCm1heENhblNlbGwHCQACAQIQQXJ0IG5vdCBmb3Igc2FsZQMDAwkBASEBBQVpc0JpZAUOY2FsbGVySXNJc3N1ZXIHCQBnAgAABQptYXhDYW5TZWxsBwkAAgECFE1heCBpc3N1YWJsZSBub3Qgc2V0BAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZpc3N1ZXIDAwUFaXNCaWQJAQIhPQIFCWNoZWNrVXNlcgIABwkAAgEFCWNoZWNrVXNlcgQKYmlkRGF0YUtleQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgRiaWRfBQVhcnRJZAIBXwUGaXNzdWVyAgFfBQhiaWRPd25lcgIBXwUFYmlkSWQEDSR0MDEzMTMxMTMyOTgDBQVpc0JpZAkBFmdldFByaWNlQXNzZXRJZEZyb21CaWQBBQpiaWREYXRhS2V5CQEUdmFsaWRhdGVQcmljZUFzc2V0SWQDBQFpBQxwcmljZUFzc2V0SWQFDGFydHdvcmtQcmljZQQGYW1vdW50CAUNJHQwMTMxMzExMzI5OAJfMQQHYXNzZXRJZAgFDSR0MDEzMTMxMTMyOTgCXzIEBWFnZW50CQELdmFsdWVPckVsc2UCCQCdCAIFCHVzZXJEYXBwCQESa2V5QXJ0aXN0QWdlbnRBZGRyAQUGaXNzdWVyBQtmZWVSZWNlaXZlcgQKYWdlbnRTaGFyZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQh1c2VyRGFwcAkBD2tleVByaW1hcnlTaGFyZQEFBmlzc3VlcgAABA1pc1doaXRlbGlzdGVkCQEOY2hlY2tXaGl0ZWxpc3QBBQZpc3N1ZXIEA2N1dAMJAGYCBQ1pc1doaXRlbGlzdGVkBQZoZWlnaHQAAAMJAAACBQdhc3NldElkBQtzaWduQXNzZXRJZAUHc2lnbkN1dAULdXNkbldhdmVDdXQEDWFtb3VudEZvclNpZ24JAGsDBQZhbW91bnQFA2N1dABkBA5hbW91bnRGb3JBZ2VudAMDAwkBAiE9AgUFYWdlbnQFC2ZlZVJlY2VpdmVyCQBmAgUKYWdlbnRTaGFyZQAABwkAZgIFBmhlaWdodAUNaXNXaGl0ZWxpc3RlZAcJAGsDBQZhbW91bnQFCmFnZW50U2hhcmUAZAAABBBhbW91bnRGb3JDcmVhdG9yCQBlAgUGYW1vdW50BQ1hbW91bnRGb3JTaWduAwkAAAIFCmFtb3VudFNvbGQFCm1heENhblNlbGwJAAIBAgxBcnQgc29sZCBvdXQEDW5ld0Ftb3VudFNvbGQJAGQCBQphbW91bnRTb2xkAAEECWlzc3VlTWV0YQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCUNyZWF0b3I6IAUGaXNzdWVyAgosCiBBcnRJRDogBQVhcnRJZAILLAogU2lnbklEOiAFBnNpZ25JRAIRLAogQXJ0d29yayBuYW1lOiAFC2FydHdvcmtOYW1lAgosCiBJc3N1ZTogCQCkAwEFDW5ld0Ftb3VudFNvbGQCAS8JAKQDAQUKbWF4Q2FuU2VsbAQIaXNzdWVORlQJAMIIBQkArAICAgNTQV8JAKQDAQkAZAIFCHRvdGFsTkZUAAEFCWlzc3VlTWV0YQABAAAHBAVpZE5GVAkAuAgBBQhpc3N1ZU5GVAQKc2VsbFN0YXR1cwMDCQAAAgUNbmV3QW1vdW50U29sZAUKbWF4Q2FuU2VsbAYJAQEhAQUIaXNPblNhbGUHBgQKcmVjZWl2ZU5GVAMDAwkAAAIFBmNhbGxlcgUGaXNzdWVyCQECIT0CBQhiaWRPd25lcgIABwkBAiE9AgUFYmlkSWQCAAcJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCGJpZE93bmVyCAUBaQZjYWxsZXIECmFzc2V0SWRCaWQDCQEBIQEJAQlpc0RlZmluZWQBBQdhc3NldElkAgVXQVZFUwkA2AQBCQEFdmFsdWUBBQdhc3NldElkBAdiaWREYXRhCQEOZ2V0U3RyaW5nQnlLZXkBCQCsAgIFCmJpZERhdGFLZXkCBV9PUEVOBAliaWREZWxPbGQJAQtEZWxldGVFbnRyeQEJAKwCAgUKYmlkRGF0YUtleQIFX09QRU4ECWJpZFVwZGF0ZQkBC1N0cmluZ0VudHJ5AgkArAICBQpiaWREYXRhS2V5AgdfQ0xPU0VECQCsAgIJAKwCAgUHYmlkRGF0YQIBXwkApAMBBQRkYXRlBAdzb2xkS2V5CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCWFydF9zb2xkXwkApAMBBQ1uZXdBbW91bnRTb2xkAgRfb2ZfCQCkAwEFCm1heENhblNlbGwCAV8FBWFydElkAgFfBQZpc3N1ZXIECXNvbGRWYWx1ZQMJAQEhAQUFaXNCaWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUGY2FsbGVyAgFfCQCkAwEFBGRhdGUCAV8FAmlkAgFfCQCkAwEFDGFydHdvcmtQcmljZQIBXwUMcHJpY2VBc3NldElkAgFfCQDYBAEFBWlkTkZUCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQUKcmVjZWl2ZU5GVAIBXwkApAMBBQRkYXRlAgFfBQJpZAIBXwkApAMBBQZhbW91bnQCAV8FCmFzc2V0SWRCaWQCAV8JANgEAQUFaWRORlQECHNvbGREYXRhCQELU3RyaW5nRW50cnkCBQdzb2xkS2V5BQlzb2xkVmFsdWUEC2NvbW1pc3Npb25zAwkBAiE9AgUOYW1vdW50Rm9yQWdlbnQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQULZmVlUmVjZWl2ZXIJAGUCBQ1hbW91bnRGb3JTaWduBQ5hbW91bnRGb3JBZ2VudAUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUFYWdlbnQFDmFtb3VudEZvckFnZW50BQdhc3NldElkBQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyBQ1hbW91bnRGb3JTaWduBQdhc3NldElkBQNuaWwEBmJ1eVJlcwkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5SXNzdWVkAgUGaXNzdWVyBQVhcnRJZAUNbmV3QW1vdW50U29sZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgICBG5mdF8JANgEAQUFaWRORlQFB3NvbGRLZXkJAMwIAgkBDEludGVnZXJFbnRyeQICEHRvdGFsX25mdF9pc3N1ZWQJAGQCBQh0b3RhbE5GVAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEKa2V5RW5kU2FsZQIFBmlzc3VlcgUFYXJ0SWQAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBCWtleU9uU2FsZQIFBmlzc3VlcgUFYXJ0SWQFCnNlbGxTdGF0dXMJAMwIAgUIaXNzdWVORlQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmlzc3VlcgUQYW1vdW50Rm9yQ3JlYXRvcgUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQpyZWNlaXZlTkZUAAEFBWlkTkZUBQNuaWwFC2NvbW1pc3Npb25zAwUFaXNCaWQJAMwIAgUIc29sZERhdGEJAMwIAgUJYmlkVXBkYXRlCQDMCAIFCWJpZERlbE9sZAUGYnV5UmVzCQDMCAIFCHNvbGREYXRhBQZidXlSZXMKBmludm9rZQEHc2V0Q29uZgIDa2V5A3ZhbAQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgMJAQhjb250YWlucwIFA2tleQIFY29uZl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUDa2V5BQN2YWwFA25pbAkAAgECIEVudHJpZXMgc3RhcnRpbmcgd2l0aCBjb25mXyBvbmx5CQACAQIiWW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhpcwFpAQphZGRBcnR3b3JrDApzaGEyNTZIYXNoBnNpZ25JRARuYW1lC2Rlc2NyaXB0aW9uBHRhZ3MEdHlwZQpjaWREaXNwbGF5DHNoYTI1NkV4cG9ydAljaWRFeHBvcnQNc2hhMjU2TGljZW5jZQpjaWRMaWNlbmNlB2NyYXdsZXIEDSR0MDE3MDgzMTcxMjQJAQxpZENhbGxlckRhdGUBBQFpBAVhcnRJZAgFDSR0MDE3MDgzMTcxMjQCXzEEBmNhbGxlcggFDSR0MDE3MDgzMTcxMjQCXzIEBGRhdGUIBQ0kdDAxNzA4MzE3MTI0Al8zAwkBASEBCQEMdmFsaWRhdGVIYXNoAQUKc2hhMjU2SGFzaAkAAgECJEhhc2ggc2hvdWxkIGJlIDY0IGNoYXJhY3RlcnMgbWF4aW11bQQNJHQwMTcyMjUxNzI5NAkBCnNldExJY2VuY2UCBQpjaWRMaWNlbmNlBQ1zaGEyNTZMaWNlbmNlBApsaWNlbmNlQ0lECAUNJHQwMTcyMjUxNzI5NAJfMQQLbGljZW5jZUhhc2gIBQ0kdDAxNzIyNTE3Mjk0Al8yBA92YWxpZGF0ZUFydHdvcmsJARN2YWxpZGF0ZUFydHdvcmtEYXRhCQUGY2FsbGVyBQpjaWREaXNwbGF5BQljaWRFeHBvcnQFCmxpY2VuY2VDSUQFDHNoYTI1NkV4cG9ydAULbGljZW5jZUhhc2gFBG5hbWUFC2Rlc2NyaXB0aW9uBQR0YWdzAwkBAiE9AgUPdmFsaWRhdGVBcnR3b3JrAgAJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEEDSR0MDE3NTEzMTc1NTUJAQ92YWxpZGF0ZVBheW1lbnQBBQFpBAZhbW91bnQIBQ0kdDAxNzUxMzE3NTU1Al8xBAdhc3NldElkCAUNJHQwMTc1MTMxNzU1NQJfMgMJAQEhAQkBCWlzRGVmaW5lZAEFBmFtb3VudAkAAgECFFNvbWV0aGluZyB3ZW50IHdyb25nBAplbnRyeUV4aXN0CQEOZ2V0U3RyaW5nQnlLZXkBCQESa2V5VHhpZEJ5SGFzaE93bmVyAgUKc2hhMjU2SGFzaAUGY2FsbGVyAwkBAiE9AgUKZW50cnlFeGlzdAIACQACAQIUWW91IGFscmVhZHkgYWRkZWQgaXQECWhhc2hFeGlzdAkBDmdldFN0cmluZ0J5S2V5AQkBDmtleU93bmVyQnlIYXNoAQUKc2hhMjU2SGFzaAMJAQIhPQIFCWhhc2hFeGlzdAIACQACAQIXSGFzaCBhbHJlYWR5IHJlZ2lzdGVyZWQED2lzU2lnbkNlcnRpZmllZAkBFGNoZWNrU2lnbkNlcnRpZmljYXRlAwUGc2lnbklEBQZjYWxsZXIFCnNoYTI1Nkhhc2gDCQEBIQEFD2lzU2lnbkNlcnRpZmllZAkAAgECLFNpZ24gQ2VydGlmaWNhdGUgbm90IGZvdW5kIGZvciB0aGlzIGFkZHJlc3MuCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlPd25lckJ5SGFzaAEFCnNoYTI1Nkhhc2gFBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5VHhpZEJ5SGFzaE93bmVyAgUKc2hhMjU2SGFzaAUGY2FsbGVyBQVhcnRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBB2tleURhdGUCBQZjYWxsZXIFBWFydElkBQRkYXRlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlOYW1lAgUGY2FsbGVyBQVhcnRJZAUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5RGVzYwIFBmNhbGxlcgUFYXJ0SWQFC2Rlc2NyaXB0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlEaXNwbGF5Q2lkAgUGY2FsbGVyBQVhcnRJZAUKY2lkRGlzcGxheQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXhwb3J0Q2lkAgUGY2FsbGVyBQVhcnRJZAUJY2lkRXhwb3J0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlFeHBvcnRIYXNoAgUGY2FsbGVyBQVhcnRJZAUMc2hhMjU2RXhwb3J0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlMaWNlbmNlSGFzaAIFBmNhbGxlcgUFYXJ0SWQFC2xpY2VuY2VIYXNoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlMaWNlbmNlQ2lkAgUGY2FsbGVyBQVhcnRJZAUKbGljZW5jZUNJRAkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5VHlwZQIFBmNhbGxlcgUFYXJ0SWQFBHR5cGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleVRhZ3MCBQZjYWxsZXIFBWFydElkBQR0YWdzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEKa2V5TWF4TWludAIFBmNhbGxlcgUFYXJ0SWQAAAkAzAgCCQELU3RyaW5nRW50cnkCCQEJa2V5U2lnbklEAgUGY2FsbGVyBQVhcnRJZAUGc2lnbklECQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5SXNzdWVkAgUGY2FsbGVyBQVhcnRJZAAACQDMCAIJAQxCb29sZWFuRW50cnkCCQEJa2V5T25TYWxlAgUGY2FsbGVyBQVhcnRJZAcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleWlkQnlTaWduaWQCBQZjYWxsZXIFBnNpZ25JRAUFYXJ0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUhhc2hCeVR4aWRBZGRyAgUGY2FsbGVyBQVhcnRJZAUKc2hhMjU2SGFzaAkAzAgCCQELU3RyaW5nRW50cnkCCQEKa2V5Q3Jhd2xlcgIFBmNhbGxlcgUFYXJ0SWQFB2NyYXdsZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyBQZhbW91bnQFB2Fzc2V0SWQFA25pbAFpAQ11cGRhdGVBcnR3b3JrCwR0eGlkBG5hbWULZGVzY3JpcHRpb24EdGFncwR0eXBlCmNpZERpc3BsYXkMc2hhMjU2RXhwb3J0CWNpZEV4cG9ydA1zaGEyNTZMaWNlbmNlCmNpZExpY2VuY2UHY3Jhd2xlcgMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwQGY2FsbGVyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEDSR0MDIwMjg3MjAzNTYJAQpzZXRMSWNlbmNlAgUKY2lkTGljZW5jZQUNc2hhMjU2TGljZW5jZQQKbGljZW5jZUNJRAgFDSR0MDIwMjg3MjAzNTYCXzEEC2xpY2VuY2VIYXNoCAUNJHQwMjAyODcyMDM1NgJfMgQPdmFsaWRhdGVBcnR3b3JrCQETdmFsaWRhdGVBcnR3b3JrRGF0YQkFBmNhbGxlcgUKY2lkRGlzcGxheQUJY2lkRXhwb3J0BQpsaWNlbmNlQ0lEBQxzaGEyNTZFeHBvcnQFC2xpY2VuY2VIYXNoBQRuYW1lBQtkZXNjcmlwdGlvbgUEdGFncwMJAQIhPQIFD3ZhbGlkYXRlQXJ0d29yawIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAplbnRyeUV4aXN0CQEOZ2V0U3RyaW5nQnlLZXkBCQEHa2V5TmFtZQIFBmNhbGxlcgUEdHhpZAMJAAACBQplbnRyeUV4aXN0AgAJAAIBAg9FbnRyeSBub3QgZm91bmQEBGZsYWcJAQ5nZXRTdHJpbmdCeUtleQEJAQdrZXlGbGFnAgUGY2FsbGVyBQR0eGlkAwkAAAIFBGZsYWcCB0lMTEVHQUwJAAIBAh1DYW5ub3QgdXBkYXRlIElMTEVHQUwgYXJ0d29yawMJAQEhAQkBC2lzQXJ0TWludGVkAgUGY2FsbGVyBQR0eGlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlOYW1lAgUGY2FsbGVyBQR0eGlkBQRuYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlEZXNjAgUGY2FsbGVyBQR0eGlkBQtkZXNjcmlwdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5RGlzcGxheUNpZAIFBmNhbGxlcgUEdHhpZAUKY2lkRGlzcGxheQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXhwb3J0Q2lkAgUGY2FsbGVyBQR0eGlkBQljaWRFeHBvcnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleUV4cG9ydEhhc2gCBQZjYWxsZXIFBHR4aWQFDHNoYTI1NkV4cG9ydAkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5TGljZW5jZUNpZAIFBmNhbGxlcgUEdHhpZAUKbGljZW5jZUNJRAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5TGljZW5jZUhhc2gCBQZjYWxsZXIFBHR4aWQFC2xpY2VuY2VIYXNoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlUYWdzAgUGY2FsbGVyBQR0eGlkBQR0YWdzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlUeXBlAgUGY2FsbGVyBQR0eGlkBQR0eXBlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQprZXlDcmF3bGVyAgUGY2FsbGVyBQR0eGlkBQdjcmF3bGVyBQNuaWwJAAIBAg5BbHJlYWR5IG1pbnRlZAFpAQtmbGFnQXJ0d29yawQFYXJ0SWQEYWRkcgRmbGFnBG5vdGUEDSR0MDIxNzgxMjE4MTQJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDIxNzgxMjE4MTQCXzEEBmNhbGxlcggFDSR0MDIxNzgxMjE4MTQCXzIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIHQ09OU0VOVAkAzAgCAgAJAMwIAgIPQ0hBTkdFX1JFUVVJUkVECQDMCAICB0ZMQUdHRUQJAMwIAgIHSUxMRUdBTAUDbmlsBQRmbGFnCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlGbGFnAgUEYWRkcgUFYXJ0SWQFBGZsYWcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleU5vdGUCBQRhZGRyBQVhcnRJZAUEbm90ZQUDbmlsCQACAQkArAICAg5Vbmtub3cgc3RhdHVzIAUEZmxhZwkAAgECE1lvdSBhcmUgbm90IGFsbG93ZWQBaQENZGVsZXRlQXJ0d29yawIFYXJ0SWQEYWRkcgQNJHQwMjIyNTAyMjI4MwkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMjIyNTAyMjI4MwJfMQQGY2FsbGVyCAUNJHQwMjIyNTAyMjI4MwJfMgQJYWRkclRvVXNlAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgUEam9lcAkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyBQRhZGRyBQZjYWxsZXIECmVudHJ5RXhpc3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBDmdldFN0cmluZ0J5S2V5AQkBB2tleU5hbWUCBQlhZGRyVG9Vc2UFBWFydElkAiBObyBhcnQgbWF0Y2hpbmcgZm9yIHRoaXMgYWRkcmVzcwMJAAACBQplbnRyeUV4aXN0AgAJAAIBAiBObyBhcnQgbWF0Y2hpbmcgZm9yIHRoaXMgYWRkcmVzcwQKc2hhMjU2SGFzaAkBDmdldFN0cmluZ0J5S2V5AQkBEWtleUhhc2hCeVR4aWRBZGRyAgUJYWRkclRvVXNlBQVhcnRJZAMJAAACBQpzaGEyNTZIYXNoAgAJAAIBAiVObyBhcnQgaGFzaCBtYXRjaGluZyBmb3IgdGhpcyBhZGRyZXNzBAZzaWduSUQJAQ5nZXRTdHJpbmdCeUtleQEJAQlrZXlTaWduSUQCBQlhZGRyVG9Vc2UFBWFydElkAwkAAAIFBnNpZ25JRAIACQACAQITTm8gU0lHTiBJRCBtYXRjaGluZwQMZGF0YVRvRGVsZXRlCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlEYXRlAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5TmFtZQIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleURlc2MCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ1rZXlEaXNwbGF5Q2lkAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEMa2V5RXhwb3J0Q2lkAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5RXhwb3J0SGFzaAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDmtleUxpY2VuY2VIYXNoAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5TGljZW5jZUNpZAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleVR5cGUCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlUYWdzAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEKa2V5TWF4TWludAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCWtleVNpZ25JRAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCWtleUlzc3VlZAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCWtleU9uU2FsZQIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleUZsYWcCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQhrZXlQcmljZQIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEmtleUFzc2V0SWRBY2NlcHRlZAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDmtleU93bmVyQnlIYXNoAQUKc2hhMjU2SGFzaAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5aWRCeVNpZ25pZAIFCWFkZHJUb1VzZQUGc2lnbklECQDMCAIJAQtEZWxldGVFbnRyeQEJARJrZXlUeGlkQnlIYXNoT3duZXICBQpzaGEyNTZIYXNoBQlhZGRyVG9Vc2UJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCmtleUVuZFNhbGUCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlOb3RlAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEKa2V5Q3Jhd2xlcgIFCWFkZHJUb1VzZQUFYXJ0SWQFA25pbAMJAQEhAQkBC2lzQXJ0TWludGVkAgUJYWRkclRvVXNlBQVhcnRJZAMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwUMZGF0YVRvRGVsZXRlAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgUMZGF0YVRvRGVsZXRlCQACAQIoQXJ0IGFscmVhZHkgbWludGVkLCB5b3UgY2Fubm90IGRlbGV0ZSBpdAFpAQtzZWxsQXJ0d29yawUFYXJ0SWQFcHJpY2UHbWF4TWludAdhc3NldElkCGJsb2NrRW5kBA0kdDAyNTA1NjI1MDg5CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAyNTA1NjI1MDg5Al8xBAZjYWxsZXIIBQ0kdDAyNTA1NjI1MDg5Al8yBAthcnR3b3JrTmFtZQkBDmdldFN0cmluZ0J5S2V5AQkBB2tleU5hbWUCBQZjYWxsZXIFBWFydElkAwkAAAIFC2FydHdvcmtOYW1lAgAJAAIBAiNUaGlzIGFydCBkb2Vzbid0IG1hdGNoIHlvdXIgYWNjb3VudAQEZmxhZwkBDmdldFN0cmluZ0J5S2V5AQkBB2tleUZsYWcCBQZjYWxsZXIFBWFydElkAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIPQ0hBTkdFX1JFUVVJUkVECQDMCAICB0ZMQUdHRUQJAMwIAgIHSUxMRUdBTAUDbmlsBQRmbGFnCQACAQIPRmxhZ2dlZCBhcnR3b3JrBAZiaWROYnIJAQ9nZXRJbnRlZ2VyQnlLZXkBCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUFYXJ0SWQDCQBmAgAABQhibG9ja0VuZAkAAgECDE5lZ2F0aXZlIGVuZAMDCQBmAgUIYmxvY2tFbmQAAAMJAQIhPQIFB21heE1pbnQAAQYJAQIhPQIFBXByaWNlAAAHCQACAQI6VGltZWQgb2ZmZXIgb25seSBhbGxvd2VkIGZvciB1bmlxdWUgZWRpdGlvbiBhbmQgb2ZmZXIgb25seQQKYmFzZUhlaWdodAMJAAACBQhibG9ja0VuZAAAAAAFBmhlaWdodAMJAQEhAQkBEGFjY2VwdGVkQXNzZXRJZHMBBQdhc3NldElkCQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchAwkBASEBCQEPdmFsaWRhdGVNaW5TZWxsAgUHYXNzZXRJZAUFcHJpY2UJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyBAphbW91bnRTb2xkCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCWtleUlzc3VlZAIFBmNhbGxlcgUFYXJ0SWQECm1heENhblNlbGwJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEKa2V5TWF4TWludAIFBmNhbGxlcgUFYXJ0SWQDCQBmAgUHbWF4TWludABkCQACAQIcMTAwIGVkaXRpb25zIG1heCBwZXIgYXJ0d29yawMDCQECIT0CBQphbW91bnRTb2xkAAAJAAACBQphbW91bnRTb2xkBQptYXhDYW5TZWxsBwkAAgECFE1heCBlZGl0aW9uIHJlYWNoZWQuAwMJAGYCBQphbW91bnRTb2xkAAAJAQIhPQIFCm1heENhblNlbGwFB21heE1pbnQHCQACAQImQ2Fubm90IGNoYW5nZSBtYXhpbXVtIGlzc3VhYmxlIGFueW1vcmUDAwkAZgIFBmJpZE5icgAACQECIT0CBQptYXhDYW5TZWxsBQdtYXhNaW50BwkAAgECMUNhbm5vdCBjaGFuZ2UgbWF4aW11bSBpc3N1YWJsZSB3aXRoIGFjdGl2ZSBvcmRlcnMECnNlbGxTdGF0dXMDAwkAZgIFBXByaWNlAAAJAGYCBQdtYXhNaW50AAAHBgcJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQlrZXlPblNhbGUCBQZjYWxsZXIFBWFydElkBQpzZWxsU3RhdHVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEIa2V5UHJpY2UCBQZjYWxsZXIFBWFydElkBQVwcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCmtleU1heE1pbnQCBQZjYWxsZXIFBWFydElkBQdtYXhNaW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJARJrZXlBc3NldElkQWNjZXB0ZWQCBQZjYWxsZXIFBWFydElkBQdhc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEKa2V5RW5kU2FsZQIFBmNhbGxlcgUFYXJ0SWQJAGQCBQpiYXNlSGVpZ2h0BQhibG9ja0VuZAUDbmlsAWkBCmJ1eUFydHdvcmsCBWFydElkBmlzc3VlcgkBB2J1eU1pbnQFBQFpBQVhcnRJZAUGaXNzdWVyAgACAAFpAQZzZXRCaWQCBWFydElkBmlzc3VlcgQNJHQwMjczNDYyNzM4NAkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMjczNDYyNzM4NAJfMQQGY2FsbGVyCAUNJHQwMjczNDYyNzM4NAJfMgQEZGF0ZQgFDSR0MDI3MzQ2MjczODQCXzMEDSR0MDI3Mzg5Mjc0MjUJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAUNJHQwMjczODkyNzQyNQJfMQQGYW1vdW50CAUNJHQwMjczODkyNzQyNQJfMgQHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQECGJsb2NrRW5kCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCmtleUVuZFNhbGUCBQZpc3N1ZXIFBWFydElkAwMJAQIhPQIFCGJsb2NrRW5kAAAJAGcCBQZoZWlnaHQFCGJsb2NrRW5kBwkAAgECC1NhbGUgZW5kZWQuBAZiaWROYnIJAQ9nZXRJbnRlZ2VyQnlLZXkBCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUFYXJ0SWQDCQEBIQEJARBhY2NlcHRlZEFzc2V0SWRzAQUHYXNzZXRJZAkAAgECEmFzc2V0IG5vdCBhY2NlcHRlZAMJAQEhAQkBD3ZhbGlkYXRlTWluU2VsbAIFB2Fzc2V0SWQFBmFtb3VudAkAAgECDldyb25nIG1pbiBzZWxsBAphbW91bnRTb2xkCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCWtleUlzc3VlZAIFBmlzc3VlcgUFYXJ0SWQECm1heENhblNlbGwJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEKa2V5TWF4TWludAIFBmlzc3VlcgUFYXJ0SWQDCQBnAgAABQptYXhDYW5TZWxsCQACAQIjTm8gbWF4IGVkaXRpb24gc2V0IGZvciB0aGlzIGFydHdvcmsDCQBnAgUKYW1vdW50U29sZAUKbWF4Q2FuU2VsbAkAAgECGFNvbGQgb3V0LCB5b3UgY2Fubm90IGJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIEYmlkXwUFYXJ0SWQCAV8FBmlzc3VlcgIBXwUGY2FsbGVyAgFfBQJpZAIFX09QRU4JAKwCAgkArAICCQCsAgIJAKwCAgUHYXNzZXRJZAIBXwkApAMBBQZhbW91bnQCAV8JAKQDAQUEZGF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FBWFydElkCQBkAgUGYmlkTmJyAAEFA25pbAFpAQlhY2NlcHRCaWQEBWFydElkBmlzc3VlcgViaWRJZAhiaWRPd25lcgQGY2FsbGVyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMDCQECIT0CBQZjYWxsZXIFBmlzc3VlcgkAAgECGVlvdSBjYW5ub3QgZG8gdGhpcyBhY3Rpb24JAQdidXlNaW50BQUBaQUFYXJ0SWQFBmlzc3VlcgUFYmlkSWQFCGJpZE93bmVyAWkBCWNhbmNlbEJpZAQFYXJ0SWQGaXNzdWVyBWJpZElkCGJpZE93bmVyBA0kdDAyODg1MjI4OTExCQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAyODg1MjI4OTExAl8xBAZjYWxsZXIIBQ0kdDAyODg1MjI4OTExAl8yBARkYXRlCAUNJHQwMjg4NTIyODkxMQJfMwMDCQECIT0CBQZjYWxsZXIFCGJpZE93bmVyCQECIT0CBQZjYWxsZXIFBmlzc3VlcgcJAAIBAhlZb3UgY2Fubm90IGRvIHRoaXMgYWN0aW9uBA1yZXR1cm5Nb25leVRvAwkAAAIFBmNhbGxlcgUGaXNzdWVyBQhiaWRPd25lcgUGY2FsbGVyBAZiaWROYnIJAQ9nZXRJbnRlZ2VyQnlLZXkBCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUFYXJ0SWQECmJpZERhdGFLZXkJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIEYmlkXwUFYXJ0SWQCAV8FBmlzc3VlcgIBXwUIYmlkT3duZXICAV8FBWJpZElkBAdiaWREYXRhCQEOZ2V0U3RyaW5nQnlLZXkBCQCsAgIFCmJpZERhdGFLZXkCBV9PUEVOAwkAAAIFB2JpZERhdGECAAkAAgECDUJpZCBub3QgZm91bmQECmJpZERhdGFBcnIJALUJAgUHYmlkRGF0YQIBXwQHYXNzZXRJZAkBDWdldEJpZEFzc2V0SWQBCQCRAwIFCmJpZERhdGFBcnIAAAQJYmlkU3RhdHVzAghDQU5DRUxFRAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFCmJpZERhdGFLZXkCBV9PUEVOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQpiaWREYXRhS2V5AgFfBQliaWRTdGF0dXMJAKwCAgkArAICBQdiaWREYXRhAgFfCQCkAwEFBGRhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQVhcnRJZAkAZQIFBmJpZE5icgABCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQ1yZXR1cm5Nb25leVRvCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKYmlkRGF0YUFycgABBQdhc3NldElkBQNuaWwAjwMG/w==", "height": 3204735, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 74XuTQY5WfPXoCpCFHnJGpK64k4bUJh2YUNKxUrm2Fw9 Next: HNZvRkNoFScPazo8TPgR9ibcXGFrLUWEbC9KVyhZXEwX Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let VERSION = 116
5+
6+func getStringByKey (key) = valueOrElse(getString(this, key), "")
7+
8+
49 let unitTest = false
510
6-let oracleFee = value(addressFromString("3PAjrTqYLgFG24kRwiyU34noumz4pz2kXPK"))
11+let oracleFee = value(addressFromString(getStringByKey("conf_oracle_fee")))
712
8-let signDapp = value(addressFromString("3P9fNN7wT6u2BpKJ3t2EdQi2pY9opUE6ett"))
13+let signDapp = value(addressFromString(getStringByKey("conf_signweb_dapp")))
914
10-let feeReceiver = "3PFacsvuU9sn2ZstaLCWKWn48yT1vfARRRU"
15+let feeReceiver = getStringByKey("conf_fee_receiver")
1116
12-let userDapp = value(addressFromString("3PGSWDgad4RtceQYXBpq2x73mXLRJYLRqRP"))
17+let userDapp = if (unitTest)
18+ then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
19+ else value(addressFromString(getStringByKey("conf_users_dapp")))
1320
14-let whitelistDapp = value(addressFromString("3PRFTPm4hbUhxhjQdE8cGaXGAfzGLq4va8H"))
21+let whitelistDapp = value(addressFromString(getStringByKey("conf_whitelist_dapp")))
1522
16-let signAssetId = base58'9sQutD5HnRvjM1uui5cVC4w9xkMPAfYEV8ymug3Mon2Y'
23+let signAssetId = fromBase58String(getStringByKey("conf_accepted_asset_SIGN"))
1724
18-let usdnAssetId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
25+let usdnAssetId = fromBase58String(getStringByKey("conf_accepted_asset_USDN"))
1926
2027 let wavesAssetId = base58''
2128
22-let chris = "3P4JutBKW6pADm91FxMfGL3EYxKJtWYsWfX"
29+let chris = getStringByKey("conf_admin_1")
2330
24-let joep = "3PLKXPJigZJ4aVqpMGx5ajyPYmA4Zcry9Tb"
31+let joep = getStringByKey("conf_admin_2")
32+
33+func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
34+
35+
36+func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
37+
38+
39+func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
40+
41+
42+func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
43+
2544
2645 let signCut = 7
2746
2847 let usdnWaveCut = 10
2948
30-let defaultLicence = "bafybeifuyo4pqu54ismqgtb6e4h6kkvgx7zg4u3zibh2r7y6mb64i7bzza/licence.pdf"
49+let defaultLicence = getStringByKey("conf_default_licence")
3150
32-let defaultHashLicence = "a87758c354e30a9e78fb84fa3a0010a5090ab20df0be11ad45b5720cc187e639"
51+let defaultHashLicence = getStringByKey("conf_default_licence_hash")
3352
3453 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
3554
4261 let userUnregistered = "UNREGISTERED"
4362
4463 let userAllowed = "ALLOWED"
45-
46-func getStringByKey (key) = valueOrElse(getString(this, key), "")
47-
48-
49-func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
50-
51-
52-func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
53-
54-
55-func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
56-
57-
58-func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
59-
6064
6165 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
6266
243247
244248
245249 func validatePayment (i) = {
246- let $t094199455 = isPayment(i)
247- let payment = $t094199455._1
248- let amount = $t094199455._2
250+ let $t084338469 = isPayment(i)
251+ let payment = $t084338469._1
252+ let amount = $t084338469._2
249253 let assetId = if (if (isDefined(payment.assetId))
250254 then (payment.assetId == signAssetId)
251255 else false)
268272
269273
270274 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
271- let $t01004810084 = isPayment(i)
272- let payment = $t01004810084._1
273- let amount = $t01004810084._2
275+ let $t090629098 = isPayment(i)
276+ let payment = $t090629098._1
277+ let amount = $t090629098._2
274278 let assetId = if (!(isDefined(payment.assetId)))
275279 then unit
276280 else if (if ((size(priceAssetId) > 0))
357361
358362
359363 func buyMint (i,artId,issuer,bidId,bidOwner) = {
360- let $t01230912366 = idCallerDate(i)
361- let id = $t01230912366._1
362- let caller = $t01230912366._2
363- let date = $t01230912366._3
364+ let $t01132311380 = idCallerDate(i)
365+ let id = $t01132311380._1
366+ let caller = $t01132311380._2
367+ let date = $t01132311380._3
364368 let isBid = if (if (if ((toBase58String(i.caller.bytes) == issuer))
365369 then (bidOwner != "")
366370 else false)
416420 then throw(checkUser)
417421 else {
418422 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
419- let $t01411714284 = if (isBid)
423+ let $t01313113298 = if (isBid)
420424 then getPriceAssetIdFromBid(bidDataKey)
421425 else validatePriceAssetId(i, priceAssetId, artworkPrice)
422- let amount = $t01411714284._1
423- let assetId = $t01411714284._2
426+ let amount = $t01313113298._1
427+ let assetId = $t01313113298._2
424428 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(issuer)), feeReceiver)
425429 let agentShare = valueOrElse(getInteger(userDapp, keyPrimaryShare(issuer)), 0)
426430 let isWhitelisted = checkWhitelist(issuer)
487491 }
488492
489493
494+@Callable(invoke)
495+func setConf (key,val) = {
496+ let caller = toString(invoke.caller)
497+ if (containsElement([chris, toString(this)], caller))
498+ then if (contains(key, "conf_"))
499+ then [StringEntry(key, val)]
500+ else throw("Entries starting with conf_ only")
501+ else throw("You are not allowed to change this")
502+ }
503+
504+
505+
490506 @Callable(i)
491507 func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler) = {
492- let $t01768617727 = idCallerDate(i)
493- let artId = $t01768617727._1
494- let caller = $t01768617727._2
495- let date = $t01768617727._3
508+ let $t01708317124 = idCallerDate(i)
509+ let artId = $t01708317124._1
510+ let caller = $t01708317124._2
511+ let date = $t01708317124._3
496512 if (!(validateHash(sha256Hash)))
497513 then throw("Hash should be 64 characters maximum")
498514 else {
499- let $t01782817897 = setLIcence(cidLicence, sha256Licence)
500- let licenceCID = $t01782817897._1
501- let licenceHash = $t01782817897._2
515+ let $t01722517294 = setLIcence(cidLicence, sha256Licence)
516+ let licenceCID = $t01722517294._1
517+ let licenceHash = $t01722517294._2
502518 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
503519 if ((validateArtwork != ""))
504520 then throw("Something went wrong!")
505521 else {
506- let $t01811618158 = validatePayment(i)
507- let amount = $t01811618158._1
508- let assetId = $t01811618158._2
522+ let $t01751317555 = validatePayment(i)
523+ let amount = $t01751317555._1
524+ let assetId = $t01751317555._2
509525 if (!(isDefined(amount)))
510526 then throw("Something went wrong")
511527 else {
535551 then throw(maintenanceMSG)
536552 else {
537553 let caller = toBase58String(i.caller.bytes)
538- let $t02089020959 = setLIcence(cidLicence, sha256Licence)
539- let licenceCID = $t02089020959._1
540- let licenceHash = $t02089020959._2
554+ let $t02028720356 = setLIcence(cidLicence, sha256Licence)
555+ let licenceCID = $t02028720356._1
556+ let licenceHash = $t02028720356._2
541557 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
542558 if ((validateArtwork != ""))
543559 then throw("Something went wrong!")
560576
561577 @Callable(i)
562578 func flagArtwork (artId,addr,flag,note) = {
563- let $t02238422417 = idCallerDate(i)
564- let id = $t02238422417._1
565- let caller = $t02238422417._2
579+ let $t02178121814 = idCallerDate(i)
580+ let id = $t02178121814._1
581+ let caller = $t02178121814._2
566582 if (containsElement([chris, toString(this)], caller))
567583 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
568584 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
574590
575591 @Callable(i)
576592 func deleteArtwork (artId,addr) = {
577- let $t02285322886 = idCallerDate(i)
578- let id = $t02285322886._1
579- let caller = $t02285322886._2
593+ let $t02225022283 = idCallerDate(i)
594+ let id = $t02225022283._1
595+ let caller = $t02225022283._2
580596 let addrToUse = if (containsElement([chris, joep, toString(this)], caller))
581597 then addr
582598 else caller
609625
610626 @Callable(i)
611627 func sellArtwork (artId,price,maxMint,assetId,blockEnd) = {
612- let $t02565925692 = idCallerDate(i)
613- let id = $t02565925692._1
614- let caller = $t02565925692._2
628+ let $t02505625089 = idCallerDate(i)
629+ let id = $t02505625089._1
630+ let caller = $t02505625089._2
615631 let artworkName = getStringByKey(keyName(caller, artId))
616632 if ((artworkName == ""))
617633 then throw("This art doesn't match your account")
682698
683699 @Callable(i)
684700 func setBid (artId,issuer) = {
685- let $t02794927987 = idCallerDate(i)
686- let id = $t02794927987._1
687- let caller = $t02794927987._2
688- let date = $t02794927987._3
689- let $t02799228028 = isPayment(i)
690- let payment = $t02799228028._1
691- let amount = $t02799228028._2
701+ let $t02734627384 = idCallerDate(i)
702+ let id = $t02734627384._1
703+ let caller = $t02734627384._2
704+ let date = $t02734627384._3
705+ let $t02738927425 = isPayment(i)
706+ let payment = $t02738927425._1
707+ let amount = $t02738927425._2
692708 let assetId = if (!(isDefined(payment.assetId)))
693709 then "WAVES"
694710 else toBase58String(value(payment.assetId))
729745
730746 @Callable(i)
731747 func cancelBid (artId,issuer,bidId,bidOwner) = {
732- let $t02945529514 = idCallerDate(i)
733- let id = $t02945529514._1
734- let caller = $t02945529514._2
735- let date = $t02945529514._3
748+ let $t02885228911 = idCallerDate(i)
749+ let id = $t02885228911._1
750+ let caller = $t02885228911._2
751+ let date = $t02885228911._3
736752 if (if ((caller != bidOwner))
737753 then (caller != issuer)
738754 else false)
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let VERSION = 116
5+
6+func getStringByKey (key) = valueOrElse(getString(this, key), "")
7+
8+
49 let unitTest = false
510
6-let oracleFee = value(addressFromString("3PAjrTqYLgFG24kRwiyU34noumz4pz2kXPK"))
11+let oracleFee = value(addressFromString(getStringByKey("conf_oracle_fee")))
712
8-let signDapp = value(addressFromString("3P9fNN7wT6u2BpKJ3t2EdQi2pY9opUE6ett"))
13+let signDapp = value(addressFromString(getStringByKey("conf_signweb_dapp")))
914
10-let feeReceiver = "3PFacsvuU9sn2ZstaLCWKWn48yT1vfARRRU"
15+let feeReceiver = getStringByKey("conf_fee_receiver")
1116
12-let userDapp = value(addressFromString("3PGSWDgad4RtceQYXBpq2x73mXLRJYLRqRP"))
17+let userDapp = if (unitTest)
18+ then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
19+ else value(addressFromString(getStringByKey("conf_users_dapp")))
1320
14-let whitelistDapp = value(addressFromString("3PRFTPm4hbUhxhjQdE8cGaXGAfzGLq4va8H"))
21+let whitelistDapp = value(addressFromString(getStringByKey("conf_whitelist_dapp")))
1522
16-let signAssetId = base58'9sQutD5HnRvjM1uui5cVC4w9xkMPAfYEV8ymug3Mon2Y'
23+let signAssetId = fromBase58String(getStringByKey("conf_accepted_asset_SIGN"))
1724
18-let usdnAssetId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
25+let usdnAssetId = fromBase58String(getStringByKey("conf_accepted_asset_USDN"))
1926
2027 let wavesAssetId = base58''
2128
22-let chris = "3P4JutBKW6pADm91FxMfGL3EYxKJtWYsWfX"
29+let chris = getStringByKey("conf_admin_1")
2330
24-let joep = "3PLKXPJigZJ4aVqpMGx5ajyPYmA4Zcry9Tb"
31+let joep = getStringByKey("conf_admin_2")
32+
33+func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
34+
35+
36+func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
37+
38+
39+func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
40+
41+
42+func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
43+
2544
2645 let signCut = 7
2746
2847 let usdnWaveCut = 10
2948
30-let defaultLicence = "bafybeifuyo4pqu54ismqgtb6e4h6kkvgx7zg4u3zibh2r7y6mb64i7bzza/licence.pdf"
49+let defaultLicence = getStringByKey("conf_default_licence")
3150
32-let defaultHashLicence = "a87758c354e30a9e78fb84fa3a0010a5090ab20df0be11ad45b5720cc187e639"
51+let defaultHashLicence = getStringByKey("conf_default_licence_hash")
3352
3453 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
3554
3655 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
3756
3857 let userSuspended = "SUSPENDED"
3958
4059 let userRemoved = "REMOVED"
4160
4261 let userUnregistered = "UNREGISTERED"
4362
4463 let userAllowed = "ALLOWED"
45-
46-func getStringByKey (key) = valueOrElse(getString(this, key), "")
47-
48-
49-func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
50-
51-
52-func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
53-
54-
55-func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
56-
57-
58-func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
59-
6064
6165 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
6266
6367 func checkSignCertificate (signID,Owner,sha256Hash) = match getString(signDapp, ((("data_fc_" + signID) + "_") + Owner)) {
6468 case a: String =>
6569 if (contains(a, sha256Hash))
6670 then true
6771 else false
6872 case _ =>
6973 false
7074 }
7175
7276
7377 func validateCID (cid) = if (contains(cid, "/"))
7478 then if (if ((76 > size(cid)))
7579 then (size(split(cid, "/")[0]) == 59)
7680 else false)
7781 then (16 > size(split(cid, "/")[1]))
7882 else false
7983 else false
8084
8185
8286 func validateHash (hash) = (size(hash) == 64)
8387
8488
8589 func keyUserStatus (caller) = ("user_status_" + caller)
8690
8791
8892 func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
8993
9094
9195 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
9296
9397
9498 func keyDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
9599
96100
97101 func keyDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
98102
99103
100104 func keyExportHash (caller,artId) = ((("art_export_hash_" + artId) + "_") + caller)
101105
102106
103107 func keyExportCid (caller,artId) = ((("art_export_cid_" + artId) + "_") + caller)
104108
105109
106110 func keyMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
107111
108112
109113 func keySignID (caller,artId) = ((("art_signid_" + artId) + "_") + caller)
110114
111115
112116 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
113117
114118
115119 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
116120
117121
118122 func keyLicenceHash (caller,artId) = ((("art_licence_hash_" + artId) + "_") + caller)
119123
120124
121125 func keyLicenceCid (caller,artId) = ((("art_licence_cid_" + artId) + "_") + caller)
122126
123127
124128 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
125129
126130
127131 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
128132
129133
130134 func keyNote (caller,artId) = ((("art_note_" + artId) + "_") + caller)
131135
132136
133137 func keyCrawler (caller,artId) = ((("art_crawler_cid_" + artId) + "_") + caller)
134138
135139
136140 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
137141
138142
139143 func keyEndSale (caller,artId) = ((("art_endsale_" + artId) + "_") + caller)
140144
141145
142146 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
143147
144148
145149 func keyFlag (caller,artId) = ((("art_flag_" + artId) + "_") + caller)
146150
147151
148152 func keyArtistAgentAddr (artistAddr) = ("artist_agent_" + artistAddr)
149153
150154
151155 func keyPrimaryShare (artistAddr) = ("artist_agent_primary_" + artistAddr)
152156
153157
154158 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
155159
156160
157161 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
158162
159163
160164 func keyidBySignid (caller,signId) = ((("get_artidbysignid_" + signId) + "_") + caller)
161165
162166
163167 func keyTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
164168
165169
166170 func validateAllCID (cidDisplay,cidExport,cidLicence) = if (!(validateCID(cidDisplay)))
167171 then throw("Wrong Display CID")
168172 else if (!(validateCID(cidExport)))
169173 then throw("Wrong Export CID")
170174 else if (if ((cidLicence != ""))
171175 then !(validateCID(cidLicence))
172176 else false)
173177 then throw("Wrong Licence CID")
174178 else true
175179
176180
177181 func validateAllHash (sha256Export,sha256Licence) = if (!(validateHash(sha256Export)))
178182 then throw("Export Hash 64 char. max")
179183 else if (!(validateHash(sha256Licence)))
180184 then throw("Licence Hash 64 char. max")
181185 else true
182186
183187
184188 func validateString (str,max) = if ((size(str) == 0))
185189 then throw("Field cannot be is empty")
186190 else if ((size(str) > max))
187191 then throw((str + " is too long"))
188192 else true
189193
190194
191195 func validateUser (caller) = {
192196 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
193197 if (if ((userStatus == userUnregistered))
194198 then true
195199 else (userStatus == userAllowed))
196200 then "Register this account first with \"Account\" tab"
197201 else if ((userStatus == userSuspended))
198202 then "Account suspended"
199203 else if ((userStatus == userRemoved))
200204 then "Account removed"
201205 else ""
202206 }
203207
204208
205209 func setLIcence (cidLicence,sha256Licence) = {
206210 let cid = if ((size(cidLicence) == 0))
207211 then defaultLicence
208212 else cidLicence
209213 let hash = if ((size(sha256Licence) == 0))
210214 then defaultHashLicence
211215 else sha256Licence
212216 $Tuple2(cid, hash)
213217 }
214218
215219
216220 func validateArtworkData (caller,cidDisplay,cidExport,licenceCID,sha256Export,licenceHash,name,description,tags) = {
217221 let checkUser = validateUser(caller)
218222 if ((checkUser != ""))
219223 then throw(checkUser)
220224 else if ((size(cidDisplay) == 0))
221225 then throw("Display CID cannot be empty")
222226 else if (!(validateAllCID(cidDisplay, cidExport, licenceCID)))
223227 then throw("Problem with CID")
224228 else if (!(validateAllHash(sha256Export, licenceHash)))
225229 then throw("Problem with Hashes")
226230 else if (!(validateString(name, 100)))
227231 then throw("100 Char. max name")
228232 else if (!(validateString(description, 1000)))
229233 then throw("1000 Char. max description")
230234 else if ((size(split(tags, ",")) > 5))
231235 then throw("5 tags max.")
232236 else ""
233237 }
234238
235239
236240 func isPayment (i) = if ((size(i.payments) == 0))
237241 then throw("No payment attached")
238242 else {
239243 let payment = value(i.payments[0])
240244 let amount = value(payment.amount)
241245 $Tuple2(payment, amount)
242246 }
243247
244248
245249 func validatePayment (i) = {
246- let $t094199455 = isPayment(i)
247- let payment = $t094199455._1
248- let amount = $t094199455._2
250+ let $t084338469 = isPayment(i)
251+ let payment = $t084338469._1
252+ let amount = $t084338469._2
249253 let assetId = if (if (isDefined(payment.assetId))
250254 then (payment.assetId == signAssetId)
251255 else false)
252256 then payment.assetId
253257 else throw("Only SIGN token accepted as transaction fee")
254258 if ((amount != currentCertificationPrice))
255259 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
256260 else $Tuple2(amount, assetId)
257261 }
258262
259263
260264 func isArtMinted (addrToUse,artId) = match getInteger(this, keyIssued(addrToUse, artId)) {
261265 case b: Int =>
262266 if ((b != 0))
263267 then true
264268 else false
265269 case _ =>
266270 false
267271 }
268272
269273
270274 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
271- let $t01004810084 = isPayment(i)
272- let payment = $t01004810084._1
273- let amount = $t01004810084._2
275+ let $t090629098 = isPayment(i)
276+ let payment = $t090629098._1
277+ let amount = $t090629098._2
274278 let assetId = if (!(isDefined(payment.assetId)))
275279 then unit
276280 else if (if ((size(priceAssetId) > 0))
277281 then (toBase58String(value(payment.assetId)) == priceAssetId)
278282 else false)
279283 then payment.assetId
280284 else throw("Wrong asset id")
281285 if (if ((assetId == unit))
282286 then (priceAssetId != "")
283287 else false)
284288 then throw("Wrong asset id")
285289 else if ((artworkPrice != amount))
286290 then throw("Payment don't match")
287291 else $Tuple2(amount, assetId)
288292 }
289293
290294
291295 func acceptedAssetIds (assetId) = if (if (if (if ((assetId != toBase58String(signAssetId)))
292296 then (assetId != toBase58String(wavesAssetId))
293297 else false)
294298 then (assetId != "WAVES")
295299 else false)
296300 then (assetId != toBase58String(usdnAssetId))
297301 else false)
298302 then throw("Only SIGN, USDN or WAVES accepted")
299303 else true
300304
301305
302306 func validateMinSell (assetId,price) = {
303307 let minSellWaves = if (unitTest)
304308 then 10
305309 else getIntegerByKeyFromOracle("waves_min_sell")
306310 let minSellUsdn = 1000000
307311 let minSellSign = if (unitTest)
308312 then 1
309313 else (currentCertificationPrice * 2)
310314 if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
311315 then (minSellUsdn > price)
312316 else false)
313317 then (price != 0)
314318 else false)
315319 then true
316320 else if (if ((assetId == toBase58String(signAssetId)))
317321 then (minSellSign > price)
318322 else false)
319323 then (price != 0)
320324 else false)
321325 then true
322326 else if (if (if ((assetId == toBase58String(wavesAssetId)))
323327 then true
324328 else (assetId == "WAVES"))
325329 then (minSellWaves > price)
326330 else false)
327331 then (price != 0)
328332 else false)
329333 then throw("Wrong minimum sell price")
330334 else true
331335 }
332336
333337
334338 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
335339 then unit
336340 else fromBase58String(assetId)
337341
338342
339343 func getPriceAssetIdFromBid (bidDataKey) = {
340344 let bidData = getStringByKey((bidDataKey + "_OPEN"))
341345 if ((bidData == ""))
342346 then throw("Bid not found")
343347 else {
344348 let bidDataArr = split(bidData, "_")
345349 let bidAmount = parseIntValue(bidDataArr[1])
346350 let bidAssetId = getBidAssetId(bidDataArr[0])
347351 if ((0 >= bidAmount))
348352 then throw("Wrong amount")
349353 else $Tuple2(bidAmount, bidAssetId)
350354 }
351355 }
352356
353357
354358 func idCallerDate (i) = if (!(dappRunning))
355359 then throw(maintenanceMSG)
356360 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
357361
358362
359363 func buyMint (i,artId,issuer,bidId,bidOwner) = {
360- let $t01230912366 = idCallerDate(i)
361- let id = $t01230912366._1
362- let caller = $t01230912366._2
363- let date = $t01230912366._3
364+ let $t01132311380 = idCallerDate(i)
365+ let id = $t01132311380._1
366+ let caller = $t01132311380._2
367+ let date = $t01132311380._3
364368 let isBid = if (if (if ((toBase58String(i.caller.bytes) == issuer))
365369 then (bidOwner != "")
366370 else false)
367371 then (bidId != "")
368372 else false)
369373 then true
370374 else false
371375 let blockEnd = getIntegerByKey(keyEndSale(caller, artId))
372376 if (if (if ((blockEnd != 0))
373377 then (height >= blockEnd)
374378 else false)
375379 then !(isBid)
376380 else false)
377381 then throw("Sale ended.")
378382 else {
379383 let callerIsIssuer = (toBase58String(i.caller.bytes) == issuer)
380384 let totalNFT = getIntegerByKey("total_nft_issued")
381385 let signID = getStringByKey(keySignID(issuer, artId))
382386 let artworkName = getStringByKey(keyName(issuer, artId))
383387 if ((artworkName == ""))
384388 then throw("Art doesn't exist")
385389 else {
386390 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
387391 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
388392 let artworkPrice = if (callerIsIssuer)
389393 then (currentCertificationPrice * 2)
390394 else getIntegerByKey(keyPrice(issuer, artId))
391395 let priceAssetId = if (callerIsIssuer)
392396 then toBase58String(signAssetId)
393397 else getStringByKey(keyAssetIdAccepted(issuer, artId))
394398 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
395399 if (if (if (!(isBid))
396400 then !(callerIsIssuer)
397401 else false)
398402 then if (if ((0 >= artworkPrice))
399403 then true
400404 else !(isOnSale))
401405 then true
402406 else (0 >= maxCanSell)
403407 else false)
404408 then throw("Art not for sale")
405409 else if (if (if (!(isBid))
406410 then callerIsIssuer
407411 else false)
408412 then (0 >= maxCanSell)
409413 else false)
410414 then throw("Max issuable not set")
411415 else {
412416 let checkUser = validateUser(issuer)
413417 if (if (isBid)
414418 then (checkUser != "")
415419 else false)
416420 then throw(checkUser)
417421 else {
418422 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
419- let $t01411714284 = if (isBid)
423+ let $t01313113298 = if (isBid)
420424 then getPriceAssetIdFromBid(bidDataKey)
421425 else validatePriceAssetId(i, priceAssetId, artworkPrice)
422- let amount = $t01411714284._1
423- let assetId = $t01411714284._2
426+ let amount = $t01313113298._1
427+ let assetId = $t01313113298._2
424428 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(issuer)), feeReceiver)
425429 let agentShare = valueOrElse(getInteger(userDapp, keyPrimaryShare(issuer)), 0)
426430 let isWhitelisted = checkWhitelist(issuer)
427431 let cut = if ((isWhitelisted > height))
428432 then 0
429433 else if ((assetId == signAssetId))
430434 then signCut
431435 else usdnWaveCut
432436 let amountForSign = fraction(amount, cut, 100)
433437 let amountForAgent = if (if (if ((agent != feeReceiver))
434438 then (agentShare > 0)
435439 else false)
436440 then (height > isWhitelisted)
437441 else false)
438442 then fraction(amount, agentShare, 100)
439443 else 0
440444 let amountForCreator = (amount - amountForSign)
441445 if ((amountSold == maxCanSell))
442446 then throw("Art sold out")
443447 else {
444448 let newAmountSold = (amountSold + 1)
445449 let issueMeta = ((((((((((("Creator: " + issuer) + ",
446450 ArtID: ") + artId) + ",
447451 SignID: ") + signID) + ",
448452 Artwork name: ") + artworkName) + ",
449453 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
450454 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
451455 let idNFT = calculateAssetId(issueNFT)
452456 let sellStatus = if (if ((newAmountSold == maxCanSell))
453457 then true
454458 else !(isOnSale))
455459 then false
456460 else true
457461 let receiveNFT = if (if (if ((caller == issuer))
458462 then (bidOwner != "")
459463 else false)
460464 then (bidId != "")
461465 else false)
462466 then addressFromStringValue(bidOwner)
463467 else i.caller
464468 let assetIdBid = if (!(isDefined(assetId)))
465469 then "WAVES"
466470 else toBase58String(value(assetId))
467471 let bidData = getStringByKey((bidDataKey + "_OPEN"))
468472 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
469473 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
470474 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
471475 let soldValue = if (!(isBid))
472476 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
473477 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
474478 let soldData = StringEntry(soldKey, soldValue)
475479 let commissions = if ((amountForAgent != 0))
476480 then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
477481 else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
478482 let buyRes = ([IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), soldKey), IntegerEntry("total_nft_issued", (totalNFT + 1)), IntegerEntry(keyEndSale(issuer, artId), 0), BooleanEntry(keyOnSale(issuer, artId), sellStatus), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId), ScriptTransfer(receiveNFT, 1, idNFT)] ++ commissions)
479483 if (isBid)
480484 then [soldData, bidUpdate, bidDelOld] :: buyRes
481485 else soldData :: buyRes
482486 }
483487 }
484488 }
485489 }
486490 }
487491 }
488492
489493
494+@Callable(invoke)
495+func setConf (key,val) = {
496+ let caller = toString(invoke.caller)
497+ if (containsElement([chris, toString(this)], caller))
498+ then if (contains(key, "conf_"))
499+ then [StringEntry(key, val)]
500+ else throw("Entries starting with conf_ only")
501+ else throw("You are not allowed to change this")
502+ }
503+
504+
505+
490506 @Callable(i)
491507 func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler) = {
492- let $t01768617727 = idCallerDate(i)
493- let artId = $t01768617727._1
494- let caller = $t01768617727._2
495- let date = $t01768617727._3
508+ let $t01708317124 = idCallerDate(i)
509+ let artId = $t01708317124._1
510+ let caller = $t01708317124._2
511+ let date = $t01708317124._3
496512 if (!(validateHash(sha256Hash)))
497513 then throw("Hash should be 64 characters maximum")
498514 else {
499- let $t01782817897 = setLIcence(cidLicence, sha256Licence)
500- let licenceCID = $t01782817897._1
501- let licenceHash = $t01782817897._2
515+ let $t01722517294 = setLIcence(cidLicence, sha256Licence)
516+ let licenceCID = $t01722517294._1
517+ let licenceHash = $t01722517294._2
502518 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
503519 if ((validateArtwork != ""))
504520 then throw("Something went wrong!")
505521 else {
506- let $t01811618158 = validatePayment(i)
507- let amount = $t01811618158._1
508- let assetId = $t01811618158._2
522+ let $t01751317555 = validatePayment(i)
523+ let amount = $t01751317555._1
524+ let assetId = $t01751317555._2
509525 if (!(isDefined(amount)))
510526 then throw("Something went wrong")
511527 else {
512528 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
513529 if ((entryExist != ""))
514530 then throw("You already added it")
515531 else {
516532 let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
517533 if ((hashExist != ""))
518534 then throw("Hash already registered")
519535 else {
520536 let isSignCertified = checkSignCertificate(signID, caller, sha256Hash)
521537 if (!(isSignCertified))
522538 then throw("Sign Certificate not found for this address.")
523539 else [StringEntry(keyOwnerByHash(sha256Hash), caller), StringEntry(keyTxidByHashOwner(sha256Hash, caller), artId), IntegerEntry(keyDate(caller, artId), date), StringEntry(keyName(caller, artId), name), StringEntry(keyDesc(caller, artId), description), StringEntry(keyDisplayCid(caller, artId), cidDisplay), StringEntry(keyExportCid(caller, artId), cidExport), StringEntry(keyExportHash(caller, artId), sha256Export), StringEntry(keyLicenceHash(caller, artId), licenceHash), StringEntry(keyLicenceCid(caller, artId), licenceCID), StringEntry(keyType(caller, artId), type), StringEntry(keyTags(caller, artId), tags), IntegerEntry(keyMaxMint(caller, artId), 0), StringEntry(keySignID(caller, artId), signID), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyidBySignid(caller, signID), artId), StringEntry(keyHashByTxidAddr(caller, artId), sha256Hash), StringEntry(keyCrawler(caller, artId), crawler), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
524540 }
525541 }
526542 }
527543 }
528544 }
529545 }
530546
531547
532548
533549 @Callable(i)
534550 func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler) = if (!(dappRunning))
535551 then throw(maintenanceMSG)
536552 else {
537553 let caller = toBase58String(i.caller.bytes)
538- let $t02089020959 = setLIcence(cidLicence, sha256Licence)
539- let licenceCID = $t02089020959._1
540- let licenceHash = $t02089020959._2
554+ let $t02028720356 = setLIcence(cidLicence, sha256Licence)
555+ let licenceCID = $t02028720356._1
556+ let licenceHash = $t02028720356._2
541557 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
542558 if ((validateArtwork != ""))
543559 then throw("Something went wrong!")
544560 else {
545561 let entryExist = getStringByKey(keyName(caller, txid))
546562 if ((entryExist == ""))
547563 then throw("Entry not found")
548564 else {
549565 let flag = getStringByKey(keyFlag(caller, txid))
550566 if ((flag == "ILLEGAL"))
551567 then throw("Cannot update ILLEGAL artwork")
552568 else if (!(isArtMinted(caller, txid)))
553569 then [StringEntry(keyName(caller, txid), name), StringEntry(keyDesc(caller, txid), description), StringEntry(keyDisplayCid(caller, txid), cidDisplay), StringEntry(keyExportCid(caller, txid), cidExport), StringEntry(keyExportHash(caller, txid), sha256Export), StringEntry(keyLicenceCid(caller, txid), licenceCID), StringEntry(keyLicenceHash(caller, txid), licenceHash), StringEntry(keyTags(caller, txid), tags), StringEntry(keyType(caller, txid), type), StringEntry(keyCrawler(caller, txid), crawler)]
554570 else throw("Already minted")
555571 }
556572 }
557573 }
558574
559575
560576
561577 @Callable(i)
562578 func flagArtwork (artId,addr,flag,note) = {
563- let $t02238422417 = idCallerDate(i)
564- let id = $t02238422417._1
565- let caller = $t02238422417._2
579+ let $t02178121814 = idCallerDate(i)
580+ let id = $t02178121814._1
581+ let caller = $t02178121814._2
566582 if (containsElement([chris, toString(this)], caller))
567583 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
568584 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
569585 else throw(("Unknow status " + flag))
570586 else throw("You are not allowed")
571587 }
572588
573589
574590
575591 @Callable(i)
576592 func deleteArtwork (artId,addr) = {
577- let $t02285322886 = idCallerDate(i)
578- let id = $t02285322886._1
579- let caller = $t02285322886._2
593+ let $t02225022283 = idCallerDate(i)
594+ let id = $t02225022283._1
595+ let caller = $t02225022283._2
580596 let addrToUse = if (containsElement([chris, joep, toString(this)], caller))
581597 then addr
582598 else caller
583599 let entryExist = valueOrErrorMessage(getStringByKey(keyName(addrToUse, artId)), "No art matching for this address")
584600 if ((entryExist == ""))
585601 then throw("No art matching for this address")
586602 else {
587603 let sha256Hash = getStringByKey(keyHashByTxidAddr(addrToUse, artId))
588604 if ((sha256Hash == ""))
589605 then throw("No art hash matching for this address")
590606 else {
591607 let signID = getStringByKey(keySignID(addrToUse, artId))
592608 if ((signID == ""))
593609 then throw("No SIGN ID matching")
594610 else {
595611 let dataToDelete = [DeleteEntry(keyDate(addrToUse, artId)), DeleteEntry(keyName(addrToUse, artId)), DeleteEntry(keyDesc(addrToUse, artId)), DeleteEntry(keyDisplayCid(addrToUse, artId)), DeleteEntry(keyExportCid(addrToUse, artId)), DeleteEntry(keyExportHash(addrToUse, artId)), DeleteEntry(keyLicenceHash(addrToUse, artId)), DeleteEntry(keyLicenceCid(addrToUse, artId)), DeleteEntry(keyType(addrToUse, artId)), DeleteEntry(keyTags(addrToUse, artId)), DeleteEntry(keyMaxMint(addrToUse, artId)), DeleteEntry(keySignID(addrToUse, artId)), DeleteEntry(keyIssued(addrToUse, artId)), DeleteEntry(keyOnSale(addrToUse, artId)), DeleteEntry(keyFlag(addrToUse, artId)), DeleteEntry(keyPrice(addrToUse, artId)), DeleteEntry(keyAssetIdAccepted(addrToUse, artId)), DeleteEntry(keyOwnerByHash(sha256Hash)), DeleteEntry(keyidBySignid(addrToUse, signID)), DeleteEntry(keyTxidByHashOwner(sha256Hash, addrToUse)), DeleteEntry(keyEndSale(addrToUse, artId)), DeleteEntry(keyNote(addrToUse, artId)), DeleteEntry(keyCrawler(addrToUse, artId))]
596612 if (!(isArtMinted(addrToUse, artId)))
597613 then if (!(dappRunning))
598614 then throw(maintenanceMSG)
599615 else dataToDelete
600616 else if (containsElement([chris, toString(this)], caller))
601617 then dataToDelete
602618 else throw("Art already minted, you cannot delete it")
603619 }
604620 }
605621 }
606622 }
607623
608624
609625
610626 @Callable(i)
611627 func sellArtwork (artId,price,maxMint,assetId,blockEnd) = {
612- let $t02565925692 = idCallerDate(i)
613- let id = $t02565925692._1
614- let caller = $t02565925692._2
628+ let $t02505625089 = idCallerDate(i)
629+ let id = $t02505625089._1
630+ let caller = $t02505625089._2
615631 let artworkName = getStringByKey(keyName(caller, artId))
616632 if ((artworkName == ""))
617633 then throw("This art doesn't match your account")
618634 else {
619635 let flag = getStringByKey(keyFlag(caller, artId))
620636 if (containsElement(["CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
621637 then throw("Flagged artwork")
622638 else {
623639 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
624640 if ((0 > blockEnd))
625641 then throw("Negative end")
626642 else if (if ((blockEnd > 0))
627643 then if ((maxMint != 1))
628644 then true
629645 else (price != 0)
630646 else false)
631647 then throw("Timed offer only allowed for unique edition and offer only")
632648 else {
633649 let baseHeight = if ((blockEnd == 0))
634650 then 0
635651 else height
636652 if (!(acceptedAssetIds(assetId)))
637653 then throw("Something went wrong!")
638654 else if (!(validateMinSell(assetId, price)))
639655 then throw("Something went wrong!")
640656 else {
641657 let checkUser = validateUser(caller)
642658 if ((checkUser != ""))
643659 then throw(checkUser)
644660 else {
645661 let amountSold = getIntegerByKey(keyIssued(caller, artId))
646662 let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
647663 if ((maxMint > 100))
648664 then throw("100 editions max per artwork")
649665 else if (if ((amountSold != 0))
650666 then (amountSold == maxCanSell)
651667 else false)
652668 then throw("Max edition reached.")
653669 else if (if ((amountSold > 0))
654670 then (maxCanSell != maxMint)
655671 else false)
656672 then throw("Cannot change maximum issuable anymore")
657673 else if (if ((bidNbr > 0))
658674 then (maxCanSell != maxMint)
659675 else false)
660676 then throw("Cannot change maximum issuable with active orders")
661677 else {
662678 let sellStatus = if (if ((price > 0))
663679 then (maxMint > 0)
664680 else false)
665681 then true
666682 else false
667683 [BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), StringEntry(keyAssetIdAccepted(caller, artId), assetId), IntegerEntry(keyEndSale(caller, artId), (baseHeight + blockEnd))]
668684 }
669685 }
670686 }
671687 }
672688 }
673689 }
674690 }
675691
676692
677693
678694 @Callable(i)
679695 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "")
680696
681697
682698
683699 @Callable(i)
684700 func setBid (artId,issuer) = {
685- let $t02794927987 = idCallerDate(i)
686- let id = $t02794927987._1
687- let caller = $t02794927987._2
688- let date = $t02794927987._3
689- let $t02799228028 = isPayment(i)
690- let payment = $t02799228028._1
691- let amount = $t02799228028._2
701+ let $t02734627384 = idCallerDate(i)
702+ let id = $t02734627384._1
703+ let caller = $t02734627384._2
704+ let date = $t02734627384._3
705+ let $t02738927425 = isPayment(i)
706+ let payment = $t02738927425._1
707+ let amount = $t02738927425._2
692708 let assetId = if (!(isDefined(payment.assetId)))
693709 then "WAVES"
694710 else toBase58String(value(payment.assetId))
695711 let blockEnd = getIntegerByKey(keyEndSale(issuer, artId))
696712 if (if ((blockEnd != 0))
697713 then (height >= blockEnd)
698714 else false)
699715 then throw("Sale ended.")
700716 else {
701717 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
702718 if (!(acceptedAssetIds(assetId)))
703719 then throw("asset not accepted")
704720 else if (!(validateMinSell(assetId, amount)))
705721 then throw("Wrong min sell")
706722 else {
707723 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
708724 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
709725 if ((0 >= maxCanSell))
710726 then throw("No max edition set for this artwork")
711727 else if ((amountSold >= maxCanSell))
712728 then throw("Sold out, you cannot bid")
713729 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
714730 }
715731 }
716732 }
717733
718734
719735
720736 @Callable(i)
721737 func acceptBid (artId,issuer,bidId,bidOwner) = {
722738 let caller = toBase58String(i.caller.bytes)
723739 if ((caller != issuer))
724740 then throw("You cannot do this action")
725741 else buyMint(i, artId, issuer, bidId, bidOwner)
726742 }
727743
728744
729745
730746 @Callable(i)
731747 func cancelBid (artId,issuer,bidId,bidOwner) = {
732- let $t02945529514 = idCallerDate(i)
733- let id = $t02945529514._1
734- let caller = $t02945529514._2
735- let date = $t02945529514._3
748+ let $t02885228911 = idCallerDate(i)
749+ let id = $t02885228911._1
750+ let caller = $t02885228911._2
751+ let date = $t02885228911._3
736752 if (if ((caller != bidOwner))
737753 then (caller != issuer)
738754 else false)
739755 then throw("You cannot do this action")
740756 else {
741757 let returnMoneyTo = if ((caller == issuer))
742758 then bidOwner
743759 else caller
744760 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
745761 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
746762 let bidData = getStringByKey((bidDataKey + "_OPEN"))
747763 if ((bidData == ""))
748764 then throw("Bid not found")
749765 else {
750766 let bidDataArr = split(bidData, "_")
751767 let assetId = getBidAssetId(bidDataArr[0])
752768 let bidStatus = "CANCELED"
753769 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(returnMoneyTo)), parseIntValue(bidDataArr[1]), assetId)]
754770 }
755771 }
756772 }
757773
758774

github/deemru/w8io/3ef1775 
113.71 ms