diff --git a/pkg/deploy/assets/gateway-production.json b/pkg/deploy/assets/gateway-production.json index d952c4a192c..c5c10f6757b 100644 --- a/pkg/deploy/assets/gateway-production.json +++ b/pkg/deploy/assets/gateway-production.json @@ -311,7 +311,7 @@ "autoUpgradeMinorVersion": true, "settings": {}, "protectedSettings": { - "script": "[base64(concat(base64ToString('c2V0IC1leAoK'),'ACRRESOURCEID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('acrResourceId')),''')\n','AZURECLOUDNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureCloudName')),''')\n','AZURESECPACKQUALYSURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackQualysUrl')),''')\n','AZURESECPACKVSATENANTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackVSATenantId')),''')\n','DATABASEACCOUNTNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('databaseAccountName')),''')\n','ENVIRONMENT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('environment')),''')\n','FLUENTBITIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fluentbitImage')),''')\n','GATEWAYDOMAINS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayDomains')),''')\n','GATEWAYFEATURES=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayFeatures')),''')\n','GATEWAYLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayLogLevel')),''')\n','GATEWAYMDSDCONFIGVERSION=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayMdsdConfigVersion')),''')\n','KEYVAULTDNSSUFFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultDNSSuffix')),''')\n','KEYVAULTPREFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultPrefix')),''')\n','MDMFRONTENDURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdmFrontendUrl')),''')\n','MDSDENVIRONMENT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdsdEnvironment')),''')\n','RPIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpImage')),''')\n','RPMDMACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdmAccount')),''')\n','RPMDSDACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdAccount')),''')\n','RPMDSDNAMESPACE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdNamespace')),''')\n','MDMIMAGE=''/geneva/distroless/mdm:2.202602101834.0-20260211-1@sha256:a581e89744933f30a9f8e2724906fde02e713836fce76afefec7092daa01c064''\n','LOCATION=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().location),''')\n','SUBSCRIPTIONID=$(base64 -d \u003c\u003c\u003c''',base64(subscription().subscriptionId),''')\n','RESOURCEGROUPNAME=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().name),''')\n','\n',base64ToString('ZGVjbGFyZSAtciBlbXB0eV9zdHI9IiIKZGVjbGFyZSAtciByb2xlX2dhdGV3YXk9ImdhdGV3YXkiCmRlY2xhcmUgLXIgcm9sZV9ycD0icnAiCmRlY2xhcmUgLXIgcm9sZV9kZXZwcm94eT0iZGV2cHJveHkiCmRlY2xhcmUgLXIgdXNfZ292X2Nsb3VkPSJBenVyZVVTR292ZXJubWVudCIKbG9nKCl7CmxvY2FsIC1yIG1zZz0iJHsxOi0ibG9nIG1lc3NhZ2UgaXMgZW1wdHkifSIKbG9jYWwgLXIgc3RhY2tfbGV2ZWw9IiR7MjotMX0iCmVjaG8gIiR7RlVOQ05BTUVbJHN0YWNrX2xldmVsXX06ICRtc2ciCn0KYWJvcnQoKXsKbG9jYWwgLXJpIG9yaWdpbl9zdGFja2xldmVsPTIKbG9nICIkMSIgIiRvcmlnaW5fc3RhY2tsZXZlbCIKbG9nICJFeGl0aW5nIgpleGl0IDEKfQp3cml0ZV9maWxlKCl7CmxvY2FsIC1uIGZpbGVuYW1lPSIkMSIKbG9jYWwgLW4gZmlsZV9jb250ZW50cz0iJDIiCmxvY2FsIC1yIGNsb2JiZXI9IiR7MzotZmFsc2V9IgppZiAkY2xvYmJlcjt0aGVuCmxvZyAiT3ZlcndyaXRpbmcgZmlsZSAkZmlsZW5hbWUiCmVjaG8gIiRmaWxlX2NvbnRlbnRzIiA+IiRmaWxlbmFtZSIKZWxzZQpsb2cgIkFwcGVuZGluZyB0byAkZmlsZW5hbWUiCmVjaG8gIiRmaWxlX2NvbnRlbnRzIiA+PiIkZmlsZW5hbWUiCmZpCn0KcmV0cnkoKXsKbG9jYWwgLW4gY21kX3JldHJ5PSIkMSIKbG9jYWwgLW4gd2FpdF90aW1lPSIkMiIKbG9jYWwgLXJpIHJldHJpZXM9IiR7MzotNX0iCmZvciBhdHRlbXB0IGluICQoc2VxIDEgJHJldHJpZXMpO2RvCmxvZyAiYXR0ZW1wdCAjJGF0dGVtcHQgLSAke0ZVTkNOQU1FWzJdfSIKJHtjbWRfcmV0cnlbQF19Jgp3YWl0IC1mICQhJiZyZXR1cm4gMApzbGVlcCAiJHdhaXRfdGltZSIKZG9uZQphYm9ydCAiJHtjbWRfcmV0cnlbKl19IGZhaWxlZCBhZnRlciAjJHJldHJpZXMgYXR0ZW1wdHMiCn0KdmVyaWZ5X3JvbGUoKXsKbG9jYWwgLW4gdGVzdF9yb2xlPSIkMSIKYWxsb3dlZF9yb2xlc19nbG9iPSIoJHJvbGVfcnB8JHJvbGVfZ2F0ZXdheXwkcm9sZV9kZXZwcm94eSkiCmlmIFtbICR0ZXN0X3JvbGUgPX4gJGFsbG93ZWRfcm9sZXNfZ2xvYiBdXTt0aGVuCmxvZyAiVmVyaWZpZWQgcm9sZSBcIiR0ZXN0X3JvbGVcIiIKZWxzZQphYm9ydCAiZmFpbGVkIHRvIHZlcmlmeSByb2xlLCByb2xlIFwiJHRlc3Rfcm9sZVwiIG5vdCBpbiBcIiRhbGxvd2VkX3JvbGVzX2dsb2JcIiIKZmkKfQpnZXRfa2V5dmF1bHRfc3VmZml4KCl7CmxvY2FsIC1uIHJsPSIkMSIKbG9jYWwgLW4ga3Zfc3VmZml4PSIkMiIKbG9jYWwgLW4gc2VjX3ByZWZpeD0iJDMiCmxvY2FsIC1yIGtleXZhdWx0X3N1ZmZpeF9ycD0ic3ZjIgpsb2NhbCAtciBrZXl2YXVsdF9wcmVmaXhfZ2F0ZXdheT0iZ3d5IgpjYXNlICIkcmwiIGluCiIkcm9sZV9nYXRld2F5Iilrdl9zdWZmaXg9IiRrZXl2YXVsdF9wcmVmaXhfZ2F0ZXdheSIKc2VjX3ByZWZpeD0iJGtleXZhdWx0X3ByZWZpeF9nYXRld2F5Igo7OwoiJHJvbGVfcnAiKWt2X3N1ZmZpeD0iJGtleXZhdWx0X3N1ZmZpeF9ycCIKc2VjX3ByZWZpeD0iJHJvbGVfcnAiCjs7CiopYWJvcnQgInVua293biByb2xlICRybCIKZXNhYwp9CnJlYm9vdF92bSgpewpsb2cgInN0YXJ0aW5nIgooc2h1dGRvd24gLXIgbm93JikKfQpjb25maWd1cmVfcmVwb19tYXJpbmVyX2V4dGVuZGVkKCl7CmxvY2FsIC1yIGV4dGVuZGVkX3JlcG9fY29uZmlnPSJodHRwczovL3BhY2thZ2VzLm1pY3Jvc29mdC5jb20vY2JsLW1hcmluZXIvMi4wL3Byb2QvZXh0ZW5kZWQveDg2XzY0L2NvbmZpZy5yZXBvIgpjdXJsIC1zU0wgIiRleHRlbmRlZF9yZXBvX2NvbmZpZyIgLW8gL2V0Yy95dW0ucmVwb3MuZC9tYXJpbmVyLWV4dGVuZGVkLnJlcG8KbG9jYWwgLXIgcmVwb19uYW1lPSJjYmwtbWFyaW5lcjIuMHByb2RleHRlbmRlZHg4Nl82NCIKbG9jYWwgLXJhIGNtZD0oCmRuZgp1cGRhdGUKLXkKLS1lbmFibGVyZXBvPSIkcmVwb19uYW1lIikKbG9nICJFbmFibGluZyByZXBvICRyZXBvX25hbWUiCnJldHJ5IGNtZCAiJDEiICIkezI6LX0iCn0KY29uZmlndXJlX3JwbV9yZXBvcygpewpsb2cgInN0YXJ0aW5nIgpjb25maWd1cmVfcmVwb19tYXJpbmVyX2V4dGVuZGVkICIkMSIgIiR7MjotMX0iCn0KZG5mX2luc3RhbGxfcGtncygpewpsb2NhbCAtbiBwa2dzPSIkMSIKbG9nICJzdGFydGluZyIKbG9jYWwgLWEgY21kPSgKZG5mCi15Cmluc3RhbGwpCm1hcGZpbGUgLU8gJCgoJHsjY21kW0BdfSsxKSkgLWQgJyAnIGNtZCA8PDwiJHtwa2dzW0BdfSIKbG9jYWwgLXIgY21kCmxvZyAiQXR0ZW1wdGluZyB0byBpbnN0YWxsIHBhY2thZ2VzOiAke3BrZ3NbKl19IgpyZXRyeSBjbWQgIiQyIiAiJHszOi19Igp9CmRuZl91cGRhdGVfcGtncygpewpsb2NhbCAtbiBleGNsdWRlcz0iJHsxOi1lbXB0eV9zdHJ9Igpsb2cgInN0YXJ0aW5nIgpsb2NhbCAtYSBjbWQ9KApkbmYKLXkKIiIKdXBkYXRlCi0tYWxsb3dlcmFzaW5nKQppZiBbIC1uICIkZXhjbHVkZXMiIF07dGhlbgptYXBmaWxlIC1PIDIgY21kIDw8PCIke2V4Y2x1ZGVzW0BdfSIKZWxzZQp1bnNldCAiY21kWzJdIgpmaQpsb2NhbCAtciBjbWQKbG9nICJVcGRhdGluZyBhbGwgcGFja2FnZXMgZXhjbHVkaW5nIFwiJHtleGNsdWRlc1sqXTotfVwiIgpyZXRyeSBjbWQgIiQyIiAiJHszOi19Igp9CnJwbV9pbXBvcnRfa2V5cygpewpsb2NhbCAtbiBrZXlzPSIkMSIKbG9nICJzdGFydGluZyIKZm9yIGtleSBpbiAke2tleXNbQF19O2RvCmlmIFsgJHsja2V5c1tAXX0gLWVxIDAgXTt0aGVuCmJyZWFrCmZpCmxvY2FsIC1hIGNtZD0oCnJwbQotLWltcG9ydAotdgoiJGtleSIpCmxvZyAiSW1wb3J0aW5nIHJwbSByZXBvc2l0b3J5IGtleSAka2V5IgpyZXRyeSBjbWQgIiQyIiAiJHszOi19IiYmdW5zZXQga2V5CmRvbmUKfQp1dGlsX2NvbW1vbj0idXRpbC1jb21tb24uc2giCmlmIFsgLWYgIiR1dGlsX2NvbW1vbiIgXTt0aGVuCnNvdXJjZSAiJHV0aWxfY29tbW9uIgpmaQplbmFibGVfc2VydmljZXMoKXsKbG9jYWwgLW4gc3Zjcz0iJDEiCmxvZyAic3RhcnRpbmciCnN5c3RlbWN0bCBkYWVtb24tcmVsb2FkCmxvZyAiZW5hYmxpbmcgc2VydmljZXMgJHtzdmNzWypdfSIKZm9yIHN2YyBpbiAke3N2Y3NbQF19O2RvCmxvZyAiRW5hYmxpbmcgYW5kIHN0YXJ0aW5nICRzdmMgbm93IgpzeXN0ZW1jdGwgZW5hYmxlIFwKLS1ub3cgXAoiJHN2YyIKZG9uZQp9CmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19nYXRld2F5KCl7CmxvY2FsIC1uIGltYWdlPSIkMSIKbG9jYWwgLW4gcm9sZT0iJDIiCmxvY2FsIC1uIGNvbmZfZmlsZT0iJDMiCmxvY2FsIC1uIGlwYWRkcmVzcz0iJDQiCmxvZyAic3RhcnRpbmciCmxvZyAiQ29uZmlndXJpbmcgYXJvLWdhdGV3YXkgc2VydmljZSIKbG9jYWwgLXIgYXJvX2dhdGV3YXlfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLWdhdGV3YXknCmxvY2FsIC1yIGFkZF9jb25mX2ZpbGU9IlBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcycKUk9MRT0nJHtyb2xlLCx9JwpBUk9fTE9HX0xFVkVMPSckR0FURVdBWUxPR0xFVkVMJwpFTlZJUk9OTUVOVD0nJEVOVklST05NRU5UJyIKd3JpdGVfZmlsZSBhcm9fZ2F0ZXdheV9jb25mX2ZpbGVuYW1lIGNvbmZfZmlsZSB0cnVlCndyaXRlX2ZpbGUgYXJvX2dhdGV3YXlfY29uZl9maWxlbmFtZSBhZGRfY29uZl9maWxlIGZhbHNlCmxvY2FsIC1yIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLWdhdGV3YXkuc2VydmljZScKbG9jYWwgLXIgYXJvX2dhdGV3YXlfc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tZ2F0ZXdheQpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC1lIEFDUl9SRVNPVVJDRV9JRCBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBHQVRFV0FZX0RPTUFJTlMgXAogIC1lIEdBVEVXQVlfRkVBVFVSRVMgXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtZSBBUk9fTE9HX0xFVkVMIFwKICAtZSBFTlZJUk9OTUVOVCBcCiAgLW0gMmcgXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC1wIDgwOjgwODAgXAogIC1wIDgwODE6ODA4MSBcCiAgLXAgNDQzOjg0NDMgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAke1JQSU1BR0V9IFwKICAke1JPTEV9CkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wIC10IDM2MDAgJU4KVGltZW91dFN0b3BTZWM9MzYwMApSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldAogICAgJwp3cml0ZV9maWxlIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZW5hbWUgYXJvX2dhdGV3YXlfc2VydmljZV9maWxlIHRydWUKfQpjb25maWd1cmVfc2VydmljZV9hcm9fcnAoKXsKbG9jYWwgLW4gaW1hZ2U9IiQxIgpsb2NhbCAtbiByb2xlPSIkMiIKbG9jYWwgLW4gY29uZl9maWxlPSIkMyIKbG9jYWwgLW4gaXBhZGRyZXNzPSIkNCIKbG9nICJzdGFydGluZyIKbG9nICJDb25maWd1cmluZyBhcm8tcnAgc2VydmljZSIKbG9jYWwgLXIgYXJvX3JwX2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1ycCcKbG9jYWwgLXIgYWRkX2NvbmZfZmlsZT0iUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpFTlZJUk9OTUVOVD0nJEVOVklST05NRU5UJwpST0xFPScke3JvbGUsLH0nCkFST19MT0dfTEVWRUw9JyRSUExPR0xFVkVMJyIKd3JpdGVfZmlsZSBhcm9fcnBfY29uZl9maWxlbmFtZSBjb25mX2ZpbGUgdHJ1ZQp3cml0ZV9maWxlIGFyb19ycF9jb25mX2ZpbGVuYW1lIGFkZF9jb25mX2ZpbGUgZmFsc2UKbG9jYWwgLXIgYXJvX3JwX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLXJwLnNlcnZpY2UnCmxvY2FsIC1yIGFyb19ycF9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1ycApFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC1lIEFDUl9SRVNPVVJDRV9JRCBcCiAgLWUgQURNSU5fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBUk1fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBWlVSRV9BUk1fQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9GUF9DTElFTlRfSUQgXAogIC1lIENMVVNURVJfTURNX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURNX05BTUVTUEFDRSBcCiAgLWUgQ0xVU1RFUl9NRFNEX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiBcCiAgLWUgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRSBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBET01BSU5fTkFNRSBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX1JFU09VUkNFR1JPVVAgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIE1EU0RfRU5WSVJPTk1FTlQgXAogIC1lIFJQX0ZFQVRVUkVTIFwKICAtZSBBUk9fSU5TVEFMTF9WSUFfSElWRSBcCiAgLWUgQVJPX0hJVkVfREVGQVVMVF9JTlNUQUxMRVJfUFVMTFNQRUMgXAogIC1lIEFST19BRE9QVF9CWV9ISVZFIFwKICAtZSBPSURDX0FGRF9FTkRQT0lOVCBcCiAgLWUgT0lEQ19TVE9SQUdFX0FDQ09VTlRfTkFNRSBcCiAgLWUgTVNJX1JQX0VORFBPSU5UIFwKICAtZSBPVEVMX0FVRElUX1FVRVVFX1NJWkUgXAogIC1lIE1JU0VfQUREUkVTUyBcCiAgLWUgQVJPX0xPR19MRVZFTCBcCiAgLWUgRU5WSVJPTk1FTlQgXAogIC1tIDJnIFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtcCA0NDM6ODQ0MyBcCiAgLXYgL2V0Yy9hcm8tcnA6L2V0Yy9hcm8tcnAgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAtdiAvdmFyL3J1bi9tZHNkL2FzYTovdmFyL3J1bi9tZHNkL2FzYTp6IFwKICAke1JQSU1BR0V9IFwKICAke1JPTEV9CkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wIC10IDM2MDAgJU4KVGltZW91dFN0b3BTZWM9MzYwMApSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKd3JpdGVfZmlsZSBhcm9fcnBfc2VydmljZV9maWxlbmFtZSBhcm9fcnBfc2VydmljZV9maWxlIHRydWUKfQpjb25maWd1cmVfc2VydmljZV9hcm9fbW9uaXRvcigpewpsb2NhbCAtbiBpbWFnZT0iJDEiCmxvY2FsIC1uIGlwYWRkcmVzcz0iJDIiCmxvZyAic3RhcnRpbmciCmxvZyAiQ29uZmlndXJpbmcgYXJvLW1vbml0b3Igc2VydmljZSIKbG9jYWwgLXIgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tbW9uaXRvcicKbG9jYWwgLXIgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGU9IkFaVVJFX0ZQX0NMSUVOVF9JRD0nJEZQQ0xJRU5USUQnCkRPTUFJTl9OQU1FPSckTE9DQVRJT04uJENMVVNURVJQQVJFTlRET01BSU5OQU1FJwpDTFVTVEVSX01EU0RfQUNDT1VOVD0nJENMVVNURVJNRFNEQUNDT1VOVCcKQ0xVU1RFUl9NRFNEX0NPTkZJR19WRVJTSU9OPSckQ0xVU1RFUk1EU0RDT05GSUdWRVJTSU9OJwpHQVRFV0FZX0RPTUFJTlM9JyRHQVRFV0FZRE9NQUlOUycKR0FURVdBWV9SRVNPVVJDRUdST1VQPSckR0FURVdBWVJFU09VUkNFR1JPVVBOQU1FJwpNRFNEX0VOVklST05NRU5UPSckTURTREVOVklST05NRU5UJwpDTFVTVEVSX01EU0RfTkFNRVNQQUNFPSckQ0xVU1RFUk1EU0ROQU1FU1BBQ0UnCkNMVVNURVJfTURNX0FDQ09VTlQ9JyRDTFVTVEVSTURNQUNDT1VOVCcKQ0xVU1RFUl9NRE1fTkFNRVNQQUNFPUJCTQpEQVRBQkFTRV9BQ0NPVU5UX05BTUU9JyREQVRBQkFTRUFDQ09VTlROQU1FJwpFTlZJUk9OTUVOVD0nJEVOVklST05NRU5UJwpLRVlWQVVMVF9QUkVGSVg9JyRLRVlWQVVMVFBSRUZJWCcKTURNX0FDQ09VTlQ9JyRSUE1ETUFDQ09VTlQnCk1ETV9OQU1FU1BBQ0U9QkJNClJQSU1BR0U9JyRpbWFnZScKUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpBUk9fSU5TVEFMTF9WSUFfSElWRT0nJENMVVNURVJTSU5TVEFMTFZJQUhJVkUnCkFST19ISVZFX0RFRkFVTFRfSU5TVEFMTEVSX1BVTExTUEVDPSckQ0xVU1RFUkRFRkFVTFRJTlNUQUxMRVJQVUxMU1BFQycKQVJPX0FET1BUX0JZX0hJVkU9JyRDTFVTVEVSU0FET1BUQllISVZFJwpBUk9fTE9HX0xFVkVMPSckTU9OSVRPUkxPR0xFVkVMJyIKd3JpdGVfZmlsZSBhcm9fbW9uaXRvcl9zZXJ2aWNlX2NvbmZfZmlsZW5hbWUgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGUgdHJ1ZQpsb2NhbCAtciBhcm9fbW9uaXRvcl9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1tb25pdG9yLnNlcnZpY2UnCmxvY2FsIC1yIGFyb19tb25pdG9yX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLW1vbml0b3IKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtZSBBWlVSRV9GUF9DTElFTlRfSUQgXAogIC1lIERPTUFJTl9OQU1FIFwKICAtZSBDTFVTVEVSX01EU0RfQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRFNEX0NPTkZJR19WRVJTSU9OIFwKICAtZSBHQVRFV0FZX0RPTUFJTlMgXAogIC1lIEdBVEVXQVlfUkVTT1VSQ0VHUk9VUCBcCiAgLWUgTURTRF9FTlZJUk9OTUVOVCBcCiAgLWUgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRSBcCiAgLWUgQ0xVU1RFUl9NRE1fQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRE1fTkFNRVNQQUNFIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIEFST19JTlNUQUxMX1ZJQV9ISVZFIFwKICAtZSBBUk9fSElWRV9ERUZBVUxUX0lOU1RBTExFUl9QVUxMU1BFQyBcCiAgLWUgQVJPX0FET1BUX0JZX0hJVkUgXAogIC1lIEFST19MT0dfTEVWRUwgXAogIC1lIEVOVklST05NRU5UIFwKICAtbSAyLjVnIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJHtSUElNQUdFfSBcCiAgbW9uaXRvcgpSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKd3JpdGVfZmlsZSBhcm9fbW9uaXRvcl9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19tb25pdG9yX3NlcnZpY2VfZmlsZSB0cnVlCn0KY29uZmlndXJlX3NlcnZpY2VfYXJvX3BvcnRhbCgpewpsb2NhbCAtbiBpbWFnZT0iJDEiCmxvY2FsIC1uIGlwYWRkcmVzcz0iJDIiCmxvZyAic3RhcnRpbmciCmxvZyAiQ29uZmlndXJpbmcgYXJvIHBvcnRhbCBzZXJ2aWNlIgpsb2NhbCAtciBhcm9fcG9ydGFsX3NlcnZpY2VfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLXBvcnRhbCcKbG9jYWwgLXIgYXJvX3BvcnRhbF9zZXJ2aWNlX2NvbmZfZmlsZT0iQVpVUkVfUE9SVEFMX0FDQ0VTU19HUk9VUF9JRFM9JyRQT1JUQUxBQ0NFU1NHUk9VUElEUycKQVpVUkVfUE9SVEFMX0NMSUVOVF9JRD0nJFBPUlRBTENMSUVOVElEJwpBWlVSRV9QT1JUQUxfRUxFVkFURURfR1JPVVBfSURTPSckUE9SVEFMRUxFVkFURURHUk9VUElEUycKREFUQUJBU0VfQUNDT1VOVF9OQU1FPSckREFUQUJBU0VBQ0NPVU5UTkFNRScKS0VZVkFVTFRfUFJFRklYPSckS0VZVkFVTFRQUkVGSVgnCk1ETV9BQ0NPVU5UPSckUlBNRE1BQ0NPVU5UJwpNRE1fTkFNRVNQQUNFPVBvcnRhbApQT1JUQUxfSE9TVE5BTUU9JyRMT0NBVElPTi5hZG1pbi4kUlBQQVJFTlRET01BSU5OQU1FJwpFTlZJUk9OTUVOVD0nJEVOVklST05NRU5UJwpPVEVMX0FVRElUX1FVRVVFX1NJWkU9JyRPVEVMQVVESVRRVUVVRVNJWkUnClJQSU1BR0U9JyRpbWFnZScKUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpBUk9fTE9HX0xFVkVMPSckUE9SVEFMTE9HTEVWRUwnIgp3cml0ZV9maWxlIGFyb19wb3J0YWxfc2VydmljZV9jb25mX2ZpbGVuYW1lIGFyb19wb3J0YWxfc2VydmljZV9jb25mX2ZpbGUgdHJ1ZQpsb2NhbCAtciBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLXBvcnRhbC5zZXJ2aWNlJwpsb2NhbCAtciBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKU3RhcnRMaW1pdEludGVydmFsPTAKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLXBvcnRhbApFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC1lIEFaVVJFX1BPUlRBTF9BQ0NFU1NfR1JPVVBfSURTIFwKICAtZSBBWlVSRV9QT1JUQUxfQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9QT1JUQUxfRUxFVkFURURfR1JPVVBfSURTIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIFBPUlRBTF9IT1NUTkFNRSBcCiAgLWUgT1RFTF9BVURJVF9RVUVVRV9TSVpFIFwKICAtZSBBUk9fTE9HX0xFVkVMIFwKICAtZSBFTlZJUk9OTUVOVCBcCiAgLW0gMmcgXAogIC1wIDQ0NDo4NDQ0IFwKICAtcCAyMjIyOjIyMjIgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAtdiAvdmFyL3J1bi9tZHNkL2FzYTovdmFyL3J1bi9tZHNkL2FzYTp6IFwKICAke1JQSU1BR0V9IFwKICBwb3J0YWwKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCndyaXRlX2ZpbGUgYXJvX3BvcnRhbF9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19wb3J0YWxfc2VydmljZV9maWxlIHRydWUKfQpjb25maWd1cmVfc2VydmljZV9hcm9fbWltb19hY3R1YXRvcigpewpsb2NhbCAtbiBpbWFnZT0iJDEiCmxvY2FsIC1uIGNvbmZfZmlsZT0iJDIiCmxvY2FsIC1uIGlwYWRkcmVzcz0iJDMiCmxvZyAic3RhcnRpbmciCmxvZyAiQ29uZmlndXJpbmcgYXJvLW1pbW8tYWN0dWF0b3Igc2VydmljZSIKbG9jYWwgLXIgYXJvX21pbW9fYWN0dWF0b3JfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW1pbW8tYWN0dWF0b3InCmxvY2FsIC1yIGFkZF9jb25mX2ZpbGU9IlBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcycKQVJPX0xPR19MRVZFTD0nJE1JTU9BQ1RVQVRPUkxPR0xFVkVMJyIKd3JpdGVfZmlsZSBhcm9fbWltb19hY3R1YXRvcl9jb25mX2ZpbGVuYW1lIGNvbmZfZmlsZSB0cnVlCndyaXRlX2ZpbGUgYXJvX21pbW9fYWN0dWF0b3JfY29uZl9maWxlbmFtZSBhZGRfY29uZl9maWxlIGZhbHNlCmxvY2FsIC1yIGFyb19taW1vX2FjdHVhdG9yX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLW1pbW8tYWN0dWF0b3Iuc2VydmljZScKbG9jYWwgLXIgYXJvX21pbW9fYWN0dWF0b3Jfc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tbWltby1hY3R1YXRvcgpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC1lIEFDUl9SRVNPVVJDRV9JRCBcCiAgLWUgQURNSU5fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBUk1fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBWlVSRV9BUk1fQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9GUF9DTElFTlRfSUQgXAogIC1lIENMVVNURVJfTURNX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURNX05BTUVTUEFDRSBcCiAgLWUgQ0xVU1RFUl9NRFNEX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiBcCiAgLWUgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRSBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBET01BSU5fTkFNRSBcCiAgLWUgRU5WSVJPTk1FTlQgXAogIC1lIEdBVEVXQVlfRE9NQUlOUyBcCiAgLWUgR0FURVdBWV9SRVNPVVJDRUdST1VQIFwKICAtZSBLRVlWQVVMVF9QUkVGSVggXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtZSBNRFNEX0VOVklST05NRU5UIFwKICAtZSBSUF9GRUFUVVJFUyBcCiAgLWUgQVJPX0lOU1RBTExfVklBX0hJVkUgXAogIC1lIEFST19ISVZFX0RFRkFVTFRfSU5TVEFMTEVSX1BVTExTUEVDIFwKICAtZSBBUk9fQURPUFRfQllfSElWRSBcCiAgLWUgT0lEQ19BRkRfRU5EUE9JTlQgXAogIC1lIE9JRENfU1RPUkFHRV9BQ0NPVU5UX05BTUUgXAogIC1lIE1TSV9SUF9FTkRQT0lOVCBcCiAgLWUgQVJPX0xPR19MRVZFTCBcCiAgLW0gMmcgXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC1wIDQ0NTo4NDQ1IFwKICAtdiAvZXRjL2Fyby1ycDovZXRjL2Fyby1ycCBcCiAgLXYgL3J1bi9zeXN0ZW1kL2pvdXJuYWw6L3J1bi9zeXN0ZW1kL2pvdXJuYWwgXAogIC12IC92YXIvZXR3Oi92YXIvZXR3OnogXAogICR7UlBJTUFHRX0gXAogIG1pbW8tYWN0dWF0b3IKRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgLXQgMzYwMCAlTgpUaW1lb3V0U3RvcFNlYz0zNjAwClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Jwp3cml0ZV9maWxlIGFyb19taW1vX2FjdHVhdG9yX3NlcnZpY2VfZmlsZW5hbWUgYXJvX21pbW9fYWN0dWF0b3Jfc2VydmljZV9maWxlIHRydWUKfQpjb25maWd1cmVfc2VydmljZV9hcm9fbWltb19zY2hlZHVsZXIoKXsKbG9jYWwgLW4gaW1hZ2U9IiQxIgpsb2NhbCAtbiBjb25mX2ZpbGU9IiQyIgpsb2NhbCAtbiBpcGFkZHJlc3M9IiQzIgpsb2cgInN0YXJ0aW5nIgpsb2cgIkNvbmZpZ3VyaW5nIGFyby1taW1vLXNjaGVkdWxlciBzZXJ2aWNlIgpsb2NhbCAtciBhcm9fbWltb19zY2hlZHVsZXJfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW1pbW8tc2NoZWR1bGVyJwpsb2NhbCAtciBhZGRfY29uZl9maWxlPSJQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnCkFST19MT0dfTEVWRUw9JyRNSU1PU0NIRURVTEVSTE9HTEVWRUwnIgp3cml0ZV9maWxlIGFyb19taW1vX3NjaGVkdWxlcl9jb25mX2ZpbGVuYW1lIGNvbmZfZmlsZSB0cnVlCndyaXRlX2ZpbGUgYXJvX21pbW9fc2NoZWR1bGVyX2NvbmZfZmlsZW5hbWUgYWRkX2NvbmZfZmlsZSBmYWxzZQpsb2NhbCAtciBhcm9fbWltb19zY2hlZHVsZXJfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tbWltby1zY2hlZHVsZXIuc2VydmljZScKbG9jYWwgLXIgYXJvX21pbW9fc2NoZWR1bGVyX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLW1pbW8tc2NoZWR1bGVyCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLWUgQUNSX1JFU09VUkNFX0lEIFwKICAtZSBBRE1JTl9BUElfQ0xJRU5UX0NFUlRfQ09NTU9OX05BTUUgXAogIC1lIEFSTV9BUElfQ0xJRU5UX0NFUlRfQ09NTU9OX05BTUUgXAogIC1lIEFaVVJFX0FSTV9DTElFTlRfSUQgXAogIC1lIEFaVVJFX0ZQX0NMSUVOVF9JRCBcCiAgLWUgQ0xVU1RFUl9NRE1fQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRE1fTkFNRVNQQUNFIFwKICAtZSBDTFVTVEVSX01EU0RfQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRFNEX0NPTkZJR19WRVJTSU9OIFwKICAtZSBDTFVTVEVSX01EU0RfTkFNRVNQQUNFIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIERPTUFJTl9OQU1FIFwKICAtZSBHQVRFV0FZX0RPTUFJTlMgXAogIC1lIEdBVEVXQVlfUkVTT1VSQ0VHUk9VUCBcCiAgLWUgS0VZVkFVTFRfUFJFRklYIFwKICAtZSBNRE1fQUNDT1VOVCBcCiAgLWUgTURNX05BTUVTUEFDRSBcCiAgLWUgTURTRF9FTlZJUk9OTUVOVCBcCiAgLWUgUlBfRkVBVFVSRVMgXAogIC1lIEFST19JTlNUQUxMX1ZJQV9ISVZFIFwKICAtZSBBUk9fSElWRV9ERUZBVUxUX0lOU1RBTExFUl9QVUxMU1BFQyBcCiAgLWUgQVJPX0FET1BUX0JZX0hJVkUgXAogIC1lIE9JRENfQUZEX0VORFBPSU5UIFwKICAtZSBPSURDX1NUT1JBR0VfQUNDT1VOVF9OQU1FIFwKICAtZSBNU0lfUlBfRU5EUE9JTlQgXAogIC1lIEFST19MT0dfTEVWRUwgXAogIC1tIDJnIFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtcCA0NDY6ODQ0NiBcCiAgLXYgL2V0Yy9hcm8tcnA6L2V0Yy9hcm8tcnAgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAke1JQSU1BR0V9IFwKICBtaW1vLXNjaGVkdWxlcgpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAtdCAzNjAwICVOClRpbWVvdXRTdG9wU2VjPTM2MDAKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCndyaXRlX2ZpbGUgYXJvX21pbW9fc2NoZWR1bGVyX3NlcnZpY2VfZmlsZW5hbWUgYXJvX21pbW9fc2NoZWR1bGVyX3NlcnZpY2VfZmlsZSB0cnVlCn0KY29uZmlndXJlX3NlcnZpY2VfYXJvX21pc2UoKXsKbG9jYWwgLW4gaW1hZ2U9IiQxIgpsb2NhbCAtbiBpcGFkZHJlc3M9IiQyIgpsb2cgInN0YXJ0aW5nIgpsb2cgIkNvbmZpZ3VyaW5nIGFyby1taXNlIHNlcnZpY2UiCkxPR0lOSU5TVEFOQ0U9Imh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbSIKaWYgW1sgJEFaVVJFQ0xPVUROQU1FID09ICIkdXNfZ292X2Nsb3VkIiBdXTt0aGVuCkxPR0lOSU5TVEFOQ0U9Imh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLnVzIgpmaQpsb2NhbCAtciBhcm9fbWlzZV9zZXJ2aWNlX2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1taXNlJwpsb2NhbCAtciBhcm9fbWlzZV9zZXJ2aWNlX2NvbmZfZmlsZT0iRlBDTElFTlRJRD0nJEZQQ0xJRU5USUQnCkZQVEVOQU5USUQ9JyRGUFRFTkFOVElEJwpNSVNFSU1BR0U9JyRpbWFnZScKTUlTRVZBTElEQVVESUVOQ0VTPSckTUlTRVZBTElEQVVESUVOQ0VTJwpNSVNFVkFMSURBUFBJRFM9JyRNSVNFVkFMSURBUFBJRFMnCkxPR0lOSU5TVEFOQ0U9JyRMT0dJTklOU1RBTkNFJwpQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnCkVOVklST05NRU5UPSckRU5WSVJPTk1FTlQnIgp3cml0ZV9maWxlIGFyb19taXNlX3NlcnZpY2VfY29uZl9maWxlbmFtZSBhcm9fbWlzZV9zZXJ2aWNlX2NvbmZfZmlsZSB0cnVlCm1rZGlyIC1wIC9hcHAvbWlzZQpsb2NhbCAtciBhcm9fbWlzZV9hcHBzZXR0aW5nc19maWxlbmFtZT0nL2FwcC9taXNlL2FwcHNldHRpbmdzLmpzb24nCmxvY2FsIC1yIGFyb19taXNlX2FwcHNldHRpbmdzX2ZpbGU9InsKICAgIFwiVmVyc2lvblwiOiBcIjFcIiwKICAgIFwiSGVhcnRiZWF0SW50ZXJ2YWxNc1wiOiA1MDAwLAogICAgXCJBenVyZUFkXCI6IHsKICAgICAgICBcIkluc3RhbmNlXCI6IFwiJExPR0lOSU5TVEFOQ0VcIiwKICAgICAgICBcIkNsaWVudElkXCI6IFwiJEZQQ0xJRU5USURcIiwKICAgICAgICBcIlRlbmFudElkXCI6IFwiJEZQVEVOQU5USURcIiwKICAgICAgICBcIkF1ZGllbmNlXCI6IFwiYXBpOi8vJEZQQ0xJRU5USURcIiwKICAgICAgICBcIlNob3dQSUlcIjogZmFsc2UsCiAgICAgICAgXCJJbmJvdW5kUG9saWNpZXNcIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBcIkxhYmVsXCI6IFwiYXJvcnAtYXJtLWluYm91bmQtcG9saWN5XCIsCiAgICAgICAgICAgICAgICBcIkF1dGhvcml0eVwiOiBcIiRMT0dJTklOU1RBTkNFLyRGUFRFTkFOVElEL1wiCiwKICAgICAgICAgICAgICAgIFwiQXV0aGVudGljYXRpb25TY2hlbWVzXCI6IFsKICAgICAgICAgICAgICAgICAgICBcIlBvUFwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgXCJWYWxpZEF1ZGllbmNlc1wiOiAkTUlTRVZBTElEQVVESUVOQ0VTLAogICAgICAgICAgICAgICAgXCJTaWduZWRIdHRwUmVxdWVzdFZhbGlkYXRpb25Qb2xpY3lcIjogewogICAgICAgICAgICAgICAgICAgIFwiVmFsaWRhdGVUc1wiOiB0cnVlLAogICAgICAgICAgICAgICAgICAgIFwiVmFsaWRhdGVNXCI6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgXCJWYWxpZGF0ZVVcIjogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBcIlZhbGlkYXRlUFwiOiB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXCJWYWxpZEFwcGxpY2F0aW9uSWRzXCI6ICRNSVNFVkFMSURBUFBJRFMKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgXCJMb2dnaW5nXCI6IHsKICAgICAgICAgICAgXCJMb2dMZXZlbFwiOiBcIkluZm9ybWF0aW9uXCIKICAgICAgICB9LAogICAgICAgIFwiTW9kdWxlc1wiOiB7CiAgICAgICAgICAgIFwiVHJWMlwiOiB7CiAgICAgICAgICAgICAgICBcIk1vZHVsZVR5cGVcIjogXCJUclYyTW9kdWxlXCIsCiAgICAgICAgICAgICAgICBcIkVuYWJsZWRcIjogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIFwiQWxsb3dlZEhvc3RzXCI6IFwiKlwiLAogICAgXCJLZXN0cmVsXCI6IHsKICAgICAgICBcIkVuZHBvaW50c1wiOiB7CiAgICAgICAgICAgIFwiSHR0cFwiOiB7CiAgICAgICAgICAgICAgICBcIlVybFwiOiBcImh0dHA6Ly8kaXBhZGRyZXNzOjUwMDBcIgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIFwiTG9nZ2luZ1wiOiB7CiAgICAgICAgXCJMb2dMZXZlbFwiOiB7CiAgICAgICAgICAgIFwiRGVmYXVsdFwiOiBcIkluZm9ybWF0aW9uXCIsCiAgICAgICAgICAgIFwiTWljcm9zb2Z0XCI6IFwiSW5mb3JtYXRpb25cIiwKICAgICAgICAgICAgXCJNaWNyb3NvZnQuSG9zdGluZy5MaWZldGltZVwiOiBcIkluZm9ybWF0aW9uXCIKICAgICAgICB9LAogICAgICAgIFwiQ29uc29sZVwiOiB7CiAgICAgICAgICAgIFwiRm9ybWF0dGVyTmFtZVwiOiBcIlNpbXBsZVwiLAogICAgICAgICAgICBcIkZvcm1hdHRlck9wdGlvbnNcIjogewogICAgICAgICAgICAgICAgXCJJbmNsdWRlU2NvcGVzXCI6IHRydWUsCiAgICAgICAgICAgICAgICBcIlNpbmdsZUxpbmVcIjogdHJ1ZSwKICAgICAgICAgICAgICAgIFwiVGltZXN0YW1wRm9ybWF0XCI6IFwiSEg6bW06c3MuZmZmZiBcIiwKICAgICAgICAgICAgICAgIFwiVXNlVXRjVGltZXN0YW1wXCI6IHRydWUKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfSIKd3JpdGVfZmlsZSBhcm9fbWlzZV9hcHBzZXR0aW5nc19maWxlbmFtZSBhcm9fbWlzZV9hcHBzZXR0aW5nc19maWxlIHRydWUKbG9jYWwgLXIgYXJvX21pc2Vfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tbWlzZS5zZXJ2aWNlJwpsb2NhbCAtciBhcm9fbWlzZV9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0ClN0YXJ0TGltaXRJbnRlcnZhbFNlYz0wCltTZXJ2aWNlXQpSZXN0YXJ0U2VjPTFzCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tbWlzZQpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLXAgNTAwMDo1MDAwIFwKICAtdiAvYXBwL21pc2UvYXBwc2V0dGluZ3MuanNvbjovYXBwL2FwcHNldHRpbmdzLmpzb246eiBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtLXJtIFwKICAtZSBFTlZJUk9OTUVOVCBcCiAgJHtNSVNFSU1BR0V9CkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wICVOClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MwpTdGFydExpbWl0SW50ZXJ2YWw9MApbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCndyaXRlX2ZpbGUgYXJvX21pc2Vfc2VydmljZV9maWxlbmFtZSBhcm9fbWlzZV9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19vdGVsX2NvbGxlY3Rvcigpewpsb2NhbCAtbiBpbWFnZT0iJDEiCmxvY2FsIC1uIHN0YXRpY19pcF9hZGRyZXNzPSIkMiIKbG9jYWwgLW4gaXBhZGRyZXNzPSIkMyIKbG9nICJzdGFydGluZyIKbG9nICJDb25maWd1cmluZyBhcm8tb3RlbC1jb2xsZWN0b3Igc2VydmljZSIKbG9jYWwgLXIgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW90ZWwtY29sbGVjdG9yJwpsb2NhbCAtciBhcm9fb3RlbF9jb2xsZWN0b3Jfc2VydmljZV9jb25mX2ZpbGU9IkdPTUVNTElNSVQ9MTAwME1pQgpPVEVMSU1BR0U9JyRpbWFnZScKUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpFTlZJUk9OTUVOVD0nJEVOVklST05NRU5UJyIKd3JpdGVfZmlsZSBhcm9fb3RlbF9jb2xsZWN0b3Jfc2VydmljZV9jb25mX2ZpbGVuYW1lIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2NvbmZfZmlsZSB0cnVlCm1rZGlyIC1wIC9hcHAvb3RlbApsb2NhbCAtciBhcm9fb3RlbF9jb2xsZWN0b3JfYXBwY29uZmlnX2ZpbGVuYW1lPScvYXBwL290ZWwvY29uZmlnLnlhbWwnCmxvY2FsIC1yIGFyb19vdGVsX2NvbGxlY3Rvcl9hcHBjb25maWdfZmlsZT0icmVjZWl2ZXJzOgogIGh0dHBjaGVjazoKICAgIHRhcmdldHM6CiAgICAjIE1JU0UgRW5kcG9pbnRzCiAgICAgIC0gZW5kcG9pbnQ6IGh0dHA6Ly8ke3N0YXRpY19pcF9hZGRyZXNzWyJtaXNlIl19OjUwMDAvaGVhbHRoegogICAgICAgIG1ldGhvZDogR0VUCiAgICAgIC0gZW5kcG9pbnQ6IGh0dHA6Ly8ke3N0YXRpY19pcF9hZGRyZXNzWyJtaXNlIl19OjUwMDAvcmVhZHl6CiAgICAgICAgbWV0aG9kOiBHRVQKICAgICMgT1RFTHMgb3duIEVuZHBvaW50cwogICAgICAtIGVuZHBvaW50OiBodHRwOi8vJGlwYWRkcmVzczoxMzEzMy9oZWFsdGh6CiAgICAgICAgbWV0aG9kOiBHRVQKICAgICAgLSBlbmRwb2ludDogaHR0cDovLyRpcGFkZHJlc3M6MTMxMzMvcmVhZHl6CiAgICAgICAgbWV0aG9kOiBHRVQKICAgIGNvbGxlY3Rpb25faW50ZXJ2YWw6IDIwcwpwcm9jZXNzb3JzOgogIGJhdGNoOgogIGF0dHJpYnV0ZXMvaW5zZXJ0OgogICAgYWN0aW9uczoKICAgICAgLSBrZXk6IFwibG9jYXRpb25cIgogICAgICAgIGFjdGlvbjogaW5zZXJ0CiAgICAgICAgdmFsdWU6IFwiJExPQ0FUSU9OXCIKICAgICAgLSBrZXk6IFwiaG9zdFwiCiAgICAgICAgYWN0aW9uOiBpbnNlcnQKICAgICAgICB2YWx1ZTogXCIkKGhvc3RuYW1lKVwiCmV4dGVuc2lvbnM6CiAgaGVhbHRoX2NoZWNrOgogICAgZW5kcG9pbnQ6ICRpcGFkZHJlc3M6MTMxMzMKZXhwb3J0ZXJzOgogIG90bHA6CiAgICBlbmRwb2ludDogJHtzdGF0aWNfaXBfYWRkcmVzc1sibWRtIl19OjQzMTcKICAgIHRsczoKICAgICAgaW5zZWN1cmU6IHRydWUKc2VydmljZToKICBleHRlbnNpb25zOiBbaGVhbHRoX2NoZWNrXQogIHBpcGVsaW5lczoKICAgIG1ldHJpY3M6CiAgICAgIHJlY2VpdmVyczogW2h0dHBjaGVja10KICAgICAgcHJvY2Vzc29yczogW2JhdGNoLCBhdHRyaWJ1dGVzL2luc2VydF0KICAgICAgZXhwb3J0ZXJzOiBbb3RscF0iCndyaXRlX2ZpbGUgYXJvX290ZWxfY29sbGVjdG9yX2FwcGNvbmZpZ19maWxlbmFtZSBhcm9fb3RlbF9jb2xsZWN0b3JfYXBwY29uZmlnX2ZpbGUgdHJ1ZQpsb2NhbCAtciBhcm9fb3RlbF9jb2xsZWN0b3Jfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tb3RlbC1jb2xsZWN0b3Iuc2VydmljZScKbG9jYWwgLXIgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW1kbS5zZXJ2aWNlCldhbnRzPW1kbS5zZXJ2aWNlClN0YXJ0TGltaXRJbnRlcnZhbFNlYz0wCltTZXJ2aWNlXQpSZXN0YXJ0U2VjPTFzCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tb3RlbC1jb2xsZWN0b3IKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1uZXR3b3JrPSR7UE9ETUFOX05FVFdPUkt9IFwKICAtLWlwICR7SVBBRERSRVNTfSBcCiAgLW0gMmcgXAogIC1lIEVOVklST05NRU5UIFwKICAtdiAvYXBwL290ZWwvY29uZmlnLnlhbWw6L2V0Yy9vdGVsY29sLWNvbnRyaWIvY29uZmlnLnlhbWw6eiBcCiAgJHtPVEVMSU1BR0V9CkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wICVOClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MwpTdGFydExpbWl0SW50ZXJ2YWw9MApbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCndyaXRlX2ZpbGUgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfZmlsZW5hbWUgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfZmlsZSB0cnVlCn0KY29uZmlndXJlX3NlcnZpY2VfbWRzZCgpewpsb2NhbCAtbiByb2xlPSIkMSIKbG9jYWwgLW4gbW9uaXRvcl9jb25maWdfdmVyc2lvbj0iJDIiCmxvZyAic3RhcnRpbmciCmxvZyAiY29uZmlndXJpbmcgbWRzZCBzZXJ2aWNlIgp2ZXJpZnlfcm9sZSByb2xlCmxvY2FsIC1yIG1kc2Rfc2VydmljZV9kaXI9Ii9ldGMvc3lzdGVtZC9zeXN0ZW0vbWRzZC5zZXJ2aWNlLmQiCm1rZGlyIC1wICIkbWRzZF9zZXJ2aWNlX2RpciIKbG9jYWwgLXIgbWRzZF9vdmVycmlkZV9jb25mX2ZpbGVuYW1lPSIkbWRzZF9zZXJ2aWNlX2Rpci9vdmVycmlkZS5jb25mIgpsb2NhbCAtciBtZHNkX2NlcnRpZmljYXRlX3Nhbj0iJChvcGVuc3NsIHg1MDkgLWluIC92YXIvbGliL3dhYWdlbnQvTWljcm9zb2Z0LkF6dXJlLktleVZhdWx0LlN0b3JlL21kc2QucGVtIC1ub291dCAtc3ViamVjdHxzZWQgLWUgJ3MvLipDTiA9IC8vJykiCmxvY2FsIC1yIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlPSJbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0Igp3cml0ZV9maWxlIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlbmFtZSBtZHNkX292ZXJyaWRlX2NvbmZfZmlsZSB0cnVlCmxvY2FsIC1yIGRlZmF1bHRfbWRzZF9maWxlbmFtZT0iL2V0Yy9kZWZhdWx0L21kc2QiCmxvY2FsIC1yIGRlZmF1bHRfbWRzZF9maWxlPSJNRFNEX1JPTEVfUFJFRklYPS92YXIvcnVuL21kc2QvZGVmYXVsdApNRFNEX09QVElPTlM9XCItQSAtZCAtciBcJE1EU0RfUk9MRV9QUkVGSVhcIgoKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0VOVklST05NRU5UPSckTURTREVOVklST05NRU5UJwpleHBvcnQgTU9OSVRPUklOR19HQ1NfQUNDT1VOVD0nJFJQTURTREFDQ09VTlQnCmV4cG9ydCBNT05JVE9SSU5HX0dDU19SRUdJT049JyRMT0NBVElPTicKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0FVVEhfSURfVFlQRT1BdXRoS2V5VmF1bHQKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0FVVEhfSUQ9JyRtZHNkX2NlcnRpZmljYXRlX3NhbicKZXhwb3J0IE1PTklUT1JJTkdfR0NTX05BTUVTUEFDRT0nJFJQTURTRE5BTUVTUEFDRScKZXhwb3J0IE1PTklUT1JJTkdfQ09ORklHX1ZFUlNJT049JyRtb25pdG9yX2NvbmZpZ192ZXJzaW9uJwpleHBvcnQgTU9OSVRPUklOR19VU0VfR0VORVZBX0NPTkZJR19TRVJWSUNFPXRydWUKZXhwb3J0IE1PTklUT1JJTkdfVEVOQU5UPSckTE9DQVRJT04nCmV4cG9ydCBNT05JVE9SSU5HX1JPTEU9JyRyb2xlJwpleHBvcnQgTU9OSVRPUklOR19ST0xFX0lOU1RBTkNFPVwiJChob3N0bmFtZSlcIgpleHBvcnQgTU9OSVRPUklOR19FTlZJUk9OTUVOVD0nJEVOVklST05NRU5UJwoKZXhwb3J0IE1EU0RfTVNHUEFDS19TT1JUX0NPTFVNTlM9XCIxXCIiCndyaXRlX2ZpbGUgZGVmYXVsdF9tZHNkX2ZpbGVuYW1lIGRlZmF1bHRfbWRzZF9maWxlIHRydWUKfQpjb25maWd1cmVfc2VydmljZV9mbHVlbnRiaXQoKXsKbG9jYWwgLW4gY29uZl9maWxlPSIkMSIKbG9jYWwgLW4gaW1hZ2U9IiQyIgpsb2cgInN0YXJ0aW5nIgpsb2cgIkNvbmZpZ3VyaW5nIGZsdWVudGJpdCBzZXJ2aWNlIgpta2RpciAtcCAvZXRjL2ZsdWVudGJpdC8KbWtkaXIgLXAgL3Zhci9saWIvZmx1ZW50CmxvY2FsIC1yIGNvbmZfZmlsZW5hbWU9Jy9ldGMvZmx1ZW50Yml0L2ZsdWVudGJpdC5jb25mJwp3cml0ZV9maWxlIGNvbmZfZmlsZW5hbWUgY29uZl9maWxlIHRydWUKbG9jYWwgLXIgc3lzY29uZmlnX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9mbHVlbnRiaXQnCmxvY2FsIC1yIHN5c2NvbmZpZ19maWxlPSJGTFVFTlRCSVRJTUFHRT0nJGltYWdlJwpFTlZJUk9OTUVOVD0nJEVOVklST05NRU5UJyIKd3JpdGVfZmlsZSBzeXNjb25maWdfZmlsZW5hbWUgc3lzY29uZmlnX2ZpbGUgdHJ1ZQpsb2NhbCAtciBzZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2ZsdWVudGJpdC5zZXJ2aWNlJwpsb2NhbCAtciBzZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0ClN0YXJ0TGltaXRJbnRlcnZhbFNlYz0wCgpbU2VydmljZV0KUmVzdGFydFNlYz0xcwpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvZmx1ZW50Yml0CkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLXNlY3VyaXR5LW9wdCBsYWJlbD1kaXNhYmxlIFwKICAtLWVudHJ5cG9pbnQgL29wdC90ZC1hZ2VudC1iaXQvYmluL3RkLWFnZW50LWJpdCBcCiAgLS1uZXQ9aG9zdCBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtZSBFTlZJUk9OTUVOVCBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtdiAvZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZjovZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZiBcCiAgLXYgL3Zhci9saWIvZmx1ZW50Oi92YXIvbGliL2ZsdWVudDp6IFwKICAtdiAvdmFyL2xvZy9qb3VybmFsOi92YXIvbG9nL2pvdXJuYWw6cm8gXAogIC12IC9ldGMvbWFjaGluZS1pZDovZXRjL21hY2hpbmUtaWQ6cm8gXAogICR7RkxVRU5UQklUSU1BR0V9IFwKICAtYyAvZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZgoKRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgJU4KUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz01ClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCndyaXRlX2ZpbGUgc2VydmljZV9maWxlbmFtZSBzZXJ2aWNlX2ZpbGUgdHJ1ZQp9CmNvbmZpZ3VyZV90aW1lcnNfbWRtX21kc2QoKXsKbG9jYWwgLW4gcm9sZT0iJDEiCmxvZyAic3RhcnRpbmciCnZlcmlmeV9yb2xlIHJvbGUKbG9jYWwga2V5dmF1bHRfc3VmZml4IHNlY3JldF9wcmVmaXgKZ2V0X2tleXZhdWx0X3N1ZmZpeCByb2xlIGtleXZhdWx0X3N1ZmZpeCBzZWNyZXRfcHJlZml4CmZvciB2YXIgaW4gIm1kc2QiICJtZG0iO2RvCmxvY2FsIGRvd25sb2FkX2NyZWRzX3NlcnZpY2VfZmlsZW5hbWU9Ii9ldGMvc3lzdGVtZC9zeXN0ZW0vZG93bmxvYWQtJHZhci1jcmVkZW50aWFscy5zZXJ2aWNlIgpsb2NhbCBkb3dubG9hZF9jcmVkc19zZXJ2aWNlX2ZpbGU9IltVbml0XQpEZXNjcmlwdGlvbj1QZXJpb2RpYyAkdmFyIGNyZWRlbnRpYWxzIHJlZnJlc2gKCltTZXJ2aWNlXQpUeXBlPW9uZXNob3QKRXhlY1N0YXJ0PS91c3IvbG9jYWwvYmluL2Rvd25sb2FkLWNyZWRlbnRpYWxzLnNoICR2YXIiCndyaXRlX2ZpbGUgZG93bmxvYWRfY3JlZHNfc2VydmljZV9maWxlbmFtZSBkb3dubG9hZF9jcmVkc19zZXJ2aWNlX2ZpbGUgdHJ1ZQpsb2NhbCBkb3dubG9hZF9jcmVkc190aW1lcl9maWxlbmFtZT0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS9kb3dubG9hZC0kdmFyLWNyZWRlbnRpYWxzLnRpbWVyIgpsb2NhbCBkb3dubG9hZF9jcmVkc190aW1lcl9maWxlPSJbVW5pdF0KRGVzY3JpcHRpb249UGVyaW9kaWMgJHZhciBjcmVkZW50aWFscyByZWZyZXNoCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltUaW1lcl0KT25Cb290U2VjPTBtaW4KT25DYWxlbmRhcj0wLzEyOjAwOjAwCkFjY3VyYWN5U2VjPTVzCgpbSW5zdGFsbF0KV2FudGVkQnk9dGltZXJzLnRhcmdldCIKd3JpdGVfZmlsZSBkb3dubG9hZF9jcmVkc190aW1lcl9maWxlbmFtZSBkb3dubG9hZF9jcmVkc190aW1lcl9maWxlIHRydWUKZG9uZQpsb2NhbCAtciBkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZW5hbWU9Ii91c3IvbG9jYWwvYmluL2Rvd25sb2FkLWNyZWRlbnRpYWxzLnNoIgpsb2NhbCAtciBkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZT0iIyEvYmluL2Jhc2gKc2V0IC1ldQoKQ09NUE9ORU5UPVwkMQplY2hvIFwiRG93bmxvYWQgXCRDT01QT05FTlQgY3JlZGVudGlhbHNcIgoKVEVNUF9ESVI9XCJcJChta3RlbXAgLWQpXCIKZXhwb3J0IEFaVVJFX0NPTkZJR19ESVI9XCJcJChta3RlbXAgLWQpXCIKCmVjaG8gXCJMb2dnaW5nIGludG8gQXp1cmUuLi5cIgpSRVRSSUVTPTMKd2hpbGUgW1sgXCRSRVRSSUVTIC1ndCAwIF1dOyBkbwogICAgaWYgYXogbG9naW4gLWkgLS1hbGxvdy1uby1zdWJzY3JpcHRpb25zCiAgICB0aGVuCiAgICAgICAgZWNobyBcImF6IGxvZ2luIHN1Y2Nlc3NmdWxcIgogICAgICAgIGJyZWFrCiAgICBlbHNlCiAgICAgICAgZWNobyBcImF6IGxvZ2luIGZhaWxlZC4gUmV0cnlpbmcuLi5cIgogICAgICAgIGxldCBSRVRSSUVTLT0xCiAgICAgICAgc2xlZXAgNQogICAgZmkKZG9uZQoKdHJhcCBcImNsZWFudXBcIiBFWElUCgpjbGVhbnVwKCkgewogIGF6IGxvZ291dAogIFtbIFwkVEVNUF9ESVIgPX4gL3RtcC8uKyBdXSAmJiBybSAtcmYgXCRURU1QX0RJUgogIFtbIFwkQVpVUkVfQ09ORklHX0RJUiA9fiAvdG1wLy4rIF1dICYmIHJtIC1yZiBcJEFaVVJFX0NPTkZJR19ESVIKfQoKaWYgW1sgXCRDT01QT05FTlQgPSBcIm1kbVwiIF1dOyB0aGVuCiAgQ1VSUkVOVF9DRVJUX0ZJTEU9XCIvZXRjL21kbS5wZW1cIgplbGlmIFtbIFwkQ09NUE9ORU5UID0gXCJtZHNkXCIgXV07IHRoZW4KICBDVVJSRU5UX0NFUlRfRklMRT1cIi92YXIvbGliL3dhYWdlbnQvTWljcm9zb2Z0LkF6dXJlLktleVZhdWx0LlN0b3JlL21kc2QucGVtXCIKZWxzZQogIGVjaG8gSW52YWxpZCB1c2FnZSAmJiBleGl0IDEKZmkKClNFQ1JFVF9OQU1FPVwiJHNlY3JldF9wcmVmaXgtXCR7Q09NUE9ORU5UfVwiCk5FV19DRVJUX0ZJTEU9XCJcJFRFTVBfRElSL1wkQ09NUE9ORU5ULnBlbVwiCmZvciBhdHRlbXB0IGluIHsxLi41fTsgZG8KICBheiBrZXl2YXVsdCBcCiAgICBzZWNyZXQgXAogICAgZG93bmxvYWQgXAogICAgLS1maWxlIFwiXCRORVdfQ0VSVF9GSUxFXCIgXAogICAgLS1pZCBcImh0dHBzOi8vJEtFWVZBVUxUUFJFRklYLSRrZXl2YXVsdF9zdWZmaXguJEtFWVZBVUxURE5TU1VGRklYL3NlY3JldHMvXCRTRUNSRVRfTkFNRVwiIFwKICAgICYmIGJyZWFrCiAgaWYgW1sgXCRhdHRlbXB0IC1sdCA1IF1dOyB0aGVuIHNsZWVwIDEwOyBlbHNlIGV4aXQgMTsgZmkKZG9uZQoKaWYgWyAtZiBcJE5FV19DRVJUX0ZJTEUgXTsgdGhlbgogIGlmIFtbIFwkQ09NUE9ORU5UID0gXCJtZHNkXCIgXV07IHRoZW4KICAgIGNob3duIHN5c2xvZzpzeXNsb2cgXCRORVdfQ0VSVF9GSUxFCiAgZWxzZQogICAgc2VkIC1pIC1uZSAnMSwvRU5EIENFUlRJRklDQVRFLyBwJyBcJE5FV19DRVJUX0ZJTEUKICBmaQoKICBuZXdfY2VydF9zbj1cIlwkKG9wZW5zc2wgeDUwOSAtaW4gXCJcJE5FV19DRVJUX0ZJTEVcIiAtbm9vdXQgLXNlcmlhbCB8IGF3ayAtRj0gJ3twcmludCBcJDJ9JylcIgogIGN1cnJlbnRfY2VydF9zbj1cIlwkKG9wZW5zc2wgeDUwOSAtaW4gXCJcJENVUlJFTlRfQ0VSVF9GSUxFXCIgLW5vb3V0IC1zZXJpYWwgfCBhd2sgLUY9ICd7cHJpbnQgXCQyfScpXCIKICBpZiBbWyAhIC16IFwkbmV3X2NlcnRfc24gXV0gJiYgW1sgXCRuZXdfY2VydF9zbiAhPSBcIlwkY3VycmVudF9jZXJ0X3NuXCIgXV07IHRoZW4KICAgIGVjaG8gdXBkYXRpbmcgY2VydGlmaWNhdGUgZm9yIFwkQ09NUE9ORU5UCiAgICBjaG1vZCAwNjAwIFwkTkVXX0NFUlRfRklMRQogICAgbXYgXCRORVdfQ0VSVF9GSUxFIFwkQ1VSUkVOVF9DRVJUX0ZJTEUKICBmaQplbHNlCiAgZWNobyBGYWlsZWQgdG8gcmVmcmVzaCBjZXJ0aWZpY2F0ZSBmb3IgXCRDT01QT05FTlQgJiYgZXhpdCAxCmZpIgp3cml0ZV9maWxlIGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlbmFtZSBkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZSB0cnVlCmNobW9kIHUreCAvdXNyL2xvY2FsL2Jpbi9kb3dubG9hZC1jcmVkZW50aWFscy5zaAokZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGVuYW1lIG1kc2QmCndhaXQgIiQhIgokZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGVuYW1lIG1kbSYKd2FpdCAiJCEiCmxvY2FsIC1yIHdhdGNoX21kbV9jcmVkc19zZXJ2aWNlX2ZpbGVuYW1lPSIvZXRjL3N5c3RlbWQvc3lzdGVtL3dhdGNoLW1kbS1jcmVkZW50aWFscy5zZXJ2aWNlIgpsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHNfc2VydmljZV9maWxlPSJbVW5pdF0KRGVzY3JpcHRpb249V2F0Y2ggZm9yIGNoYW5nZXMgaW4gbWRtLnBlbSBhbmQgcmVzdGFydHMgdGhlIG1kbSBzZXJ2aWNlCgpbU2VydmljZV0KVHlwZT1vbmVzaG90CkV4ZWNTdGFydD0vdXNyL2Jpbi9zeXN0ZW1jdGwgcmVzdGFydCBtZG0uc2VydmljZQoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Igp3cml0ZV9maWxlIHdhdGNoX21kbV9jcmVkc19zZXJ2aWNlX2ZpbGVuYW1lIHdhdGNoX21kbV9jcmVkc19zZXJ2aWNlX2ZpbGUgdHJ1ZQpsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHNfcGF0aF9maWxlbmFtZT0nL3Vzci9saWIvc3lzdGVtZC9zeXN0ZW0vd2F0Y2gtbWRtLWNyZWRlbnRpYWxzLnBhdGgnCmxvY2FsIC1yIHdhdGNoX21kbV9jcmVkc19wYXRoX2ZpbGU9J1tQYXRoXQpQYXRoTW9kaWZpZWQ9L2V0Yy9tZG0ucGVtCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCndyaXRlX2ZpbGUgd2F0Y2hfbWRtX2NyZWRzX3BhdGhfZmlsZW5hbWUgd2F0Y2hfbWRtX2NyZWRzX3BhdGhfZmlsZSB0cnVlCmxvY2FsIC1yIHdhdGNoX21kbV9jcmVkcz0nd2F0Y2gtbWRtLWNyZWRlbnRpYWxzLnBhdGgnCnN5c3RlbWN0bCBlbmFibGUgLS1ub3cgIiR3YXRjaF9tZG1fY3JlZHMifHxhYm9ydCAiZmFpbGVkIHRvIGVuYWJsZSBhbmQgc3RhcnQgJHdhdGNoX21kbV9jcmVkcyIKfQpjb25maWd1cmVfc2VydmljZV9tZG0oKXsKbG9jYWwgLW4gcm9sZT0iJDEiCmxvY2FsIC1uIGltYWdlPSIkMiIKbG9jYWwgLW4gaXBhZGRyZXNzPSIkMyIKbG9nICJzdGFydGluZyIKbG9nICJDb25maWd1cmluZyBtZG0gc2VydmljZSIKdmVyaWZ5X3JvbGUgcm9sZQpsb2NhbCAtciBzeXNjb25maWdfbWRtX2ZpbGVuYW1lPSIvZXRjL3N5c2NvbmZpZy9tZG0iCmxvY2FsIC1yIHN5c2NvbmZpZ19tZG1fZmlsZT0iTURNRlJPTlRFTkRVUkw9JyRNRE1GUk9OVEVORFVSTCcKTURNSU1BR0U9JyRpbWFnZScKTURNU09VUkNFRU5WSVJPTk1FTlQ9JyRMT0NBVElPTicKTURNU09VUkNFUk9MRT0nJHJvbGUnCk1ETVNPVVJDRVJPTEVJTlNUQU5DRT1cIiQoaG9zdG5hbWUpXCIKTURNX0lOUFVUPXN0YXRzZF9sb2NhbCxvdGxwX2dycGMKTURNX05BTUVTUEFDRT0nT1RFTCcKTURNX0FDQ09VTlQ9J0F6dXJlUmVkSGF0T3BlblNoaWZ0UlAnClBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcyciCndyaXRlX2ZpbGUgc3lzY29uZmlnX21kbV9maWxlbmFtZSBzeXNjb25maWdfbWRtX2ZpbGUgdHJ1ZQpta2RpciAtcCAvdmFyL2V0dwpsb2NhbCAtciBtZG1fc2VydmljZV9maWxlbmFtZT0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS9tZG0uc2VydmljZSIKbG9jYWwgLXIgbWRtX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvbWRtCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWVudHJ5cG9pbnQgL3Vzci9zYmluL01ldHJpY3NFeHRlbnNpb24gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtbSAyZyBcCiAgLXYgL2V0Yy9tZG0ucGVtOi9ldGMvbWRtLnBlbSBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJHtNRE1JTUFHRX0gXAogIC1JbnB1dCAke01ETV9JTlBVVH0gXAogIC1NZXRyaWNOYW1lc3BhY2UgJHtNRE1fTkFNRVNQQUNFfSBcCiAgLU1vbml0b3JpbmdBY2NvdW50ICR7TURNX0FDQ09VTlR9IFwKICAtQ2VydEZpbGUgL2V0Yy9tZG0ucGVtIFwKICAtRnJvbnRFbmRVcmwgJHtNRE1GUk9OVEVORFVSTH0gXAogIC1Mb2dnZXIgQ29uc29sZSBcCiAgLUxvZ0xldmVsIFdhcm5pbmcgXAogIC1Qcml2YXRlS2V5RmlsZSAvZXRjL21kbS5wZW0gXAogIC1Tb3VyY2VFbnZpcm9ubWVudCAke01ETVNPVVJDRUVOVklST05NRU5UfSBcCiAgLVNvdXJjZVJvbGUgJHtNRE1TT1VSQ0VST0xFfSBcCiAgLVNvdXJjZVJvbGVJbnN0YW5jZSAke01ETVNPVVJDRVJPTEVJTlNUQU5DRX0KRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgJU4KUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCndyaXRlX2ZpbGUgbWRtX3NlcnZpY2VfZmlsZW5hbWUgbWRtX3NlcnZpY2VfZmlsZSB0cnVlCn0KY29uZmlndXJlX3Ztc3NfYXJvX3NlcnZpY2VzKCl7CmxvY2FsIC1uIHI9IiQxIgpsb2NhbCAtbiBpbWFnZXM9IiQyIgpsb2NhbCAtbiBjb25maWdzPSIkMyIKbG9nICJzdGFydGluZyIKdmVyaWZ5X3JvbGUgIiQxIgppZiBbICIkciIgPT0gIiRyb2xlX2dhdGV3YXkiIF07dGhlbgpjb25maWd1cmVfc2VydmljZV9hcm9fZ2F0ZXdheSAiJHtpbWFnZXNbInJwIl19IiAiJDEiICIke2NvbmZpZ3NbImdhdGV3YXlfY29uZmlnIl19IiAiJHtjb25maWdzWyJzdGF0aWNfaXBfYWRkcmVzcyJdfVsiZ2F0ZXdheSJdIgpjb25maWd1cmVfY2VydHNfZ2F0ZXdheQplbGlmIFsgIiRyIiA9PSAiJHJvbGVfcnAiIF07dGhlbgpjb25maWd1cmVfc2VydmljZV9hcm9fcnAgIiR7aW1hZ2VzWyJycCJdfSIgIiQxIiAiJHtjb25maWdzWyJycF9jb25maWciXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19WyJycCJdIgpjb25maWd1cmVfc2VydmljZV9hcm9fbWltb19hY3R1YXRvciAiJHtpbWFnZXNbInJwIl19IiAiJHtjb25maWdzWyJycF9jb25maWciXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19WyJtaW1vX2FjdHVhdG9yIl0iCmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19taW1vX3NjaGVkdWxlciAiJHtpbWFnZXNbInJwIl19IiAiJHtjb25maWdzWyJycF9jb25maWciXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19WyJtaW1vX3NjaGVkdWxlciJdIgpjb25maWd1cmVfc2VydmljZV9hcm9fbW9uaXRvciAiJHtpbWFnZXNbInJwIl19IiAiJHtjb25maWdzWyJzdGF0aWNfaXBfYWRkcmVzcyJdfVsibW9uaXRvciJdIgpjb25maWd1cmVfc2VydmljZV9hcm9fcG9ydGFsICIke2ltYWdlc1sicnAiXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19WyJwb3J0YWwiXSIKY29uZmlndXJlX3NlcnZpY2VfYXJvX21pc2UgIiR7aW1hZ2VzWyJtaXNlIl19IiAiJHtjb25maWdzWyJzdGF0aWNfaXBfYWRkcmVzcyJdfVsibWlzZSJdIgpjb25maWd1cmVfc2VydmljZV9hcm9fb3RlbF9jb2xsZWN0b3IgIiR7aW1hZ2VzWyJvdGVsIl19IiAiJHtjb25maWdzWyJzdGF0aWNfaXBfYWRkcmVzcyJdfSIgIiR7Y29uZmlnc1sic3RhdGljX2lwX2FkZHJlc3MiXX1bIm90ZWxfY29sbGVjdG9yIl0iCmNvbmZpZ3VyZV9jZXJ0c19ycApmaQpjb25maWd1cmVfc2VydmljZV9mbHVlbnRiaXQgIiR7Y29uZmlnc1siZmx1ZW50Yml0Il19IiAiJHtpbWFnZXNbImZsdWVudGJpdCJdfSIKY29uZmlndXJlX3RpbWVyc19tZG1fbWRzZCAiJDEiCmNvbmZpZ3VyZV9zZXJ2aWNlX21kbSAiJDEiICIke2ltYWdlc1sibWRtIl19IiAiJHtjb25maWdzWyJzdGF0aWNfaXBfYWRkcmVzcyJdfVsibWRtIl0iCmNvbmZpZ3VyZV9zZXJ2aWNlX21kc2QgIiQxIiAiJHtjb25maWdzWyJtZHNkIl19IgpydW5fYXpzZWNkX2NvbmZpZ19zY2FuCn0KdXRpbF9jb21tb249InV0aWwtY29tbW9uLnNoIgppZiBbIC1mICIkdXRpbF9jb21tb24iIF07dGhlbgpzb3VyY2UgIiR1dGlsX2NvbW1vbiIKZmkKdXRpbF9zeXN0ZW09InV0aWwtc3lzdGVtLnNoIgppZiBbIC1mICIkdXRpbF9zeXN0ZW0iIF07dGhlbgpzb3VyY2UgIiR1dGlsX3N5c3RlbSIKZmkKZ2V0X2Jvb3RfZGV2X3V1aWQoKXsKbG9jYWwgLW4gYm9vdF9kZXZfdXVpZD0iJDEiCmJvb3RfZGV2PSIkKGRmIC9ib290L3x0YWlsIC0xfGN1dCAtZCcgJyAtZjEpIgpyb290X2Rldj0iJChkZiAvfHRhaWwgLTF8Y3V0IC1kJyAnIC1mMSkiCmJvb3RfZGV2X3V1aWQ9IiRyb290X2RldiIKaWYgWyAiJGJvb3RfZGV2IiAhPSAiJHJvb3RfZGV2IiBdO3RoZW4KYm9vdF9kZXZfdXVpZD0iYm9vdD1VVUlEPSQoYmxraWQgIiRib290X2RldiIgLXMgVVVJRCAtbyB2YWx1ZSkiCmZpCn0KZmlwc192ZXJpZnkoKXsKZmlwc19lbmFibGVkX3Byb2M9IiQoY2F0IC9wcm9jL3N5cy9jcnlwdG8vZmlwc19lbmFibGVkKSIKZmlwc19lbmFibGVkX3N5c2N0bD0iJChzeXNjdGwgLW4gY3J5cHRvLmZpcHNfZW5hYmxlZCkiCmlmIFsgIiRmaXBzX2VuYWJsZWRfcHJvYyIgLW5lIDEgXXx8WyAiJGZpcHNfZW5hYmxlZF9zeXNjdGwiIC1uZSAxIF07dGhlbgphYm9ydCAiRklQUyBtb2RlIGlzIGRpc2FibGVkIgpmaQpsb2cgIkZJUFMgbW9kZSBpcyBlbmFibGVkIgp9CmZpcHNfY29uZmlndXJlKCl7CmxvY2FsIGJvb3RfdXVpZApnZXRfYm9vdF9kZXZfdXVpZCBib290X3V1aWQKbG9jYWwgZ3J1YjJfZW52CmlmIGdydWIyX2Vudj0iJChncnViMi1lZGl0ZW52IC0gbGlzdHxncmVwIGtlcm5lbG9wdHMpIjt0aGVuCmdydWIyLWVkaXRlbnYgLSBzZXQgIiRncnViMl9lbnYgZmlwcz0xICRib290X3V1aWQiCmVsc2UKZ3J1YmJ5IC0tdXBkYXRlLWtlcm5lbD1BTEwgLS1hcmdzPSJmaXBzPTEgJGJvb3RfdXVpZCIKZmkKfQpjb25maWd1cmVfc3NoZCgpewpsb2cgInN0YXJ0aW5nIgpsb2NhbCAtciBzc2hkX2NvbmZpZz0iL2V0Yy9zc2gvc3NoZF9jb25maWciCmxvZyAiRWRpdGluZyAkc3NoZF9jb25maWcgdG8gYWxsb3cgcGFzc3dvcmQgYXV0aGVudGljYXRpb24iCnNlZCAtaSAncy9QYXNzd29yZEF1dGhlbnRpY2F0aW9uIG5vL1Bhc3N3b3JkQXV0aGVudGljYXRpb24geWVzL2cnICIkc3NoZF9jb25maWciCnN5c3RlbWN0bCByZWxvYWQgc3NoZC5zZXJ2aWNlfHxhYm9ydCAic3NoZCBmYWlsZWQgdG8gcmVsb2FkIgp9CmNvbmZpZ3VyZV9sb2dyb3RhdGUoKXsKbG9jYWwgLW4gZHJvcGluX2ZpbGVzPSIkezE6LWVtcHR5X3N0cn0iCmxvZyAic3RhcnRpbmciCmxvY2FsIC1yIGxvZ3JvdGF0ZV9jb25mX2ZpbGVuYW1lPScvZXRjL2xvZ3JvdGF0ZS5jb25mJwpsb2NhbCAtciBsb2dyb3RhdGVfY29uZl9maWxlPScjIHNlZSAibWFuIGxvZ3JvdGF0ZSIgZm9yIGRldGFpbHMKIyByb3RhdGUgbG9nIGZpbGVzIHdlZWtseQp3ZWVrbHkKCiMga2VlcCAyIHdlZWtzIHdvcnRoIG9mIGJhY2tsb2dzCnJvdGF0ZSAyCgojIGNyZWF0ZSBuZXcgKGVtcHR5KSBsb2cgZmlsZXMgYWZ0ZXIgcm90YXRpbmcgb2xkIG9uZXMKY3JlYXRlCgojIHVzZSBkYXRlIGFzIGEgc3VmZml4IG9mIHRoZSByb3RhdGVkIGZpbGUKZGF0ZWV4dAoKIyB1bmNvbW1lbnQgdGhpcyBpZiB5b3Ugd2FudCB5b3VyIGxvZyBmaWxlcyBjb21wcmVzc2VkCmNvbXByZXNzCgojIFJQTSBwYWNrYWdlcyBkcm9wIGxvZyByb3RhdGlvbiBpbmZvcm1hdGlvbiBpbnRvIHRoaXMgZGlyZWN0b3J5CmluY2x1ZGUgL2V0Yy9sb2dyb3RhdGUuZAoKIyBubyBwYWNrYWdlcyBvd24gd3RtcCBhbmQgYnRtcCAtLSB3ZSB3aWxsIHJvdGF0ZSB0aGVtIGhlcmUKL3Zhci9sb2cvd3RtcCB7CiAgICBtb250aGx5CiAgICBjcmVhdGUgMDY2NCByb290IHV0bXAKICAgICAgICBtaW5zaXplIDFNCiAgICByb3RhdGUgMQp9CgovdmFyL2xvZy9idG1wIHsKICAgIG1pc3NpbmdvawogICAgbW9udGhseQogICAgY3JlYXRlIDA2MDAgcm9vdCB1dG1wCiAgICByb3RhdGUgMQp9Jwp3cml0ZV9maWxlIGxvZ3JvdGF0ZV9jb25mX2ZpbGVuYW1lIGxvZ3JvdGF0ZV9jb25mX2ZpbGUgdHJ1ZQppZiBbIC1uICIke2Ryb3Bpbl9maWxlc1sqXX0iIF07dGhlbgpsb2NhbCAtciBsb2dyb3RhdGVfZD0iL2V0Yy9sb2dyb3RhdGUuZCIKbG9nICJXcml0aW5nIGxvZ3JvdGF0ZSBmaWxlcyB0byAkbG9ncm90YXRlX2QiCmZvciBkcm9waW5fbmFtZSBpbiAiJHshZHJvcGluX2ZpbGVzW0BdfSI7ZG8KbG9jYWwgLXIgZHJvcGluX2ZpbGVuYW1lPSIkbG9ncm90YXRlX2QvJGRyb3Bpbl9uYW1lIgpsb2NhbCAtciBkcm9waW5fZmlsZT0iJHtkcm9waW5fZmlsZXNbIiRkcm9waW5fbmFtZSJdfSIKd3JpdGVfZmlsZSBkcm9waW5fZmlsZW5hbWUgZHJvcGluX2ZpbGUgdHJ1ZQpkb25lCmZpCn0KcHVsbF9jb250YWluZXJfaW1hZ2VzKCl7CmxvY2FsIC1uIHB1bGxfaW1hZ2VzPSIkMSIKbG9jYWwgLW4gcmVnaXN0cnlfY29uZj0iJHsyOi1lbXB0eV9zdHJ9Igpsb2cgInN0YXJ0aW5nIgpsb2NhbCAtcmkgcmV0cnlfdGltZT0zMApjbWQ9KAphegpsb2dpbgotaQotLWFsbG93LW5vLXN1YnNjcmlwdGlvbnMpCmxvZyAiUnVubmluZyBheiBsb2dpbiB3aXRoIHJldHJpZXMiCnJldHJ5IGNtZCByZXRyeV90aW1lCm1rZGlyIC1wIC9ldGMvY29udGFpbmVycy8KbWtkaXIgLXAgL3Jvb3QvLmRvY2tlcgp0b3VjaCAvZXRjL2NvbnRhaW5lcnMvbm9kb2NrZXIKZXhwb3J0IFJFR0lTVFJZX0FVVEhfRklMRT0iL3Jvb3QvLmRvY2tlci9jb25maWcuanNvbiIKaWYgWyAtbiAiJHJlZ2lzdHJ5X2NvbmYiIF07dGhlbgp3cml0ZV9maWxlIFJFR0lTVFJZX0FVVEhfRklMRSByZWdpc3RyeV9jb25mIHRydWUKZmkKbG9nICJsb2dnaW5nIGludG8gcHJvZCBhY3IiCmNtZD0oCmF6CmFjcgpsb2dpbgotLW5hbWUKIiQoc2VkIC1lICdzfC4qL3x8JyA8PDwiJEFDUlJFU09VUkNFSUQiKSIpCnJldHJ5IGNtZCByZXRyeV90aW1lCmZvciBpIGluICR7cHVsbF9pbWFnZXNbQF19O2RvCmxvY2FsIC1uIGltYWdlPSIkaSIKY21kPSgKcG9kbWFuCnB1bGwKIiRpbWFnZSIpCmxvZyAiUHVsbGluZyBpbWFnZSAkaW1hZ2Ugd2l0aCByZXRyaWVzIG5vdyIKcmV0cnkgY21kIHJldHJ5X3RpbWUKZG9uZQpjbWQ9KAphegpsb2dvdXQpCmxvZyAiUnVubmluZyBheiBsb2dvdXQgd2l0aCByZXRyaWVzIgpyZXRyeSBjbWQgcmV0cnlfdGltZQp9CmNvbmZpZ3VyZV9jZXJ0c19nZW5lcmFsKCl7CmxvZyAic3RhcnRpbmciCmxvY2FsIC1yIHNzbF9jZXJ0c19iYXNlZGlyPSIvdXNyL2xpYi9zc2wvY2VydHMiCm1rZGlyIC1wICIkc3NsX2NlcnRzX2Jhc2VkaXIiCmNzcGxpdCAtZiAiJHNzbF9jZXJ0c19iYXNlZGlyL2NlcnQtIiAtYiAlMDNkLnBlbSAvZXRjL3BraS90bHMvY2VydHMvY2EtYnVuZGxlLmNydCAvXiQvMSAieyp9IiAxPi9kZXYvbnVsbApjX3JlaGFzaCAiJHNzbF9jZXJ0c19iYXNlZGlyIgp9CmNvbmZpZ3VyZV9jZXJ0c19ycCgpewpsb2cgInN0YXJ0aW5nIgp2ZXJpZnlfcm9sZSByb2xlX3JwCmxvY2FsIC1yIHJwX2NlcnRzX2Jhc2VkaXI9Ii9ldGMvYXJvLXJwIgpta2RpciAtcCAiJHJwX2NlcnRzX2Jhc2VkaXIiCmJhc2U2NCAtZCA8PDwiJEFETUlOQVBJQ0FCVU5ETEUiID4iJHJwX2NlcnRzX2Jhc2VkaXIvYWRtaW4tY2EtYnVuZGxlLnBlbSIKaWYgW1sgLW4gJEFSTUFQSUNBQlVORExFIF1dO3RoZW4KYmFzZTY0IC1kIDw8PCIkQVJNQVBJQ0FCVU5ETEUiID4iJHJwX2NlcnRzX2Jhc2VkaXIvYXJtLWNhLWJ1bmRsZS5wZW0iCmZpCmNob3duIC1SIDEwMDA6MTAwMCAiJHJwX2NlcnRzX2Jhc2VkaXIiCmNvbmZpZ3VyZV9jZXJ0c19nZW5lcmFsCn0KY29uZmlndXJlX2NlcnRzX2dhdGV3YXkoKXsKbG9nICJzdGFydGluZyIKdmVyaWZ5X3JvbGUgcm9sZV9nYXRld2F5CmNvbmZpZ3VyZV9jZXJ0c19nZW5lcmFsCn0KY29uZmlndXJlX2NlcnRzX2RldnByb3h5KCl7CmxvZyAic3RhcnRpbmciCnZlcmlmeV9yb2xlIHJvbGVfZGV2cHJveHkKbG9jYWwgLXIgcHJveHlfY2VydHNfYmFzZWRpcj0iL2V0Yy9wcm94eSIKbWtkaXIgLXAgIiRwcm94eV9jZXJ0c19iYXNlZGlyIgpiYXNlNjQgLWQgPDw8IiRQUk9YWUNFUlQiID4iJHByb3h5X2NlcnRzX2Jhc2VkaXIvcHJveHkuY3J0IgpiYXNlNjQgLWQgPDw8IiRQUk9YWUtFWSIgPiIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS5rZXkiCmJhc2U2NCAtZCA8PDwiJFBST1hZQ0xJRU5UQ0VSVCIgPiIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS1jbGllbnQuY3J0IgpjaG93biAtUiAxMDAwOjEwMDAgL2V0Yy9wcm94eQpjaG1vZCAwNjAwICIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS5rZXkiCn0KY29uZmlndXJlX2F6c2VjZF9zY2FuKCl7CmxvZyAic3RhcnRpbmciCmxvY2FsIC1yIG5vZGVzY2FuX2FnZW50X2ZpbGVuYW1lPSIvZXRjL2RlZmF1bHQvdnNhLW5vZGVzY2FuLWFnZW50LmNvbmZpZyIKbG9jYWwgLXIgbm9kZXNjYW5fYWdlbnRfZmlsZT0iewogICAgXCJOaWNlXCI6IDE5LAogICAgXCJUaW1lb3V0XCI6IDEwODAwLAogICAgXCJDbGllbnRJZFwiOiBcIlwiLAogICAgXCJUZW5hbnRJZFwiOiAkQVpVUkVTRUNQQUNLVlNBVEVOQU5USUQsCiAgICBcIlF1YWx5c1N0b3JlQmFzZVVybFwiOiAkQVpVUkVTRUNQQUNLUVVBTFlTVVJMLAogICAgXCJQcm9jZXNzVGltZW91dFwiOiAzMDAsCiAgICBcIkNvbW1hbmREZWxheVwiOiAwCiAgfSIKd3JpdGVfZmlsZSBub2Rlc2Nhbl9hZ2VudF9maWxlbmFtZSBub2Rlc2Nhbl9hZ2VudF9maWxlIHRydWUKfQpydW5fYXpzZWNkX2NvbmZpZ19zY2FuKCl7CmxvZyAic3RhcnRpbmciCmNvbmZpZ3VyZV9henNlY2Rfc2Nhbgpsb2NhbCAtYXIgY29uZmlncz0oCiJiYXNlbGluZSIKImNsYW1hdiIKInNvZnR3YXJlIikKbG9nICJTY2FubmluZyBjb25maWd1cmF0aW9uIGZpbGVzIHdpdGggYXpzZWNkICR7Y29uZmlnc1sqXX0iCmZvciBzY2FuIGluICR7Y29uZmlnc1tAXX07ZG8KbG9nICJTY2FubmluZyBjb25maWcgZmlsZSAkc2NhbiBub3ciCi91c3IvbG9jYWwvYmluL2F6c2VjZCBjb25maWcgLXMgIiRzY2FuIiAtZCBQMUQKZG9uZQp9CmNyZWF0ZV9yZXF1aXJlZF9kaXJzKCl7CmNyZWF0ZV9kaXJzPSgKL3Zhci9sb2cvam91cm5hbAovdmFyL2xpYi93YWFnZW50L01pY3Jvc29mdC5BenVyZS5LZXlWYXVsdC5TdG9yZQovdmFyL29wdC9taWNyb3NvZnQvbGludXhtb25hZ2VudCkKZm9yIGQgaW4gJHtjcmVhdGVfZGlyc1tAXX07ZG8KbG9nICJDcmVhdGluZyBkaXJlY3RvcnkgJGQiCm1rZGlyIC1wICIkZCJ8fGFib3J0ICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAkZCIKZG9uZQp9CmZpcmV3YWxsZF9jb25maWd1cmVfYmFja2VuZCgpewpsb2cgInN0YXJ0aW5nIgpsb2cgIkNoYW5naW5nIGZpcmV3YWxsZCBiYWNrZW5kIHRvIGlwdGFibGVzIgpjb25mX2ZpbGU9Ii9ldGMvZmlyZXdhbGxkL2ZpcmV3YWxsZC5jb25mIgpzZWQgLWkgJ3MvRmlyZXdhbGxCYWNrZW5kPW5mdGFibGVzL0ZpcmV3YWxsQmFja2VuZD1pcHRhYmxlcy9nJyAiJGNvbmZfZmlsZSIKfQpmaXJld2FsbGRfY29uZmlndXJlKCl7CmxvY2FsIC1uIHBvcnRzPSIkMSIKbG9nICJzdGFydGluZyIKZmlyZXdhbGxkX2NvbmZpZ3VyZV9iYWNrZW5kCmxvY2FsIC1yYSBzZXJ2aWNlPSgKImZpcmV3YWxsZCIpCmVuYWJsZV9zZXJ2aWNlcyBzZXJ2aWNlCmxvZyAiRW5hYmxpbmcgcG9ydHMgJHtwb3J0c1sqXX0gb24gZGVmYXVsdCBmaXJld2FsbGQgem9uZSIKZm9yIHBvcnQgaW4gJHtwb3J0c1tAXX07ZG8KbG9nICJFbmFibGluZyBwb3J0ICRwb3J0IG5vdyIKZmlyZXdhbGwtY21kICItLWFkZC1wb3J0PSRwb3J0IiBcCi0tcGVybWFuZW50CmRvbmUKbG9nICJXcml0aW5nIHJ1bnRpbWUgY29uZmlnIHRvIHBlcm1hbmVudCBjb25maWciCmZpcmV3YWxsLWNtZCAtLXJ1bnRpbWUtdG8tcGVybWFuZW50Cn0KdXRpbF9jb21tb249InV0aWwtY29tbW9uLnNoIgppZiBbIC1mICIkdXRpbF9jb21tb24iIF07dGhlbgpzb3VyY2UgIiR1dGlsX2NvbW1vbiIKZmkKc2V0IC1vIGVycmV4aXQgXAotbyBwaXBlZmFpbCBcCi1vIG5vdW5zZXQKbWFpbigpewpsb2NhbCAtcmkgcmV0cnlfd2FpdF90aW1lPTMwCmxvY2FsIC1yaSBwa2dfcmV0cnlfY291bnQ9NjAKY3JlYXRlX3JlcXVpcmVkX2RpcnMKY29uZmlndXJlX3NzaGQKY29uZmlndXJlX3JwbV9yZXBvcyByZXRyeV93YWl0X3RpbWUgXAoiJHBrZ19yZXRyeV9jb3VudCIKbG9jYWwgLWFyIGV4Y2x1ZGVfcGtncz0oCiIteCBXQUxpbnV4QWdlbnQiCiIteCBXQUxpbnV4QWdlbnQtdWRldiIpCmRuZl91cGRhdGVfcGtncyBleGNsdWRlX3BrZ3MgXApyZXRyeV93YWl0X3RpbWUgXAoiJHBrZ19yZXRyeV9jb3VudCIKbG9jYWwgLXJhIGluc3RhbGxfcGtncz0oCmF6dXJlLWNsaQphenVyZS1tZHNkCnBvZG1hbgpwb2RtYW4tZG9ja2VyCm9wZW5zc2wtcGVybApweXRob24zCmZpcmV3YWxsZApncnViYnkKZHJhY3V0LWZpcHMpCmRuZl9pbnN0YWxsX3BrZ3MgaW5zdGFsbF9wa2dzIFwKcmV0cnlfd2FpdF90aW1lIFwKIiRwa2dfcmV0cnlfY291bnQiCmZpcHNfY29uZmlndXJlCmNvbmZpZ3VyZV9sb2dyb3RhdGUKbG9jYWwgLXIgbWRtaW1hZ2U9IiR7UlBJTUFHRSUlLyp9LyR7TURNSU1BR0UjKi99Igpsb2NhbCAtciBycGltYWdlPSIkUlBJTUFHRSIKbG9jYWwgLXIgZmx1ZW50Yml0X2ltYWdlPSIkRkxVRU5UQklUSU1BR0UiCmxvY2FsIC1yQSBhcm9faW1hZ2VzPSgKWyJtZG0iXT0ibWRtaW1hZ2UiClsicnAiXT0icnBpbWFnZSIKWyJmbHVlbnRiaXQiXT0iZmx1ZW50Yml0X2ltYWdlIikKcHVsbF9jb250YWluZXJfaW1hZ2VzIGFyb19pbWFnZXMKbG9jYWwgLXJhIGVuYWJsZV9wb3J0cz0oCiI4MC90Y3AiCiI4MDgxL3RjcCIKIjQ0My90Y3AiCiIyMi90Y3AiKQpmaXJld2FsbGRfY29uZmlndXJlIGVuYWJsZV9wb3J0cwpsb2NhbCAtciBmbHVlbnRiaXRfY29uZl9maWxlPSdbSU5QVVRdCglOYW1lIHN5c3RlbWQKCVRhZyBqb3VybmFsZAoJU3lzdGVtZF9GaWx0ZXIgX0NPTU09YXJvCglEQiAvdmFyL2xpYi9mbHVlbnQvam91cm5hbGRiCgpbRklMVEVSXQoJTmFtZSBtb2RpZnkKCU1hdGNoIGpvdXJuYWxkCglBZGQgRW52aXJvbm1lbnQgJHtFTlZJUk9OTUVOVH0KCltGSUxURVJdCglOYW1lIG1vZGlmeQoJTWF0Y2ggam91cm5hbGQKCVJlbW92ZV93aWxkY2FyZCBfCglSZW1vdmUgVElNRVNUQU1QCgpbT1VUUFVUXQoJTmFtZSBmb3J3YXJkCglNYXRjaCAqCglQb3J0IDI5MjMwJwpsb2NhbCAtciBhcm9fZ2F0ZXdheV9jb25mX2ZpbGU9IkFDUl9SRVNPVVJDRV9JRD0nJEFDUlJFU09VUkNFSUQnCkRBVEFCQVNFX0FDQ09VTlRfTkFNRT0nJERBVEFCQVNFQUNDT1VOVE5BTUUnCk1ETV9BQ0NPVU5UPSckUlBNRE1BQ0NPVU5UJwpNRE1fTkFNRVNQQUNFPScke3JvbGVfZ2F0ZXdheV59JwpHQVRFV0FZX0RPTUFJTlM9JyRHQVRFV0FZRE9NQUlOUycKR0FURVdBWV9GRUFUVVJFUz0nJEdBVEVXQVlGRUFUVVJFUycKUlBJTUFHRT0nJHJwaW1hZ2UnCkVOVklST05NRU5UPSckRU5WSVJPTk1FTlQnIgpsb2NhbCAtciBtZHNkX2NvbmZpZ192ZXJzaW9uPSIkR0FURVdBWU1EU0RDT05GSUdWRVJTSU9OIgpsb2NhbCAtckEgYXJvX2NvbmZpZ3M9KApbImdhdGV3YXlfY29uZmlnIl09ImFyb19nYXRld2F5X2NvbmZfZmlsZSIKWyJmbHVlbnRiaXQiXT0iZmx1ZW50Yml0X2NvbmZfZmlsZSIKWyJtZHNkIl09Im1kc2RfY29uZmlnX3ZlcnNpb24iClsic3RhdGljX2lwX2FkZHJlc3MiXT0ic3RhdGljX2lwX2FkZHJlc3NlcyIpCmxvY2FsIC1yQSBzdGF0aWNfaXBfYWRkcmVzc2VzPSgKWyJnYXRld2F5Il09IjEwLjg4LjAuMiIKWyJtZG0iXT0iMTAuODguMC44IikKY29uZmlndXJlX3Ztc3NfYXJvX3NlcnZpY2VzIHJvbGVfZ2F0ZXdheSBcCmFyb19pbWFnZXMgXAphcm9fY29uZmlncwpsb2NhbCAtcmEgZ2F0ZXdheV9zZXJ2aWNlcz0oCiJhcm8tZ2F0ZXdheSIKImF6c2VjZCIKIm1kc2QiCiJtZG0iCiJjaHJvbnlkIgoiZmx1ZW50Yml0IgoiZG93bmxvYWQtbWRzZC1jcmVkZW50aWFscy50aW1lciIKImRvd25sb2FkLW1kbS1jcmVkZW50aWFscy50aW1lciIKImZpcmV3YWxsZCIpCmVuYWJsZV9zZXJ2aWNlcyBnYXRld2F5X3NlcnZpY2VzCnJlYm9vdF92bQp9CmV4cG9ydCBBWlVSRV9DTE9VRF9OQU1FPSIke0FaVVJFQ0xPVUROQU1FOj8iRmFpbGVkIHRvIGNhcnJ5IG92ZXIgdmFyaWFibGVzIn0iCnV0aWw9InV0aWwuc2giCmlmIFsgLWYgIiR1dGlsIiBdO3RoZW4Kc291cmNlICIkdXRpbCIKZmkKbWFpbiAiJEAiCg==')))]" + "script": "[base64(concat(base64ToString('c2V0IC1leAoK'),'ACRRESOURCEID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('acrResourceId')),''')\n','AZURECLOUDNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureCloudName')),''')\n','AZURESECPACKQUALYSURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackQualysUrl')),''')\n','AZURESECPACKVSATENANTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackVSATenantId')),''')\n','DATABASEACCOUNTNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('databaseAccountName')),''')\n','ENVIRONMENT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('environment')),''')\n','FLUENTBITIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fluentbitImage')),''')\n','GATEWAYDOMAINS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayDomains')),''')\n','GATEWAYFEATURES=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayFeatures')),''')\n','GATEWAYLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayLogLevel')),''')\n','GATEWAYMDSDCONFIGVERSION=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayMdsdConfigVersion')),''')\n','KEYVAULTDNSSUFFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultDNSSuffix')),''')\n','KEYVAULTPREFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultPrefix')),''')\n','MDMFRONTENDURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdmFrontendUrl')),''')\n','MDSDENVIRONMENT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdsdEnvironment')),''')\n','RPIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpImage')),''')\n','RPMDMACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdmAccount')),''')\n','RPMDSDACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdAccount')),''')\n','RPMDSDNAMESPACE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdNamespace')),''')\n','MDMIMAGE=''/geneva/distroless/mdm:2.202602101834.0-20260211-1@sha256:a581e89744933f30a9f8e2724906fde02e713836fce76afefec7092daa01c064''\n','LOCATION=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().location),''')\n','SUBSCRIPTIONID=$(base64 -d \u003c\u003c\u003c''',base64(subscription().subscriptionId),''')\n','RESOURCEGROUPNAME=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().name),''')\n','\n',base64ToString('ZGVjbGFyZSAtciBlbXB0eV9zdHI9IiIKZGVjbGFyZSAtciByb2xlX2dhdGV3YXk9ImdhdGV3YXkiCmRlY2xhcmUgLXIgcm9sZV9ycD0icnAiCmRlY2xhcmUgLXIgcm9sZV9kZXZwcm94eT0iZGV2cHJveHkiCmRlY2xhcmUgLXIgdXNfZ292X2Nsb3VkPSJBenVyZVVTR292ZXJubWVudCIKZGVjbGFyZSAtaXIgWFRSQUNFX1NFVD0xCmRlY2xhcmUgLWlyIFhUUkFDRV9VTlNFVD0wCnh0cmFjZV9pc19zZXQoKXsKaWYgW1sgJC0gPX4gIngiIF1dO3RoZW4KZWNobyBYVFJBQ0VfU0VUCmZpCmVjaG8gWFRSQUNFX1VOU0VUCn0KeHRyYWNlX3RvZ2dsZSgpewppZiAhIFtbICQxID1+ICgiWFRSQUNFX1NFVCJ8IlhUUkFDRV9VTlNFVCIpIF1dO3RoZW4KbG9nICJcJDEgaW52YWxpZDsgXCQxIG11c3QgYmUgWFRSQUNFX1NFVCBvciBYVFJBQ0VfVU5TRVQuIFwkMTogJDEiCnJldHVybiAxCmZpCmlmICgoJDE9PVhUUkFDRV9TRVQpKTt0aGVuCnNldCAteAplbGlmCigoJDE9PVhUUkFDRV9VTlNFVCkpCnRoZW4Kc2V0ICt4CmZpCn0KbG9nKCl7CmxvY2FsIC1yIG1zZz0iJHsxOi0ibG9nIG1lc3NhZ2UgaXMgZW1wdHkifSIKbG9jYWwgLXIgc3RhY2tfbGV2ZWw9IiR7MjotMX0iCmVjaG8gIiR7RlVOQ05BTUVbJHN0YWNrX2xldmVsXX06ICRtc2ciCn0KYWJvcnQoKXsKbG9jYWwgLXJpIG9yaWdpbl9zdGFja2xldmVsPTIKbG9nICIkMSIgIiRvcmlnaW5fc3RhY2tsZXZlbCIKbG9nICJFeGl0aW5nIgpleGl0IDEKfQp3cml0ZV9maWxlKCl7CmxvY2FsIC1uIGZpbGVuYW1lPSIkMSIKbG9jYWwgLW4gZmlsZV9jb250ZW50cz0iJDIiCmxvY2FsIC1yIGNsb2JiZXI9IiR7MzotZmFsc2V9IgppZiAkY2xvYmJlcjt0aGVuCmxvZyAiT3ZlcndyaXRpbmcgZmlsZSAkZmlsZW5hbWUiCmVjaG8gIiRmaWxlX2NvbnRlbnRzIiA+IiRmaWxlbmFtZSIKZWxzZQpsb2cgIkFwcGVuZGluZyB0byAkZmlsZW5hbWUiCmVjaG8gIiRmaWxlX2NvbnRlbnRzIiA+PiIkZmlsZW5hbWUiCmZpCn0KcmV0cnkoKXsKbG9jYWwgLW4gY21kX3JldHJ5PSIkMSIKbG9jYWwgLW4gd2FpdF90aW1lPSIkMiIKbG9jYWwgLXJpIHJldHJpZXM9IiR7MzotNX0iCmZvciBhdHRlbXB0IGluICQoc2VxIDEgJHJldHJpZXMpO2RvCmxvZyAiYXR0ZW1wdCAjJGF0dGVtcHQgLSAke0ZVTkNOQU1FWzJdfSIKJHtjbWRfcmV0cnlbQF19Jgp3YWl0IC1mICQhJiZyZXR1cm4gMApzbGVlcCAiJHdhaXRfdGltZSIKZG9uZQphYm9ydCAiJHtjbWRfcmV0cnlbKl19IGZhaWxlZCBhZnRlciAjJHJldHJpZXMgYXR0ZW1wdHMiCn0KdmVyaWZ5X3JvbGUoKXsKbG9jYWwgLW4gdGVzdF9yb2xlPSIkMSIKYWxsb3dlZF9yb2xlc19nbG9iPSIoJHJvbGVfcnB8JHJvbGVfZ2F0ZXdheXwkcm9sZV9kZXZwcm94eSkiCmlmIFtbICR0ZXN0X3JvbGUgPX4gJGFsbG93ZWRfcm9sZXNfZ2xvYiBdXTt0aGVuCmxvZyAiVmVyaWZpZWQgcm9sZSBcIiR0ZXN0X3JvbGVcIiIKZWxzZQphYm9ydCAiZmFpbGVkIHRvIHZlcmlmeSByb2xlLCByb2xlIFwiJHRlc3Rfcm9sZVwiIG5vdCBpbiBcIiRhbGxvd2VkX3JvbGVzX2dsb2JcIiIKZmkKfQpnZXRfa2V5dmF1bHRfc3VmZml4KCl7CmxvY2FsIC1uIHJsPSIkMSIKbG9jYWwgLW4ga3Zfc3VmZml4PSIkMiIKbG9jYWwgLW4gc2VjX3ByZWZpeD0iJDMiCmxvY2FsIC1yIGtleXZhdWx0X3N1ZmZpeF9ycD0ic3ZjIgpsb2NhbCAtciBrZXl2YXVsdF9wcmVmaXhfZ2F0ZXdheT0iZ3d5IgpjYXNlICIkcmwiIGluCiIkcm9sZV9nYXRld2F5Iilrdl9zdWZmaXg9IiRrZXl2YXVsdF9wcmVmaXhfZ2F0ZXdheSIKc2VjX3ByZWZpeD0iJGtleXZhdWx0X3ByZWZpeF9nYXRld2F5Igo7OwoiJHJvbGVfcnAiKWt2X3N1ZmZpeD0iJGtleXZhdWx0X3N1ZmZpeF9ycCIKc2VjX3ByZWZpeD0iJHJvbGVfcnAiCjs7CiopYWJvcnQgInVua25vd24gcm9sZSAkcmwiCmVzYWMKfQpyZWJvb3Rfdm0oKXsKbG9nICJzdGFydGluZyIKKHNodXRkb3duIC1yIG5vdyYpCn0KY29uZmlndXJlX3JlcG9fbWFyaW5lcl9leHRlbmRlZCgpewpsb2NhbCAtciBleHRlbmRlZF9yZXBvX2NvbmZpZz0iaHR0cHM6Ly9wYWNrYWdlcy5taWNyb3NvZnQuY29tL2NibC1tYXJpbmVyLzIuMC9wcm9kL2V4dGVuZGVkL3g4Nl82NC9jb25maWcucmVwbyIKY3VybCAtc1NMICIkZXh0ZW5kZWRfcmVwb19jb25maWciIC1vIC9ldGMveXVtLnJlcG9zLmQvbWFyaW5lci1leHRlbmRlZC5yZXBvCmxvY2FsIC1yIHJlcG9fbmFtZT0iY2JsLW1hcmluZXIyLjBwcm9kZXh0ZW5kZWR4ODZfNjQiCmxvY2FsIC1yYSBjbWQ9KApkbmYKdXBkYXRlCi15Ci0tZW5hYmxlcmVwbz0iJHJlcG9fbmFtZSIpCmxvZyAiRW5hYmxpbmcgcmVwbyAkcmVwb19uYW1lIgpyZXRyeSBjbWQgIiQxIiAiJHsyOi19Igp9CmNvbmZpZ3VyZV9ycG1fcmVwb3MoKXsKbG9nICJzdGFydGluZyIKY29uZmlndXJlX3JlcG9fbWFyaW5lcl9leHRlbmRlZCAiJDEiICIkezI6LTF9Igp9CmRuZl9pbnN0YWxsX3BrZ3MoKXsKbG9jYWwgLW4gcGtncz0iJDEiCmxvZyAic3RhcnRpbmciCmxvY2FsIC1hIGNtZD0oCmRuZgoteQppbnN0YWxsKQptYXBmaWxlIC1PICQoKCR7I2NtZFtAXX0rMSkpIC1kICcgJyBjbWQgPDw8IiR7cGtnc1tAXX0iCmxvY2FsIC1yIGNtZApsb2cgIkF0dGVtcHRpbmcgdG8gaW5zdGFsbCBwYWNrYWdlczogJHtwa2dzWypdfSIKcmV0cnkgY21kICIkMiIgIiR7MzotfSIKfQpkbmZfdXBkYXRlX3BrZ3MoKXsKbG9jYWwgLW4gZXhjbHVkZXM9IiR7MTotZW1wdHlfc3RyfSIKbG9nICJzdGFydGluZyIKbG9jYWwgLWEgY21kPSgKZG5mCi15CiIiCnVwZGF0ZQotLWFsbG93ZXJhc2luZykKaWYgWyAtbiAiJGV4Y2x1ZGVzIiBdO3RoZW4KbWFwZmlsZSAtTyAyIGNtZCA8PDwiJHtleGNsdWRlc1tAXX0iCmVsc2UKdW5zZXQgImNtZFsyXSIKZmkKbG9jYWwgLXIgY21kCmxvZyAiVXBkYXRpbmcgYWxsIHBhY2thZ2VzIGV4Y2x1ZGluZyBcIiR7ZXhjbHVkZXNbKl06LX1cIiIKcmV0cnkgY21kICIkMiIgIiR7MzotfSIKfQpycG1faW1wb3J0X2tleXMoKXsKbG9jYWwgLW4ga2V5cz0iJDEiCmxvZyAic3RhcnRpbmciCmZvciBrZXkgaW4gJHtrZXlzW0BdfTtkbwppZiBbICR7I2tleXNbQF19IC1lcSAwIF07dGhlbgpicmVhawpmaQpsb2NhbCAtYSBjbWQ9KApycG0KLS1pbXBvcnQKLXYKIiRrZXkiKQpsb2cgIkltcG9ydGluZyBycG0gcmVwb3NpdG9yeSBrZXkgJGtleSIKcmV0cnkgY21kICIkMiIgIiR7MzotfSImJnVuc2V0IGtleQpkb25lCn0KdXRpbF9jb21tb249InV0aWwtY29tbW9uLnNoIgppZiBbIC1mICIkdXRpbF9jb21tb24iIF07dGhlbgpzb3VyY2UgIiR1dGlsX2NvbW1vbiIKZmkKZW5hYmxlX3NlcnZpY2VzKCl7CmxvY2FsIC1uIHN2Y3M9IiQxIgpsb2cgInN0YXJ0aW5nIgpzeXN0ZW1jdGwgZGFlbW9uLXJlbG9hZApsb2cgImVuYWJsaW5nIHNlcnZpY2VzICR7c3Zjc1sqXX0iCmZvciBzdmMgaW4gJHtzdmNzW0BdfTtkbwpsb2cgIkVuYWJsaW5nIGFuZCBzdGFydGluZyAkc3ZjIG5vdyIKc3lzdGVtY3RsIGVuYWJsZSBcCi0tbm93IFwKIiRzdmMiCmRvbmUKfQpjb25maWd1cmVfc2VydmljZV9hcm9fZ2F0ZXdheSgpewpsb2NhbCAtbiBpbWFnZT0iJDEiCmxvY2FsIC1uIHJvbGU9IiQyIgpsb2NhbCAtbiBjb25mX2ZpbGU9IiQzIgpsb2NhbCAtbiBpcGFkZHJlc3M9IiQ0Igpsb2cgInN0YXJ0aW5nIgpsb2cgIkNvbmZpZ3VyaW5nIGFyby1nYXRld2F5IHNlcnZpY2UiCmxvY2FsIC1yIGFyb19nYXRld2F5X2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1nYXRld2F5Jwpsb2NhbCAtciBhZGRfY29uZl9maWxlPSJQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnClJPTEU9JyR7cm9sZSwsfScKQVJPX0xPR19MRVZFTD0nJEdBVEVXQVlMT0dMRVZFTCcKRU5WSVJPTk1FTlQ9JyRFTlZJUk9OTUVOVCciCndyaXRlX2ZpbGUgYXJvX2dhdGV3YXlfY29uZl9maWxlbmFtZSBjb25mX2ZpbGUgdHJ1ZQp3cml0ZV9maWxlIGFyb19nYXRld2F5X2NvbmZfZmlsZW5hbWUgYWRkX2NvbmZfZmlsZSBmYWxzZQpsb2NhbCAtciBhcm9fZ2F0ZXdheV9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1nYXRld2F5LnNlcnZpY2UnCmxvY2FsIC1yIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLWdhdGV3YXkKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtZSBBQ1JfUkVTT1VSQ0VfSUQgXAogIC1lIERBVEFCQVNFX0FDQ09VTlRfTkFNRSBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX0ZFQVRVUkVTIFwKICAtZSBNRE1fQUNDT1VOVCBcCiAgLWUgTURNX05BTUVTUEFDRSBcCiAgLWUgQVJPX0xPR19MRVZFTCBcCiAgLWUgRU5WSVJPTk1FTlQgXAogIC1tIDJnIFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtcCA4MDo4MDgwIFwKICAtcCA4MDgxOjgwODEgXAogIC1wIDQ0Mzo4NDQzIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJHtSUElNQUdFfSBcCiAgJHtST0xFfQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAtdCAzNjAwICVOClRpbWVvdXRTdG9wU2VjPTM2MDAKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgICcKd3JpdGVfZmlsZSBhcm9fZ2F0ZXdheV9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZSB0cnVlCn0KY29uZmlndXJlX3NlcnZpY2VfYXJvX3JwKCl7CmxvY2FsIC1uIGltYWdlPSIkMSIKbG9jYWwgLW4gcm9sZT0iJDIiCmxvY2FsIC1uIGNvbmZfZmlsZT0iJDMiCmxvY2FsIC1uIGlwYWRkcmVzcz0iJDQiCmxvZyAic3RhcnRpbmciCmxvZyAiQ29uZmlndXJpbmcgYXJvLXJwIHNlcnZpY2UiCmxvY2FsIC1yIGFyb19ycF9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tcnAnCmxvY2FsIC1yIGFkZF9jb25mX2ZpbGU9IlBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcycKRU5WSVJPTk1FTlQ9JyRFTlZJUk9OTUVOVCcKUk9MRT0nJHtyb2xlLCx9JwpBUk9fTE9HX0xFVkVMPSckUlBMT0dMRVZFTCciCndyaXRlX2ZpbGUgYXJvX3JwX2NvbmZfZmlsZW5hbWUgY29uZl9maWxlIHRydWUKd3JpdGVfZmlsZSBhcm9fcnBfY29uZl9maWxlbmFtZSBhZGRfY29uZl9maWxlIGZhbHNlCmxvY2FsIC1yIGFyb19ycF9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1ycC5zZXJ2aWNlJwpsb2NhbCAtciBhcm9fcnBfc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tcnAKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtZSBBQ1JfUkVTT1VSQ0VfSUQgXAogIC1lIEFETUlOX0FQSV9DTElFTlRfQ0VSVF9DT01NT05fTkFNRSBcCiAgLWUgQVJNX0FQSV9DTElFTlRfQ0VSVF9DT01NT05fTkFNRSBcCiAgLWUgQVpVUkVfQVJNX0NMSUVOVF9JRCBcCiAgLWUgQVpVUkVfRlBfQ0xJRU5UX0lEIFwKICAtZSBDTFVTVEVSX01ETV9BQ0NPVU5UIFwKICAtZSBDTFVTVEVSX01ETV9OQU1FU1BBQ0UgXAogIC1lIENMVVNURVJfTURTRF9BQ0NPVU5UIFwKICAtZSBDTFVTVEVSX01EU0RfQ09ORklHX1ZFUlNJT04gXAogIC1lIENMVVNURVJfTURTRF9OQU1FU1BBQ0UgXAogIC1lIERBVEFCQVNFX0FDQ09VTlRfTkFNRSBcCiAgLWUgRE9NQUlOX05BTUUgXAogIC1lIEdBVEVXQVlfRE9NQUlOUyBcCiAgLWUgR0FURVdBWV9SRVNPVVJDRUdST1VQIFwKICAtZSBLRVlWQVVMVF9QUkVGSVggXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtZSBNRFNEX0VOVklST05NRU5UIFwKICAtZSBSUF9GRUFUVVJFUyBcCiAgLWUgQVJPX0lOU1RBTExfVklBX0hJVkUgXAogIC1lIEFST19ISVZFX0RFRkFVTFRfSU5TVEFMTEVSX1BVTExTUEVDIFwKICAtZSBBUk9fQURPUFRfQllfSElWRSBcCiAgLWUgT0lEQ19BRkRfRU5EUE9JTlQgXAogIC1lIE9JRENfU1RPUkFHRV9BQ0NPVU5UX05BTUUgXAogIC1lIE1TSV9SUF9FTkRQT0lOVCBcCiAgLWUgT1RFTF9BVURJVF9RVUVVRV9TSVpFIFwKICAtZSBNSVNFX0FERFJFU1MgXAogIC1lIEFST19MT0dfTEVWRUwgXAogIC1lIEVOVklST05NRU5UIFwKICAtbSAyZyBcCiAgLS1uZXR3b3JrPSR7UE9ETUFOX05FVFdPUkt9IFwKICAtLWlwICR7SVBBRERSRVNTfSBcCiAgLXAgNDQzOjg0NDMgXAogIC12IC9ldGMvYXJvLXJwOi9ldGMvYXJvLXJwIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgLXYgL3Zhci9ydW4vbWRzZC9hc2E6L3Zhci9ydW4vbWRzZC9hc2E6eiBcCiAgJHtSUElNQUdFfSBcCiAgJHtST0xFfQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAtdCAzNjAwICVOClRpbWVvdXRTdG9wU2VjPTM2MDAKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCndyaXRlX2ZpbGUgYXJvX3JwX3NlcnZpY2VfZmlsZW5hbWUgYXJvX3JwX3NlcnZpY2VfZmlsZSB0cnVlCn0KY29uZmlndXJlX3NlcnZpY2VfYXJvX21vbml0b3IoKXsKbG9jYWwgLW4gaW1hZ2U9IiQxIgpsb2NhbCAtbiBpcGFkZHJlc3M9IiQyIgpsb2cgInN0YXJ0aW5nIgpsb2cgIkNvbmZpZ3VyaW5nIGFyby1tb25pdG9yIHNlcnZpY2UiCmxvY2FsIC1yIGFyb19tb25pdG9yX3NlcnZpY2VfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW1vbml0b3InCmxvY2FsIC1yIGFyb19tb25pdG9yX3NlcnZpY2VfY29uZl9maWxlPSJBWlVSRV9GUF9DTElFTlRfSUQ9JyRGUENMSUVOVElEJwpET01BSU5fTkFNRT0nJExPQ0FUSU9OLiRDTFVTVEVSUEFSRU5URE9NQUlOTkFNRScKQ0xVU1RFUl9NRFNEX0FDQ09VTlQ9JyRDTFVTVEVSTURTREFDQ09VTlQnCkNMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTj0nJENMVVNURVJNRFNEQ09ORklHVkVSU0lPTicKR0FURVdBWV9ET01BSU5TPSckR0FURVdBWURPTUFJTlMnCkdBVEVXQVlfUkVTT1VSQ0VHUk9VUD0nJEdBVEVXQVlSRVNPVVJDRUdST1VQTkFNRScKTURTRF9FTlZJUk9OTUVOVD0nJE1EU0RFTlZJUk9OTUVOVCcKQ0xVU1RFUl9NRFNEX05BTUVTUEFDRT0nJENMVVNURVJNRFNETkFNRVNQQUNFJwpDTFVTVEVSX01ETV9BQ0NPVU5UPSckQ0xVU1RFUk1ETUFDQ09VTlQnCkNMVVNURVJfTURNX05BTUVTUEFDRT1CQk0KREFUQUJBU0VfQUNDT1VOVF9OQU1FPSckREFUQUJBU0VBQ0NPVU5UTkFNRScKRU5WSVJPTk1FTlQ9JyRFTlZJUk9OTUVOVCcKS0VZVkFVTFRfUFJFRklYPSckS0VZVkFVTFRQUkVGSVgnCk1ETV9BQ0NPVU5UPSckUlBNRE1BQ0NPVU5UJwpNRE1fTkFNRVNQQUNFPUJCTQpSUElNQUdFPSckaW1hZ2UnClBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcycKQVJPX0lOU1RBTExfVklBX0hJVkU9JyRDTFVTVEVSU0lOU1RBTExWSUFISVZFJwpBUk9fSElWRV9ERUZBVUxUX0lOU1RBTExFUl9QVUxMU1BFQz0nJENMVVNURVJERUZBVUxUSU5TVEFMTEVSUFVMTFNQRUMnCkFST19BRE9QVF9CWV9ISVZFPSckQ0xVU1RFUlNBRE9QVEJZSElWRScKQVJPX0xPR19MRVZFTD0nJE1PTklUT1JMT0dMRVZFTCciCndyaXRlX2ZpbGUgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGVuYW1lIGFyb19tb25pdG9yX3NlcnZpY2VfY29uZl9maWxlIHRydWUKbG9jYWwgLXIgYXJvX21vbml0b3Jfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tbW9uaXRvci5zZXJ2aWNlJwpsb2NhbCAtciBhcm9fbW9uaXRvcl9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1tb25pdG9yCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLS1uZXR3b3JrPSR7UE9ETUFOX05FVFdPUkt9IFwKICAtLWlwICR7SVBBRERSRVNTfSBcCiAgLWUgQVpVUkVfRlBfQ0xJRU5UX0lEIFwKICAtZSBET01BSU5fTkFNRSBcCiAgLWUgQ0xVU1RFUl9NRFNEX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX1JFU09VUkNFR1JPVVAgXAogIC1lIE1EU0RfRU5WSVJPTk1FTlQgXAogIC1lIENMVVNURVJfTURTRF9OQU1FU1BBQ0UgXAogIC1lIENMVVNURVJfTURNX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURNX05BTUVTUEFDRSBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBLRVlWQVVMVF9QUkVGSVggXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtZSBBUk9fSU5TVEFMTF9WSUFfSElWRSBcCiAgLWUgQVJPX0hJVkVfREVGQVVMVF9JTlNUQUxMRVJfUFVMTFNQRUMgXAogIC1lIEFST19BRE9QVF9CWV9ISVZFIFwKICAtZSBBUk9fTE9HX0xFVkVMIFwKICAtZSBFTlZJUk9OTUVOVCBcCiAgLW0gMi41ZyBcCiAgLXYgL3J1bi9zeXN0ZW1kL2pvdXJuYWw6L3J1bi9zeXN0ZW1kL2pvdXJuYWwgXAogIC12IC92YXIvZXR3Oi92YXIvZXR3OnogXAogICR7UlBJTUFHRX0gXAogIG1vbml0b3IKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCndyaXRlX2ZpbGUgYXJvX21vbml0b3Jfc2VydmljZV9maWxlbmFtZSBhcm9fbW9uaXRvcl9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19wb3J0YWwoKXsKbG9jYWwgLW4gaW1hZ2U9IiQxIgpsb2NhbCAtbiBpcGFkZHJlc3M9IiQyIgpsb2cgInN0YXJ0aW5nIgpsb2cgIkNvbmZpZ3VyaW5nIGFybyBwb3J0YWwgc2VydmljZSIKbG9jYWwgLXIgYXJvX3BvcnRhbF9zZXJ2aWNlX2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1wb3J0YWwnCmxvY2FsIC1yIGFyb19wb3J0YWxfc2VydmljZV9jb25mX2ZpbGU9IkFaVVJFX1BPUlRBTF9BQ0NFU1NfR1JPVVBfSURTPSckUE9SVEFMQUNDRVNTR1JPVVBJRFMnCkFaVVJFX1BPUlRBTF9DTElFTlRfSUQ9JyRQT1JUQUxDTElFTlRJRCcKQVpVUkVfUE9SVEFMX0VMRVZBVEVEX0dST1VQX0lEUz0nJFBPUlRBTEVMRVZBVEVER1JPVVBJRFMnCkRBVEFCQVNFX0FDQ09VTlRfTkFNRT0nJERBVEFCQVNFQUNDT1VOVE5BTUUnCktFWVZBVUxUX1BSRUZJWD0nJEtFWVZBVUxUUFJFRklYJwpNRE1fQUNDT1VOVD0nJFJQTURNQUNDT1VOVCcKTURNX05BTUVTUEFDRT1Qb3J0YWwKUE9SVEFMX0hPU1ROQU1FPSckTE9DQVRJT04uYWRtaW4uJFJQUEFSRU5URE9NQUlOTkFNRScKRU5WSVJPTk1FTlQ9JyRFTlZJUk9OTUVOVCcKT1RFTF9BVURJVF9RVUVVRV9TSVpFPSckT1RFTEFVRElUUVVFVUVTSVpFJwpSUElNQUdFPSckaW1hZ2UnClBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcycKQVJPX0xPR19MRVZFTD0nJFBPUlRBTExPR0xFVkVMJyIKd3JpdGVfZmlsZSBhcm9fcG9ydGFsX3NlcnZpY2VfY29uZl9maWxlbmFtZSBhcm9fcG9ydGFsX3NlcnZpY2VfY29uZl9maWxlIHRydWUKbG9jYWwgLXIgYXJvX3BvcnRhbF9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1wb3J0YWwuc2VydmljZScKbG9jYWwgLXIgYXJvX3BvcnRhbF9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0ClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1wb3J0YWwKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtZSBBWlVSRV9QT1JUQUxfQUNDRVNTX0dST1VQX0lEUyBcCiAgLWUgQVpVUkVfUE9SVEFMX0NMSUVOVF9JRCBcCiAgLWUgQVpVUkVfUE9SVEFMX0VMRVZBVEVEX0dST1VQX0lEUyBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBLRVlWQVVMVF9QUkVGSVggXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtZSBQT1JUQUxfSE9TVE5BTUUgXAogIC1lIE9URUxfQVVESVRfUVVFVUVfU0laRSBcCiAgLWUgQVJPX0xPR19MRVZFTCBcCiAgLWUgRU5WSVJPTk1FTlQgXAogIC1tIDJnIFwKICAtcCA0NDQ6ODQ0NCBcCiAgLXAgMjIyMjoyMjIyIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgLXYgL3Zhci9ydW4vbWRzZC9hc2E6L3Zhci9ydW4vbWRzZC9hc2E6eiBcCiAgJHtSUElNQUdFfSBcCiAgcG9ydGFsClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MQoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Jwp3cml0ZV9maWxlIGFyb19wb3J0YWxfc2VydmljZV9maWxlbmFtZSBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZSB0cnVlCn0KY29uZmlndXJlX3NlcnZpY2VfYXJvX21pbW9fYWN0dWF0b3IoKXsKbG9jYWwgLW4gaW1hZ2U9IiQxIgpsb2NhbCAtbiBjb25mX2ZpbGU9IiQyIgpsb2NhbCAtbiBpcGFkZHJlc3M9IiQzIgpsb2cgInN0YXJ0aW5nIgpsb2cgIkNvbmZpZ3VyaW5nIGFyby1taW1vLWFjdHVhdG9yIHNlcnZpY2UiCmxvY2FsIC1yIGFyb19taW1vX2FjdHVhdG9yX2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1taW1vLWFjdHVhdG9yJwpsb2NhbCAtciBhZGRfY29uZl9maWxlPSJQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnCkFST19MT0dfTEVWRUw9JyRNSU1PQUNUVUFUT1JMT0dMRVZFTCciCndyaXRlX2ZpbGUgYXJvX21pbW9fYWN0dWF0b3JfY29uZl9maWxlbmFtZSBjb25mX2ZpbGUgdHJ1ZQp3cml0ZV9maWxlIGFyb19taW1vX2FjdHVhdG9yX2NvbmZfZmlsZW5hbWUgYWRkX2NvbmZfZmlsZSBmYWxzZQpsb2NhbCAtciBhcm9fbWltb19hY3R1YXRvcl9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1taW1vLWFjdHVhdG9yLnNlcnZpY2UnCmxvY2FsIC1yIGFyb19taW1vX2FjdHVhdG9yX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLW1pbW8tYWN0dWF0b3IKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtZSBBQ1JfUkVTT1VSQ0VfSUQgXAogIC1lIEFETUlOX0FQSV9DTElFTlRfQ0VSVF9DT01NT05fTkFNRSBcCiAgLWUgQVJNX0FQSV9DTElFTlRfQ0VSVF9DT01NT05fTkFNRSBcCiAgLWUgQVpVUkVfQVJNX0NMSUVOVF9JRCBcCiAgLWUgQVpVUkVfRlBfQ0xJRU5UX0lEIFwKICAtZSBDTFVTVEVSX01ETV9BQ0NPVU5UIFwKICAtZSBDTFVTVEVSX01ETV9OQU1FU1BBQ0UgXAogIC1lIENMVVNURVJfTURTRF9BQ0NPVU5UIFwKICAtZSBDTFVTVEVSX01EU0RfQ09ORklHX1ZFUlNJT04gXAogIC1lIENMVVNURVJfTURTRF9OQU1FU1BBQ0UgXAogIC1lIERBVEFCQVNFX0FDQ09VTlRfTkFNRSBcCiAgLWUgRE9NQUlOX05BTUUgXAogIC1lIEVOVklST05NRU5UIFwKICAtZSBHQVRFV0FZX0RPTUFJTlMgXAogIC1lIEdBVEVXQVlfUkVTT1VSQ0VHUk9VUCBcCiAgLWUgS0VZVkFVTFRfUFJFRklYIFwKICAtZSBNRE1fQUNDT1VOVCBcCiAgLWUgTURNX05BTUVTUEFDRSBcCiAgLWUgTURTRF9FTlZJUk9OTUVOVCBcCiAgLWUgUlBfRkVBVFVSRVMgXAogIC1lIEFST19JTlNUQUxMX1ZJQV9ISVZFIFwKICAtZSBBUk9fSElWRV9ERUZBVUxUX0lOU1RBTExFUl9QVUxMU1BFQyBcCiAgLWUgQVJPX0FET1BUX0JZX0hJVkUgXAogIC1lIE9JRENfQUZEX0VORFBPSU5UIFwKICAtZSBPSURDX1NUT1JBR0VfQUNDT1VOVF9OQU1FIFwKICAtZSBNU0lfUlBfRU5EUE9JTlQgXAogIC1lIEFST19MT0dfTEVWRUwgXAogIC1tIDJnIFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtcCA0NDU6ODQ0NSBcCiAgLXYgL2V0Yy9hcm8tcnA6L2V0Yy9hcm8tcnAgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAke1JQSU1BR0V9IFwKICBtaW1vLWFjdHVhdG9yCkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wIC10IDM2MDAgJU4KVGltZW91dFN0b3BTZWM9MzYwMApSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKd3JpdGVfZmlsZSBhcm9fbWltb19hY3R1YXRvcl9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19taW1vX2FjdHVhdG9yX3NlcnZpY2VfZmlsZSB0cnVlCn0KY29uZmlndXJlX3NlcnZpY2VfYXJvX21pbW9fc2NoZWR1bGVyKCl7CmxvY2FsIC1uIGltYWdlPSIkMSIKbG9jYWwgLW4gY29uZl9maWxlPSIkMiIKbG9jYWwgLW4gaXBhZGRyZXNzPSIkMyIKbG9nICJzdGFydGluZyIKbG9nICJDb25maWd1cmluZyBhcm8tbWltby1zY2hlZHVsZXIgc2VydmljZSIKbG9jYWwgLXIgYXJvX21pbW9fc2NoZWR1bGVyX2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1taW1vLXNjaGVkdWxlcicKbG9jYWwgLXIgYWRkX2NvbmZfZmlsZT0iUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpBUk9fTE9HX0xFVkVMPSckTUlNT1NDSEVEVUxFUkxPR0xFVkVMJyIKd3JpdGVfZmlsZSBhcm9fbWltb19zY2hlZHVsZXJfY29uZl9maWxlbmFtZSBjb25mX2ZpbGUgdHJ1ZQp3cml0ZV9maWxlIGFyb19taW1vX3NjaGVkdWxlcl9jb25mX2ZpbGVuYW1lIGFkZF9jb25mX2ZpbGUgZmFsc2UKbG9jYWwgLXIgYXJvX21pbW9fc2NoZWR1bGVyX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLW1pbW8tc2NoZWR1bGVyLnNlcnZpY2UnCmxvY2FsIC1yIGFyb19taW1vX3NjaGVkdWxlcl9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1taW1vLXNjaGVkdWxlcgpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC1lIEFDUl9SRVNPVVJDRV9JRCBcCiAgLWUgQURNSU5fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBUk1fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBWlVSRV9BUk1fQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9GUF9DTElFTlRfSUQgXAogIC1lIENMVVNURVJfTURNX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURNX05BTUVTUEFDRSBcCiAgLWUgQ0xVU1RFUl9NRFNEX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiBcCiAgLWUgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRSBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBET01BSU5fTkFNRSBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX1JFU09VUkNFR1JPVVAgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIE1EU0RfRU5WSVJPTk1FTlQgXAogIC1lIFJQX0ZFQVRVUkVTIFwKICAtZSBBUk9fSU5TVEFMTF9WSUFfSElWRSBcCiAgLWUgQVJPX0hJVkVfREVGQVVMVF9JTlNUQUxMRVJfUFVMTFNQRUMgXAogIC1lIEFST19BRE9QVF9CWV9ISVZFIFwKICAtZSBPSURDX0FGRF9FTkRQT0lOVCBcCiAgLWUgT0lEQ19TVE9SQUdFX0FDQ09VTlRfTkFNRSBcCiAgLWUgTVNJX1JQX0VORFBPSU5UIFwKICAtZSBBUk9fTE9HX0xFVkVMIFwKICAtbSAyZyBcCiAgLS1uZXR3b3JrPSR7UE9ETUFOX05FVFdPUkt9IFwKICAtLWlwICR7SVBBRERSRVNTfSBcCiAgLXAgNDQ2Ojg0NDYgXAogIC12IC9ldGMvYXJvLXJwOi9ldGMvYXJvLXJwIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJHtSUElNQUdFfSBcCiAgbWltby1zY2hlZHVsZXIKRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgLXQgMzYwMCAlTgpUaW1lb3V0U3RvcFNlYz0zNjAwClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Jwp3cml0ZV9maWxlIGFyb19taW1vX3NjaGVkdWxlcl9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19taW1vX3NjaGVkdWxlcl9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19taXNlKCl7CmxvY2FsIC1uIGltYWdlPSIkMSIKbG9jYWwgLW4gaXBhZGRyZXNzPSIkMiIKbG9nICJzdGFydGluZyIKbG9nICJDb25maWd1cmluZyBhcm8tbWlzZSBzZXJ2aWNlIgpMT0dJTklOU1RBTkNFPSJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20iCmlmIFtbICRBWlVSRUNMT1VETkFNRSA9PSAiJHVzX2dvdl9jbG91ZCIgXV07dGhlbgpMT0dJTklOU1RBTkNFPSJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS51cyIKZmkKbG9jYWwgLXIgYXJvX21pc2Vfc2VydmljZV9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tbWlzZScKbG9jYWwgLXIgYXJvX21pc2Vfc2VydmljZV9jb25mX2ZpbGU9IkZQQ0xJRU5USUQ9JyRGUENMSUVOVElEJwpGUFRFTkFOVElEPSckRlBURU5BTlRJRCcKTUlTRUlNQUdFPSckaW1hZ2UnCk1JU0VWQUxJREFVRElFTkNFUz0nJE1JU0VWQUxJREFVRElFTkNFUycKTUlTRVZBTElEQVBQSURTPSckTUlTRVZBTElEQVBQSURTJwpMT0dJTklOU1RBTkNFPSckTE9HSU5JTlNUQU5DRScKUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpFTlZJUk9OTUVOVD0nJEVOVklST05NRU5UJyIKd3JpdGVfZmlsZSBhcm9fbWlzZV9zZXJ2aWNlX2NvbmZfZmlsZW5hbWUgYXJvX21pc2Vfc2VydmljZV9jb25mX2ZpbGUgdHJ1ZQpta2RpciAtcCAvYXBwL21pc2UKbG9jYWwgLXIgYXJvX21pc2VfYXBwc2V0dGluZ3NfZmlsZW5hbWU9Jy9hcHAvbWlzZS9hcHBzZXR0aW5ncy5qc29uJwpsb2NhbCAtciBhcm9fbWlzZV9hcHBzZXR0aW5nc19maWxlPSJ7CiAgICBcIlZlcnNpb25cIjogXCIxXCIsCiAgICBcIkhlYXJ0YmVhdEludGVydmFsTXNcIjogNTAwMCwKICAgIFwiQXp1cmVBZFwiOiB7CiAgICAgICAgXCJJbnN0YW5jZVwiOiBcIiRMT0dJTklOU1RBTkNFXCIsCiAgICAgICAgXCJDbGllbnRJZFwiOiBcIiRGUENMSUVOVElEXCIsCiAgICAgICAgXCJUZW5hbnRJZFwiOiBcIiRGUFRFTkFOVElEXCIsCiAgICAgICAgXCJBdWRpZW5jZVwiOiBcImFwaTovLyRGUENMSUVOVElEXCIsCiAgICAgICAgXCJTaG93UElJXCI6IGZhbHNlLAogICAgICAgIFwiSW5ib3VuZFBvbGljaWVzXCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgXCJMYWJlbFwiOiBcImFyb3JwLWFybS1pbmJvdW5kLXBvbGljeVwiLAogICAgICAgICAgICAgICAgXCJBdXRob3JpdHlcIjogXCIkTE9HSU5JTlNUQU5DRS8kRlBURU5BTlRJRC9cIgosCiAgICAgICAgICAgICAgICBcIkF1dGhlbnRpY2F0aW9uU2NoZW1lc1wiOiBbCiAgICAgICAgICAgICAgICAgICAgXCJQb1BcIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFwiVmFsaWRBdWRpZW5jZXNcIjogJE1JU0VWQUxJREFVRElFTkNFUywKICAgICAgICAgICAgICAgIFwiU2lnbmVkSHR0cFJlcXVlc3RWYWxpZGF0aW9uUG9saWN5XCI6IHsKICAgICAgICAgICAgICAgICAgICBcIlZhbGlkYXRlVHNcIjogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBcIlZhbGlkYXRlTVwiOiB0cnVlLAogICAgICAgICAgICAgICAgICAgIFwiVmFsaWRhdGVVXCI6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgXCJWYWxpZGF0ZVBcIjogdHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFwiVmFsaWRBcHBsaWNhdGlvbklkc1wiOiAkTUlTRVZBTElEQVBQSURTCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIFwiTG9nZ2luZ1wiOiB7CiAgICAgICAgICAgIFwiTG9nTGV2ZWxcIjogXCJJbmZvcm1hdGlvblwiCiAgICAgICAgfSwKICAgICAgICBcIk1vZHVsZXNcIjogewogICAgICAgICAgICBcIlRyVjJcIjogewogICAgICAgICAgICAgICAgXCJNb2R1bGVUeXBlXCI6IFwiVHJWMk1vZHVsZVwiLAogICAgICAgICAgICAgICAgXCJFbmFibGVkXCI6IHRydWUKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sCiAgICBcIkFsbG93ZWRIb3N0c1wiOiBcIipcIiwKICAgIFwiS2VzdHJlbFwiOiB7CiAgICAgICAgXCJFbmRwb2ludHNcIjogewogICAgICAgICAgICBcIkh0dHBcIjogewogICAgICAgICAgICAgICAgXCJVcmxcIjogXCJodHRwOi8vJGlwYWRkcmVzczo1MDAwXCIKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sCiAgICBcIkxvZ2dpbmdcIjogewogICAgICAgIFwiTG9nTGV2ZWxcIjogewogICAgICAgICAgICBcIkRlZmF1bHRcIjogXCJJbmZvcm1hdGlvblwiLAogICAgICAgICAgICBcIk1pY3Jvc29mdFwiOiBcIkluZm9ybWF0aW9uXCIsCiAgICAgICAgICAgIFwiTWljcm9zb2Z0Lkhvc3RpbmcuTGlmZXRpbWVcIjogXCJJbmZvcm1hdGlvblwiCiAgICAgICAgfSwKICAgICAgICBcIkNvbnNvbGVcIjogewogICAgICAgICAgICBcIkZvcm1hdHRlck5hbWVcIjogXCJTaW1wbGVcIiwKICAgICAgICAgICAgXCJGb3JtYXR0ZXJPcHRpb25zXCI6IHsKICAgICAgICAgICAgICAgIFwiSW5jbHVkZVNjb3Blc1wiOiB0cnVlLAogICAgICAgICAgICAgICAgXCJTaW5nbGVMaW5lXCI6IHRydWUsCiAgICAgICAgICAgICAgICBcIlRpbWVzdGFtcEZvcm1hdFwiOiBcIkhIOm1tOnNzLmZmZmYgXCIsCiAgICAgICAgICAgICAgICBcIlVzZVV0Y1RpbWVzdGFtcFwiOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0iCndyaXRlX2ZpbGUgYXJvX21pc2VfYXBwc2V0dGluZ3NfZmlsZW5hbWUgYXJvX21pc2VfYXBwc2V0dGluZ3NfZmlsZSB0cnVlCmxvY2FsIC1yIGFyb19taXNlX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLW1pc2Uuc2VydmljZScKbG9jYWwgLXIgYXJvX21pc2Vfc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldApTdGFydExpbWl0SW50ZXJ2YWxTZWM9MApbU2VydmljZV0KUmVzdGFydFNlYz0xcwpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLW1pc2UKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC1wIDUwMDA6NTAwMCBcCiAgLXYgL2FwcC9taXNlL2FwcHNldHRpbmdzLmpzb246L2FwcC9hcHBzZXR0aW5ncy5qc29uOnogXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1uZXR3b3JrPSR7UE9ETUFOX05FVFdPUkt9IFwKICAtLWlwICR7SVBBRERSRVNTfSBcCiAgLS1ybSBcCiAgLWUgRU5WSVJPTk1FTlQgXAogICR7TUlTRUlNQUdFfQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAlTgpSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTMKU3RhcnRMaW1pdEludGVydmFsPTAKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Jwp3cml0ZV9maWxlIGFyb19taXNlX3NlcnZpY2VfZmlsZW5hbWUgYXJvX21pc2Vfc2VydmljZV9maWxlIHRydWUKfQpjb25maWd1cmVfc2VydmljZV9hcm9fb3RlbF9jb2xsZWN0b3IoKXsKbG9jYWwgLW4gaW1hZ2U9IiQxIgpsb2NhbCAtbiBzdGF0aWNfaXBfYWRkcmVzcz0iJDIiCmxvY2FsIC1uIGlwYWRkcmVzcz0iJDMiCmxvZyAic3RhcnRpbmciCmxvZyAiQ29uZmlndXJpbmcgYXJvLW90ZWwtY29sbGVjdG9yIHNlcnZpY2UiCmxvY2FsIC1yIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1vdGVsLWNvbGxlY3RvcicKbG9jYWwgLXIgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfY29uZl9maWxlPSJHT01FTUxJTUlUPTEwMDBNaUIKT1RFTElNQUdFPSckaW1hZ2UnClBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcycKRU5WSVJPTk1FTlQ9JyRFTlZJUk9OTUVOVCciCndyaXRlX2ZpbGUgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfY29uZl9maWxlbmFtZSBhcm9fb3RlbF9jb2xsZWN0b3Jfc2VydmljZV9jb25mX2ZpbGUgdHJ1ZQpta2RpciAtcCAvYXBwL290ZWwKbG9jYWwgLXIgYXJvX290ZWxfY29sbGVjdG9yX2FwcGNvbmZpZ19maWxlbmFtZT0nL2FwcC9vdGVsL2NvbmZpZy55YW1sJwpsb2NhbCAtciBhcm9fb3RlbF9jb2xsZWN0b3JfYXBwY29uZmlnX2ZpbGU9InJlY2VpdmVyczoKICBodHRwY2hlY2s6CiAgICB0YXJnZXRzOgogICAgIyBNSVNFIEVuZHBvaW50cwogICAgICAtIGVuZHBvaW50OiBodHRwOi8vJHtzdGF0aWNfaXBfYWRkcmVzc1sibWlzZSJdfTo1MDAwL2hlYWx0aHoKICAgICAgICBtZXRob2Q6IEdFVAogICAgICAtIGVuZHBvaW50OiBodHRwOi8vJHtzdGF0aWNfaXBfYWRkcmVzc1sibWlzZSJdfTo1MDAwL3JlYWR5egogICAgICAgIG1ldGhvZDogR0VUCiAgICAjIE9URUxzIG93biBFbmRwb2ludHMKICAgICAgLSBlbmRwb2ludDogaHR0cDovLyRpcGFkZHJlc3M6MTMxMzMvaGVhbHRoegogICAgICAgIG1ldGhvZDogR0VUCiAgICAgIC0gZW5kcG9pbnQ6IGh0dHA6Ly8kaXBhZGRyZXNzOjEzMTMzL3JlYWR5egogICAgICAgIG1ldGhvZDogR0VUCiAgICBjb2xsZWN0aW9uX2ludGVydmFsOiAyMHMKcHJvY2Vzc29yczoKICBiYXRjaDoKICBhdHRyaWJ1dGVzL2luc2VydDoKICAgIGFjdGlvbnM6CiAgICAgIC0ga2V5OiBcImxvY2F0aW9uXCIKICAgICAgICBhY3Rpb246IGluc2VydAogICAgICAgIHZhbHVlOiBcIiRMT0NBVElPTlwiCiAgICAgIC0ga2V5OiBcImhvc3RcIgogICAgICAgIGFjdGlvbjogaW5zZXJ0CiAgICAgICAgdmFsdWU6IFwiJChob3N0bmFtZSlcIgpleHRlbnNpb25zOgogIGhlYWx0aF9jaGVjazoKICAgIGVuZHBvaW50OiAkaXBhZGRyZXNzOjEzMTMzCmV4cG9ydGVyczoKICBvdGxwOgogICAgZW5kcG9pbnQ6ICR7c3RhdGljX2lwX2FkZHJlc3NbIm1kbSJdfTo0MzE3CiAgICB0bHM6CiAgICAgIGluc2VjdXJlOiB0cnVlCnNlcnZpY2U6CiAgZXh0ZW5zaW9uczogW2hlYWx0aF9jaGVja10KICBwaXBlbGluZXM6CiAgICBtZXRyaWNzOgogICAgICByZWNlaXZlcnM6IFtodHRwY2hlY2tdCiAgICAgIHByb2Nlc3NvcnM6IFtiYXRjaCwgYXR0cmlidXRlcy9pbnNlcnRdCiAgICAgIGV4cG9ydGVyczogW290bHBdIgp3cml0ZV9maWxlIGFyb19vdGVsX2NvbGxlY3Rvcl9hcHBjb25maWdfZmlsZW5hbWUgYXJvX290ZWxfY29sbGVjdG9yX2FwcGNvbmZpZ19maWxlIHRydWUKbG9jYWwgLXIgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLW90ZWwtY29sbGVjdG9yLnNlcnZpY2UnCmxvY2FsIC1yIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1tZG0uc2VydmljZQpXYW50cz1tZG0uc2VydmljZQpTdGFydExpbWl0SW50ZXJ2YWxTZWM9MApbU2VydmljZV0KUmVzdGFydFNlYz0xcwpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLW90ZWwtY29sbGVjdG9yCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC1tIDJnIFwKICAtZSBFTlZJUk9OTUVOVCBcCiAgLXYgL2FwcC9vdGVsL2NvbmZpZy55YW1sOi9ldGMvb3RlbGNvbC1jb250cmliL2NvbmZpZy55YW1sOnogXAogICR7T1RFTElNQUdFfQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAlTgpSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTMKU3RhcnRMaW1pdEludGVydmFsPTAKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Jwp3cml0ZV9maWxlIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CmNvbmZpZ3VyZV9zZXJ2aWNlX21kc2QoKXsKbG9jYWwgLW4gcm9sZT0iJDEiCmxvY2FsIC1uIG1vbml0b3JfY29uZmlnX3ZlcnNpb249IiQyIgpsb2cgInN0YXJ0aW5nIgpsb2cgImNvbmZpZ3VyaW5nIG1kc2Qgc2VydmljZSIKdmVyaWZ5X3JvbGUgcm9sZQpsb2NhbCAtciBtZHNkX3NlcnZpY2VfZGlyPSIvZXRjL3N5c3RlbWQvc3lzdGVtL21kc2Quc2VydmljZS5kIgpta2RpciAtcCAiJG1kc2Rfc2VydmljZV9kaXIiCmxvY2FsIC1yIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlbmFtZT0iJG1kc2Rfc2VydmljZV9kaXIvb3ZlcnJpZGUuY29uZiIKbG9jYWwgLXIgbWRzZF9jZXJ0aWZpY2F0ZV9zYW49IiQob3BlbnNzbCB4NTA5IC1pbiAvdmFyL2xpYi93YWFnZW50L01pY3Jvc29mdC5BenVyZS5LZXlWYXVsdC5TdG9yZS9tZHNkLnBlbSAtbm9vdXQgLXN1YmplY3R8c2VkIC1lICdzLy4qQ04gPSAvLycpIgpsb2NhbCAtciBtZHNkX292ZXJyaWRlX2NvbmZfZmlsZT0iW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldCIKd3JpdGVfZmlsZSBtZHNkX292ZXJyaWRlX2NvbmZfZmlsZW5hbWUgbWRzZF9vdmVycmlkZV9jb25mX2ZpbGUgdHJ1ZQpsb2NhbCAtciBkZWZhdWx0X21kc2RfZmlsZW5hbWU9Ii9ldGMvZGVmYXVsdC9tZHNkIgpsb2NhbCAtciBkZWZhdWx0X21kc2RfZmlsZT0iTURTRF9ST0xFX1BSRUZJWD0vdmFyL3J1bi9tZHNkL2RlZmF1bHQKTURTRF9PUFRJT05TPVwiLUEgLWQgLXIgXCRNRFNEX1JPTEVfUFJFRklYXCIKCmV4cG9ydCBNT05JVE9SSU5HX0dDU19FTlZJUk9OTUVOVD0nJE1EU0RFTlZJUk9OTUVOVCcKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0FDQ09VTlQ9JyRSUE1EU0RBQ0NPVU5UJwpleHBvcnQgTU9OSVRPUklOR19HQ1NfUkVHSU9OPSckTE9DQVRJT04nCmV4cG9ydCBNT05JVE9SSU5HX0dDU19BVVRIX0lEX1RZUEU9QXV0aEtleVZhdWx0CmV4cG9ydCBNT05JVE9SSU5HX0dDU19BVVRIX0lEPSckbWRzZF9jZXJ0aWZpY2F0ZV9zYW4nCmV4cG9ydCBNT05JVE9SSU5HX0dDU19OQU1FU1BBQ0U9JyRSUE1EU0ROQU1FU1BBQ0UnCmV4cG9ydCBNT05JVE9SSU5HX0NPTkZJR19WRVJTSU9OPSckbW9uaXRvcl9jb25maWdfdmVyc2lvbicKZXhwb3J0IE1PTklUT1JJTkdfVVNFX0dFTkVWQV9DT05GSUdfU0VSVklDRT10cnVlCmV4cG9ydCBNT05JVE9SSU5HX1RFTkFOVD0nJExPQ0FUSU9OJwpleHBvcnQgTU9OSVRPUklOR19ST0xFPSckcm9sZScKZXhwb3J0IE1PTklUT1JJTkdfUk9MRV9JTlNUQU5DRT1cIiQoaG9zdG5hbWUpXCIKZXhwb3J0IE1PTklUT1JJTkdfRU5WSVJPTk1FTlQ9JyRFTlZJUk9OTUVOVCcKCmV4cG9ydCBNRFNEX01TR1BBQ0tfU09SVF9DT0xVTU5TPVwiMVwiIgp3cml0ZV9maWxlIGRlZmF1bHRfbWRzZF9maWxlbmFtZSBkZWZhdWx0X21kc2RfZmlsZSB0cnVlCn0KY29uZmlndXJlX3NlcnZpY2VfZmx1ZW50Yml0KCl7CmxvY2FsIC1uIGNvbmZfZmlsZT0iJDEiCmxvY2FsIC1uIGltYWdlPSIkMiIKbG9nICJzdGFydGluZyIKbG9nICJDb25maWd1cmluZyBmbHVlbnRiaXQgc2VydmljZSIKbWtkaXIgLXAgL2V0Yy9mbHVlbnRiaXQvCm1rZGlyIC1wIC92YXIvbGliL2ZsdWVudApsb2NhbCAtciBjb25mX2ZpbGVuYW1lPScvZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZicKd3JpdGVfZmlsZSBjb25mX2ZpbGVuYW1lIGNvbmZfZmlsZSB0cnVlCmxvY2FsIC1yIHN5c2NvbmZpZ19maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvZmx1ZW50Yml0Jwpsb2NhbCAtciBzeXNjb25maWdfZmlsZT0iRkxVRU5UQklUSU1BR0U9JyRpbWFnZScKRU5WSVJPTk1FTlQ9JyRFTlZJUk9OTUVOVCciCndyaXRlX2ZpbGUgc3lzY29uZmlnX2ZpbGVuYW1lIHN5c2NvbmZpZ19maWxlIHRydWUKbG9jYWwgLXIgc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9mbHVlbnRiaXQuc2VydmljZScKbG9jYWwgLXIgc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldApTdGFydExpbWl0SW50ZXJ2YWxTZWM9MAoKW1NlcnZpY2VdClJlc3RhcnRTZWM9MXMKRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2ZsdWVudGJpdApFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1zZWN1cml0eS1vcHQgbGFiZWw9ZGlzYWJsZSBcCiAgLS1lbnRyeXBvaW50IC9vcHQvdGQtYWdlbnQtYml0L2Jpbi90ZC1hZ2VudC1iaXQgXAogIC0tbmV0PWhvc3QgXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLWUgRU5WSVJPTk1FTlQgXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLXYgL2V0Yy9mbHVlbnRiaXQvZmx1ZW50Yml0LmNvbmY6L2V0Yy9mbHVlbnRiaXQvZmx1ZW50Yml0LmNvbmYgXAogIC12IC92YXIvbGliL2ZsdWVudDovdmFyL2xpYi9mbHVlbnQ6eiBcCiAgLXYgL3Zhci9sb2cvam91cm5hbDovdmFyL2xvZy9qb3VybmFsOnJvIFwKICAtdiAvZXRjL21hY2hpbmUtaWQ6L2V0Yy9tYWNoaW5lLWlkOnJvIFwKICAke0ZMVUVOVEJJVElNQUdFfSBcCiAgLWMgL2V0Yy9mbHVlbnRiaXQvZmx1ZW50Yml0LmNvbmYKCkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wICVOClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9NQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Jwp3cml0ZV9maWxlIHNlcnZpY2VfZmlsZW5hbWUgc2VydmljZV9maWxlIHRydWUKfQpjb25maWd1cmVfdGltZXJzX21kbV9tZHNkKCl7CmxvY2FsIC1uIHJvbGU9IiQxIgpsb2cgInN0YXJ0aW5nIgp2ZXJpZnlfcm9sZSByb2xlCmxvY2FsIGtleXZhdWx0X3N1ZmZpeCBzZWNyZXRfcHJlZml4CmdldF9rZXl2YXVsdF9zdWZmaXggcm9sZSBrZXl2YXVsdF9zdWZmaXggc2VjcmV0X3ByZWZpeApmb3IgdmFyIGluICJtZHNkIiAibWRtIjtkbwpsb2NhbCBkb3dubG9hZF9jcmVkc19zZXJ2aWNlX2ZpbGVuYW1lPSIvZXRjL3N5c3RlbWQvc3lzdGVtL2Rvd25sb2FkLSR2YXItY3JlZGVudGlhbHMuc2VydmljZSIKbG9jYWwgZG93bmxvYWRfY3JlZHNfc2VydmljZV9maWxlPSJbVW5pdF0KRGVzY3JpcHRpb249UGVyaW9kaWMgJHZhciBjcmVkZW50aWFscyByZWZyZXNoCgpbU2VydmljZV0KVHlwZT1vbmVzaG90CkV4ZWNTdGFydD0vdXNyL2xvY2FsL2Jpbi9kb3dubG9hZC1jcmVkZW50aWFscy5zaCAkdmFyIgp3cml0ZV9maWxlIGRvd25sb2FkX2NyZWRzX3NlcnZpY2VfZmlsZW5hbWUgZG93bmxvYWRfY3JlZHNfc2VydmljZV9maWxlIHRydWUKbG9jYWwgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZW5hbWU9Ii9ldGMvc3lzdGVtZC9zeXN0ZW0vZG93bmxvYWQtJHZhci1jcmVkZW50aWFscy50aW1lciIKbG9jYWwgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZT0iW1VuaXRdCkRlc2NyaXB0aW9uPVBlcmlvZGljICR2YXIgY3JlZGVudGlhbHMgcmVmcmVzaApBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbVGltZXJdCk9uQm9vdFNlYz0wbWluCk9uQ2FsZW5kYXI9MC8xMjowMDowMApBY2N1cmFjeVNlYz01cwoKW0luc3RhbGxdCldhbnRlZEJ5PXRpbWVycy50YXJnZXQiCndyaXRlX2ZpbGUgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZW5hbWUgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZSB0cnVlCmRvbmUKbG9jYWwgLXIgZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGVuYW1lPSIvdXNyL2xvY2FsL2Jpbi9kb3dubG9hZC1jcmVkZW50aWFscy5zaCIKbG9jYWwgLXIgZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGU9IiMhL2Jpbi9iYXNoCnNldCAtZXUKCkNPTVBPTkVOVD1cJDEKZWNobyBcIkRvd25sb2FkIFwkQ09NUE9ORU5UIGNyZWRlbnRpYWxzXCIKClRFTVBfRElSPVwiXCQobWt0ZW1wIC1kKVwiCmV4cG9ydCBBWlVSRV9DT05GSUdfRElSPVwiXCQobWt0ZW1wIC1kKVwiCgplY2hvIFwiTG9nZ2luZyBpbnRvIEF6dXJlLi4uXCIKUkVUUklFUz0zCndoaWxlIFtbIFwkUkVUUklFUyAtZ3QgMCBdXTsgZG8KICAgIGlmIGF6IGxvZ2luIC1pIC0tYWxsb3ctbm8tc3Vic2NyaXB0aW9ucwogICAgdGhlbgogICAgICAgIGVjaG8gXCJheiBsb2dpbiBzdWNjZXNzZnVsXCIKICAgICAgICBicmVhawogICAgZWxzZQogICAgICAgIGVjaG8gXCJheiBsb2dpbiBmYWlsZWQuIFJldHJ5aW5nLi4uXCIKICAgICAgICBsZXQgUkVUUklFUy09MQogICAgICAgIHNsZWVwIDUKICAgIGZpCmRvbmUKCnRyYXAgXCJjbGVhbnVwXCIgRVhJVAoKY2xlYW51cCgpIHsKICBheiBsb2dvdXQKICBbWyBcJFRFTVBfRElSID1+IC90bXAvLisgXV0gJiYgcm0gLXJmIFwkVEVNUF9ESVIKICBbWyBcJEFaVVJFX0NPTkZJR19ESVIgPX4gL3RtcC8uKyBdXSAmJiBybSAtcmYgXCRBWlVSRV9DT05GSUdfRElSCn0KCmlmIFtbIFwkQ09NUE9ORU5UID0gXCJtZG1cIiBdXTsgdGhlbgogIENVUlJFTlRfQ0VSVF9GSUxFPVwiL2V0Yy9tZG0ucGVtXCIKZWxpZiBbWyBcJENPTVBPTkVOVCA9IFwibWRzZFwiIF1dOyB0aGVuCiAgQ1VSUkVOVF9DRVJUX0ZJTEU9XCIvdmFyL2xpYi93YWFnZW50L01pY3Jvc29mdC5BenVyZS5LZXlWYXVsdC5TdG9yZS9tZHNkLnBlbVwiCmVsc2UKICBlY2hvIEludmFsaWQgdXNhZ2UgJiYgZXhpdCAxCmZpCgpTRUNSRVRfTkFNRT1cIiRzZWNyZXRfcHJlZml4LVwke0NPTVBPTkVOVH1cIgpORVdfQ0VSVF9GSUxFPVwiXCRURU1QX0RJUi9cJENPTVBPTkVOVC5wZW1cIgpmb3IgYXR0ZW1wdCBpbiB7MS4uNX07IGRvCiAgYXoga2V5dmF1bHQgXAogICAgc2VjcmV0IFwKICAgIGRvd25sb2FkIFwKICAgIC0tZmlsZSBcIlwkTkVXX0NFUlRfRklMRVwiIFwKICAgIC0taWQgXCJodHRwczovLyRLRVlWQVVMVFBSRUZJWC0ka2V5dmF1bHRfc3VmZml4LiRLRVlWQVVMVEROU1NVRkZJWC9zZWNyZXRzL1wkU0VDUkVUX05BTUVcIiBcCiAgICAmJiBicmVhawogIGlmIFtbIFwkYXR0ZW1wdCAtbHQgNSBdXTsgdGhlbiBzbGVlcCAxMDsgZWxzZSBleGl0IDE7IGZpCmRvbmUKCmlmIFsgLWYgXCRORVdfQ0VSVF9GSUxFIF07IHRoZW4KICBpZiBbWyBcJENPTVBPTkVOVCA9IFwibWRzZFwiIF1dOyB0aGVuCiAgICBjaG93biBzeXNsb2c6c3lzbG9nIFwkTkVXX0NFUlRfRklMRQogIGVsc2UKICAgIHNlZCAtaSAtbmUgJzEsL0VORCBDRVJUSUZJQ0FURS8gcCcgXCRORVdfQ0VSVF9GSUxFCiAgZmkKCiAgbmV3X2NlcnRfc249XCJcJChvcGVuc3NsIHg1MDkgLWluIFwiXCRORVdfQ0VSVF9GSUxFXCIgLW5vb3V0IC1zZXJpYWwgfCBhd2sgLUY9ICd7cHJpbnQgXCQyfScpXCIKICBjdXJyZW50X2NlcnRfc249XCJcJChvcGVuc3NsIHg1MDkgLWluIFwiXCRDVVJSRU5UX0NFUlRfRklMRVwiIC1ub291dCAtc2VyaWFsIHwgYXdrIC1GPSAne3ByaW50IFwkMn0nKVwiCiAgaWYgW1sgISAteiBcJG5ld19jZXJ0X3NuIF1dICYmIFtbIFwkbmV3X2NlcnRfc24gIT0gXCJcJGN1cnJlbnRfY2VydF9zblwiIF1dOyB0aGVuCiAgICBlY2hvIHVwZGF0aW5nIGNlcnRpZmljYXRlIGZvciBcJENPTVBPTkVOVAogICAgY2htb2QgMDYwMCBcJE5FV19DRVJUX0ZJTEUKICAgIG12IFwkTkVXX0NFUlRfRklMRSBcJENVUlJFTlRfQ0VSVF9GSUxFCiAgZmkKZWxzZQogIGVjaG8gRmFpbGVkIHRvIHJlZnJlc2ggY2VydGlmaWNhdGUgZm9yIFwkQ09NUE9ORU5UICYmIGV4aXQgMQpmaSIKd3JpdGVfZmlsZSBkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZW5hbWUgZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGUgdHJ1ZQpjaG1vZCB1K3ggL3Vzci9sb2NhbC9iaW4vZG93bmxvYWQtY3JlZGVudGlhbHMuc2gKJGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlbmFtZSBtZHNkJgp3YWl0ICIkISIKJGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlbmFtZSBtZG0mCndhaXQgIiQhIgpsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHNfc2VydmljZV9maWxlbmFtZT0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS93YXRjaC1tZG0tY3JlZGVudGlhbHMuc2VydmljZSIKbG9jYWwgLXIgd2F0Y2hfbWRtX2NyZWRzX3NlcnZpY2VfZmlsZT0iW1VuaXRdCkRlc2NyaXB0aW9uPVdhdGNoIGZvciBjaGFuZ2VzIGluIG1kbS5wZW0gYW5kIHJlc3RhcnRzIHRoZSBtZG0gc2VydmljZQoKW1NlcnZpY2VdClR5cGU9b25lc2hvdApFeGVjU3RhcnQ9L3Vzci9iaW4vc3lzdGVtY3RsIHJlc3RhcnQgbWRtLnNlcnZpY2UKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCIKd3JpdGVfZmlsZSB3YXRjaF9tZG1fY3JlZHNfc2VydmljZV9maWxlbmFtZSB3YXRjaF9tZG1fY3JlZHNfc2VydmljZV9maWxlIHRydWUKbG9jYWwgLXIgd2F0Y2hfbWRtX2NyZWRzX3BhdGhfZmlsZW5hbWU9Jy91c3IvbGliL3N5c3RlbWQvc3lzdGVtL3dhdGNoLW1kbS1jcmVkZW50aWFscy5wYXRoJwpsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHNfcGF0aF9maWxlPSdbUGF0aF0KUGF0aE1vZGlmaWVkPS9ldGMvbWRtLnBlbQoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Jwp3cml0ZV9maWxlIHdhdGNoX21kbV9jcmVkc19wYXRoX2ZpbGVuYW1lIHdhdGNoX21kbV9jcmVkc19wYXRoX2ZpbGUgdHJ1ZQpsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHM9J3dhdGNoLW1kbS1jcmVkZW50aWFscy5wYXRoJwpzeXN0ZW1jdGwgZW5hYmxlIC0tbm93ICIkd2F0Y2hfbWRtX2NyZWRzInx8YWJvcnQgImZhaWxlZCB0byBlbmFibGUgYW5kIHN0YXJ0ICR3YXRjaF9tZG1fY3JlZHMiCn0KY29uZmlndXJlX3NlcnZpY2VfbWRtKCl7CmxvY2FsIC1uIHJvbGU9IiQxIgpsb2NhbCAtbiBpbWFnZT0iJDIiCmxvY2FsIC1uIGlwYWRkcmVzcz0iJDMiCmxvZyAic3RhcnRpbmciCmxvZyAiQ29uZmlndXJpbmcgbWRtIHNlcnZpY2UiCnZlcmlmeV9yb2xlIHJvbGUKbG9jYWwgLXIgc3lzY29uZmlnX21kbV9maWxlbmFtZT0iL2V0Yy9zeXNjb25maWcvbWRtIgpsb2NhbCAtciBzeXNjb25maWdfbWRtX2ZpbGU9Ik1ETUZST05URU5EVVJMPSckTURNRlJPTlRFTkRVUkwnCk1ETUlNQUdFPSckaW1hZ2UnCk1ETVNPVVJDRUVOVklST05NRU5UPSckTE9DQVRJT04nCk1ETVNPVVJDRVJPTEU9JyRyb2xlJwpNRE1TT1VSQ0VST0xFSU5TVEFOQ0U9XCIkKGhvc3RuYW1lKVwiCk1ETV9JTlBVVD1zdGF0c2RfbG9jYWwsb3RscF9ncnBjCk1ETV9OQU1FU1BBQ0U9J09URUwnCk1ETV9BQ0NPVU5UPSdBenVyZVJlZEhhdE9wZW5TaGlmdFJQJwpQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnIgp3cml0ZV9maWxlIHN5c2NvbmZpZ19tZG1fZmlsZW5hbWUgc3lzY29uZmlnX21kbV9maWxlIHRydWUKbWtkaXIgLXAgL3Zhci9ldHcKbG9jYWwgLXIgbWRtX3NlcnZpY2VfZmlsZW5hbWU9Ii9ldGMvc3lzdGVtZC9zeXN0ZW0vbWRtLnNlcnZpY2UiCmxvY2FsIC1yIG1kbV9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL21kbQpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1lbnRyeXBvaW50IC91c3Ivc2Jpbi9NZXRyaWNzRXh0ZW5zaW9uIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLS1uZXR3b3JrPSR7UE9ETUFOX05FVFdPUkt9IFwKICAtLWlwICR7SVBBRERSRVNTfSBcCiAgLW0gMmcgXAogIC12IC9ldGMvbWRtLnBlbTovZXRjL21kbS5wZW0gXAogIC12IC92YXIvZXR3Oi92YXIvZXR3OnogXAogICR7TURNSU1BR0V9IFwKICAtSW5wdXQgJHtNRE1fSU5QVVR9IFwKICAtTWV0cmljTmFtZXNwYWNlICR7TURNX05BTUVTUEFDRX0gXAogIC1Nb25pdG9yaW5nQWNjb3VudCAke01ETV9BQ0NPVU5UfSBcCiAgLUNlcnRGaWxlIC9ldGMvbWRtLnBlbSBcCiAgLUZyb250RW5kVXJsICR7TURNRlJPTlRFTkRVUkx9IFwKICAtTG9nZ2VyIENvbnNvbGUgXAogIC1Mb2dMZXZlbCBXYXJuaW5nIFwKICAtUHJpdmF0ZUtleUZpbGUgL2V0Yy9tZG0ucGVtIFwKICAtU291cmNlRW52aXJvbm1lbnQgJHtNRE1TT1VSQ0VFTlZJUk9OTUVOVH0gXAogIC1Tb3VyY2VSb2xlICR7TURNU09VUkNFUk9MRX0gXAogIC1Tb3VyY2VSb2xlSW5zdGFuY2UgJHtNRE1TT1VSQ0VST0xFSU5TVEFOQ0V9CkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wICVOClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Jwp3cml0ZV9maWxlIG1kbV9zZXJ2aWNlX2ZpbGVuYW1lIG1kbV9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CmNvbmZpZ3VyZV92bXNzX2Fyb19zZXJ2aWNlcygpewpsb2NhbCAtbiByPSIkMSIKbG9jYWwgLW4gaW1hZ2VzPSIkMiIKbG9jYWwgLW4gY29uZmlncz0iJDMiCmxvZyAic3RhcnRpbmciCnZlcmlmeV9yb2xlICIkMSIKaWYgWyAiJHIiID09ICIkcm9sZV9nYXRld2F5IiBdO3RoZW4KY29uZmlndXJlX3NlcnZpY2VfYXJvX2dhdGV3YXkgIiR7aW1hZ2VzWyJycCJdfSIgIiQxIiAiJHtjb25maWdzWyJnYXRld2F5X2NvbmZpZyJdfSIgIiR7Y29uZmlnc1sic3RhdGljX2lwX2FkZHJlc3MiXX1bZ2F0ZXdheV0iCmNvbmZpZ3VyZV9jZXJ0c19nYXRld2F5CmVsaWYgWyAiJHIiID09ICIkcm9sZV9ycCIgXTt0aGVuCmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19ycCAiJHtpbWFnZXNbInJwIl19IiBcCiIkMSIgXAoiJHtjb25maWdzW3JwX2NvbmZpZ119IiBcCiIke2NvbmZpZ3Nbc3RhdGljX2lwX2FkZHJlc3NdfVtycF0iCmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19taW1vX2FjdHVhdG9yICIke2ltYWdlc1tycF19IiBcCiIke2NvbmZpZ3NbcnBfY29uZmlnXX0iIFwKIiR7Y29uZmlnc1tzdGF0aWNfaXBfYWRkcmVzc119W21pbW9fYWN0dWF0b3JdIgpjb25maWd1cmVfc2VydmljZV9hcm9fbWltb19zY2hlZHVsZXIgIiR7aW1hZ2VzW3JwXX0iIFwKIiR7Y29uZmlnc1tycF9jb25maWddfSIgXAoiJHtjb25maWdzW3N0YXRpY19pcF9hZGRyZXNzXX1bbWltb19zY2hlZHVsZXJdIgpjb25maWd1cmVfc2VydmljZV9hcm9fbW9uaXRvciAiJHtpbWFnZXNbcnBdfSIgIiR7Y29uZmlnc1tzdGF0aWNfaXBfYWRkcmVzc119W21vbml0b3JdIgpjb25maWd1cmVfc2VydmljZV9hcm9fcG9ydGFsICIke2ltYWdlc1tycF19IiAiJHtjb25maWdzW3N0YXRpY19pcF9hZGRyZXNzXX1bcG9ydGFsXSIKY29uZmlndXJlX3NlcnZpY2VfYXJvX21pc2UgIiR7aW1hZ2VzW21pc2VdfSIgIiR7Y29uZmlnc1tzdGF0aWNfaXBfYWRkcmVzc119W21pc2VdIgpjb25maWd1cmVfc2VydmljZV9hcm9fb3RlbF9jb2xsZWN0b3IgIiR7aW1hZ2VzW290ZWxdfSIgXAoiJHtjb25maWdzW3N0YXRpY19pcF9hZGRyZXNzXX0iIFwKIiR7Y29uZmlnc1sic3RhdGljX2lwX2FkZHJlc3MiXX1bb3RlbF9jb2xsZWN0b3JdIgpjb25maWd1cmVfY2VydHNfcnAKZmkKY29uZmlndXJlX3NlcnZpY2VfZmx1ZW50Yml0ICIke2NvbmZpZ3NbZmx1ZW50Yml0XX0iICIke2ltYWdlc1tmbHVlbnRiaXRdfSIKY29uZmlndXJlX3RpbWVyc19tZG1fbWRzZCAiJDEiCmNvbmZpZ3VyZV9zZXJ2aWNlX21kbSAiJDEiIFwKIiR7aW1hZ2VzW21kbV19IiBcCiIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19W21kbV0iCmNvbmZpZ3VyZV9zZXJ2aWNlX21kc2QgIiQxIiAiJHtjb25maWdzW21kc2RdfSIKcnVuX2F6c2VjZF9jb25maWdfc2Nhbgp9CnV0aWxfY29tbW9uPSJ1dGlsLWNvbW1vbi5zaCIKaWYgWyAtZiAiJHV0aWxfY29tbW9uIiBdO3RoZW4Kc291cmNlICIkdXRpbF9jb21tb24iCmZpCnV0aWxfc3lzdGVtPSJ1dGlsLXN5c3RlbS5zaCIKaWYgWyAtZiAiJHV0aWxfc3lzdGVtIiBdO3RoZW4Kc291cmNlICIkdXRpbF9zeXN0ZW0iCmZpCmdldF9ib290X2Rldl91dWlkKCl7CmxvY2FsIC1uIGJvb3RfZGV2X3V1aWQ9IiQxIgpib290X2Rldj0iJChkZiAvYm9vdC98dGFpbCAtMXxjdXQgLWQnICcgLWYxKSIKcm9vdF9kZXY9IiQoZGYgL3x0YWlsIC0xfGN1dCAtZCcgJyAtZjEpIgpib290X2Rldl91dWlkPSIkcm9vdF9kZXYiCmlmIFsgIiRib290X2RldiIgIT0gIiRyb290X2RldiIgXTt0aGVuCmJvb3RfZGV2X3V1aWQ9ImJvb3Q9VVVJRD0kKGJsa2lkICIkYm9vdF9kZXYiIC1zIFVVSUQgLW8gdmFsdWUpIgpmaQp9CmZpcHNfdmVyaWZ5KCl7CmZpcHNfZW5hYmxlZF9wcm9jPSIkKGNhdCAvcHJvYy9zeXMvY3J5cHRvL2ZpcHNfZW5hYmxlZCkiCmZpcHNfZW5hYmxlZF9zeXNjdGw9IiQoc3lzY3RsIC1uIGNyeXB0by5maXBzX2VuYWJsZWQpIgppZiBbICIkZmlwc19lbmFibGVkX3Byb2MiIC1uZSAxIF18fFsgIiRmaXBzX2VuYWJsZWRfc3lzY3RsIiAtbmUgMSBdO3RoZW4KYWJvcnQgIkZJUFMgbW9kZSBpcyBkaXNhYmxlZCIKZmkKbG9nICJGSVBTIG1vZGUgaXMgZW5hYmxlZCIKfQpmaXBzX2NvbmZpZ3VyZSgpewpsb2NhbCBib290X3V1aWQKZ2V0X2Jvb3RfZGV2X3V1aWQgYm9vdF91dWlkCmxvY2FsIGdydWIyX2VudgppZiBncnViMl9lbnY9IiQoZ3J1YjItZWRpdGVudiAtIGxpc3R8Z3JlcCBrZXJuZWxvcHRzKSI7dGhlbgpncnViMi1lZGl0ZW52IC0gc2V0ICIkZ3J1YjJfZW52IGZpcHM9MSAkYm9vdF91dWlkIgplbHNlCmdydWJieSAtLXVwZGF0ZS1rZXJuZWw9QUxMIC0tYXJncz0iZmlwcz0xICRib290X3V1aWQiCmZpCn0KY29uZmlndXJlX3NzaGQoKXsKbG9nICJzdGFydGluZyIKbG9jYWwgLXIgc3NoZF9jb25maWc9Ii9ldGMvc3NoL3NzaGRfY29uZmlnIgpsb2cgIkVkaXRpbmcgJHNzaGRfY29uZmlnIHRvIGFsbG93IHBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uIgpzZWQgLWkgJ3MvUGFzc3dvcmRBdXRoZW50aWNhdGlvbiBuby9QYXNzd29yZEF1dGhlbnRpY2F0aW9uIHllcy9nJyAiJHNzaGRfY29uZmlnIgpzeXN0ZW1jdGwgcmVsb2FkIHNzaGQuc2VydmljZXx8YWJvcnQgInNzaGQgZmFpbGVkIHRvIHJlbG9hZCIKfQpjb25maWd1cmVfbG9ncm90YXRlKCl7CmxvY2FsIC1uIGRyb3Bpbl9maWxlcz0iJHsxOi1lbXB0eV9zdHJ9Igpsb2cgInN0YXJ0aW5nIgpsb2NhbCAtciBsb2dyb3RhdGVfY29uZl9maWxlbmFtZT0nL2V0Yy9sb2dyb3RhdGUuY29uZicKbG9jYWwgLXIgbG9ncm90YXRlX2NvbmZfZmlsZT0nIyBzZWUgIm1hbiBsb2dyb3RhdGUiIGZvciBkZXRhaWxzCiMgcm90YXRlIGxvZyBmaWxlcyB3ZWVrbHkKd2Vla2x5CgojIGtlZXAgMiB3ZWVrcyB3b3J0aCBvZiBiYWNrbG9ncwpyb3RhdGUgMgoKIyBjcmVhdGUgbmV3IChlbXB0eSkgbG9nIGZpbGVzIGFmdGVyIHJvdGF0aW5nIG9sZCBvbmVzCmNyZWF0ZQoKIyB1c2UgZGF0ZSBhcyBhIHN1ZmZpeCBvZiB0aGUgcm90YXRlZCBmaWxlCmRhdGVleHQKCiMgdW5jb21tZW50IHRoaXMgaWYgeW91IHdhbnQgeW91ciBsb2cgZmlsZXMgY29tcHJlc3NlZApjb21wcmVzcwoKIyBSUE0gcGFja2FnZXMgZHJvcCBsb2cgcm90YXRpb24gaW5mb3JtYXRpb24gaW50byB0aGlzIGRpcmVjdG9yeQppbmNsdWRlIC9ldGMvbG9ncm90YXRlLmQKCiMgbm8gcGFja2FnZXMgb3duIHd0bXAgYW5kIGJ0bXAgLS0gd2Ugd2lsbCByb3RhdGUgdGhlbSBoZXJlCi92YXIvbG9nL3d0bXAgewogICAgbW9udGhseQogICAgY3JlYXRlIDA2NjQgcm9vdCB1dG1wCiAgICAgICAgbWluc2l6ZSAxTQogICAgcm90YXRlIDEKfQoKL3Zhci9sb2cvYnRtcCB7CiAgICBtaXNzaW5nb2sKICAgIG1vbnRobHkKICAgIGNyZWF0ZSAwNjAwIHJvb3QgdXRtcAogICAgcm90YXRlIDEKfScKd3JpdGVfZmlsZSBsb2dyb3RhdGVfY29uZl9maWxlbmFtZSBsb2dyb3RhdGVfY29uZl9maWxlIHRydWUKaWYgWyAtbiAiJHtkcm9waW5fZmlsZXNbKl19IiBdO3RoZW4KbG9jYWwgLXIgbG9ncm90YXRlX2Q9Ii9ldGMvbG9ncm90YXRlLmQiCmxvZyAiV3JpdGluZyBsb2dyb3RhdGUgZmlsZXMgdG8gJGxvZ3JvdGF0ZV9kIgpmb3IgZHJvcGluX25hbWUgaW4gIiR7IWRyb3Bpbl9maWxlc1tAXX0iO2RvCmxvY2FsIC1yIGRyb3Bpbl9maWxlbmFtZT0iJGxvZ3JvdGF0ZV9kLyRkcm9waW5fbmFtZSIKbG9jYWwgLXIgZHJvcGluX2ZpbGU9IiR7ZHJvcGluX2ZpbGVzWyIkZHJvcGluX25hbWUiXX0iCndyaXRlX2ZpbGUgZHJvcGluX2ZpbGVuYW1lIGRyb3Bpbl9maWxlIHRydWUKZG9uZQpmaQp9CnB1bGxfY29udGFpbmVyX2ltYWdlcygpewpsb2NhbCAtbiBwdWxsX2ltYWdlcz0iJDEiCmxvY2FsIC1uIHJlZ2lzdHJ5X2NvbmY9IiR7MjotZW1wdHlfc3RyfSIKbG9nICJzdGFydGluZyIKbG9jYWwgLWlyIHJldHJ5X3RpbWU9MzAKY21kPSgKYXoKbG9naW4KLWkKLS1hbGxvdy1uby1zdWJzY3JpcHRpb25zKQpsb2cgIlJ1bm5pbmcgYXogbG9naW4gd2l0aCByZXRyaWVzIgpyZXRyeSBjbWQgcmV0cnlfdGltZQpta2RpciAtcCAvZXRjL2NvbnRhaW5lcnMvCm1rZGlyIC1wIC9yb290Ly5kb2NrZXIKdG91Y2ggL2V0Yy9jb250YWluZXJzL25vZG9ja2VyClsgLW4gIiRyZWdpc3RyeV9jb25mIiBdJiZ3cml0ZV9maWxlIFJFR0lTVFJZX0FVVEhfRklMRSByZWdpc3RyeV9jb25mICJ0cnVlIgpleHBvcnQgUkVHSVNUUllfQVVUSF9GSUxFPSIvcm9vdC8uZG9ja2VyL2NvbmZpZy5qc29uIgpfKCl7CmxvY2FsIC1yIGFjcj0iJDEiCmxvY2FsIC1yIHJlZ2lzdHJ5PSIkMiIKbG9jYWwgLXIgeHRyYWNlX2luaXRpYWxfc2V0PSIkKHh0cmFjZV9pc19zZXQpIgp4dHJhY2VfdG9nZ2xlIFhUUkFDRV9VTlNFVApsb2cgImxvZ2dpbmcgaW50byBjb250YWluZXIgcmVnaXN0cnkgJDIiCmF6IGFjciBsb2dpbiBcCi0tbmFtZSAiJGFjciIgXAotLWV4cG9zZS10b2tlbiBcCi0tb3V0cHV0IHRzdiBcCi0tcXVlcnkgYWNjZXNzVG9rZW58cG9kbWFuIGxvZ2luIFwKLS11c2VybmFtZSAiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIiBcCi0tcGFzc3dvcmQtc3RkaW4gXAoiJHJlZ2lzdHJ5Igpsb2NhbCAtaXIgc3RhdHVzPSQ/Cnh0cmFjZV90b2dnbGUgIiR4dHJhY2VfaW5pdGlhbF9zZXQiCnJldHVybiAiJHN0YXR1cyIKfQpsb2NhbCAtciBhY3JfbmFtZT0iJHtBQ1JSRVNPVVJDRUlEIyMqL30iCmxvY2FsIC1yIHJlZ2lzdHJ5X25hbWU9IiRhY3JfbmFtZS5henVyZWNyLmlvIgpjbWQ9KF8gIiRhY3JfbmFtZSIgIiRyZWdpc3RyeV9uYW1lIikKcmV0cnkgY21kIHJldHJ5X3RpbWUKZm9yIGkgaW4gJHtwdWxsX2ltYWdlc1tAXX07ZG8KbG9jYWwgLW4gaW1hZ2U9IiRpIgpjbWQ9KApwb2RtYW4KcHVsbAoiJGltYWdlIikKbG9nICJQdWxsaW5nIGltYWdlICRpbWFnZSB3aXRoIHJldHJpZXMgbm93IgpyZXRyeSBjbWQgcmV0cnlfdGltZQpkb25lCmNtZD0oCmF6CmxvZ291dCkKbG9nICJSdW5uaW5nIGF6IGxvZ291dCB3aXRoIHJldHJpZXMiCnJldHJ5IGNtZCByZXRyeV90aW1lCn0KY29uZmlndXJlX2NhX2J1bmRsZSgpewpsb2cgInN0YXJ0aW5nIgpsb2NhbCAtciB4dHJhY2VfaW5pdGlhbF92YWx1ZT0iJCh4dHJhY2VfaXNfc2V0KSIKeHRyYWNlX3RvZ2dsZSBYVFJBQ0VfVU5TRVQKbG9jYWwgLXIgc3NsX2NlcnRzX2Jhc2VkaXI9Ii91c3IvbGliL3NzbC9jZXJ0cyIKbWtkaXIgLXAgIiRzc2xfY2VydHNfYmFzZWRpciIKY2FfYnVuZGxlPSIvZXRjL3BraS90bHMvY2VydHMvY2EtYnVuZGxlLmNydCIKbG9nICJDb25maWd1cmluZyAkY2FfYnVuZGxlIgpjc3BsaXQgLWYgIiRzc2xfY2VydHNfYmFzZWRpci9jZXJ0LSIgLWIgJTAzZC5wZW0gIiRjYV9idW5kbGUiIC9eJC8xICJ7Kn0iIDE+L2Rldi9udWxsCmNfcmVoYXNoICIkc3NsX2NlcnRzX2Jhc2VkaXIiCnh0cmFjZV90b2dnbGUgIiR4dHJhY2VfaW5pdGlhbF92YWx1ZSIKfQpjb25maWd1cmVfY2VydHNfcnAoKXsKbG9nICJzdGFydGluZyIKdmVyaWZ5X3JvbGUgcm9sZV9ycApsb2NhbCAtciB4dHJhY2VfaW5pdGlhbF92YWx1ZT0iJCh4dHJhY2VfaXNfc2V0KSIKeHRyYWNlX3RvZ2dsZSBYVFJBQ0VfVU5TRVQKbG9jYWwgLXIgcnBfY2VydHNfYmFzZWRpcj0iL2V0Yy9hcm8tcnAiCm1rZGlyIC1wICIkcnBfY2VydHNfYmFzZWRpciIKYmFzZTY0IC1kIDw8PCIkQURNSU5BUElDQUJVTkRMRSIgPiIkcnBfY2VydHNfYmFzZWRpci9hZG1pbi1jYS1idW5kbGUucGVtIgppZiBbWyAtbiAkQVJNQVBJQ0FCVU5ETEUgXV07dGhlbgpiYXNlNjQgLWQgPDw8IiRBUk1BUElDQUJVTkRMRSIgPiIkcnBfY2VydHNfYmFzZWRpci9hcm0tY2EtYnVuZGxlLnBlbSIKZmkKY2hvd24gLVIgMTAwMDoxMDAwICIkcnBfY2VydHNfYmFzZWRpciIKeHRyYWNlX3RvZ2dsZSAiJHh0cmFjZV9pbml0aWFsX3ZhbHVlIgpjb25maWd1cmVfY2FfYnVuZGxlCn0KY29uZmlndXJlX2NlcnRzX2dhdGV3YXkoKXsKbG9nICJzdGFydGluZyIKdmVyaWZ5X3JvbGUgcm9sZV9nYXRld2F5CmNvbmZpZ3VyZV9jYV9idW5kbGUKfQpjb25maWd1cmVfY2VydHNfZGV2cHJveHkoKXsKbG9nICJzdGFydGluZyIKdmVyaWZ5X3JvbGUgcm9sZV9kZXZwcm94eQp4dHJhY2VfaW5pdGlhbF92YWx1ZT0iJCh4dHJhY2VfaXNfc2V0KSIKeHRyYWNlX3RvZ2dsZSBYVFJBQ0VfVU5TRVQKbG9jYWwgLXIgcHJveHlfY2VydHNfYmFzZWRpcj0iL2V0Yy9wcm94eSIKbWtkaXIgLXAgIiRwcm94eV9jZXJ0c19iYXNlZGlyIgpiYXNlNjQgLWQgPDw8IiRQUk9YWUNFUlQiID4iJHByb3h5X2NlcnRzX2Jhc2VkaXIvcHJveHkuY3J0IgpiYXNlNjQgLWQgPDw8IiRQUk9YWUtFWSIgPiIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS5rZXkiCmJhc2U2NCAtZCA8PDwiJFBST1hZQ0xJRU5UQ0VSVCIgPiIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS1jbGllbnQuY3J0IgpjaG93biAtUiAxMDAwOjEwMDAgL2V0Yy9wcm94eQpjaG1vZCAwNjAwICIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS5rZXkiCnh0cmFjZV90b2dnbGUgIiR4dHJhY2VfaW5pdGlhbF92YWx1ZSIKfQpjb25maWd1cmVfYXpzZWNkX3NjYW4oKXsKbG9nICJzdGFydGluZyIKbG9jYWwgLXIgbm9kZXNjYW5fYWdlbnRfZmlsZW5hbWU9Ii9ldGMvZGVmYXVsdC92c2Etbm9kZXNjYW4tYWdlbnQuY29uZmlnIgpsb2NhbCAtciBub2Rlc2Nhbl9hZ2VudF9maWxlPSJ7CiAgICBcIk5pY2VcIjogMTksCiAgICBcIlRpbWVvdXRcIjogMTA4MDAsCiAgICBcIkNsaWVudElkXCI6IFwiXCIsCiAgICBcIlRlbmFudElkXCI6ICRBWlVSRVNFQ1BBQ0tWU0FURU5BTlRJRCwKICAgIFwiUXVhbHlzU3RvcmVCYXNlVXJsXCI6ICRBWlVSRVNFQ1BBQ0tRVUFMWVNVUkwsCiAgICBcIlByb2Nlc3NUaW1lb3V0XCI6IDMwMCwKICAgIFwiQ29tbWFuZERlbGF5XCI6IDAKICB9Igp3cml0ZV9maWxlIG5vZGVzY2FuX2FnZW50X2ZpbGVuYW1lIG5vZGVzY2FuX2FnZW50X2ZpbGUgdHJ1ZQp9CnJ1bl9henNlY2RfY29uZmlnX3NjYW4oKXsKbG9nICJzdGFydGluZyIKY29uZmlndXJlX2F6c2VjZF9zY2FuCmxvY2FsIC1hciBjb25maWdzPSgKImJhc2VsaW5lIgoiY2xhbWF2Igoic29mdHdhcmUiKQpsb2cgIlNjYW5uaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2l0aCBhenNlY2QgJHtjb25maWdzWypdfSIKZm9yIHNjYW4gaW4gJHtjb25maWdzW0BdfTtkbwpsb2cgIlNjYW5uaW5nIGNvbmZpZyBmaWxlICRzY2FuIG5vdyIKL3Vzci9sb2NhbC9iaW4vYXpzZWNkIGNvbmZpZyAtcyAiJHNjYW4iIC1kIFAxRApkb25lCn0KY3JlYXRlX3JlcXVpcmVkX2RpcnMoKXsKY3JlYXRlX2RpcnM9KAovdmFyL2xvZy9qb3VybmFsCi92YXIvbGliL3dhYWdlbnQvTWljcm9zb2Z0LkF6dXJlLktleVZhdWx0LlN0b3JlCi92YXIvb3B0L21pY3Jvc29mdC9saW51eG1vbmFnZW50KQpmb3IgZCBpbiAke2NyZWF0ZV9kaXJzW0BdfTtkbwpsb2cgIkNyZWF0aW5nIGRpcmVjdG9yeSAkZCIKbWtkaXIgLXAgIiRkInx8YWJvcnQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICRkIgpkb25lCn0KZmlyZXdhbGxkX2NvbmZpZ3VyZV9iYWNrZW5kKCl7CmxvZyAic3RhcnRpbmciCmxvZyAiQ2hhbmdpbmcgZmlyZXdhbGxkIGJhY2tlbmQgdG8gaXB0YWJsZXMiCmNvbmZfZmlsZT0iL2V0Yy9maXJld2FsbGQvZmlyZXdhbGxkLmNvbmYiCnNlZCAtaSAncy9GaXJld2FsbEJhY2tlbmQ9bmZ0YWJsZXMvRmlyZXdhbGxCYWNrZW5kPWlwdGFibGVzL2cnICIkY29uZl9maWxlIgp9CmZpcmV3YWxsZF9jb25maWd1cmUoKXsKbG9jYWwgLW4gcG9ydHM9IiQxIgpsb2cgInN0YXJ0aW5nIgpmaXJld2FsbGRfY29uZmlndXJlX2JhY2tlbmQKbG9jYWwgLXJhIHNlcnZpY2U9KAoiZmlyZXdhbGxkIikKZW5hYmxlX3NlcnZpY2VzIHNlcnZpY2UKbG9nICJFbmFibGluZyBwb3J0cyAke3BvcnRzWypdfSBvbiBkZWZhdWx0IGZpcmV3YWxsZCB6b25lIgpmb3IgcG9ydCBpbiAke3BvcnRzW0BdfTtkbwpsb2cgIkVuYWJsaW5nIHBvcnQgJHBvcnQgbm93IgpmaXJld2FsbC1jbWQgIi0tYWRkLXBvcnQ9JHBvcnQiIFwKLS1wZXJtYW5lbnQKZG9uZQpsb2cgIldyaXRpbmcgcnVudGltZSBjb25maWcgdG8gcGVybWFuZW50IGNvbmZpZyIKZmlyZXdhbGwtY21kIC0tcnVudGltZS10by1wZXJtYW5lbnQKfQp1dGlsX2NvbW1vbj0idXRpbC1jb21tb24uc2giCmlmIFsgLWYgIiR1dGlsX2NvbW1vbiIgXTt0aGVuCnNvdXJjZSAiJHV0aWxfY29tbW9uIgpmaQpzZXQgLW8gZXJyZXhpdCBcCi1vIHBpcGVmYWlsIFwKLW8gbm91bnNldAptYWluKCl7CmxvY2FsIC1yaSByZXRyeV93YWl0X3RpbWU9MzAKbG9jYWwgLXJpIHBrZ19yZXRyeV9jb3VudD02MApjcmVhdGVfcmVxdWlyZWRfZGlycwpjb25maWd1cmVfc3NoZApjb25maWd1cmVfcnBtX3JlcG9zIHJldHJ5X3dhaXRfdGltZSBcCiIkcGtnX3JldHJ5X2NvdW50Igpsb2NhbCAtYXIgZXhjbHVkZV9wa2dzPSgKIi14IFdBTGludXhBZ2VudCIKIi14IFdBTGludXhBZ2VudC11ZGV2IikKZG5mX3VwZGF0ZV9wa2dzIGV4Y2x1ZGVfcGtncyBcCnJldHJ5X3dhaXRfdGltZSBcCiIkcGtnX3JldHJ5X2NvdW50Igpsb2NhbCAtcmEgaW5zdGFsbF9wa2dzPSgKYXp1cmUtY2xpCmF6dXJlLW1kc2QKcG9kbWFuCnBvZG1hbi1kb2NrZXIKb3BlbnNzbC1wZXJsCnB5dGhvbjMKZmlyZXdhbGxkCmdydWJieQpkcmFjdXQtZmlwcykKZG5mX2luc3RhbGxfcGtncyBpbnN0YWxsX3BrZ3MgXApyZXRyeV93YWl0X3RpbWUgXAoiJHBrZ19yZXRyeV9jb3VudCIKZmlwc19jb25maWd1cmUKY29uZmlndXJlX2xvZ3JvdGF0ZQpsb2NhbCAtciBtZG1pbWFnZT0iJHtSUElNQUdFJSUvKn0vJHtNRE1JTUFHRSMqL30iCmxvY2FsIC1yIHJwaW1hZ2U9IiRSUElNQUdFIgpsb2NhbCAtciBmbHVlbnRiaXRfaW1hZ2U9IiRGTFVFTlRCSVRJTUFHRSIKbG9jYWwgLXJBIGFyb19pbWFnZXM9KApbIm1kbSJdPSJtZG1pbWFnZSIKWyJycCJdPSJycGltYWdlIgpbImZsdWVudGJpdCJdPSJmbHVlbnRiaXRfaW1hZ2UiKQpwdWxsX2NvbnRhaW5lcl9pbWFnZXMgYXJvX2ltYWdlcwpsb2NhbCAtcmEgZW5hYmxlX3BvcnRzPSgKIjgwL3RjcCIKIjgwODEvdGNwIgoiNDQzL3RjcCIKIjIyL3RjcCIpCmZpcmV3YWxsZF9jb25maWd1cmUgZW5hYmxlX3BvcnRzCmxvY2FsIC1yIGZsdWVudGJpdF9jb25mX2ZpbGU9J1tJTlBVVF0KCU5hbWUgc3lzdGVtZAoJVGFnIGpvdXJuYWxkCglTeXN0ZW1kX0ZpbHRlciBfQ09NTT1hcm8KCURCIC92YXIvbGliL2ZsdWVudC9qb3VybmFsZGIKCltGSUxURVJdCglOYW1lIG1vZGlmeQoJTWF0Y2ggam91cm5hbGQKCUFkZCBFbnZpcm9ubWVudCAke0VOVklST05NRU5UfQoKW0ZJTFRFUl0KCU5hbWUgbW9kaWZ5CglNYXRjaCBqb3VybmFsZAoJUmVtb3ZlX3dpbGRjYXJkIF8KCVJlbW92ZSBUSU1FU1RBTVAKCltPVVRQVVRdCglOYW1lIGZvcndhcmQKCU1hdGNoICoKCVBvcnQgMjkyMzAnCmxvY2FsIC1yIGFyb19nYXRld2F5X2NvbmZfZmlsZT0iQUNSX1JFU09VUkNFX0lEPSckQUNSUkVTT1VSQ0VJRCcKREFUQUJBU0VfQUNDT1VOVF9OQU1FPSckREFUQUJBU0VBQ0NPVU5UTkFNRScKTURNX0FDQ09VTlQ9JyRSUE1ETUFDQ09VTlQnCk1ETV9OQU1FU1BBQ0U9JyR7cm9sZV9nYXRld2F5Xn0nCkdBVEVXQVlfRE9NQUlOUz0nJEdBVEVXQVlET01BSU5TJwpHQVRFV0FZX0ZFQVRVUkVTPSckR0FURVdBWUZFQVRVUkVTJwpSUElNQUdFPSckcnBpbWFnZScKRU5WSVJPTk1FTlQ9JyRFTlZJUk9OTUVOVCciCmxvY2FsIC1yIG1kc2RfY29uZmlnX3ZlcnNpb249IiRHQVRFV0FZTURTRENPTkZJR1ZFUlNJT04iCmxvY2FsIC1yQSBhcm9fY29uZmlncz0oClsiZ2F0ZXdheV9jb25maWciXT0iYXJvX2dhdGV3YXlfY29uZl9maWxlIgpbImZsdWVudGJpdCJdPSJmbHVlbnRiaXRfY29uZl9maWxlIgpbIm1kc2QiXT0ibWRzZF9jb25maWdfdmVyc2lvbiIKWyJzdGF0aWNfaXBfYWRkcmVzcyJdPSJzdGF0aWNfaXBfYWRkcmVzc2VzIikKbG9jYWwgLXJBIHN0YXRpY19pcF9hZGRyZXNzZXM9KApbImdhdGV3YXkiXT0iMTAuODguMC4yIgpbIm1kbSJdPSIxMC44OC4wLjgiKQpjb25maWd1cmVfdm1zc19hcm9fc2VydmljZXMgcm9sZV9nYXRld2F5IFwKYXJvX2ltYWdlcyBcCmFyb19jb25maWdzCmxvY2FsIC1yYSBnYXRld2F5X3NlcnZpY2VzPSgKImFyby1nYXRld2F5IgoiYXpzZWNkIgoibWRzZCIKIm1kbSIKImNocm9ueWQiCiJmbHVlbnRiaXQiCiJkb3dubG9hZC1tZHNkLWNyZWRlbnRpYWxzLnRpbWVyIgoiZG93bmxvYWQtbWRtLWNyZWRlbnRpYWxzLnRpbWVyIgoiZmlyZXdhbGxkIikKZW5hYmxlX3NlcnZpY2VzIGdhdGV3YXlfc2VydmljZXMKcmVib290X3ZtCn0KZXhwb3J0IEFaVVJFX0NMT1VEX05BTUU9IiR7QVpVUkVDTE9VRE5BTUU6PyJGYWlsZWQgdG8gY2Fycnkgb3ZlciB2YXJpYWJsZXMifSIKdXRpbD0idXRpbC5zaCIKaWYgWyAtZiAiJHV0aWwiIF07dGhlbgpzb3VyY2UgIiR1dGlsIgpmaQptYWluICIkQCIK')))]" } } }, diff --git a/pkg/deploy/assets/rp-production.json b/pkg/deploy/assets/rp-production.json index 9b765123eef..ea7fb29c808 100644 --- a/pkg/deploy/assets/rp-production.json +++ b/pkg/deploy/assets/rp-production.json @@ -500,7 +500,7 @@ "autoUpgradeMinorVersion": true, "settings": {}, "protectedSettings": { - "script": "[base64(concat(base64ToString('c2V0IC1leAoK'),'ACRRESOURCEID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('acrResourceId')),''')\n','ADMINAPICLIENTCERTCOMMONNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('adminApiClientCertCommonName')),''')\n','ARMAPICLIENTCERTCOMMONNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('armApiClientCertCommonName')),''')\n','ARMCLIENTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('armClientId')),''')\n','AZURECLOUDNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureCloudName')),''')\n','AZURESECPACKQUALYSURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackQualysUrl')),''')\n','AZURESECPACKVSATENANTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackVSATenantId')),''')\n','CLUSTERMDMACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdmAccount')),''')\n','CLUSTERMDSDACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdsdAccount')),''')\n','CLUSTERMDSDCONFIGVERSION=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdsdConfigVersion')),''')\n','CLUSTERMDSDNAMESPACE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdsdNamespace')),''')\n','CLUSTERPARENTDOMAINNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterParentDomainName')),''')\n','DATABASEACCOUNTNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('databaseAccountName')),''')\n','FLUENTBITIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fluentbitImage')),''')\n','FPCLIENTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fpClientId')),''')\n','FPTENANTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fpTenantId')),''')\n','FPSERVICEPRINCIPALID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fpServicePrincipalId')),''')\n','GATEWAYDOMAINS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayDomains')),''')\n','GATEWAYRESOURCEGROUPNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayResourceGroupName')),''')\n','GATEWAYSERVICEPRINCIPALID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayServicePrincipalId')),''')\n','KEYVAULTDNSSUFFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultDNSSuffix')),''')\n','KEYVAULTPREFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultPrefix')),''')\n','MDMFRONTENDURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdmFrontendUrl')),''')\n','MDSDENVIRONMENT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdsdEnvironment')),''')\n','MSIRPENDPOINT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('msiRpEndpoint')),''')\n','PORTALACCESSGROUPIDS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalAccessGroupIds')),''')\n','PORTALCLIENTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalClientId')),''')\n','PORTALELEVATEDGROUPIDS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalElevatedGroupIds')),''')\n','RPFEATURES=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpFeatures')),''')\n','RPIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpImage')),''')\n','RPMDMACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdmAccount')),''')\n','RPMDSDACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdAccount')),''')\n','RPMDSDCONFIGVERSION=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdConfigVersion')),''')\n','RPMDSDNAMESPACE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdNamespace')),''')\n','RPPARENTDOMAINNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpParentDomainName')),''')\n','OIDCSTORAGEACCOUNTNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('oidcStorageAccountName')),''')\n','OTELAUDITQUEUESIZE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('otelAuditQueueSize')),''')\n','TOKENCONTRIBUTORROLEID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('tokenContributorRoleID')),''')\n','TOKENCONTRIBUTORROLENAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('tokenContributorRoleName')),''')\n','ENVIRONMENT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('environment')),''')\n','RPLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpLogLevel')),''')\n','MONITORLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('monitorLogLevel')),''')\n','PORTALLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalLogLevel')),''')\n','MIMOACTUATORLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mimoActuatorLogLevel')),''')\n','MIMOSCHEDULERLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mimoSchedulerLogLevel')),''')\n','CLUSTERSINSTALLVIAHIVE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clustersInstallViaHive')),''')\n','CLUSTERSADOPTBYHIVE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clustersAdoptByHive')),''')\n','CLUSTERDEFAULTINSTALLERPULLSPEC=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterDefaultInstallerPullspec')),''')\n','MISEVALIDAUDIENCES=$(base64 -d \u003c\u003c\u003c''',base64(string(parameters('miseValidAudiences'))),''')\n','MISEVALIDAPPIDS=$(base64 -d \u003c\u003c\u003c''',base64(string(parameters('miseValidAppIDs'))),''')\n','ADMINAPICABUNDLE=''',parameters('adminApiCaBundle'),'''\n','ARMAPICABUNDLE=''',parameters('armApiCaBundle'),'''\n','MDMIMAGE=''/geneva/distroless/mdm:2.202602101834.0-20260211-1@sha256:a581e89744933f30a9f8e2724906fde02e713836fce76afefec7092daa01c064''\n','OTELIMAGE=''mcr.microsoft.com/oss/otel/opentelemetry-collector-contrib:0.95.0-linux-amd64''\n','MISEIMAGE=''/mise:1.0.03103.537-mise-cbl-mariner2.0-distroless''\n','LOCATION=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().location),''')\n','SUBSCRIPTIONID=$(base64 -d \u003c\u003c\u003c''',base64(subscription().subscriptionId),''')\n','RESOURCEGROUPNAME=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().name),''')\n','\n',base64ToString('ZGVjbGFyZSAtciBlbXB0eV9zdHI9IiIKZGVjbGFyZSAtciByb2xlX2dhdGV3YXk9ImdhdGV3YXkiCmRlY2xhcmUgLXIgcm9sZV9ycD0icnAiCmRlY2xhcmUgLXIgcm9sZV9kZXZwcm94eT0iZGV2cHJveHkiCmRlY2xhcmUgLXIgdXNfZ292X2Nsb3VkPSJBenVyZVVTR292ZXJubWVudCIKbG9nKCl7CmxvY2FsIC1yIG1zZz0iJHsxOi0ibG9nIG1lc3NhZ2UgaXMgZW1wdHkifSIKbG9jYWwgLXIgc3RhY2tfbGV2ZWw9IiR7MjotMX0iCmVjaG8gIiR7RlVOQ05BTUVbJHN0YWNrX2xldmVsXX06ICRtc2ciCn0KYWJvcnQoKXsKbG9jYWwgLXJpIG9yaWdpbl9zdGFja2xldmVsPTIKbG9nICIkMSIgIiRvcmlnaW5fc3RhY2tsZXZlbCIKbG9nICJFeGl0aW5nIgpleGl0IDEKfQp3cml0ZV9maWxlKCl7CmxvY2FsIC1uIGZpbGVuYW1lPSIkMSIKbG9jYWwgLW4gZmlsZV9jb250ZW50cz0iJDIiCmxvY2FsIC1yIGNsb2JiZXI9IiR7MzotZmFsc2V9IgppZiAkY2xvYmJlcjt0aGVuCmxvZyAiT3ZlcndyaXRpbmcgZmlsZSAkZmlsZW5hbWUiCmVjaG8gIiRmaWxlX2NvbnRlbnRzIiA+IiRmaWxlbmFtZSIKZWxzZQpsb2cgIkFwcGVuZGluZyB0byAkZmlsZW5hbWUiCmVjaG8gIiRmaWxlX2NvbnRlbnRzIiA+PiIkZmlsZW5hbWUiCmZpCn0KcmV0cnkoKXsKbG9jYWwgLW4gY21kX3JldHJ5PSIkMSIKbG9jYWwgLW4gd2FpdF90aW1lPSIkMiIKbG9jYWwgLXJpIHJldHJpZXM9IiR7MzotNX0iCmZvciBhdHRlbXB0IGluICQoc2VxIDEgJHJldHJpZXMpO2RvCmxvZyAiYXR0ZW1wdCAjJGF0dGVtcHQgLSAke0ZVTkNOQU1FWzJdfSIKJHtjbWRfcmV0cnlbQF19Jgp3YWl0IC1mICQhJiZyZXR1cm4gMApzbGVlcCAiJHdhaXRfdGltZSIKZG9uZQphYm9ydCAiJHtjbWRfcmV0cnlbKl19IGZhaWxlZCBhZnRlciAjJHJldHJpZXMgYXR0ZW1wdHMiCn0KdmVyaWZ5X3JvbGUoKXsKbG9jYWwgLW4gdGVzdF9yb2xlPSIkMSIKYWxsb3dlZF9yb2xlc19nbG9iPSIoJHJvbGVfcnB8JHJvbGVfZ2F0ZXdheXwkcm9sZV9kZXZwcm94eSkiCmlmIFtbICR0ZXN0X3JvbGUgPX4gJGFsbG93ZWRfcm9sZXNfZ2xvYiBdXTt0aGVuCmxvZyAiVmVyaWZpZWQgcm9sZSBcIiR0ZXN0X3JvbGVcIiIKZWxzZQphYm9ydCAiZmFpbGVkIHRvIHZlcmlmeSByb2xlLCByb2xlIFwiJHRlc3Rfcm9sZVwiIG5vdCBpbiBcIiRhbGxvd2VkX3JvbGVzX2dsb2JcIiIKZmkKfQpnZXRfa2V5dmF1bHRfc3VmZml4KCl7CmxvY2FsIC1uIHJsPSIkMSIKbG9jYWwgLW4ga3Zfc3VmZml4PSIkMiIKbG9jYWwgLW4gc2VjX3ByZWZpeD0iJDMiCmxvY2FsIC1yIGtleXZhdWx0X3N1ZmZpeF9ycD0ic3ZjIgpsb2NhbCAtciBrZXl2YXVsdF9wcmVmaXhfZ2F0ZXdheT0iZ3d5IgpjYXNlICIkcmwiIGluCiIkcm9sZV9nYXRld2F5Iilrdl9zdWZmaXg9IiRrZXl2YXVsdF9wcmVmaXhfZ2F0ZXdheSIKc2VjX3ByZWZpeD0iJGtleXZhdWx0X3ByZWZpeF9nYXRld2F5Igo7OwoiJHJvbGVfcnAiKWt2X3N1ZmZpeD0iJGtleXZhdWx0X3N1ZmZpeF9ycCIKc2VjX3ByZWZpeD0iJHJvbGVfcnAiCjs7CiopYWJvcnQgInVua293biByb2xlICRybCIKZXNhYwp9CnJlYm9vdF92bSgpewpsb2cgInN0YXJ0aW5nIgooc2h1dGRvd24gLXIgbm93JikKfQpjb25maWd1cmVfcmVwb19tYXJpbmVyX2V4dGVuZGVkKCl7CmxvY2FsIC1yIGV4dGVuZGVkX3JlcG9fY29uZmlnPSJodHRwczovL3BhY2thZ2VzLm1pY3Jvc29mdC5jb20vY2JsLW1hcmluZXIvMi4wL3Byb2QvZXh0ZW5kZWQveDg2XzY0L2NvbmZpZy5yZXBvIgpjdXJsIC1zU0wgIiRleHRlbmRlZF9yZXBvX2NvbmZpZyIgLW8gL2V0Yy95dW0ucmVwb3MuZC9tYXJpbmVyLWV4dGVuZGVkLnJlcG8KbG9jYWwgLXIgcmVwb19uYW1lPSJjYmwtbWFyaW5lcjIuMHByb2RleHRlbmRlZHg4Nl82NCIKbG9jYWwgLXJhIGNtZD0oCmRuZgp1cGRhdGUKLXkKLS1lbmFibGVyZXBvPSIkcmVwb19uYW1lIikKbG9nICJFbmFibGluZyByZXBvICRyZXBvX25hbWUiCnJldHJ5IGNtZCAiJDEiICIkezI6LX0iCn0KY29uZmlndXJlX3JwbV9yZXBvcygpewpsb2cgInN0YXJ0aW5nIgpjb25maWd1cmVfcmVwb19tYXJpbmVyX2V4dGVuZGVkICIkMSIgIiR7MjotMX0iCn0KZG5mX2luc3RhbGxfcGtncygpewpsb2NhbCAtbiBwa2dzPSIkMSIKbG9nICJzdGFydGluZyIKbG9jYWwgLWEgY21kPSgKZG5mCi15Cmluc3RhbGwpCm1hcGZpbGUgLU8gJCgoJHsjY21kW0BdfSsxKSkgLWQgJyAnIGNtZCA8PDwiJHtwa2dzW0BdfSIKbG9jYWwgLXIgY21kCmxvZyAiQXR0ZW1wdGluZyB0byBpbnN0YWxsIHBhY2thZ2VzOiAke3BrZ3NbKl19IgpyZXRyeSBjbWQgIiQyIiAiJHszOi19Igp9CmRuZl91cGRhdGVfcGtncygpewpsb2NhbCAtbiBleGNsdWRlcz0iJHsxOi1lbXB0eV9zdHJ9Igpsb2cgInN0YXJ0aW5nIgpsb2NhbCAtYSBjbWQ9KApkbmYKLXkKIiIKdXBkYXRlCi0tYWxsb3dlcmFzaW5nKQppZiBbIC1uICIkZXhjbHVkZXMiIF07dGhlbgptYXBmaWxlIC1PIDIgY21kIDw8PCIke2V4Y2x1ZGVzW0BdfSIKZWxzZQp1bnNldCAiY21kWzJdIgpmaQpsb2NhbCAtciBjbWQKbG9nICJVcGRhdGluZyBhbGwgcGFja2FnZXMgZXhjbHVkaW5nIFwiJHtleGNsdWRlc1sqXTotfVwiIgpyZXRyeSBjbWQgIiQyIiAiJHszOi19Igp9CnJwbV9pbXBvcnRfa2V5cygpewpsb2NhbCAtbiBrZXlzPSIkMSIKbG9nICJzdGFydGluZyIKZm9yIGtleSBpbiAke2tleXNbQF19O2RvCmlmIFsgJHsja2V5c1tAXX0gLWVxIDAgXTt0aGVuCmJyZWFrCmZpCmxvY2FsIC1hIGNtZD0oCnJwbQotLWltcG9ydAotdgoiJGtleSIpCmxvZyAiSW1wb3J0aW5nIHJwbSByZXBvc2l0b3J5IGtleSAka2V5IgpyZXRyeSBjbWQgIiQyIiAiJHszOi19IiYmdW5zZXQga2V5CmRvbmUKfQp1dGlsX2NvbW1vbj0idXRpbC1jb21tb24uc2giCmlmIFsgLWYgIiR1dGlsX2NvbW1vbiIgXTt0aGVuCnNvdXJjZSAiJHV0aWxfY29tbW9uIgpmaQplbmFibGVfc2VydmljZXMoKXsKbG9jYWwgLW4gc3Zjcz0iJDEiCmxvZyAic3RhcnRpbmciCnN5c3RlbWN0bCBkYWVtb24tcmVsb2FkCmxvZyAiZW5hYmxpbmcgc2VydmljZXMgJHtzdmNzWypdfSIKZm9yIHN2YyBpbiAke3N2Y3NbQF19O2RvCmxvZyAiRW5hYmxpbmcgYW5kIHN0YXJ0aW5nICRzdmMgbm93IgpzeXN0ZW1jdGwgZW5hYmxlIFwKLS1ub3cgXAoiJHN2YyIKZG9uZQp9CmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19nYXRld2F5KCl7CmxvY2FsIC1uIGltYWdlPSIkMSIKbG9jYWwgLW4gcm9sZT0iJDIiCmxvY2FsIC1uIGNvbmZfZmlsZT0iJDMiCmxvY2FsIC1uIGlwYWRkcmVzcz0iJDQiCmxvZyAic3RhcnRpbmciCmxvZyAiQ29uZmlndXJpbmcgYXJvLWdhdGV3YXkgc2VydmljZSIKbG9jYWwgLXIgYXJvX2dhdGV3YXlfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLWdhdGV3YXknCmxvY2FsIC1yIGFkZF9jb25mX2ZpbGU9IlBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcycKUk9MRT0nJHtyb2xlLCx9JwpBUk9fTE9HX0xFVkVMPSckR0FURVdBWUxPR0xFVkVMJwpFTlZJUk9OTUVOVD0nJEVOVklST05NRU5UJyIKd3JpdGVfZmlsZSBhcm9fZ2F0ZXdheV9jb25mX2ZpbGVuYW1lIGNvbmZfZmlsZSB0cnVlCndyaXRlX2ZpbGUgYXJvX2dhdGV3YXlfY29uZl9maWxlbmFtZSBhZGRfY29uZl9maWxlIGZhbHNlCmxvY2FsIC1yIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLWdhdGV3YXkuc2VydmljZScKbG9jYWwgLXIgYXJvX2dhdGV3YXlfc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tZ2F0ZXdheQpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC1lIEFDUl9SRVNPVVJDRV9JRCBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBHQVRFV0FZX0RPTUFJTlMgXAogIC1lIEdBVEVXQVlfRkVBVFVSRVMgXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtZSBBUk9fTE9HX0xFVkVMIFwKICAtZSBFTlZJUk9OTUVOVCBcCiAgLW0gMmcgXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC1wIDgwOjgwODAgXAogIC1wIDgwODE6ODA4MSBcCiAgLXAgNDQzOjg0NDMgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAke1JQSU1BR0V9IFwKICAke1JPTEV9CkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wIC10IDM2MDAgJU4KVGltZW91dFN0b3BTZWM9MzYwMApSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldAogICAgJwp3cml0ZV9maWxlIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZW5hbWUgYXJvX2dhdGV3YXlfc2VydmljZV9maWxlIHRydWUKfQpjb25maWd1cmVfc2VydmljZV9hcm9fcnAoKXsKbG9jYWwgLW4gaW1hZ2U9IiQxIgpsb2NhbCAtbiByb2xlPSIkMiIKbG9jYWwgLW4gY29uZl9maWxlPSIkMyIKbG9jYWwgLW4gaXBhZGRyZXNzPSIkNCIKbG9nICJzdGFydGluZyIKbG9nICJDb25maWd1cmluZyBhcm8tcnAgc2VydmljZSIKbG9jYWwgLXIgYXJvX3JwX2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1ycCcKbG9jYWwgLXIgYWRkX2NvbmZfZmlsZT0iUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpFTlZJUk9OTUVOVD0nJEVOVklST05NRU5UJwpST0xFPScke3JvbGUsLH0nCkFST19MT0dfTEVWRUw9JyRSUExPR0xFVkVMJyIKd3JpdGVfZmlsZSBhcm9fcnBfY29uZl9maWxlbmFtZSBjb25mX2ZpbGUgdHJ1ZQp3cml0ZV9maWxlIGFyb19ycF9jb25mX2ZpbGVuYW1lIGFkZF9jb25mX2ZpbGUgZmFsc2UKbG9jYWwgLXIgYXJvX3JwX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLXJwLnNlcnZpY2UnCmxvY2FsIC1yIGFyb19ycF9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1ycApFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC1lIEFDUl9SRVNPVVJDRV9JRCBcCiAgLWUgQURNSU5fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBUk1fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBWlVSRV9BUk1fQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9GUF9DTElFTlRfSUQgXAogIC1lIENMVVNURVJfTURNX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURNX05BTUVTUEFDRSBcCiAgLWUgQ0xVU1RFUl9NRFNEX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiBcCiAgLWUgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRSBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBET01BSU5fTkFNRSBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX1JFU09VUkNFR1JPVVAgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIE1EU0RfRU5WSVJPTk1FTlQgXAogIC1lIFJQX0ZFQVRVUkVTIFwKICAtZSBBUk9fSU5TVEFMTF9WSUFfSElWRSBcCiAgLWUgQVJPX0hJVkVfREVGQVVMVF9JTlNUQUxMRVJfUFVMTFNQRUMgXAogIC1lIEFST19BRE9QVF9CWV9ISVZFIFwKICAtZSBPSURDX0FGRF9FTkRQT0lOVCBcCiAgLWUgT0lEQ19TVE9SQUdFX0FDQ09VTlRfTkFNRSBcCiAgLWUgTVNJX1JQX0VORFBPSU5UIFwKICAtZSBPVEVMX0FVRElUX1FVRVVFX1NJWkUgXAogIC1lIE1JU0VfQUREUkVTUyBcCiAgLWUgQVJPX0xPR19MRVZFTCBcCiAgLWUgRU5WSVJPTk1FTlQgXAogIC1tIDJnIFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtcCA0NDM6ODQ0MyBcCiAgLXYgL2V0Yy9hcm8tcnA6L2V0Yy9hcm8tcnAgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAtdiAvdmFyL3J1bi9tZHNkL2FzYTovdmFyL3J1bi9tZHNkL2FzYTp6IFwKICAke1JQSU1BR0V9IFwKICAke1JPTEV9CkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wIC10IDM2MDAgJU4KVGltZW91dFN0b3BTZWM9MzYwMApSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKd3JpdGVfZmlsZSBhcm9fcnBfc2VydmljZV9maWxlbmFtZSBhcm9fcnBfc2VydmljZV9maWxlIHRydWUKfQpjb25maWd1cmVfc2VydmljZV9hcm9fbW9uaXRvcigpewpsb2NhbCAtbiBpbWFnZT0iJDEiCmxvY2FsIC1uIGlwYWRkcmVzcz0iJDIiCmxvZyAic3RhcnRpbmciCmxvZyAiQ29uZmlndXJpbmcgYXJvLW1vbml0b3Igc2VydmljZSIKbG9jYWwgLXIgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tbW9uaXRvcicKbG9jYWwgLXIgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGU9IkFaVVJFX0ZQX0NMSUVOVF9JRD0nJEZQQ0xJRU5USUQnCkRPTUFJTl9OQU1FPSckTE9DQVRJT04uJENMVVNURVJQQVJFTlRET01BSU5OQU1FJwpDTFVTVEVSX01EU0RfQUNDT1VOVD0nJENMVVNURVJNRFNEQUNDT1VOVCcKQ0xVU1RFUl9NRFNEX0NPTkZJR19WRVJTSU9OPSckQ0xVU1RFUk1EU0RDT05GSUdWRVJTSU9OJwpHQVRFV0FZX0RPTUFJTlM9JyRHQVRFV0FZRE9NQUlOUycKR0FURVdBWV9SRVNPVVJDRUdST1VQPSckR0FURVdBWVJFU09VUkNFR1JPVVBOQU1FJwpNRFNEX0VOVklST05NRU5UPSckTURTREVOVklST05NRU5UJwpDTFVTVEVSX01EU0RfTkFNRVNQQUNFPSckQ0xVU1RFUk1EU0ROQU1FU1BBQ0UnCkNMVVNURVJfTURNX0FDQ09VTlQ9JyRDTFVTVEVSTURNQUNDT1VOVCcKQ0xVU1RFUl9NRE1fTkFNRVNQQUNFPUJCTQpEQVRBQkFTRV9BQ0NPVU5UX05BTUU9JyREQVRBQkFTRUFDQ09VTlROQU1FJwpFTlZJUk9OTUVOVD0nJEVOVklST05NRU5UJwpLRVlWQVVMVF9QUkVGSVg9JyRLRVlWQVVMVFBSRUZJWCcKTURNX0FDQ09VTlQ9JyRSUE1ETUFDQ09VTlQnCk1ETV9OQU1FU1BBQ0U9QkJNClJQSU1BR0U9JyRpbWFnZScKUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpBUk9fSU5TVEFMTF9WSUFfSElWRT0nJENMVVNURVJTSU5TVEFMTFZJQUhJVkUnCkFST19ISVZFX0RFRkFVTFRfSU5TVEFMTEVSX1BVTExTUEVDPSckQ0xVU1RFUkRFRkFVTFRJTlNUQUxMRVJQVUxMU1BFQycKQVJPX0FET1BUX0JZX0hJVkU9JyRDTFVTVEVSU0FET1BUQllISVZFJwpBUk9fTE9HX0xFVkVMPSckTU9OSVRPUkxPR0xFVkVMJyIKd3JpdGVfZmlsZSBhcm9fbW9uaXRvcl9zZXJ2aWNlX2NvbmZfZmlsZW5hbWUgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGUgdHJ1ZQpsb2NhbCAtciBhcm9fbW9uaXRvcl9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1tb25pdG9yLnNlcnZpY2UnCmxvY2FsIC1yIGFyb19tb25pdG9yX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLW1vbml0b3IKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtZSBBWlVSRV9GUF9DTElFTlRfSUQgXAogIC1lIERPTUFJTl9OQU1FIFwKICAtZSBDTFVTVEVSX01EU0RfQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRFNEX0NPTkZJR19WRVJTSU9OIFwKICAtZSBHQVRFV0FZX0RPTUFJTlMgXAogIC1lIEdBVEVXQVlfUkVTT1VSQ0VHUk9VUCBcCiAgLWUgTURTRF9FTlZJUk9OTUVOVCBcCiAgLWUgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRSBcCiAgLWUgQ0xVU1RFUl9NRE1fQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRE1fTkFNRVNQQUNFIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIEFST19JTlNUQUxMX1ZJQV9ISVZFIFwKICAtZSBBUk9fSElWRV9ERUZBVUxUX0lOU1RBTExFUl9QVUxMU1BFQyBcCiAgLWUgQVJPX0FET1BUX0JZX0hJVkUgXAogIC1lIEFST19MT0dfTEVWRUwgXAogIC1lIEVOVklST05NRU5UIFwKICAtbSAyLjVnIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJHtSUElNQUdFfSBcCiAgbW9uaXRvcgpSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKd3JpdGVfZmlsZSBhcm9fbW9uaXRvcl9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19tb25pdG9yX3NlcnZpY2VfZmlsZSB0cnVlCn0KY29uZmlndXJlX3NlcnZpY2VfYXJvX3BvcnRhbCgpewpsb2NhbCAtbiBpbWFnZT0iJDEiCmxvY2FsIC1uIGlwYWRkcmVzcz0iJDIiCmxvZyAic3RhcnRpbmciCmxvZyAiQ29uZmlndXJpbmcgYXJvIHBvcnRhbCBzZXJ2aWNlIgpsb2NhbCAtciBhcm9fcG9ydGFsX3NlcnZpY2VfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLXBvcnRhbCcKbG9jYWwgLXIgYXJvX3BvcnRhbF9zZXJ2aWNlX2NvbmZfZmlsZT0iQVpVUkVfUE9SVEFMX0FDQ0VTU19HUk9VUF9JRFM9JyRQT1JUQUxBQ0NFU1NHUk9VUElEUycKQVpVUkVfUE9SVEFMX0NMSUVOVF9JRD0nJFBPUlRBTENMSUVOVElEJwpBWlVSRV9QT1JUQUxfRUxFVkFURURfR1JPVVBfSURTPSckUE9SVEFMRUxFVkFURURHUk9VUElEUycKREFUQUJBU0VfQUNDT1VOVF9OQU1FPSckREFUQUJBU0VBQ0NPVU5UTkFNRScKS0VZVkFVTFRfUFJFRklYPSckS0VZVkFVTFRQUkVGSVgnCk1ETV9BQ0NPVU5UPSckUlBNRE1BQ0NPVU5UJwpNRE1fTkFNRVNQQUNFPVBvcnRhbApQT1JUQUxfSE9TVE5BTUU9JyRMT0NBVElPTi5hZG1pbi4kUlBQQVJFTlRET01BSU5OQU1FJwpFTlZJUk9OTUVOVD0nJEVOVklST05NRU5UJwpPVEVMX0FVRElUX1FVRVVFX1NJWkU9JyRPVEVMQVVESVRRVUVVRVNJWkUnClJQSU1BR0U9JyRpbWFnZScKUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpBUk9fTE9HX0xFVkVMPSckUE9SVEFMTE9HTEVWRUwnIgp3cml0ZV9maWxlIGFyb19wb3J0YWxfc2VydmljZV9jb25mX2ZpbGVuYW1lIGFyb19wb3J0YWxfc2VydmljZV9jb25mX2ZpbGUgdHJ1ZQpsb2NhbCAtciBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLXBvcnRhbC5zZXJ2aWNlJwpsb2NhbCAtciBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKU3RhcnRMaW1pdEludGVydmFsPTAKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLXBvcnRhbApFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC1lIEFaVVJFX1BPUlRBTF9BQ0NFU1NfR1JPVVBfSURTIFwKICAtZSBBWlVSRV9QT1JUQUxfQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9QT1JUQUxfRUxFVkFURURfR1JPVVBfSURTIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIFBPUlRBTF9IT1NUTkFNRSBcCiAgLWUgT1RFTF9BVURJVF9RVUVVRV9TSVpFIFwKICAtZSBBUk9fTE9HX0xFVkVMIFwKICAtZSBFTlZJUk9OTUVOVCBcCiAgLW0gMmcgXAogIC1wIDQ0NDo4NDQ0IFwKICAtcCAyMjIyOjIyMjIgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAtdiAvdmFyL3J1bi9tZHNkL2FzYTovdmFyL3J1bi9tZHNkL2FzYTp6IFwKICAke1JQSU1BR0V9IFwKICBwb3J0YWwKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCndyaXRlX2ZpbGUgYXJvX3BvcnRhbF9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19wb3J0YWxfc2VydmljZV9maWxlIHRydWUKfQpjb25maWd1cmVfc2VydmljZV9hcm9fbWltb19hY3R1YXRvcigpewpsb2NhbCAtbiBpbWFnZT0iJDEiCmxvY2FsIC1uIGNvbmZfZmlsZT0iJDIiCmxvY2FsIC1uIGlwYWRkcmVzcz0iJDMiCmxvZyAic3RhcnRpbmciCmxvZyAiQ29uZmlndXJpbmcgYXJvLW1pbW8tYWN0dWF0b3Igc2VydmljZSIKbG9jYWwgLXIgYXJvX21pbW9fYWN0dWF0b3JfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW1pbW8tYWN0dWF0b3InCmxvY2FsIC1yIGFkZF9jb25mX2ZpbGU9IlBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcycKQVJPX0xPR19MRVZFTD0nJE1JTU9BQ1RVQVRPUkxPR0xFVkVMJyIKd3JpdGVfZmlsZSBhcm9fbWltb19hY3R1YXRvcl9jb25mX2ZpbGVuYW1lIGNvbmZfZmlsZSB0cnVlCndyaXRlX2ZpbGUgYXJvX21pbW9fYWN0dWF0b3JfY29uZl9maWxlbmFtZSBhZGRfY29uZl9maWxlIGZhbHNlCmxvY2FsIC1yIGFyb19taW1vX2FjdHVhdG9yX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLW1pbW8tYWN0dWF0b3Iuc2VydmljZScKbG9jYWwgLXIgYXJvX21pbW9fYWN0dWF0b3Jfc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tbWltby1hY3R1YXRvcgpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC1lIEFDUl9SRVNPVVJDRV9JRCBcCiAgLWUgQURNSU5fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBUk1fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBWlVSRV9BUk1fQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9GUF9DTElFTlRfSUQgXAogIC1lIENMVVNURVJfTURNX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURNX05BTUVTUEFDRSBcCiAgLWUgQ0xVU1RFUl9NRFNEX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiBcCiAgLWUgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRSBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBET01BSU5fTkFNRSBcCiAgLWUgRU5WSVJPTk1FTlQgXAogIC1lIEdBVEVXQVlfRE9NQUlOUyBcCiAgLWUgR0FURVdBWV9SRVNPVVJDRUdST1VQIFwKICAtZSBLRVlWQVVMVF9QUkVGSVggXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtZSBNRFNEX0VOVklST05NRU5UIFwKICAtZSBSUF9GRUFUVVJFUyBcCiAgLWUgQVJPX0lOU1RBTExfVklBX0hJVkUgXAogIC1lIEFST19ISVZFX0RFRkFVTFRfSU5TVEFMTEVSX1BVTExTUEVDIFwKICAtZSBBUk9fQURPUFRfQllfSElWRSBcCiAgLWUgT0lEQ19BRkRfRU5EUE9JTlQgXAogIC1lIE9JRENfU1RPUkFHRV9BQ0NPVU5UX05BTUUgXAogIC1lIE1TSV9SUF9FTkRQT0lOVCBcCiAgLWUgQVJPX0xPR19MRVZFTCBcCiAgLW0gMmcgXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC1wIDQ0NTo4NDQ1IFwKICAtdiAvZXRjL2Fyby1ycDovZXRjL2Fyby1ycCBcCiAgLXYgL3J1bi9zeXN0ZW1kL2pvdXJuYWw6L3J1bi9zeXN0ZW1kL2pvdXJuYWwgXAogIC12IC92YXIvZXR3Oi92YXIvZXR3OnogXAogICR7UlBJTUFHRX0gXAogIG1pbW8tYWN0dWF0b3IKRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgLXQgMzYwMCAlTgpUaW1lb3V0U3RvcFNlYz0zNjAwClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Jwp3cml0ZV9maWxlIGFyb19taW1vX2FjdHVhdG9yX3NlcnZpY2VfZmlsZW5hbWUgYXJvX21pbW9fYWN0dWF0b3Jfc2VydmljZV9maWxlIHRydWUKfQpjb25maWd1cmVfc2VydmljZV9hcm9fbWltb19zY2hlZHVsZXIoKXsKbG9jYWwgLW4gaW1hZ2U9IiQxIgpsb2NhbCAtbiBjb25mX2ZpbGU9IiQyIgpsb2NhbCAtbiBpcGFkZHJlc3M9IiQzIgpsb2cgInN0YXJ0aW5nIgpsb2cgIkNvbmZpZ3VyaW5nIGFyby1taW1vLXNjaGVkdWxlciBzZXJ2aWNlIgpsb2NhbCAtciBhcm9fbWltb19zY2hlZHVsZXJfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW1pbW8tc2NoZWR1bGVyJwpsb2NhbCAtciBhZGRfY29uZl9maWxlPSJQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnCkFST19MT0dfTEVWRUw9JyRNSU1PU0NIRURVTEVSTE9HTEVWRUwnIgp3cml0ZV9maWxlIGFyb19taW1vX3NjaGVkdWxlcl9jb25mX2ZpbGVuYW1lIGNvbmZfZmlsZSB0cnVlCndyaXRlX2ZpbGUgYXJvX21pbW9fc2NoZWR1bGVyX2NvbmZfZmlsZW5hbWUgYWRkX2NvbmZfZmlsZSBmYWxzZQpsb2NhbCAtciBhcm9fbWltb19zY2hlZHVsZXJfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tbWltby1zY2hlZHVsZXIuc2VydmljZScKbG9jYWwgLXIgYXJvX21pbW9fc2NoZWR1bGVyX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLW1pbW8tc2NoZWR1bGVyCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLWUgQUNSX1JFU09VUkNFX0lEIFwKICAtZSBBRE1JTl9BUElfQ0xJRU5UX0NFUlRfQ09NTU9OX05BTUUgXAogIC1lIEFSTV9BUElfQ0xJRU5UX0NFUlRfQ09NTU9OX05BTUUgXAogIC1lIEFaVVJFX0FSTV9DTElFTlRfSUQgXAogIC1lIEFaVVJFX0ZQX0NMSUVOVF9JRCBcCiAgLWUgQ0xVU1RFUl9NRE1fQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRE1fTkFNRVNQQUNFIFwKICAtZSBDTFVTVEVSX01EU0RfQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRFNEX0NPTkZJR19WRVJTSU9OIFwKICAtZSBDTFVTVEVSX01EU0RfTkFNRVNQQUNFIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIERPTUFJTl9OQU1FIFwKICAtZSBHQVRFV0FZX0RPTUFJTlMgXAogIC1lIEdBVEVXQVlfUkVTT1VSQ0VHUk9VUCBcCiAgLWUgS0VZVkFVTFRfUFJFRklYIFwKICAtZSBNRE1fQUNDT1VOVCBcCiAgLWUgTURNX05BTUVTUEFDRSBcCiAgLWUgTURTRF9FTlZJUk9OTUVOVCBcCiAgLWUgUlBfRkVBVFVSRVMgXAogIC1lIEFST19JTlNUQUxMX1ZJQV9ISVZFIFwKICAtZSBBUk9fSElWRV9ERUZBVUxUX0lOU1RBTExFUl9QVUxMU1BFQyBcCiAgLWUgQVJPX0FET1BUX0JZX0hJVkUgXAogIC1lIE9JRENfQUZEX0VORFBPSU5UIFwKICAtZSBPSURDX1NUT1JBR0VfQUNDT1VOVF9OQU1FIFwKICAtZSBNU0lfUlBfRU5EUE9JTlQgXAogIC1lIEFST19MT0dfTEVWRUwgXAogIC1tIDJnIFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtcCA0NDY6ODQ0NiBcCiAgLXYgL2V0Yy9hcm8tcnA6L2V0Yy9hcm8tcnAgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAke1JQSU1BR0V9IFwKICBtaW1vLXNjaGVkdWxlcgpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAtdCAzNjAwICVOClRpbWVvdXRTdG9wU2VjPTM2MDAKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCndyaXRlX2ZpbGUgYXJvX21pbW9fc2NoZWR1bGVyX3NlcnZpY2VfZmlsZW5hbWUgYXJvX21pbW9fc2NoZWR1bGVyX3NlcnZpY2VfZmlsZSB0cnVlCn0KY29uZmlndXJlX3NlcnZpY2VfYXJvX21pc2UoKXsKbG9jYWwgLW4gaW1hZ2U9IiQxIgpsb2NhbCAtbiBpcGFkZHJlc3M9IiQyIgpsb2cgInN0YXJ0aW5nIgpsb2cgIkNvbmZpZ3VyaW5nIGFyby1taXNlIHNlcnZpY2UiCkxPR0lOSU5TVEFOQ0U9Imh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbSIKaWYgW1sgJEFaVVJFQ0xPVUROQU1FID09ICIkdXNfZ292X2Nsb3VkIiBdXTt0aGVuCkxPR0lOSU5TVEFOQ0U9Imh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLnVzIgpmaQpsb2NhbCAtciBhcm9fbWlzZV9zZXJ2aWNlX2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1taXNlJwpsb2NhbCAtciBhcm9fbWlzZV9zZXJ2aWNlX2NvbmZfZmlsZT0iRlBDTElFTlRJRD0nJEZQQ0xJRU5USUQnCkZQVEVOQU5USUQ9JyRGUFRFTkFOVElEJwpNSVNFSU1BR0U9JyRpbWFnZScKTUlTRVZBTElEQVVESUVOQ0VTPSckTUlTRVZBTElEQVVESUVOQ0VTJwpNSVNFVkFMSURBUFBJRFM9JyRNSVNFVkFMSURBUFBJRFMnCkxPR0lOSU5TVEFOQ0U9JyRMT0dJTklOU1RBTkNFJwpQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnCkVOVklST05NRU5UPSckRU5WSVJPTk1FTlQnIgp3cml0ZV9maWxlIGFyb19taXNlX3NlcnZpY2VfY29uZl9maWxlbmFtZSBhcm9fbWlzZV9zZXJ2aWNlX2NvbmZfZmlsZSB0cnVlCm1rZGlyIC1wIC9hcHAvbWlzZQpsb2NhbCAtciBhcm9fbWlzZV9hcHBzZXR0aW5nc19maWxlbmFtZT0nL2FwcC9taXNlL2FwcHNldHRpbmdzLmpzb24nCmxvY2FsIC1yIGFyb19taXNlX2FwcHNldHRpbmdzX2ZpbGU9InsKICAgIFwiVmVyc2lvblwiOiBcIjFcIiwKICAgIFwiSGVhcnRiZWF0SW50ZXJ2YWxNc1wiOiA1MDAwLAogICAgXCJBenVyZUFkXCI6IHsKICAgICAgICBcIkluc3RhbmNlXCI6IFwiJExPR0lOSU5TVEFOQ0VcIiwKICAgICAgICBcIkNsaWVudElkXCI6IFwiJEZQQ0xJRU5USURcIiwKICAgICAgICBcIlRlbmFudElkXCI6IFwiJEZQVEVOQU5USURcIiwKICAgICAgICBcIkF1ZGllbmNlXCI6IFwiYXBpOi8vJEZQQ0xJRU5USURcIiwKICAgICAgICBcIlNob3dQSUlcIjogZmFsc2UsCiAgICAgICAgXCJJbmJvdW5kUG9saWNpZXNcIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBcIkxhYmVsXCI6IFwiYXJvcnAtYXJtLWluYm91bmQtcG9saWN5XCIsCiAgICAgICAgICAgICAgICBcIkF1dGhvcml0eVwiOiBcIiRMT0dJTklOU1RBTkNFLyRGUFRFTkFOVElEL1wiCiwKICAgICAgICAgICAgICAgIFwiQXV0aGVudGljYXRpb25TY2hlbWVzXCI6IFsKICAgICAgICAgICAgICAgICAgICBcIlBvUFwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgXCJWYWxpZEF1ZGllbmNlc1wiOiAkTUlTRVZBTElEQVVESUVOQ0VTLAogICAgICAgICAgICAgICAgXCJTaWduZWRIdHRwUmVxdWVzdFZhbGlkYXRpb25Qb2xpY3lcIjogewogICAgICAgICAgICAgICAgICAgIFwiVmFsaWRhdGVUc1wiOiB0cnVlLAogICAgICAgICAgICAgICAgICAgIFwiVmFsaWRhdGVNXCI6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgXCJWYWxpZGF0ZVVcIjogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBcIlZhbGlkYXRlUFwiOiB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXCJWYWxpZEFwcGxpY2F0aW9uSWRzXCI6ICRNSVNFVkFMSURBUFBJRFMKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgXCJMb2dnaW5nXCI6IHsKICAgICAgICAgICAgXCJMb2dMZXZlbFwiOiBcIkluZm9ybWF0aW9uXCIKICAgICAgICB9LAogICAgICAgIFwiTW9kdWxlc1wiOiB7CiAgICAgICAgICAgIFwiVHJWMlwiOiB7CiAgICAgICAgICAgICAgICBcIk1vZHVsZVR5cGVcIjogXCJUclYyTW9kdWxlXCIsCiAgICAgICAgICAgICAgICBcIkVuYWJsZWRcIjogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIFwiQWxsb3dlZEhvc3RzXCI6IFwiKlwiLAogICAgXCJLZXN0cmVsXCI6IHsKICAgICAgICBcIkVuZHBvaW50c1wiOiB7CiAgICAgICAgICAgIFwiSHR0cFwiOiB7CiAgICAgICAgICAgICAgICBcIlVybFwiOiBcImh0dHA6Ly8kaXBhZGRyZXNzOjUwMDBcIgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIFwiTG9nZ2luZ1wiOiB7CiAgICAgICAgXCJMb2dMZXZlbFwiOiB7CiAgICAgICAgICAgIFwiRGVmYXVsdFwiOiBcIkluZm9ybWF0aW9uXCIsCiAgICAgICAgICAgIFwiTWljcm9zb2Z0XCI6IFwiSW5mb3JtYXRpb25cIiwKICAgICAgICAgICAgXCJNaWNyb3NvZnQuSG9zdGluZy5MaWZldGltZVwiOiBcIkluZm9ybWF0aW9uXCIKICAgICAgICB9LAogICAgICAgIFwiQ29uc29sZVwiOiB7CiAgICAgICAgICAgIFwiRm9ybWF0dGVyTmFtZVwiOiBcIlNpbXBsZVwiLAogICAgICAgICAgICBcIkZvcm1hdHRlck9wdGlvbnNcIjogewogICAgICAgICAgICAgICAgXCJJbmNsdWRlU2NvcGVzXCI6IHRydWUsCiAgICAgICAgICAgICAgICBcIlNpbmdsZUxpbmVcIjogdHJ1ZSwKICAgICAgICAgICAgICAgIFwiVGltZXN0YW1wRm9ybWF0XCI6IFwiSEg6bW06c3MuZmZmZiBcIiwKICAgICAgICAgICAgICAgIFwiVXNlVXRjVGltZXN0YW1wXCI6IHRydWUKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfSIKd3JpdGVfZmlsZSBhcm9fbWlzZV9hcHBzZXR0aW5nc19maWxlbmFtZSBhcm9fbWlzZV9hcHBzZXR0aW5nc19maWxlIHRydWUKbG9jYWwgLXIgYXJvX21pc2Vfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tbWlzZS5zZXJ2aWNlJwpsb2NhbCAtciBhcm9fbWlzZV9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0ClN0YXJ0TGltaXRJbnRlcnZhbFNlYz0wCltTZXJ2aWNlXQpSZXN0YXJ0U2VjPTFzCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tbWlzZQpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLXAgNTAwMDo1MDAwIFwKICAtdiAvYXBwL21pc2UvYXBwc2V0dGluZ3MuanNvbjovYXBwL2FwcHNldHRpbmdzLmpzb246eiBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtLXJtIFwKICAtZSBFTlZJUk9OTUVOVCBcCiAgJHtNSVNFSU1BR0V9CkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wICVOClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MwpTdGFydExpbWl0SW50ZXJ2YWw9MApbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCndyaXRlX2ZpbGUgYXJvX21pc2Vfc2VydmljZV9maWxlbmFtZSBhcm9fbWlzZV9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19vdGVsX2NvbGxlY3Rvcigpewpsb2NhbCAtbiBpbWFnZT0iJDEiCmxvY2FsIC1uIHN0YXRpY19pcF9hZGRyZXNzPSIkMiIKbG9jYWwgLW4gaXBhZGRyZXNzPSIkMyIKbG9nICJzdGFydGluZyIKbG9nICJDb25maWd1cmluZyBhcm8tb3RlbC1jb2xsZWN0b3Igc2VydmljZSIKbG9jYWwgLXIgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW90ZWwtY29sbGVjdG9yJwpsb2NhbCAtciBhcm9fb3RlbF9jb2xsZWN0b3Jfc2VydmljZV9jb25mX2ZpbGU9IkdPTUVNTElNSVQ9MTAwME1pQgpPVEVMSU1BR0U9JyRpbWFnZScKUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpFTlZJUk9OTUVOVD0nJEVOVklST05NRU5UJyIKd3JpdGVfZmlsZSBhcm9fb3RlbF9jb2xsZWN0b3Jfc2VydmljZV9jb25mX2ZpbGVuYW1lIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2NvbmZfZmlsZSB0cnVlCm1rZGlyIC1wIC9hcHAvb3RlbApsb2NhbCAtciBhcm9fb3RlbF9jb2xsZWN0b3JfYXBwY29uZmlnX2ZpbGVuYW1lPScvYXBwL290ZWwvY29uZmlnLnlhbWwnCmxvY2FsIC1yIGFyb19vdGVsX2NvbGxlY3Rvcl9hcHBjb25maWdfZmlsZT0icmVjZWl2ZXJzOgogIGh0dHBjaGVjazoKICAgIHRhcmdldHM6CiAgICAjIE1JU0UgRW5kcG9pbnRzCiAgICAgIC0gZW5kcG9pbnQ6IGh0dHA6Ly8ke3N0YXRpY19pcF9hZGRyZXNzWyJtaXNlIl19OjUwMDAvaGVhbHRoegogICAgICAgIG1ldGhvZDogR0VUCiAgICAgIC0gZW5kcG9pbnQ6IGh0dHA6Ly8ke3N0YXRpY19pcF9hZGRyZXNzWyJtaXNlIl19OjUwMDAvcmVhZHl6CiAgICAgICAgbWV0aG9kOiBHRVQKICAgICMgT1RFTHMgb3duIEVuZHBvaW50cwogICAgICAtIGVuZHBvaW50OiBodHRwOi8vJGlwYWRkcmVzczoxMzEzMy9oZWFsdGh6CiAgICAgICAgbWV0aG9kOiBHRVQKICAgICAgLSBlbmRwb2ludDogaHR0cDovLyRpcGFkZHJlc3M6MTMxMzMvcmVhZHl6CiAgICAgICAgbWV0aG9kOiBHRVQKICAgIGNvbGxlY3Rpb25faW50ZXJ2YWw6IDIwcwpwcm9jZXNzb3JzOgogIGJhdGNoOgogIGF0dHJpYnV0ZXMvaW5zZXJ0OgogICAgYWN0aW9uczoKICAgICAgLSBrZXk6IFwibG9jYXRpb25cIgogICAgICAgIGFjdGlvbjogaW5zZXJ0CiAgICAgICAgdmFsdWU6IFwiJExPQ0FUSU9OXCIKICAgICAgLSBrZXk6IFwiaG9zdFwiCiAgICAgICAgYWN0aW9uOiBpbnNlcnQKICAgICAgICB2YWx1ZTogXCIkKGhvc3RuYW1lKVwiCmV4dGVuc2lvbnM6CiAgaGVhbHRoX2NoZWNrOgogICAgZW5kcG9pbnQ6ICRpcGFkZHJlc3M6MTMxMzMKZXhwb3J0ZXJzOgogIG90bHA6CiAgICBlbmRwb2ludDogJHtzdGF0aWNfaXBfYWRkcmVzc1sibWRtIl19OjQzMTcKICAgIHRsczoKICAgICAgaW5zZWN1cmU6IHRydWUKc2VydmljZToKICBleHRlbnNpb25zOiBbaGVhbHRoX2NoZWNrXQogIHBpcGVsaW5lczoKICAgIG1ldHJpY3M6CiAgICAgIHJlY2VpdmVyczogW2h0dHBjaGVja10KICAgICAgcHJvY2Vzc29yczogW2JhdGNoLCBhdHRyaWJ1dGVzL2luc2VydF0KICAgICAgZXhwb3J0ZXJzOiBbb3RscF0iCndyaXRlX2ZpbGUgYXJvX290ZWxfY29sbGVjdG9yX2FwcGNvbmZpZ19maWxlbmFtZSBhcm9fb3RlbF9jb2xsZWN0b3JfYXBwY29uZmlnX2ZpbGUgdHJ1ZQpsb2NhbCAtciBhcm9fb3RlbF9jb2xsZWN0b3Jfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tb3RlbC1jb2xsZWN0b3Iuc2VydmljZScKbG9jYWwgLXIgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW1kbS5zZXJ2aWNlCldhbnRzPW1kbS5zZXJ2aWNlClN0YXJ0TGltaXRJbnRlcnZhbFNlYz0wCltTZXJ2aWNlXQpSZXN0YXJ0U2VjPTFzCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tb3RlbC1jb2xsZWN0b3IKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1uZXR3b3JrPSR7UE9ETUFOX05FVFdPUkt9IFwKICAtLWlwICR7SVBBRERSRVNTfSBcCiAgLW0gMmcgXAogIC1lIEVOVklST05NRU5UIFwKICAtdiAvYXBwL290ZWwvY29uZmlnLnlhbWw6L2V0Yy9vdGVsY29sLWNvbnRyaWIvY29uZmlnLnlhbWw6eiBcCiAgJHtPVEVMSU1BR0V9CkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wICVOClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MwpTdGFydExpbWl0SW50ZXJ2YWw9MApbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCndyaXRlX2ZpbGUgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfZmlsZW5hbWUgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfZmlsZSB0cnVlCn0KY29uZmlndXJlX3NlcnZpY2VfbWRzZCgpewpsb2NhbCAtbiByb2xlPSIkMSIKbG9jYWwgLW4gbW9uaXRvcl9jb25maWdfdmVyc2lvbj0iJDIiCmxvZyAic3RhcnRpbmciCmxvZyAiY29uZmlndXJpbmcgbWRzZCBzZXJ2aWNlIgp2ZXJpZnlfcm9sZSByb2xlCmxvY2FsIC1yIG1kc2Rfc2VydmljZV9kaXI9Ii9ldGMvc3lzdGVtZC9zeXN0ZW0vbWRzZC5zZXJ2aWNlLmQiCm1rZGlyIC1wICIkbWRzZF9zZXJ2aWNlX2RpciIKbG9jYWwgLXIgbWRzZF9vdmVycmlkZV9jb25mX2ZpbGVuYW1lPSIkbWRzZF9zZXJ2aWNlX2Rpci9vdmVycmlkZS5jb25mIgpsb2NhbCAtciBtZHNkX2NlcnRpZmljYXRlX3Nhbj0iJChvcGVuc3NsIHg1MDkgLWluIC92YXIvbGliL3dhYWdlbnQvTWljcm9zb2Z0LkF6dXJlLktleVZhdWx0LlN0b3JlL21kc2QucGVtIC1ub291dCAtc3ViamVjdHxzZWQgLWUgJ3MvLipDTiA9IC8vJykiCmxvY2FsIC1yIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlPSJbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0Igp3cml0ZV9maWxlIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlbmFtZSBtZHNkX292ZXJyaWRlX2NvbmZfZmlsZSB0cnVlCmxvY2FsIC1yIGRlZmF1bHRfbWRzZF9maWxlbmFtZT0iL2V0Yy9kZWZhdWx0L21kc2QiCmxvY2FsIC1yIGRlZmF1bHRfbWRzZF9maWxlPSJNRFNEX1JPTEVfUFJFRklYPS92YXIvcnVuL21kc2QvZGVmYXVsdApNRFNEX09QVElPTlM9XCItQSAtZCAtciBcJE1EU0RfUk9MRV9QUkVGSVhcIgoKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0VOVklST05NRU5UPSckTURTREVOVklST05NRU5UJwpleHBvcnQgTU9OSVRPUklOR19HQ1NfQUNDT1VOVD0nJFJQTURTREFDQ09VTlQnCmV4cG9ydCBNT05JVE9SSU5HX0dDU19SRUdJT049JyRMT0NBVElPTicKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0FVVEhfSURfVFlQRT1BdXRoS2V5VmF1bHQKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0FVVEhfSUQ9JyRtZHNkX2NlcnRpZmljYXRlX3NhbicKZXhwb3J0IE1PTklUT1JJTkdfR0NTX05BTUVTUEFDRT0nJFJQTURTRE5BTUVTUEFDRScKZXhwb3J0IE1PTklUT1JJTkdfQ09ORklHX1ZFUlNJT049JyRtb25pdG9yX2NvbmZpZ192ZXJzaW9uJwpleHBvcnQgTU9OSVRPUklOR19VU0VfR0VORVZBX0NPTkZJR19TRVJWSUNFPXRydWUKZXhwb3J0IE1PTklUT1JJTkdfVEVOQU5UPSckTE9DQVRJT04nCmV4cG9ydCBNT05JVE9SSU5HX1JPTEU9JyRyb2xlJwpleHBvcnQgTU9OSVRPUklOR19ST0xFX0lOU1RBTkNFPVwiJChob3N0bmFtZSlcIgpleHBvcnQgTU9OSVRPUklOR19FTlZJUk9OTUVOVD0nJEVOVklST05NRU5UJwoKZXhwb3J0IE1EU0RfTVNHUEFDS19TT1JUX0NPTFVNTlM9XCIxXCIiCndyaXRlX2ZpbGUgZGVmYXVsdF9tZHNkX2ZpbGVuYW1lIGRlZmF1bHRfbWRzZF9maWxlIHRydWUKfQpjb25maWd1cmVfc2VydmljZV9mbHVlbnRiaXQoKXsKbG9jYWwgLW4gY29uZl9maWxlPSIkMSIKbG9jYWwgLW4gaW1hZ2U9IiQyIgpsb2cgInN0YXJ0aW5nIgpsb2cgIkNvbmZpZ3VyaW5nIGZsdWVudGJpdCBzZXJ2aWNlIgpta2RpciAtcCAvZXRjL2ZsdWVudGJpdC8KbWtkaXIgLXAgL3Zhci9saWIvZmx1ZW50CmxvY2FsIC1yIGNvbmZfZmlsZW5hbWU9Jy9ldGMvZmx1ZW50Yml0L2ZsdWVudGJpdC5jb25mJwp3cml0ZV9maWxlIGNvbmZfZmlsZW5hbWUgY29uZl9maWxlIHRydWUKbG9jYWwgLXIgc3lzY29uZmlnX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9mbHVlbnRiaXQnCmxvY2FsIC1yIHN5c2NvbmZpZ19maWxlPSJGTFVFTlRCSVRJTUFHRT0nJGltYWdlJwpFTlZJUk9OTUVOVD0nJEVOVklST05NRU5UJyIKd3JpdGVfZmlsZSBzeXNjb25maWdfZmlsZW5hbWUgc3lzY29uZmlnX2ZpbGUgdHJ1ZQpsb2NhbCAtciBzZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2ZsdWVudGJpdC5zZXJ2aWNlJwpsb2NhbCAtciBzZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0ClN0YXJ0TGltaXRJbnRlcnZhbFNlYz0wCgpbU2VydmljZV0KUmVzdGFydFNlYz0xcwpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvZmx1ZW50Yml0CkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLXNlY3VyaXR5LW9wdCBsYWJlbD1kaXNhYmxlIFwKICAtLWVudHJ5cG9pbnQgL29wdC90ZC1hZ2VudC1iaXQvYmluL3RkLWFnZW50LWJpdCBcCiAgLS1uZXQ9aG9zdCBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtZSBFTlZJUk9OTUVOVCBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtdiAvZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZjovZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZiBcCiAgLXYgL3Zhci9saWIvZmx1ZW50Oi92YXIvbGliL2ZsdWVudDp6IFwKICAtdiAvdmFyL2xvZy9qb3VybmFsOi92YXIvbG9nL2pvdXJuYWw6cm8gXAogIC12IC9ldGMvbWFjaGluZS1pZDovZXRjL21hY2hpbmUtaWQ6cm8gXAogICR7RkxVRU5UQklUSU1BR0V9IFwKICAtYyAvZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZgoKRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgJU4KUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz01ClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCndyaXRlX2ZpbGUgc2VydmljZV9maWxlbmFtZSBzZXJ2aWNlX2ZpbGUgdHJ1ZQp9CmNvbmZpZ3VyZV90aW1lcnNfbWRtX21kc2QoKXsKbG9jYWwgLW4gcm9sZT0iJDEiCmxvZyAic3RhcnRpbmciCnZlcmlmeV9yb2xlIHJvbGUKbG9jYWwga2V5dmF1bHRfc3VmZml4IHNlY3JldF9wcmVmaXgKZ2V0X2tleXZhdWx0X3N1ZmZpeCByb2xlIGtleXZhdWx0X3N1ZmZpeCBzZWNyZXRfcHJlZml4CmZvciB2YXIgaW4gIm1kc2QiICJtZG0iO2RvCmxvY2FsIGRvd25sb2FkX2NyZWRzX3NlcnZpY2VfZmlsZW5hbWU9Ii9ldGMvc3lzdGVtZC9zeXN0ZW0vZG93bmxvYWQtJHZhci1jcmVkZW50aWFscy5zZXJ2aWNlIgpsb2NhbCBkb3dubG9hZF9jcmVkc19zZXJ2aWNlX2ZpbGU9IltVbml0XQpEZXNjcmlwdGlvbj1QZXJpb2RpYyAkdmFyIGNyZWRlbnRpYWxzIHJlZnJlc2gKCltTZXJ2aWNlXQpUeXBlPW9uZXNob3QKRXhlY1N0YXJ0PS91c3IvbG9jYWwvYmluL2Rvd25sb2FkLWNyZWRlbnRpYWxzLnNoICR2YXIiCndyaXRlX2ZpbGUgZG93bmxvYWRfY3JlZHNfc2VydmljZV9maWxlbmFtZSBkb3dubG9hZF9jcmVkc19zZXJ2aWNlX2ZpbGUgdHJ1ZQpsb2NhbCBkb3dubG9hZF9jcmVkc190aW1lcl9maWxlbmFtZT0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS9kb3dubG9hZC0kdmFyLWNyZWRlbnRpYWxzLnRpbWVyIgpsb2NhbCBkb3dubG9hZF9jcmVkc190aW1lcl9maWxlPSJbVW5pdF0KRGVzY3JpcHRpb249UGVyaW9kaWMgJHZhciBjcmVkZW50aWFscyByZWZyZXNoCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltUaW1lcl0KT25Cb290U2VjPTBtaW4KT25DYWxlbmRhcj0wLzEyOjAwOjAwCkFjY3VyYWN5U2VjPTVzCgpbSW5zdGFsbF0KV2FudGVkQnk9dGltZXJzLnRhcmdldCIKd3JpdGVfZmlsZSBkb3dubG9hZF9jcmVkc190aW1lcl9maWxlbmFtZSBkb3dubG9hZF9jcmVkc190aW1lcl9maWxlIHRydWUKZG9uZQpsb2NhbCAtciBkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZW5hbWU9Ii91c3IvbG9jYWwvYmluL2Rvd25sb2FkLWNyZWRlbnRpYWxzLnNoIgpsb2NhbCAtciBkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZT0iIyEvYmluL2Jhc2gKc2V0IC1ldQoKQ09NUE9ORU5UPVwkMQplY2hvIFwiRG93bmxvYWQgXCRDT01QT05FTlQgY3JlZGVudGlhbHNcIgoKVEVNUF9ESVI9XCJcJChta3RlbXAgLWQpXCIKZXhwb3J0IEFaVVJFX0NPTkZJR19ESVI9XCJcJChta3RlbXAgLWQpXCIKCmVjaG8gXCJMb2dnaW5nIGludG8gQXp1cmUuLi5cIgpSRVRSSUVTPTMKd2hpbGUgW1sgXCRSRVRSSUVTIC1ndCAwIF1dOyBkbwogICAgaWYgYXogbG9naW4gLWkgLS1hbGxvdy1uby1zdWJzY3JpcHRpb25zCiAgICB0aGVuCiAgICAgICAgZWNobyBcImF6IGxvZ2luIHN1Y2Nlc3NmdWxcIgogICAgICAgIGJyZWFrCiAgICBlbHNlCiAgICAgICAgZWNobyBcImF6IGxvZ2luIGZhaWxlZC4gUmV0cnlpbmcuLi5cIgogICAgICAgIGxldCBSRVRSSUVTLT0xCiAgICAgICAgc2xlZXAgNQogICAgZmkKZG9uZQoKdHJhcCBcImNsZWFudXBcIiBFWElUCgpjbGVhbnVwKCkgewogIGF6IGxvZ291dAogIFtbIFwkVEVNUF9ESVIgPX4gL3RtcC8uKyBdXSAmJiBybSAtcmYgXCRURU1QX0RJUgogIFtbIFwkQVpVUkVfQ09ORklHX0RJUiA9fiAvdG1wLy4rIF1dICYmIHJtIC1yZiBcJEFaVVJFX0NPTkZJR19ESVIKfQoKaWYgW1sgXCRDT01QT05FTlQgPSBcIm1kbVwiIF1dOyB0aGVuCiAgQ1VSUkVOVF9DRVJUX0ZJTEU9XCIvZXRjL21kbS5wZW1cIgplbGlmIFtbIFwkQ09NUE9ORU5UID0gXCJtZHNkXCIgXV07IHRoZW4KICBDVVJSRU5UX0NFUlRfRklMRT1cIi92YXIvbGliL3dhYWdlbnQvTWljcm9zb2Z0LkF6dXJlLktleVZhdWx0LlN0b3JlL21kc2QucGVtXCIKZWxzZQogIGVjaG8gSW52YWxpZCB1c2FnZSAmJiBleGl0IDEKZmkKClNFQ1JFVF9OQU1FPVwiJHNlY3JldF9wcmVmaXgtXCR7Q09NUE9ORU5UfVwiCk5FV19DRVJUX0ZJTEU9XCJcJFRFTVBfRElSL1wkQ09NUE9ORU5ULnBlbVwiCmZvciBhdHRlbXB0IGluIHsxLi41fTsgZG8KICBheiBrZXl2YXVsdCBcCiAgICBzZWNyZXQgXAogICAgZG93bmxvYWQgXAogICAgLS1maWxlIFwiXCRORVdfQ0VSVF9GSUxFXCIgXAogICAgLS1pZCBcImh0dHBzOi8vJEtFWVZBVUxUUFJFRklYLSRrZXl2YXVsdF9zdWZmaXguJEtFWVZBVUxURE5TU1VGRklYL3NlY3JldHMvXCRTRUNSRVRfTkFNRVwiIFwKICAgICYmIGJyZWFrCiAgaWYgW1sgXCRhdHRlbXB0IC1sdCA1IF1dOyB0aGVuIHNsZWVwIDEwOyBlbHNlIGV4aXQgMTsgZmkKZG9uZQoKaWYgWyAtZiBcJE5FV19DRVJUX0ZJTEUgXTsgdGhlbgogIGlmIFtbIFwkQ09NUE9ORU5UID0gXCJtZHNkXCIgXV07IHRoZW4KICAgIGNob3duIHN5c2xvZzpzeXNsb2cgXCRORVdfQ0VSVF9GSUxFCiAgZWxzZQogICAgc2VkIC1pIC1uZSAnMSwvRU5EIENFUlRJRklDQVRFLyBwJyBcJE5FV19DRVJUX0ZJTEUKICBmaQoKICBuZXdfY2VydF9zbj1cIlwkKG9wZW5zc2wgeDUwOSAtaW4gXCJcJE5FV19DRVJUX0ZJTEVcIiAtbm9vdXQgLXNlcmlhbCB8IGF3ayAtRj0gJ3twcmludCBcJDJ9JylcIgogIGN1cnJlbnRfY2VydF9zbj1cIlwkKG9wZW5zc2wgeDUwOSAtaW4gXCJcJENVUlJFTlRfQ0VSVF9GSUxFXCIgLW5vb3V0IC1zZXJpYWwgfCBhd2sgLUY9ICd7cHJpbnQgXCQyfScpXCIKICBpZiBbWyAhIC16IFwkbmV3X2NlcnRfc24gXV0gJiYgW1sgXCRuZXdfY2VydF9zbiAhPSBcIlwkY3VycmVudF9jZXJ0X3NuXCIgXV07IHRoZW4KICAgIGVjaG8gdXBkYXRpbmcgY2VydGlmaWNhdGUgZm9yIFwkQ09NUE9ORU5UCiAgICBjaG1vZCAwNjAwIFwkTkVXX0NFUlRfRklMRQogICAgbXYgXCRORVdfQ0VSVF9GSUxFIFwkQ1VSUkVOVF9DRVJUX0ZJTEUKICBmaQplbHNlCiAgZWNobyBGYWlsZWQgdG8gcmVmcmVzaCBjZXJ0aWZpY2F0ZSBmb3IgXCRDT01QT05FTlQgJiYgZXhpdCAxCmZpIgp3cml0ZV9maWxlIGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlbmFtZSBkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZSB0cnVlCmNobW9kIHUreCAvdXNyL2xvY2FsL2Jpbi9kb3dubG9hZC1jcmVkZW50aWFscy5zaAokZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGVuYW1lIG1kc2QmCndhaXQgIiQhIgokZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGVuYW1lIG1kbSYKd2FpdCAiJCEiCmxvY2FsIC1yIHdhdGNoX21kbV9jcmVkc19zZXJ2aWNlX2ZpbGVuYW1lPSIvZXRjL3N5c3RlbWQvc3lzdGVtL3dhdGNoLW1kbS1jcmVkZW50aWFscy5zZXJ2aWNlIgpsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHNfc2VydmljZV9maWxlPSJbVW5pdF0KRGVzY3JpcHRpb249V2F0Y2ggZm9yIGNoYW5nZXMgaW4gbWRtLnBlbSBhbmQgcmVzdGFydHMgdGhlIG1kbSBzZXJ2aWNlCgpbU2VydmljZV0KVHlwZT1vbmVzaG90CkV4ZWNTdGFydD0vdXNyL2Jpbi9zeXN0ZW1jdGwgcmVzdGFydCBtZG0uc2VydmljZQoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Igp3cml0ZV9maWxlIHdhdGNoX21kbV9jcmVkc19zZXJ2aWNlX2ZpbGVuYW1lIHdhdGNoX21kbV9jcmVkc19zZXJ2aWNlX2ZpbGUgdHJ1ZQpsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHNfcGF0aF9maWxlbmFtZT0nL3Vzci9saWIvc3lzdGVtZC9zeXN0ZW0vd2F0Y2gtbWRtLWNyZWRlbnRpYWxzLnBhdGgnCmxvY2FsIC1yIHdhdGNoX21kbV9jcmVkc19wYXRoX2ZpbGU9J1tQYXRoXQpQYXRoTW9kaWZpZWQ9L2V0Yy9tZG0ucGVtCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCndyaXRlX2ZpbGUgd2F0Y2hfbWRtX2NyZWRzX3BhdGhfZmlsZW5hbWUgd2F0Y2hfbWRtX2NyZWRzX3BhdGhfZmlsZSB0cnVlCmxvY2FsIC1yIHdhdGNoX21kbV9jcmVkcz0nd2F0Y2gtbWRtLWNyZWRlbnRpYWxzLnBhdGgnCnN5c3RlbWN0bCBlbmFibGUgLS1ub3cgIiR3YXRjaF9tZG1fY3JlZHMifHxhYm9ydCAiZmFpbGVkIHRvIGVuYWJsZSBhbmQgc3RhcnQgJHdhdGNoX21kbV9jcmVkcyIKfQpjb25maWd1cmVfc2VydmljZV9tZG0oKXsKbG9jYWwgLW4gcm9sZT0iJDEiCmxvY2FsIC1uIGltYWdlPSIkMiIKbG9jYWwgLW4gaXBhZGRyZXNzPSIkMyIKbG9nICJzdGFydGluZyIKbG9nICJDb25maWd1cmluZyBtZG0gc2VydmljZSIKdmVyaWZ5X3JvbGUgcm9sZQpsb2NhbCAtciBzeXNjb25maWdfbWRtX2ZpbGVuYW1lPSIvZXRjL3N5c2NvbmZpZy9tZG0iCmxvY2FsIC1yIHN5c2NvbmZpZ19tZG1fZmlsZT0iTURNRlJPTlRFTkRVUkw9JyRNRE1GUk9OVEVORFVSTCcKTURNSU1BR0U9JyRpbWFnZScKTURNU09VUkNFRU5WSVJPTk1FTlQ9JyRMT0NBVElPTicKTURNU09VUkNFUk9MRT0nJHJvbGUnCk1ETVNPVVJDRVJPTEVJTlNUQU5DRT1cIiQoaG9zdG5hbWUpXCIKTURNX0lOUFVUPXN0YXRzZF9sb2NhbCxvdGxwX2dycGMKTURNX05BTUVTUEFDRT0nT1RFTCcKTURNX0FDQ09VTlQ9J0F6dXJlUmVkSGF0T3BlblNoaWZ0UlAnClBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcyciCndyaXRlX2ZpbGUgc3lzY29uZmlnX21kbV9maWxlbmFtZSBzeXNjb25maWdfbWRtX2ZpbGUgdHJ1ZQpta2RpciAtcCAvdmFyL2V0dwpsb2NhbCAtciBtZG1fc2VydmljZV9maWxlbmFtZT0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS9tZG0uc2VydmljZSIKbG9jYWwgLXIgbWRtX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvbWRtCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWVudHJ5cG9pbnQgL3Vzci9zYmluL01ldHJpY3NFeHRlbnNpb24gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtbSAyZyBcCiAgLXYgL2V0Yy9tZG0ucGVtOi9ldGMvbWRtLnBlbSBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJHtNRE1JTUFHRX0gXAogIC1JbnB1dCAke01ETV9JTlBVVH0gXAogIC1NZXRyaWNOYW1lc3BhY2UgJHtNRE1fTkFNRVNQQUNFfSBcCiAgLU1vbml0b3JpbmdBY2NvdW50ICR7TURNX0FDQ09VTlR9IFwKICAtQ2VydEZpbGUgL2V0Yy9tZG0ucGVtIFwKICAtRnJvbnRFbmRVcmwgJHtNRE1GUk9OVEVORFVSTH0gXAogIC1Mb2dnZXIgQ29uc29sZSBcCiAgLUxvZ0xldmVsIFdhcm5pbmcgXAogIC1Qcml2YXRlS2V5RmlsZSAvZXRjL21kbS5wZW0gXAogIC1Tb3VyY2VFbnZpcm9ubWVudCAke01ETVNPVVJDRUVOVklST05NRU5UfSBcCiAgLVNvdXJjZVJvbGUgJHtNRE1TT1VSQ0VST0xFfSBcCiAgLVNvdXJjZVJvbGVJbnN0YW5jZSAke01ETVNPVVJDRVJPTEVJTlNUQU5DRX0KRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgJU4KUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCndyaXRlX2ZpbGUgbWRtX3NlcnZpY2VfZmlsZW5hbWUgbWRtX3NlcnZpY2VfZmlsZSB0cnVlCn0KY29uZmlndXJlX3Ztc3NfYXJvX3NlcnZpY2VzKCl7CmxvY2FsIC1uIHI9IiQxIgpsb2NhbCAtbiBpbWFnZXM9IiQyIgpsb2NhbCAtbiBjb25maWdzPSIkMyIKbG9nICJzdGFydGluZyIKdmVyaWZ5X3JvbGUgIiQxIgppZiBbICIkciIgPT0gIiRyb2xlX2dhdGV3YXkiIF07dGhlbgpjb25maWd1cmVfc2VydmljZV9hcm9fZ2F0ZXdheSAiJHtpbWFnZXNbInJwIl19IiAiJDEiICIke2NvbmZpZ3NbImdhdGV3YXlfY29uZmlnIl19IiAiJHtjb25maWdzWyJzdGF0aWNfaXBfYWRkcmVzcyJdfVsiZ2F0ZXdheSJdIgpjb25maWd1cmVfY2VydHNfZ2F0ZXdheQplbGlmIFsgIiRyIiA9PSAiJHJvbGVfcnAiIF07dGhlbgpjb25maWd1cmVfc2VydmljZV9hcm9fcnAgIiR7aW1hZ2VzWyJycCJdfSIgIiQxIiAiJHtjb25maWdzWyJycF9jb25maWciXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19WyJycCJdIgpjb25maWd1cmVfc2VydmljZV9hcm9fbWltb19hY3R1YXRvciAiJHtpbWFnZXNbInJwIl19IiAiJHtjb25maWdzWyJycF9jb25maWciXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19WyJtaW1vX2FjdHVhdG9yIl0iCmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19taW1vX3NjaGVkdWxlciAiJHtpbWFnZXNbInJwIl19IiAiJHtjb25maWdzWyJycF9jb25maWciXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19WyJtaW1vX3NjaGVkdWxlciJdIgpjb25maWd1cmVfc2VydmljZV9hcm9fbW9uaXRvciAiJHtpbWFnZXNbInJwIl19IiAiJHtjb25maWdzWyJzdGF0aWNfaXBfYWRkcmVzcyJdfVsibW9uaXRvciJdIgpjb25maWd1cmVfc2VydmljZV9hcm9fcG9ydGFsICIke2ltYWdlc1sicnAiXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19WyJwb3J0YWwiXSIKY29uZmlndXJlX3NlcnZpY2VfYXJvX21pc2UgIiR7aW1hZ2VzWyJtaXNlIl19IiAiJHtjb25maWdzWyJzdGF0aWNfaXBfYWRkcmVzcyJdfVsibWlzZSJdIgpjb25maWd1cmVfc2VydmljZV9hcm9fb3RlbF9jb2xsZWN0b3IgIiR7aW1hZ2VzWyJvdGVsIl19IiAiJHtjb25maWdzWyJzdGF0aWNfaXBfYWRkcmVzcyJdfSIgIiR7Y29uZmlnc1sic3RhdGljX2lwX2FkZHJlc3MiXX1bIm90ZWxfY29sbGVjdG9yIl0iCmNvbmZpZ3VyZV9jZXJ0c19ycApmaQpjb25maWd1cmVfc2VydmljZV9mbHVlbnRiaXQgIiR7Y29uZmlnc1siZmx1ZW50Yml0Il19IiAiJHtpbWFnZXNbImZsdWVudGJpdCJdfSIKY29uZmlndXJlX3RpbWVyc19tZG1fbWRzZCAiJDEiCmNvbmZpZ3VyZV9zZXJ2aWNlX21kbSAiJDEiICIke2ltYWdlc1sibWRtIl19IiAiJHtjb25maWdzWyJzdGF0aWNfaXBfYWRkcmVzcyJdfVsibWRtIl0iCmNvbmZpZ3VyZV9zZXJ2aWNlX21kc2QgIiQxIiAiJHtjb25maWdzWyJtZHNkIl19IgpydW5fYXpzZWNkX2NvbmZpZ19zY2FuCn0KdXRpbF9jb21tb249InV0aWwtY29tbW9uLnNoIgppZiBbIC1mICIkdXRpbF9jb21tb24iIF07dGhlbgpzb3VyY2UgIiR1dGlsX2NvbW1vbiIKZmkKdXRpbF9zeXN0ZW09InV0aWwtc3lzdGVtLnNoIgppZiBbIC1mICIkdXRpbF9zeXN0ZW0iIF07dGhlbgpzb3VyY2UgIiR1dGlsX3N5c3RlbSIKZmkKZ2V0X2Jvb3RfZGV2X3V1aWQoKXsKbG9jYWwgLW4gYm9vdF9kZXZfdXVpZD0iJDEiCmJvb3RfZGV2PSIkKGRmIC9ib290L3x0YWlsIC0xfGN1dCAtZCcgJyAtZjEpIgpyb290X2Rldj0iJChkZiAvfHRhaWwgLTF8Y3V0IC1kJyAnIC1mMSkiCmJvb3RfZGV2X3V1aWQ9IiRyb290X2RldiIKaWYgWyAiJGJvb3RfZGV2IiAhPSAiJHJvb3RfZGV2IiBdO3RoZW4KYm9vdF9kZXZfdXVpZD0iYm9vdD1VVUlEPSQoYmxraWQgIiRib290X2RldiIgLXMgVVVJRCAtbyB2YWx1ZSkiCmZpCn0KZmlwc192ZXJpZnkoKXsKZmlwc19lbmFibGVkX3Byb2M9IiQoY2F0IC9wcm9jL3N5cy9jcnlwdG8vZmlwc19lbmFibGVkKSIKZmlwc19lbmFibGVkX3N5c2N0bD0iJChzeXNjdGwgLW4gY3J5cHRvLmZpcHNfZW5hYmxlZCkiCmlmIFsgIiRmaXBzX2VuYWJsZWRfcHJvYyIgLW5lIDEgXXx8WyAiJGZpcHNfZW5hYmxlZF9zeXNjdGwiIC1uZSAxIF07dGhlbgphYm9ydCAiRklQUyBtb2RlIGlzIGRpc2FibGVkIgpmaQpsb2cgIkZJUFMgbW9kZSBpcyBlbmFibGVkIgp9CmZpcHNfY29uZmlndXJlKCl7CmxvY2FsIGJvb3RfdXVpZApnZXRfYm9vdF9kZXZfdXVpZCBib290X3V1aWQKbG9jYWwgZ3J1YjJfZW52CmlmIGdydWIyX2Vudj0iJChncnViMi1lZGl0ZW52IC0gbGlzdHxncmVwIGtlcm5lbG9wdHMpIjt0aGVuCmdydWIyLWVkaXRlbnYgLSBzZXQgIiRncnViMl9lbnYgZmlwcz0xICRib290X3V1aWQiCmVsc2UKZ3J1YmJ5IC0tdXBkYXRlLWtlcm5lbD1BTEwgLS1hcmdzPSJmaXBzPTEgJGJvb3RfdXVpZCIKZmkKfQpjb25maWd1cmVfc3NoZCgpewpsb2cgInN0YXJ0aW5nIgpsb2NhbCAtciBzc2hkX2NvbmZpZz0iL2V0Yy9zc2gvc3NoZF9jb25maWciCmxvZyAiRWRpdGluZyAkc3NoZF9jb25maWcgdG8gYWxsb3cgcGFzc3dvcmQgYXV0aGVudGljYXRpb24iCnNlZCAtaSAncy9QYXNzd29yZEF1dGhlbnRpY2F0aW9uIG5vL1Bhc3N3b3JkQXV0aGVudGljYXRpb24geWVzL2cnICIkc3NoZF9jb25maWciCnN5c3RlbWN0bCByZWxvYWQgc3NoZC5zZXJ2aWNlfHxhYm9ydCAic3NoZCBmYWlsZWQgdG8gcmVsb2FkIgp9CmNvbmZpZ3VyZV9sb2dyb3RhdGUoKXsKbG9jYWwgLW4gZHJvcGluX2ZpbGVzPSIkezE6LWVtcHR5X3N0cn0iCmxvZyAic3RhcnRpbmciCmxvY2FsIC1yIGxvZ3JvdGF0ZV9jb25mX2ZpbGVuYW1lPScvZXRjL2xvZ3JvdGF0ZS5jb25mJwpsb2NhbCAtciBsb2dyb3RhdGVfY29uZl9maWxlPScjIHNlZSAibWFuIGxvZ3JvdGF0ZSIgZm9yIGRldGFpbHMKIyByb3RhdGUgbG9nIGZpbGVzIHdlZWtseQp3ZWVrbHkKCiMga2VlcCAyIHdlZWtzIHdvcnRoIG9mIGJhY2tsb2dzCnJvdGF0ZSAyCgojIGNyZWF0ZSBuZXcgKGVtcHR5KSBsb2cgZmlsZXMgYWZ0ZXIgcm90YXRpbmcgb2xkIG9uZXMKY3JlYXRlCgojIHVzZSBkYXRlIGFzIGEgc3VmZml4IG9mIHRoZSByb3RhdGVkIGZpbGUKZGF0ZWV4dAoKIyB1bmNvbW1lbnQgdGhpcyBpZiB5b3Ugd2FudCB5b3VyIGxvZyBmaWxlcyBjb21wcmVzc2VkCmNvbXByZXNzCgojIFJQTSBwYWNrYWdlcyBkcm9wIGxvZyByb3RhdGlvbiBpbmZvcm1hdGlvbiBpbnRvIHRoaXMgZGlyZWN0b3J5CmluY2x1ZGUgL2V0Yy9sb2dyb3RhdGUuZAoKIyBubyBwYWNrYWdlcyBvd24gd3RtcCBhbmQgYnRtcCAtLSB3ZSB3aWxsIHJvdGF0ZSB0aGVtIGhlcmUKL3Zhci9sb2cvd3RtcCB7CiAgICBtb250aGx5CiAgICBjcmVhdGUgMDY2NCByb290IHV0bXAKICAgICAgICBtaW5zaXplIDFNCiAgICByb3RhdGUgMQp9CgovdmFyL2xvZy9idG1wIHsKICAgIG1pc3NpbmdvawogICAgbW9udGhseQogICAgY3JlYXRlIDA2MDAgcm9vdCB1dG1wCiAgICByb3RhdGUgMQp9Jwp3cml0ZV9maWxlIGxvZ3JvdGF0ZV9jb25mX2ZpbGVuYW1lIGxvZ3JvdGF0ZV9jb25mX2ZpbGUgdHJ1ZQppZiBbIC1uICIke2Ryb3Bpbl9maWxlc1sqXX0iIF07dGhlbgpsb2NhbCAtciBsb2dyb3RhdGVfZD0iL2V0Yy9sb2dyb3RhdGUuZCIKbG9nICJXcml0aW5nIGxvZ3JvdGF0ZSBmaWxlcyB0byAkbG9ncm90YXRlX2QiCmZvciBkcm9waW5fbmFtZSBpbiAiJHshZHJvcGluX2ZpbGVzW0BdfSI7ZG8KbG9jYWwgLXIgZHJvcGluX2ZpbGVuYW1lPSIkbG9ncm90YXRlX2QvJGRyb3Bpbl9uYW1lIgpsb2NhbCAtciBkcm9waW5fZmlsZT0iJHtkcm9waW5fZmlsZXNbIiRkcm9waW5fbmFtZSJdfSIKd3JpdGVfZmlsZSBkcm9waW5fZmlsZW5hbWUgZHJvcGluX2ZpbGUgdHJ1ZQpkb25lCmZpCn0KcHVsbF9jb250YWluZXJfaW1hZ2VzKCl7CmxvY2FsIC1uIHB1bGxfaW1hZ2VzPSIkMSIKbG9jYWwgLW4gcmVnaXN0cnlfY29uZj0iJHsyOi1lbXB0eV9zdHJ9Igpsb2cgInN0YXJ0aW5nIgpsb2NhbCAtcmkgcmV0cnlfdGltZT0zMApjbWQ9KAphegpsb2dpbgotaQotLWFsbG93LW5vLXN1YnNjcmlwdGlvbnMpCmxvZyAiUnVubmluZyBheiBsb2dpbiB3aXRoIHJldHJpZXMiCnJldHJ5IGNtZCByZXRyeV90aW1lCm1rZGlyIC1wIC9ldGMvY29udGFpbmVycy8KbWtkaXIgLXAgL3Jvb3QvLmRvY2tlcgp0b3VjaCAvZXRjL2NvbnRhaW5lcnMvbm9kb2NrZXIKZXhwb3J0IFJFR0lTVFJZX0FVVEhfRklMRT0iL3Jvb3QvLmRvY2tlci9jb25maWcuanNvbiIKaWYgWyAtbiAiJHJlZ2lzdHJ5X2NvbmYiIF07dGhlbgp3cml0ZV9maWxlIFJFR0lTVFJZX0FVVEhfRklMRSByZWdpc3RyeV9jb25mIHRydWUKZmkKbG9nICJsb2dnaW5nIGludG8gcHJvZCBhY3IiCmNtZD0oCmF6CmFjcgpsb2dpbgotLW5hbWUKIiQoc2VkIC1lICdzfC4qL3x8JyA8PDwiJEFDUlJFU09VUkNFSUQiKSIpCnJldHJ5IGNtZCByZXRyeV90aW1lCmZvciBpIGluICR7cHVsbF9pbWFnZXNbQF19O2RvCmxvY2FsIC1uIGltYWdlPSIkaSIKY21kPSgKcG9kbWFuCnB1bGwKIiRpbWFnZSIpCmxvZyAiUHVsbGluZyBpbWFnZSAkaW1hZ2Ugd2l0aCByZXRyaWVzIG5vdyIKcmV0cnkgY21kIHJldHJ5X3RpbWUKZG9uZQpjbWQ9KAphegpsb2dvdXQpCmxvZyAiUnVubmluZyBheiBsb2dvdXQgd2l0aCByZXRyaWVzIgpyZXRyeSBjbWQgcmV0cnlfdGltZQp9CmNvbmZpZ3VyZV9jZXJ0c19nZW5lcmFsKCl7CmxvZyAic3RhcnRpbmciCmxvY2FsIC1yIHNzbF9jZXJ0c19iYXNlZGlyPSIvdXNyL2xpYi9zc2wvY2VydHMiCm1rZGlyIC1wICIkc3NsX2NlcnRzX2Jhc2VkaXIiCmNzcGxpdCAtZiAiJHNzbF9jZXJ0c19iYXNlZGlyL2NlcnQtIiAtYiAlMDNkLnBlbSAvZXRjL3BraS90bHMvY2VydHMvY2EtYnVuZGxlLmNydCAvXiQvMSAieyp9IiAxPi9kZXYvbnVsbApjX3JlaGFzaCAiJHNzbF9jZXJ0c19iYXNlZGlyIgp9CmNvbmZpZ3VyZV9jZXJ0c19ycCgpewpsb2cgInN0YXJ0aW5nIgp2ZXJpZnlfcm9sZSByb2xlX3JwCmxvY2FsIC1yIHJwX2NlcnRzX2Jhc2VkaXI9Ii9ldGMvYXJvLXJwIgpta2RpciAtcCAiJHJwX2NlcnRzX2Jhc2VkaXIiCmJhc2U2NCAtZCA8PDwiJEFETUlOQVBJQ0FCVU5ETEUiID4iJHJwX2NlcnRzX2Jhc2VkaXIvYWRtaW4tY2EtYnVuZGxlLnBlbSIKaWYgW1sgLW4gJEFSTUFQSUNBQlVORExFIF1dO3RoZW4KYmFzZTY0IC1kIDw8PCIkQVJNQVBJQ0FCVU5ETEUiID4iJHJwX2NlcnRzX2Jhc2VkaXIvYXJtLWNhLWJ1bmRsZS5wZW0iCmZpCmNob3duIC1SIDEwMDA6MTAwMCAiJHJwX2NlcnRzX2Jhc2VkaXIiCmNvbmZpZ3VyZV9jZXJ0c19nZW5lcmFsCn0KY29uZmlndXJlX2NlcnRzX2dhdGV3YXkoKXsKbG9nICJzdGFydGluZyIKdmVyaWZ5X3JvbGUgcm9sZV9nYXRld2F5CmNvbmZpZ3VyZV9jZXJ0c19nZW5lcmFsCn0KY29uZmlndXJlX2NlcnRzX2RldnByb3h5KCl7CmxvZyAic3RhcnRpbmciCnZlcmlmeV9yb2xlIHJvbGVfZGV2cHJveHkKbG9jYWwgLXIgcHJveHlfY2VydHNfYmFzZWRpcj0iL2V0Yy9wcm94eSIKbWtkaXIgLXAgIiRwcm94eV9jZXJ0c19iYXNlZGlyIgpiYXNlNjQgLWQgPDw8IiRQUk9YWUNFUlQiID4iJHByb3h5X2NlcnRzX2Jhc2VkaXIvcHJveHkuY3J0IgpiYXNlNjQgLWQgPDw8IiRQUk9YWUtFWSIgPiIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS5rZXkiCmJhc2U2NCAtZCA8PDwiJFBST1hZQ0xJRU5UQ0VSVCIgPiIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS1jbGllbnQuY3J0IgpjaG93biAtUiAxMDAwOjEwMDAgL2V0Yy9wcm94eQpjaG1vZCAwNjAwICIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS5rZXkiCn0KY29uZmlndXJlX2F6c2VjZF9zY2FuKCl7CmxvZyAic3RhcnRpbmciCmxvY2FsIC1yIG5vZGVzY2FuX2FnZW50X2ZpbGVuYW1lPSIvZXRjL2RlZmF1bHQvdnNhLW5vZGVzY2FuLWFnZW50LmNvbmZpZyIKbG9jYWwgLXIgbm9kZXNjYW5fYWdlbnRfZmlsZT0iewogICAgXCJOaWNlXCI6IDE5LAogICAgXCJUaW1lb3V0XCI6IDEwODAwLAogICAgXCJDbGllbnRJZFwiOiBcIlwiLAogICAgXCJUZW5hbnRJZFwiOiAkQVpVUkVTRUNQQUNLVlNBVEVOQU5USUQsCiAgICBcIlF1YWx5c1N0b3JlQmFzZVVybFwiOiAkQVpVUkVTRUNQQUNLUVVBTFlTVVJMLAogICAgXCJQcm9jZXNzVGltZW91dFwiOiAzMDAsCiAgICBcIkNvbW1hbmREZWxheVwiOiAwCiAgfSIKd3JpdGVfZmlsZSBub2Rlc2Nhbl9hZ2VudF9maWxlbmFtZSBub2Rlc2Nhbl9hZ2VudF9maWxlIHRydWUKfQpydW5fYXpzZWNkX2NvbmZpZ19zY2FuKCl7CmxvZyAic3RhcnRpbmciCmNvbmZpZ3VyZV9henNlY2Rfc2Nhbgpsb2NhbCAtYXIgY29uZmlncz0oCiJiYXNlbGluZSIKImNsYW1hdiIKInNvZnR3YXJlIikKbG9nICJTY2FubmluZyBjb25maWd1cmF0aW9uIGZpbGVzIHdpdGggYXpzZWNkICR7Y29uZmlnc1sqXX0iCmZvciBzY2FuIGluICR7Y29uZmlnc1tAXX07ZG8KbG9nICJTY2FubmluZyBjb25maWcgZmlsZSAkc2NhbiBub3ciCi91c3IvbG9jYWwvYmluL2F6c2VjZCBjb25maWcgLXMgIiRzY2FuIiAtZCBQMUQKZG9uZQp9CmNyZWF0ZV9yZXF1aXJlZF9kaXJzKCl7CmNyZWF0ZV9kaXJzPSgKL3Zhci9sb2cvam91cm5hbAovdmFyL2xpYi93YWFnZW50L01pY3Jvc29mdC5BenVyZS5LZXlWYXVsdC5TdG9yZQovdmFyL29wdC9taWNyb3NvZnQvbGludXhtb25hZ2VudCkKZm9yIGQgaW4gJHtjcmVhdGVfZGlyc1tAXX07ZG8KbG9nICJDcmVhdGluZyBkaXJlY3RvcnkgJGQiCm1rZGlyIC1wICIkZCJ8fGFib3J0ICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAkZCIKZG9uZQp9CmZpcmV3YWxsZF9jb25maWd1cmVfYmFja2VuZCgpewpsb2cgInN0YXJ0aW5nIgpsb2cgIkNoYW5naW5nIGZpcmV3YWxsZCBiYWNrZW5kIHRvIGlwdGFibGVzIgpjb25mX2ZpbGU9Ii9ldGMvZmlyZXdhbGxkL2ZpcmV3YWxsZC5jb25mIgpzZWQgLWkgJ3MvRmlyZXdhbGxCYWNrZW5kPW5mdGFibGVzL0ZpcmV3YWxsQmFja2VuZD1pcHRhYmxlcy9nJyAiJGNvbmZfZmlsZSIKfQpmaXJld2FsbGRfY29uZmlndXJlKCl7CmxvY2FsIC1uIHBvcnRzPSIkMSIKbG9nICJzdGFydGluZyIKZmlyZXdhbGxkX2NvbmZpZ3VyZV9iYWNrZW5kCmxvY2FsIC1yYSBzZXJ2aWNlPSgKImZpcmV3YWxsZCIpCmVuYWJsZV9zZXJ2aWNlcyBzZXJ2aWNlCmxvZyAiRW5hYmxpbmcgcG9ydHMgJHtwb3J0c1sqXX0gb24gZGVmYXVsdCBmaXJld2FsbGQgem9uZSIKZm9yIHBvcnQgaW4gJHtwb3J0c1tAXX07ZG8KbG9nICJFbmFibGluZyBwb3J0ICRwb3J0IG5vdyIKZmlyZXdhbGwtY21kICItLWFkZC1wb3J0PSRwb3J0IiBcCi0tcGVybWFuZW50CmRvbmUKbG9nICJXcml0aW5nIHJ1bnRpbWUgY29uZmlnIHRvIHBlcm1hbmVudCBjb25maWciCmZpcmV3YWxsLWNtZCAtLXJ1bnRpbWUtdG8tcGVybWFuZW50Cn0KdXRpbF9jb21tb249InV0aWwtY29tbW9uLnNoIgppZiBbIC1mICIkdXRpbF9jb21tb24iIF07dGhlbgpzb3VyY2UgIiR1dGlsX2NvbW1vbiIKZmkKc2V0IC1vIGVycmV4aXQgXAotbyBwaXBlZmFpbCBcCi1vIG5vdW5zZXQKbWFpbigpewpsb2NhbCAtcmkgcmV0cnlfd2FpdF90aW1lPTMwCmxvY2FsIC1yaSBwa2dfcmV0cnlfY291bnQ9NjAKY3JlYXRlX3JlcXVpcmVkX2RpcnMKY29uZmlndXJlX3NzaGQKY29uZmlndXJlX3JwbV9yZXBvcyByZXRyeV93YWl0X3RpbWUgXAoiJHBrZ19yZXRyeV9jb3VudCIKbG9jYWwgLWFyIGV4Y2x1ZGVfcGtncz0oCiIteCBXQUxpbnV4QWdlbnQiCiIteCBXQUxpbnV4QWdlbnQtdWRldiIpCmRuZl91cGRhdGVfcGtncyBleGNsdWRlX3BrZ3MgXApyZXRyeV93YWl0X3RpbWUgXAoiJHBrZ19yZXRyeV9jb3VudCIKbG9jYWwgLXJhIGluc3RhbGxfcGtncz0oCmF6dXJlLWNsaQphenVyZS1tZHNkCnBvZG1hbgpwb2RtYW4tZG9ja2VyCm9wZW5zc2wtcGVybApweXRob24zCmZpcmV3YWxsZApncnViYnkKZHJhY3V0LWZpcHMpCmRuZl9pbnN0YWxsX3BrZ3MgaW5zdGFsbF9wa2dzIFwKcmV0cnlfd2FpdF90aW1lIFwKIiRwa2dfcmV0cnlfY291bnQiCmZpcHNfY29uZmlndXJlCmNvbmZpZ3VyZV9sb2dyb3RhdGUKbG9jYWwgLXIgbWRtaW1hZ2U9IiR7UlBJTUFHRSUlLyp9LyR7TURNSU1BR0UjKi99Igpsb2NhbCAtciBycGltYWdlPSIkUlBJTUFHRSIKbG9jYWwgLXIgbWlzZWltYWdlPSIke1JQSU1BR0UlJS8qfS8ke01JU0VJTUFHRSMqL30iCmxvY2FsIC1yIG90ZWxpbWFnZT0iJE9URUxJTUFHRSIKbG9jYWwgLXIgZmx1ZW50Yml0X2ltYWdlPSIkRkxVRU5UQklUSU1BR0UiCmxvY2FsIC1yQSBhcm9faW1hZ2VzPSgKWyJtZG0iXT0ibWRtaW1hZ2UiClsicnAiXT0icnBpbWFnZSIKWyJmbHVlbnRiaXQiXT0iZmx1ZW50Yml0X2ltYWdlIgpbIm1pc2UiXT0ibWlzZWltYWdlIgpbIm90ZWwiXT0ib3RlbGltYWdlIikKcHVsbF9jb250YWluZXJfaW1hZ2VzIGFyb19pbWFnZXMKbG9jYWwgLXJhIGVuYWJsZV9wb3J0cz0oCiI0NDMvdGNwIgoiNDQ0L3RjcCIKIjQ0NS90Y3AiCiI0NDYvdGNwIgoiMjIyMi90Y3AiCiIyMi90Y3AiKQpmaXJld2FsbGRfY29uZmlndXJlIGVuYWJsZV9wb3J0cwpsb2NhbCAtciBmbHVlbnRiaXRfY29uZl9maWxlPSdbSU5QVVRdCglOYW1lIHN5c3RlbWQKCVRhZyBqb3VybmFsZAoJU3lzdGVtZF9GaWx0ZXIgX0NPTU09YXJvCglEQiAvdmFyL2xpYi9mbHVlbnQvam91cm5hbGRiCgpbSU5QVVRdCglOYW1lIHN5c3RlbWQKCVRhZyBqb3VybmFsZAoJU3lzdGVtZF9GaWx0ZXIgX1NZU1RFTURfVU5JVD1hcm8tbWlzZS5zZXJ2aWNlCglEQiAvdmFyL2xpYi9mbHVlbnQvam91cm5hbGRiCgpbSU5QVVRdCglOYW1lIHN5c3RlbWQKCVRhZyBqb3VybmFsZAoJU3lzdGVtZF9GaWx0ZXIgX1NZU1RFTURfVU5JVD1hcm8tb3RlbC1jb2xsZWN0b3Iuc2VydmljZQoJREIgL3Zhci9saWIvZmx1ZW50L2pvdXJuYWxkYgoKW0ZJTFRFUl0KCU5hbWUgbW9kaWZ5CglNYXRjaCBqb3VybmFsZAoJQWRkIEVudmlyb25tZW50ICR7RU5WSVJPTk1FTlR9CgpbRklMVEVSXQoJTmFtZSBtb2RpZnkKCU1hdGNoIGpvdXJuYWxkCglSZW1vdmVfd2lsZGNhcmQgXwoJUmVtb3ZlIFRJTUVTVEFNUAoKW0ZJTFRFUl0KCU5hbWUgcmV3cml0ZV90YWcKCU1hdGNoIGpvdXJuYWxkCglSdWxlICRMT0dLSU5EIGFzeW5jcW9zIGFzeW5jcW9zIHRydWUKCltGSUxURVJdCglOYW1lIG1vZGlmeQoJTWF0Y2ggYXN5bmNxb3MKCVJlbW92ZSBDTElFTlRfUFJJTkNJUEFMX05BTUUKCVJlbW92ZSBGSUxFCglSZW1vdmUgQ09NUE9ORU5UCgpbRklMVEVSXQoJTmFtZSByZXdyaXRlX3RhZwoJTWF0Y2ggam91cm5hbGQKCVJ1bGUgJExPR0tJTkQgaWZ4YXVkaXQgaWZ4YXVkaXQgZmFsc2UKCltPVVRQVVRdCglOYW1lIGZvcndhcmQKCU1hdGNoICoKCVBvcnQgMjkyMzAnCmxvY2FsIC1yQSBhcm9fY29uZmlncz0oClsicnBfY29uZmlnIl09ImFyb19ycF9jb25mX2ZpbGUiClsiZmx1ZW50Yml0Il09ImZsdWVudGJpdF9jb25mX2ZpbGUiClsibWRzZCJdPSJtZHNkX2NvbmZpZ192ZXJzaW9uIgpbInN0YXRpY19pcF9hZGRyZXNzIl09InN0YXRpY19pcF9hZGRyZXNzZXMiKQpsb2NhbCAtckEgc3RhdGljX2lwX2FkZHJlc3Nlcz0oClsicnAiXT0iMTAuODguMC4yIgpbIm1vbml0b3IiXT0iMTAuODguMC4zIgpbInBvcnRhbCJdPSIxMC44OC4wLjQiClsibWltb19hY3R1YXRvciJdPSIxMC44OC4wLjEwIgpbIm1pbW9fc2NoZWR1bGVyIl09IjEwLjg4LjAuMTEiClsibWlzZSJdPSIxMC44OC4wLjUiClsib3RlbF9jb2xsZWN0b3IiXT0iMTAuODguMC42IgpbIm1kbSJdPSIxMC44OC4wLjgiKQpsb2NhbCAtciBtZHNkX2NvbmZpZ192ZXJzaW9uPSIkUlBNRFNEQ09ORklHVkVSU0lPTiIKbG9jYWwgLXIgYXJvX3JwX2NvbmZfZmlsZT0iQUNSX1JFU09VUkNFX0lEPSckQUNSUkVTT1VSQ0VJRCcKQURNSU5fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FPSckQURNSU5BUElDTElFTlRDRVJUQ09NTU9OTkFNRScKQVJNX0FQSV9DTElFTlRfQ0VSVF9DT01NT05fTkFNRT0nJEFSTUFQSUNMSUVOVENFUlRDT01NT05OQU1FJwpBWlVSRV9BUk1fQ0xJRU5UX0lEPSckQVJNQ0xJRU5USUQnCkFaVVJFX0ZQX0NMSUVOVF9JRD0nJEZQQ0xJRU5USUQnCkFaVVJFX0ZQX1NFUlZJQ0VfUFJJTkNJUEFMX0lEPSckRlBTRVJWSUNFUFJJTkNJUEFMSUQnCkNMVVNURVJfTURNX0FDQ09VTlQ9JyRDTFVTVEVSTURNQUNDT1VOVCcKQ0xVU1RFUl9NRE1fTkFNRVNQQUNFPVJQCkNMVVNURVJfTURTRF9BQ0NPVU5UPSckQ0xVU1RFUk1EU0RBQ0NPVU5UJwpDTFVTVEVSX01EU0RfQ09ORklHX1ZFUlNJT049JyRDTFVTVEVSTURTRENPTkZJR1ZFUlNJT04nCkNMVVNURVJfTURTRF9OQU1FU1BBQ0U9JyRDTFVTVEVSTURTRE5BTUVTUEFDRScKREFUQUJBU0VfQUNDT1VOVF9OQU1FPSckREFUQUJBU0VBQ0NPVU5UTkFNRScKRE9NQUlOX05BTUU9JyRMT0NBVElPTi4kQ0xVU1RFUlBBUkVOVERPTUFJTk5BTUUnCkdBVEVXQVlfRE9NQUlOUz0nJEdBVEVXQVlET01BSU5TJwpHQVRFV0FZX1JFU09VUkNFR1JPVVA9JyRHQVRFV0FZUkVTT1VSQ0VHUk9VUE5BTUUnCktFWVZBVUxUX1BSRUZJWD0nJEtFWVZBVUxUUFJFRklYJwpNRE1fQUNDT1VOVD0nJFJQTURNQUNDT1VOVCcKTURNX05BTUVTUEFDRT0nJHtyb2xlX3JwXl59JwpNRFNEX0VOVklST05NRU5UPSckTURTREVOVklST05NRU5UJwpNSVNFX0FERFJFU1M9J2h0dHA6Ly8ke3N0YXRpY19pcF9hZGRyZXNzZXNbIm1pc2UiXX06NTAwMCcKUlBfRkVBVFVSRVM9JyRSUEZFQVRVUkVTJwpSUElNQUdFPSckcnBpbWFnZScKQVJPX0lOU1RBTExfVklBX0hJVkU9JyRDTFVTVEVSU0lOU1RBTExWSUFISVZFJwpBUk9fSElWRV9ERUZBVUxUX0lOU1RBTExFUl9QVUxMU1BFQz0nJENMVVNURVJERUZBVUxUSU5TVEFMTEVSUFVMTFNQRUMnCkFST19BRE9QVF9CWV9ISVZFPSckQ0xVU1RFUlNBRE9QVEJZSElWRScKT0lEQ19BRkRfRU5EUE9JTlQ9JyRMT0NBVElPTi5vaWMuJFJQUEFSRU5URE9NQUlOTkFNRScKT0lEQ19TVE9SQUdFX0FDQ09VTlRfTkFNRT0nJE9JRENTVE9SQUdFQUNDT1VOVE5BTUUnCk9URUxfQVVESVRfUVVFVUVfU0laRT0nJE9URUxBVURJVFFVRVVFU0laRScKTVNJX1JQX0VORFBPSU5UPSckTVNJUlBFTkRQT0lOVCcKRU5WSVJPTk1FTlQ9JyRFTlZJUk9OTUVOVCcKIgpjb25maWd1cmVfdm1zc19hcm9fc2VydmljZXMgcm9sZV9ycCBcCmFyb19pbWFnZXMgXAphcm9fY29uZmlncwpsb2NhbCAtcmEgYXJvX3NlcnZpY2VzPSgKImFyby1taXNlIgoiYXJvLW1vbml0b3IiCiJhcm8tb3RlbC1jb2xsZWN0b3IiCiJhcm8tcG9ydGFsIgoiYXJvLW1pbW8tYWN0dWF0b3IiCiJhcm8tbWltby1zY2hlZHVsZXIiCiJhcm8tcnAiCiJhenNlY2QiCiJtZHNkIgoibWRtIgoiY2hyb255ZCIKImZsdWVudGJpdCIKImRvd25sb2FkLW1kc2QtY3JlZGVudGlhbHMudGltZXIiCiJkb3dubG9hZC1tZG0tY3JlZGVudGlhbHMudGltZXIiCiJmaXJld2FsbGQiKQplbmFibGVfc2VydmljZXMgYXJvX3NlcnZpY2VzCnJlYm9vdF92bQp9CmV4cG9ydCBBWlVSRV9DTE9VRF9OQU1FPSIke0FaVVJFQ0xPVUROQU1FOj8iRmFpbGVkIHRvIGNhcnJ5IG92ZXIgdmFyaWFibGVzIn0iCnV0aWw9InV0aWwuc2giCmlmIFsgLWYgIiR1dGlsIiBdO3RoZW4Kc291cmNlICIkdXRpbCIKZmkKbWFpbiAiJEAiCg==')))]" + "script": "[base64(concat(base64ToString('c2V0IC1leAoK'),'ACRRESOURCEID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('acrResourceId')),''')\n','ADMINAPICLIENTCERTCOMMONNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('adminApiClientCertCommonName')),''')\n','ARMAPICLIENTCERTCOMMONNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('armApiClientCertCommonName')),''')\n','ARMCLIENTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('armClientId')),''')\n','AZURECLOUDNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureCloudName')),''')\n','AZURESECPACKQUALYSURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackQualysUrl')),''')\n','AZURESECPACKVSATENANTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackVSATenantId')),''')\n','CLUSTERMDMACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdmAccount')),''')\n','CLUSTERMDSDACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdsdAccount')),''')\n','CLUSTERMDSDCONFIGVERSION=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdsdConfigVersion')),''')\n','CLUSTERMDSDNAMESPACE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdsdNamespace')),''')\n','CLUSTERPARENTDOMAINNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterParentDomainName')),''')\n','DATABASEACCOUNTNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('databaseAccountName')),''')\n','FLUENTBITIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fluentbitImage')),''')\n','FPCLIENTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fpClientId')),''')\n','FPTENANTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fpTenantId')),''')\n','FPSERVICEPRINCIPALID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fpServicePrincipalId')),''')\n','GATEWAYDOMAINS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayDomains')),''')\n','GATEWAYRESOURCEGROUPNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayResourceGroupName')),''')\n','GATEWAYSERVICEPRINCIPALID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayServicePrincipalId')),''')\n','KEYVAULTDNSSUFFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultDNSSuffix')),''')\n','KEYVAULTPREFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultPrefix')),''')\n','MDMFRONTENDURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdmFrontendUrl')),''')\n','MDSDENVIRONMENT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdsdEnvironment')),''')\n','MSIRPENDPOINT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('msiRpEndpoint')),''')\n','PORTALACCESSGROUPIDS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalAccessGroupIds')),''')\n','PORTALCLIENTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalClientId')),''')\n','PORTALELEVATEDGROUPIDS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalElevatedGroupIds')),''')\n','RPFEATURES=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpFeatures')),''')\n','RPIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpImage')),''')\n','RPMDMACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdmAccount')),''')\n','RPMDSDACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdAccount')),''')\n','RPMDSDCONFIGVERSION=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdConfigVersion')),''')\n','RPMDSDNAMESPACE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdNamespace')),''')\n','RPPARENTDOMAINNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpParentDomainName')),''')\n','OIDCSTORAGEACCOUNTNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('oidcStorageAccountName')),''')\n','OTELAUDITQUEUESIZE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('otelAuditQueueSize')),''')\n','TOKENCONTRIBUTORROLEID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('tokenContributorRoleID')),''')\n','TOKENCONTRIBUTORROLENAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('tokenContributorRoleName')),''')\n','ENVIRONMENT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('environment')),''')\n','RPLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpLogLevel')),''')\n','MONITORLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('monitorLogLevel')),''')\n','PORTALLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalLogLevel')),''')\n','MIMOACTUATORLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mimoActuatorLogLevel')),''')\n','MIMOSCHEDULERLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mimoSchedulerLogLevel')),''')\n','CLUSTERSINSTALLVIAHIVE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clustersInstallViaHive')),''')\n','CLUSTERSADOPTBYHIVE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clustersAdoptByHive')),''')\n','CLUSTERDEFAULTINSTALLERPULLSPEC=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterDefaultInstallerPullspec')),''')\n','MISEVALIDAUDIENCES=$(base64 -d \u003c\u003c\u003c''',base64(string(parameters('miseValidAudiences'))),''')\n','MISEVALIDAPPIDS=$(base64 -d \u003c\u003c\u003c''',base64(string(parameters('miseValidAppIDs'))),''')\n','ADMINAPICABUNDLE=''',parameters('adminApiCaBundle'),'''\n','ARMAPICABUNDLE=''',parameters('armApiCaBundle'),'''\n','MDMIMAGE=''/geneva/distroless/mdm:2.202602101834.0-20260211-1@sha256:a581e89744933f30a9f8e2724906fde02e713836fce76afefec7092daa01c064''\n','OTELIMAGE=''mcr.microsoft.com/oss/otel/opentelemetry-collector-contrib:0.95.0-linux-amd64''\n','MISEIMAGE=''/mise:1.0.03103.537-mise-cbl-mariner2.0-distroless''\n','LOCATION=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().location),''')\n','SUBSCRIPTIONID=$(base64 -d \u003c\u003c\u003c''',base64(subscription().subscriptionId),''')\n','RESOURCEGROUPNAME=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().name),''')\n','\n',base64ToString('ZGVjbGFyZSAtciBlbXB0eV9zdHI9IiIKZGVjbGFyZSAtciByb2xlX2dhdGV3YXk9ImdhdGV3YXkiCmRlY2xhcmUgLXIgcm9sZV9ycD0icnAiCmRlY2xhcmUgLXIgcm9sZV9kZXZwcm94eT0iZGV2cHJveHkiCmRlY2xhcmUgLXIgdXNfZ292X2Nsb3VkPSJBenVyZVVTR292ZXJubWVudCIKZGVjbGFyZSAtaXIgWFRSQUNFX1NFVD0xCmRlY2xhcmUgLWlyIFhUUkFDRV9VTlNFVD0wCnh0cmFjZV9pc19zZXQoKXsKaWYgW1sgJC0gPX4gIngiIF1dO3RoZW4KZWNobyBYVFJBQ0VfU0VUCmZpCmVjaG8gWFRSQUNFX1VOU0VUCn0KeHRyYWNlX3RvZ2dsZSgpewppZiAhIFtbICQxID1+ICgiWFRSQUNFX1NFVCJ8IlhUUkFDRV9VTlNFVCIpIF1dO3RoZW4KbG9nICJcJDEgaW52YWxpZDsgXCQxIG11c3QgYmUgWFRSQUNFX1NFVCBvciBYVFJBQ0VfVU5TRVQuIFwkMTogJDEiCnJldHVybiAxCmZpCmlmICgoJDE9PVhUUkFDRV9TRVQpKTt0aGVuCnNldCAteAplbGlmCigoJDE9PVhUUkFDRV9VTlNFVCkpCnRoZW4Kc2V0ICt4CmZpCn0KbG9nKCl7CmxvY2FsIC1yIG1zZz0iJHsxOi0ibG9nIG1lc3NhZ2UgaXMgZW1wdHkifSIKbG9jYWwgLXIgc3RhY2tfbGV2ZWw9IiR7MjotMX0iCmVjaG8gIiR7RlVOQ05BTUVbJHN0YWNrX2xldmVsXX06ICRtc2ciCn0KYWJvcnQoKXsKbG9jYWwgLXJpIG9yaWdpbl9zdGFja2xldmVsPTIKbG9nICIkMSIgIiRvcmlnaW5fc3RhY2tsZXZlbCIKbG9nICJFeGl0aW5nIgpleGl0IDEKfQp3cml0ZV9maWxlKCl7CmxvY2FsIC1uIGZpbGVuYW1lPSIkMSIKbG9jYWwgLW4gZmlsZV9jb250ZW50cz0iJDIiCmxvY2FsIC1yIGNsb2JiZXI9IiR7MzotZmFsc2V9IgppZiAkY2xvYmJlcjt0aGVuCmxvZyAiT3ZlcndyaXRpbmcgZmlsZSAkZmlsZW5hbWUiCmVjaG8gIiRmaWxlX2NvbnRlbnRzIiA+IiRmaWxlbmFtZSIKZWxzZQpsb2cgIkFwcGVuZGluZyB0byAkZmlsZW5hbWUiCmVjaG8gIiRmaWxlX2NvbnRlbnRzIiA+PiIkZmlsZW5hbWUiCmZpCn0KcmV0cnkoKXsKbG9jYWwgLW4gY21kX3JldHJ5PSIkMSIKbG9jYWwgLW4gd2FpdF90aW1lPSIkMiIKbG9jYWwgLXJpIHJldHJpZXM9IiR7MzotNX0iCmZvciBhdHRlbXB0IGluICQoc2VxIDEgJHJldHJpZXMpO2RvCmxvZyAiYXR0ZW1wdCAjJGF0dGVtcHQgLSAke0ZVTkNOQU1FWzJdfSIKJHtjbWRfcmV0cnlbQF19Jgp3YWl0IC1mICQhJiZyZXR1cm4gMApzbGVlcCAiJHdhaXRfdGltZSIKZG9uZQphYm9ydCAiJHtjbWRfcmV0cnlbKl19IGZhaWxlZCBhZnRlciAjJHJldHJpZXMgYXR0ZW1wdHMiCn0KdmVyaWZ5X3JvbGUoKXsKbG9jYWwgLW4gdGVzdF9yb2xlPSIkMSIKYWxsb3dlZF9yb2xlc19nbG9iPSIoJHJvbGVfcnB8JHJvbGVfZ2F0ZXdheXwkcm9sZV9kZXZwcm94eSkiCmlmIFtbICR0ZXN0X3JvbGUgPX4gJGFsbG93ZWRfcm9sZXNfZ2xvYiBdXTt0aGVuCmxvZyAiVmVyaWZpZWQgcm9sZSBcIiR0ZXN0X3JvbGVcIiIKZWxzZQphYm9ydCAiZmFpbGVkIHRvIHZlcmlmeSByb2xlLCByb2xlIFwiJHRlc3Rfcm9sZVwiIG5vdCBpbiBcIiRhbGxvd2VkX3JvbGVzX2dsb2JcIiIKZmkKfQpnZXRfa2V5dmF1bHRfc3VmZml4KCl7CmxvY2FsIC1uIHJsPSIkMSIKbG9jYWwgLW4ga3Zfc3VmZml4PSIkMiIKbG9jYWwgLW4gc2VjX3ByZWZpeD0iJDMiCmxvY2FsIC1yIGtleXZhdWx0X3N1ZmZpeF9ycD0ic3ZjIgpsb2NhbCAtciBrZXl2YXVsdF9wcmVmaXhfZ2F0ZXdheT0iZ3d5IgpjYXNlICIkcmwiIGluCiIkcm9sZV9nYXRld2F5Iilrdl9zdWZmaXg9IiRrZXl2YXVsdF9wcmVmaXhfZ2F0ZXdheSIKc2VjX3ByZWZpeD0iJGtleXZhdWx0X3ByZWZpeF9nYXRld2F5Igo7OwoiJHJvbGVfcnAiKWt2X3N1ZmZpeD0iJGtleXZhdWx0X3N1ZmZpeF9ycCIKc2VjX3ByZWZpeD0iJHJvbGVfcnAiCjs7CiopYWJvcnQgInVua25vd24gcm9sZSAkcmwiCmVzYWMKfQpyZWJvb3Rfdm0oKXsKbG9nICJzdGFydGluZyIKKHNodXRkb3duIC1yIG5vdyYpCn0KY29uZmlndXJlX3JlcG9fbWFyaW5lcl9leHRlbmRlZCgpewpsb2NhbCAtciBleHRlbmRlZF9yZXBvX2NvbmZpZz0iaHR0cHM6Ly9wYWNrYWdlcy5taWNyb3NvZnQuY29tL2NibC1tYXJpbmVyLzIuMC9wcm9kL2V4dGVuZGVkL3g4Nl82NC9jb25maWcucmVwbyIKY3VybCAtc1NMICIkZXh0ZW5kZWRfcmVwb19jb25maWciIC1vIC9ldGMveXVtLnJlcG9zLmQvbWFyaW5lci1leHRlbmRlZC5yZXBvCmxvY2FsIC1yIHJlcG9fbmFtZT0iY2JsLW1hcmluZXIyLjBwcm9kZXh0ZW5kZWR4ODZfNjQiCmxvY2FsIC1yYSBjbWQ9KApkbmYKdXBkYXRlCi15Ci0tZW5hYmxlcmVwbz0iJHJlcG9fbmFtZSIpCmxvZyAiRW5hYmxpbmcgcmVwbyAkcmVwb19uYW1lIgpyZXRyeSBjbWQgIiQxIiAiJHsyOi19Igp9CmNvbmZpZ3VyZV9ycG1fcmVwb3MoKXsKbG9nICJzdGFydGluZyIKY29uZmlndXJlX3JlcG9fbWFyaW5lcl9leHRlbmRlZCAiJDEiICIkezI6LTF9Igp9CmRuZl9pbnN0YWxsX3BrZ3MoKXsKbG9jYWwgLW4gcGtncz0iJDEiCmxvZyAic3RhcnRpbmciCmxvY2FsIC1hIGNtZD0oCmRuZgoteQppbnN0YWxsKQptYXBmaWxlIC1PICQoKCR7I2NtZFtAXX0rMSkpIC1kICcgJyBjbWQgPDw8IiR7cGtnc1tAXX0iCmxvY2FsIC1yIGNtZApsb2cgIkF0dGVtcHRpbmcgdG8gaW5zdGFsbCBwYWNrYWdlczogJHtwa2dzWypdfSIKcmV0cnkgY21kICIkMiIgIiR7MzotfSIKfQpkbmZfdXBkYXRlX3BrZ3MoKXsKbG9jYWwgLW4gZXhjbHVkZXM9IiR7MTotZW1wdHlfc3RyfSIKbG9nICJzdGFydGluZyIKbG9jYWwgLWEgY21kPSgKZG5mCi15CiIiCnVwZGF0ZQotLWFsbG93ZXJhc2luZykKaWYgWyAtbiAiJGV4Y2x1ZGVzIiBdO3RoZW4KbWFwZmlsZSAtTyAyIGNtZCA8PDwiJHtleGNsdWRlc1tAXX0iCmVsc2UKdW5zZXQgImNtZFsyXSIKZmkKbG9jYWwgLXIgY21kCmxvZyAiVXBkYXRpbmcgYWxsIHBhY2thZ2VzIGV4Y2x1ZGluZyBcIiR7ZXhjbHVkZXNbKl06LX1cIiIKcmV0cnkgY21kICIkMiIgIiR7MzotfSIKfQpycG1faW1wb3J0X2tleXMoKXsKbG9jYWwgLW4ga2V5cz0iJDEiCmxvZyAic3RhcnRpbmciCmZvciBrZXkgaW4gJHtrZXlzW0BdfTtkbwppZiBbICR7I2tleXNbQF19IC1lcSAwIF07dGhlbgpicmVhawpmaQpsb2NhbCAtYSBjbWQ9KApycG0KLS1pbXBvcnQKLXYKIiRrZXkiKQpsb2cgIkltcG9ydGluZyBycG0gcmVwb3NpdG9yeSBrZXkgJGtleSIKcmV0cnkgY21kICIkMiIgIiR7MzotfSImJnVuc2V0IGtleQpkb25lCn0KdXRpbF9jb21tb249InV0aWwtY29tbW9uLnNoIgppZiBbIC1mICIkdXRpbF9jb21tb24iIF07dGhlbgpzb3VyY2UgIiR1dGlsX2NvbW1vbiIKZmkKZW5hYmxlX3NlcnZpY2VzKCl7CmxvY2FsIC1uIHN2Y3M9IiQxIgpsb2cgInN0YXJ0aW5nIgpzeXN0ZW1jdGwgZGFlbW9uLXJlbG9hZApsb2cgImVuYWJsaW5nIHNlcnZpY2VzICR7c3Zjc1sqXX0iCmZvciBzdmMgaW4gJHtzdmNzW0BdfTtkbwpsb2cgIkVuYWJsaW5nIGFuZCBzdGFydGluZyAkc3ZjIG5vdyIKc3lzdGVtY3RsIGVuYWJsZSBcCi0tbm93IFwKIiRzdmMiCmRvbmUKfQpjb25maWd1cmVfc2VydmljZV9hcm9fZ2F0ZXdheSgpewpsb2NhbCAtbiBpbWFnZT0iJDEiCmxvY2FsIC1uIHJvbGU9IiQyIgpsb2NhbCAtbiBjb25mX2ZpbGU9IiQzIgpsb2NhbCAtbiBpcGFkZHJlc3M9IiQ0Igpsb2cgInN0YXJ0aW5nIgpsb2cgIkNvbmZpZ3VyaW5nIGFyby1nYXRld2F5IHNlcnZpY2UiCmxvY2FsIC1yIGFyb19nYXRld2F5X2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1nYXRld2F5Jwpsb2NhbCAtciBhZGRfY29uZl9maWxlPSJQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnClJPTEU9JyR7cm9sZSwsfScKQVJPX0xPR19MRVZFTD0nJEdBVEVXQVlMT0dMRVZFTCcKRU5WSVJPTk1FTlQ9JyRFTlZJUk9OTUVOVCciCndyaXRlX2ZpbGUgYXJvX2dhdGV3YXlfY29uZl9maWxlbmFtZSBjb25mX2ZpbGUgdHJ1ZQp3cml0ZV9maWxlIGFyb19nYXRld2F5X2NvbmZfZmlsZW5hbWUgYWRkX2NvbmZfZmlsZSBmYWxzZQpsb2NhbCAtciBhcm9fZ2F0ZXdheV9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1nYXRld2F5LnNlcnZpY2UnCmxvY2FsIC1yIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLWdhdGV3YXkKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtZSBBQ1JfUkVTT1VSQ0VfSUQgXAogIC1lIERBVEFCQVNFX0FDQ09VTlRfTkFNRSBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX0ZFQVRVUkVTIFwKICAtZSBNRE1fQUNDT1VOVCBcCiAgLWUgTURNX05BTUVTUEFDRSBcCiAgLWUgQVJPX0xPR19MRVZFTCBcCiAgLWUgRU5WSVJPTk1FTlQgXAogIC1tIDJnIFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtcCA4MDo4MDgwIFwKICAtcCA4MDgxOjgwODEgXAogIC1wIDQ0Mzo4NDQzIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJHtSUElNQUdFfSBcCiAgJHtST0xFfQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAtdCAzNjAwICVOClRpbWVvdXRTdG9wU2VjPTM2MDAKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgICcKd3JpdGVfZmlsZSBhcm9fZ2F0ZXdheV9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZSB0cnVlCn0KY29uZmlndXJlX3NlcnZpY2VfYXJvX3JwKCl7CmxvY2FsIC1uIGltYWdlPSIkMSIKbG9jYWwgLW4gcm9sZT0iJDIiCmxvY2FsIC1uIGNvbmZfZmlsZT0iJDMiCmxvY2FsIC1uIGlwYWRkcmVzcz0iJDQiCmxvZyAic3RhcnRpbmciCmxvZyAiQ29uZmlndXJpbmcgYXJvLXJwIHNlcnZpY2UiCmxvY2FsIC1yIGFyb19ycF9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tcnAnCmxvY2FsIC1yIGFkZF9jb25mX2ZpbGU9IlBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcycKRU5WSVJPTk1FTlQ9JyRFTlZJUk9OTUVOVCcKUk9MRT0nJHtyb2xlLCx9JwpBUk9fTE9HX0xFVkVMPSckUlBMT0dMRVZFTCciCndyaXRlX2ZpbGUgYXJvX3JwX2NvbmZfZmlsZW5hbWUgY29uZl9maWxlIHRydWUKd3JpdGVfZmlsZSBhcm9fcnBfY29uZl9maWxlbmFtZSBhZGRfY29uZl9maWxlIGZhbHNlCmxvY2FsIC1yIGFyb19ycF9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1ycC5zZXJ2aWNlJwpsb2NhbCAtciBhcm9fcnBfc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tcnAKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtZSBBQ1JfUkVTT1VSQ0VfSUQgXAogIC1lIEFETUlOX0FQSV9DTElFTlRfQ0VSVF9DT01NT05fTkFNRSBcCiAgLWUgQVJNX0FQSV9DTElFTlRfQ0VSVF9DT01NT05fTkFNRSBcCiAgLWUgQVpVUkVfQVJNX0NMSUVOVF9JRCBcCiAgLWUgQVpVUkVfRlBfQ0xJRU5UX0lEIFwKICAtZSBDTFVTVEVSX01ETV9BQ0NPVU5UIFwKICAtZSBDTFVTVEVSX01ETV9OQU1FU1BBQ0UgXAogIC1lIENMVVNURVJfTURTRF9BQ0NPVU5UIFwKICAtZSBDTFVTVEVSX01EU0RfQ09ORklHX1ZFUlNJT04gXAogIC1lIENMVVNURVJfTURTRF9OQU1FU1BBQ0UgXAogIC1lIERBVEFCQVNFX0FDQ09VTlRfTkFNRSBcCiAgLWUgRE9NQUlOX05BTUUgXAogIC1lIEdBVEVXQVlfRE9NQUlOUyBcCiAgLWUgR0FURVdBWV9SRVNPVVJDRUdST1VQIFwKICAtZSBLRVlWQVVMVF9QUkVGSVggXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtZSBNRFNEX0VOVklST05NRU5UIFwKICAtZSBSUF9GRUFUVVJFUyBcCiAgLWUgQVJPX0lOU1RBTExfVklBX0hJVkUgXAogIC1lIEFST19ISVZFX0RFRkFVTFRfSU5TVEFMTEVSX1BVTExTUEVDIFwKICAtZSBBUk9fQURPUFRfQllfSElWRSBcCiAgLWUgT0lEQ19BRkRfRU5EUE9JTlQgXAogIC1lIE9JRENfU1RPUkFHRV9BQ0NPVU5UX05BTUUgXAogIC1lIE1TSV9SUF9FTkRQT0lOVCBcCiAgLWUgT1RFTF9BVURJVF9RVUVVRV9TSVpFIFwKICAtZSBNSVNFX0FERFJFU1MgXAogIC1lIEFST19MT0dfTEVWRUwgXAogIC1lIEVOVklST05NRU5UIFwKICAtbSAyZyBcCiAgLS1uZXR3b3JrPSR7UE9ETUFOX05FVFdPUkt9IFwKICAtLWlwICR7SVBBRERSRVNTfSBcCiAgLXAgNDQzOjg0NDMgXAogIC12IC9ldGMvYXJvLXJwOi9ldGMvYXJvLXJwIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgLXYgL3Zhci9ydW4vbWRzZC9hc2E6L3Zhci9ydW4vbWRzZC9hc2E6eiBcCiAgJHtSUElNQUdFfSBcCiAgJHtST0xFfQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAtdCAzNjAwICVOClRpbWVvdXRTdG9wU2VjPTM2MDAKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCndyaXRlX2ZpbGUgYXJvX3JwX3NlcnZpY2VfZmlsZW5hbWUgYXJvX3JwX3NlcnZpY2VfZmlsZSB0cnVlCn0KY29uZmlndXJlX3NlcnZpY2VfYXJvX21vbml0b3IoKXsKbG9jYWwgLW4gaW1hZ2U9IiQxIgpsb2NhbCAtbiBpcGFkZHJlc3M9IiQyIgpsb2cgInN0YXJ0aW5nIgpsb2cgIkNvbmZpZ3VyaW5nIGFyby1tb25pdG9yIHNlcnZpY2UiCmxvY2FsIC1yIGFyb19tb25pdG9yX3NlcnZpY2VfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW1vbml0b3InCmxvY2FsIC1yIGFyb19tb25pdG9yX3NlcnZpY2VfY29uZl9maWxlPSJBWlVSRV9GUF9DTElFTlRfSUQ9JyRGUENMSUVOVElEJwpET01BSU5fTkFNRT0nJExPQ0FUSU9OLiRDTFVTVEVSUEFSRU5URE9NQUlOTkFNRScKQ0xVU1RFUl9NRFNEX0FDQ09VTlQ9JyRDTFVTVEVSTURTREFDQ09VTlQnCkNMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTj0nJENMVVNURVJNRFNEQ09ORklHVkVSU0lPTicKR0FURVdBWV9ET01BSU5TPSckR0FURVdBWURPTUFJTlMnCkdBVEVXQVlfUkVTT1VSQ0VHUk9VUD0nJEdBVEVXQVlSRVNPVVJDRUdST1VQTkFNRScKTURTRF9FTlZJUk9OTUVOVD0nJE1EU0RFTlZJUk9OTUVOVCcKQ0xVU1RFUl9NRFNEX05BTUVTUEFDRT0nJENMVVNURVJNRFNETkFNRVNQQUNFJwpDTFVTVEVSX01ETV9BQ0NPVU5UPSckQ0xVU1RFUk1ETUFDQ09VTlQnCkNMVVNURVJfTURNX05BTUVTUEFDRT1CQk0KREFUQUJBU0VfQUNDT1VOVF9OQU1FPSckREFUQUJBU0VBQ0NPVU5UTkFNRScKRU5WSVJPTk1FTlQ9JyRFTlZJUk9OTUVOVCcKS0VZVkFVTFRfUFJFRklYPSckS0VZVkFVTFRQUkVGSVgnCk1ETV9BQ0NPVU5UPSckUlBNRE1BQ0NPVU5UJwpNRE1fTkFNRVNQQUNFPUJCTQpSUElNQUdFPSckaW1hZ2UnClBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcycKQVJPX0lOU1RBTExfVklBX0hJVkU9JyRDTFVTVEVSU0lOU1RBTExWSUFISVZFJwpBUk9fSElWRV9ERUZBVUxUX0lOU1RBTExFUl9QVUxMU1BFQz0nJENMVVNURVJERUZBVUxUSU5TVEFMTEVSUFVMTFNQRUMnCkFST19BRE9QVF9CWV9ISVZFPSckQ0xVU1RFUlNBRE9QVEJZSElWRScKQVJPX0xPR19MRVZFTD0nJE1PTklUT1JMT0dMRVZFTCciCndyaXRlX2ZpbGUgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGVuYW1lIGFyb19tb25pdG9yX3NlcnZpY2VfY29uZl9maWxlIHRydWUKbG9jYWwgLXIgYXJvX21vbml0b3Jfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tbW9uaXRvci5zZXJ2aWNlJwpsb2NhbCAtciBhcm9fbW9uaXRvcl9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1tb25pdG9yCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLS1uZXR3b3JrPSR7UE9ETUFOX05FVFdPUkt9IFwKICAtLWlwICR7SVBBRERSRVNTfSBcCiAgLWUgQVpVUkVfRlBfQ0xJRU5UX0lEIFwKICAtZSBET01BSU5fTkFNRSBcCiAgLWUgQ0xVU1RFUl9NRFNEX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX1JFU09VUkNFR1JPVVAgXAogIC1lIE1EU0RfRU5WSVJPTk1FTlQgXAogIC1lIENMVVNURVJfTURTRF9OQU1FU1BBQ0UgXAogIC1lIENMVVNURVJfTURNX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURNX05BTUVTUEFDRSBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBLRVlWQVVMVF9QUkVGSVggXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtZSBBUk9fSU5TVEFMTF9WSUFfSElWRSBcCiAgLWUgQVJPX0hJVkVfREVGQVVMVF9JTlNUQUxMRVJfUFVMTFNQRUMgXAogIC1lIEFST19BRE9QVF9CWV9ISVZFIFwKICAtZSBBUk9fTE9HX0xFVkVMIFwKICAtZSBFTlZJUk9OTUVOVCBcCiAgLW0gMi41ZyBcCiAgLXYgL3J1bi9zeXN0ZW1kL2pvdXJuYWw6L3J1bi9zeXN0ZW1kL2pvdXJuYWwgXAogIC12IC92YXIvZXR3Oi92YXIvZXR3OnogXAogICR7UlBJTUFHRX0gXAogIG1vbml0b3IKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCndyaXRlX2ZpbGUgYXJvX21vbml0b3Jfc2VydmljZV9maWxlbmFtZSBhcm9fbW9uaXRvcl9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19wb3J0YWwoKXsKbG9jYWwgLW4gaW1hZ2U9IiQxIgpsb2NhbCAtbiBpcGFkZHJlc3M9IiQyIgpsb2cgInN0YXJ0aW5nIgpsb2cgIkNvbmZpZ3VyaW5nIGFybyBwb3J0YWwgc2VydmljZSIKbG9jYWwgLXIgYXJvX3BvcnRhbF9zZXJ2aWNlX2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1wb3J0YWwnCmxvY2FsIC1yIGFyb19wb3J0YWxfc2VydmljZV9jb25mX2ZpbGU9IkFaVVJFX1BPUlRBTF9BQ0NFU1NfR1JPVVBfSURTPSckUE9SVEFMQUNDRVNTR1JPVVBJRFMnCkFaVVJFX1BPUlRBTF9DTElFTlRfSUQ9JyRQT1JUQUxDTElFTlRJRCcKQVpVUkVfUE9SVEFMX0VMRVZBVEVEX0dST1VQX0lEUz0nJFBPUlRBTEVMRVZBVEVER1JPVVBJRFMnCkRBVEFCQVNFX0FDQ09VTlRfTkFNRT0nJERBVEFCQVNFQUNDT1VOVE5BTUUnCktFWVZBVUxUX1BSRUZJWD0nJEtFWVZBVUxUUFJFRklYJwpNRE1fQUNDT1VOVD0nJFJQTURNQUNDT1VOVCcKTURNX05BTUVTUEFDRT1Qb3J0YWwKUE9SVEFMX0hPU1ROQU1FPSckTE9DQVRJT04uYWRtaW4uJFJQUEFSRU5URE9NQUlOTkFNRScKRU5WSVJPTk1FTlQ9JyRFTlZJUk9OTUVOVCcKT1RFTF9BVURJVF9RVUVVRV9TSVpFPSckT1RFTEFVRElUUVVFVUVTSVpFJwpSUElNQUdFPSckaW1hZ2UnClBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcycKQVJPX0xPR19MRVZFTD0nJFBPUlRBTExPR0xFVkVMJyIKd3JpdGVfZmlsZSBhcm9fcG9ydGFsX3NlcnZpY2VfY29uZl9maWxlbmFtZSBhcm9fcG9ydGFsX3NlcnZpY2VfY29uZl9maWxlIHRydWUKbG9jYWwgLXIgYXJvX3BvcnRhbF9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1wb3J0YWwuc2VydmljZScKbG9jYWwgLXIgYXJvX3BvcnRhbF9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0ClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1wb3J0YWwKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtZSBBWlVSRV9QT1JUQUxfQUNDRVNTX0dST1VQX0lEUyBcCiAgLWUgQVpVUkVfUE9SVEFMX0NMSUVOVF9JRCBcCiAgLWUgQVpVUkVfUE9SVEFMX0VMRVZBVEVEX0dST1VQX0lEUyBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBLRVlWQVVMVF9QUkVGSVggXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtZSBQT1JUQUxfSE9TVE5BTUUgXAogIC1lIE9URUxfQVVESVRfUVVFVUVfU0laRSBcCiAgLWUgQVJPX0xPR19MRVZFTCBcCiAgLWUgRU5WSVJPTk1FTlQgXAogIC1tIDJnIFwKICAtcCA0NDQ6ODQ0NCBcCiAgLXAgMjIyMjoyMjIyIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgLXYgL3Zhci9ydW4vbWRzZC9hc2E6L3Zhci9ydW4vbWRzZC9hc2E6eiBcCiAgJHtSUElNQUdFfSBcCiAgcG9ydGFsClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MQoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Jwp3cml0ZV9maWxlIGFyb19wb3J0YWxfc2VydmljZV9maWxlbmFtZSBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZSB0cnVlCn0KY29uZmlndXJlX3NlcnZpY2VfYXJvX21pbW9fYWN0dWF0b3IoKXsKbG9jYWwgLW4gaW1hZ2U9IiQxIgpsb2NhbCAtbiBjb25mX2ZpbGU9IiQyIgpsb2NhbCAtbiBpcGFkZHJlc3M9IiQzIgpsb2cgInN0YXJ0aW5nIgpsb2cgIkNvbmZpZ3VyaW5nIGFyby1taW1vLWFjdHVhdG9yIHNlcnZpY2UiCmxvY2FsIC1yIGFyb19taW1vX2FjdHVhdG9yX2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1taW1vLWFjdHVhdG9yJwpsb2NhbCAtciBhZGRfY29uZl9maWxlPSJQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnCkFST19MT0dfTEVWRUw9JyRNSU1PQUNUVUFUT1JMT0dMRVZFTCciCndyaXRlX2ZpbGUgYXJvX21pbW9fYWN0dWF0b3JfY29uZl9maWxlbmFtZSBjb25mX2ZpbGUgdHJ1ZQp3cml0ZV9maWxlIGFyb19taW1vX2FjdHVhdG9yX2NvbmZfZmlsZW5hbWUgYWRkX2NvbmZfZmlsZSBmYWxzZQpsb2NhbCAtciBhcm9fbWltb19hY3R1YXRvcl9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1taW1vLWFjdHVhdG9yLnNlcnZpY2UnCmxvY2FsIC1yIGFyb19taW1vX2FjdHVhdG9yX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLW1pbW8tYWN0dWF0b3IKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtZSBBQ1JfUkVTT1VSQ0VfSUQgXAogIC1lIEFETUlOX0FQSV9DTElFTlRfQ0VSVF9DT01NT05fTkFNRSBcCiAgLWUgQVJNX0FQSV9DTElFTlRfQ0VSVF9DT01NT05fTkFNRSBcCiAgLWUgQVpVUkVfQVJNX0NMSUVOVF9JRCBcCiAgLWUgQVpVUkVfRlBfQ0xJRU5UX0lEIFwKICAtZSBDTFVTVEVSX01ETV9BQ0NPVU5UIFwKICAtZSBDTFVTVEVSX01ETV9OQU1FU1BBQ0UgXAogIC1lIENMVVNURVJfTURTRF9BQ0NPVU5UIFwKICAtZSBDTFVTVEVSX01EU0RfQ09ORklHX1ZFUlNJT04gXAogIC1lIENMVVNURVJfTURTRF9OQU1FU1BBQ0UgXAogIC1lIERBVEFCQVNFX0FDQ09VTlRfTkFNRSBcCiAgLWUgRE9NQUlOX05BTUUgXAogIC1lIEVOVklST05NRU5UIFwKICAtZSBHQVRFV0FZX0RPTUFJTlMgXAogIC1lIEdBVEVXQVlfUkVTT1VSQ0VHUk9VUCBcCiAgLWUgS0VZVkFVTFRfUFJFRklYIFwKICAtZSBNRE1fQUNDT1VOVCBcCiAgLWUgTURNX05BTUVTUEFDRSBcCiAgLWUgTURTRF9FTlZJUk9OTUVOVCBcCiAgLWUgUlBfRkVBVFVSRVMgXAogIC1lIEFST19JTlNUQUxMX1ZJQV9ISVZFIFwKICAtZSBBUk9fSElWRV9ERUZBVUxUX0lOU1RBTExFUl9QVUxMU1BFQyBcCiAgLWUgQVJPX0FET1BUX0JZX0hJVkUgXAogIC1lIE9JRENfQUZEX0VORFBPSU5UIFwKICAtZSBPSURDX1NUT1JBR0VfQUNDT1VOVF9OQU1FIFwKICAtZSBNU0lfUlBfRU5EUE9JTlQgXAogIC1lIEFST19MT0dfTEVWRUwgXAogIC1tIDJnIFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtcCA0NDU6ODQ0NSBcCiAgLXYgL2V0Yy9hcm8tcnA6L2V0Yy9hcm8tcnAgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAke1JQSU1BR0V9IFwKICBtaW1vLWFjdHVhdG9yCkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wIC10IDM2MDAgJU4KVGltZW91dFN0b3BTZWM9MzYwMApSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKd3JpdGVfZmlsZSBhcm9fbWltb19hY3R1YXRvcl9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19taW1vX2FjdHVhdG9yX3NlcnZpY2VfZmlsZSB0cnVlCn0KY29uZmlndXJlX3NlcnZpY2VfYXJvX21pbW9fc2NoZWR1bGVyKCl7CmxvY2FsIC1uIGltYWdlPSIkMSIKbG9jYWwgLW4gY29uZl9maWxlPSIkMiIKbG9jYWwgLW4gaXBhZGRyZXNzPSIkMyIKbG9nICJzdGFydGluZyIKbG9nICJDb25maWd1cmluZyBhcm8tbWltby1zY2hlZHVsZXIgc2VydmljZSIKbG9jYWwgLXIgYXJvX21pbW9fc2NoZWR1bGVyX2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1taW1vLXNjaGVkdWxlcicKbG9jYWwgLXIgYWRkX2NvbmZfZmlsZT0iUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpBUk9fTE9HX0xFVkVMPSckTUlNT1NDSEVEVUxFUkxPR0xFVkVMJyIKd3JpdGVfZmlsZSBhcm9fbWltb19zY2hlZHVsZXJfY29uZl9maWxlbmFtZSBjb25mX2ZpbGUgdHJ1ZQp3cml0ZV9maWxlIGFyb19taW1vX3NjaGVkdWxlcl9jb25mX2ZpbGVuYW1lIGFkZF9jb25mX2ZpbGUgZmFsc2UKbG9jYWwgLXIgYXJvX21pbW9fc2NoZWR1bGVyX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLW1pbW8tc2NoZWR1bGVyLnNlcnZpY2UnCmxvY2FsIC1yIGFyb19taW1vX3NjaGVkdWxlcl9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1taW1vLXNjaGVkdWxlcgpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC1lIEFDUl9SRVNPVVJDRV9JRCBcCiAgLWUgQURNSU5fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBUk1fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBWlVSRV9BUk1fQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9GUF9DTElFTlRfSUQgXAogIC1lIENMVVNURVJfTURNX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURNX05BTUVTUEFDRSBcCiAgLWUgQ0xVU1RFUl9NRFNEX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiBcCiAgLWUgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRSBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBET01BSU5fTkFNRSBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX1JFU09VUkNFR1JPVVAgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIE1EU0RfRU5WSVJPTk1FTlQgXAogIC1lIFJQX0ZFQVRVUkVTIFwKICAtZSBBUk9fSU5TVEFMTF9WSUFfSElWRSBcCiAgLWUgQVJPX0hJVkVfREVGQVVMVF9JTlNUQUxMRVJfUFVMTFNQRUMgXAogIC1lIEFST19BRE9QVF9CWV9ISVZFIFwKICAtZSBPSURDX0FGRF9FTkRQT0lOVCBcCiAgLWUgT0lEQ19TVE9SQUdFX0FDQ09VTlRfTkFNRSBcCiAgLWUgTVNJX1JQX0VORFBPSU5UIFwKICAtZSBBUk9fTE9HX0xFVkVMIFwKICAtbSAyZyBcCiAgLS1uZXR3b3JrPSR7UE9ETUFOX05FVFdPUkt9IFwKICAtLWlwICR7SVBBRERSRVNTfSBcCiAgLXAgNDQ2Ojg0NDYgXAogIC12IC9ldGMvYXJvLXJwOi9ldGMvYXJvLXJwIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJHtSUElNQUdFfSBcCiAgbWltby1zY2hlZHVsZXIKRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgLXQgMzYwMCAlTgpUaW1lb3V0U3RvcFNlYz0zNjAwClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Jwp3cml0ZV9maWxlIGFyb19taW1vX3NjaGVkdWxlcl9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19taW1vX3NjaGVkdWxlcl9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19taXNlKCl7CmxvY2FsIC1uIGltYWdlPSIkMSIKbG9jYWwgLW4gaXBhZGRyZXNzPSIkMiIKbG9nICJzdGFydGluZyIKbG9nICJDb25maWd1cmluZyBhcm8tbWlzZSBzZXJ2aWNlIgpMT0dJTklOU1RBTkNFPSJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20iCmlmIFtbICRBWlVSRUNMT1VETkFNRSA9PSAiJHVzX2dvdl9jbG91ZCIgXV07dGhlbgpMT0dJTklOU1RBTkNFPSJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS51cyIKZmkKbG9jYWwgLXIgYXJvX21pc2Vfc2VydmljZV9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tbWlzZScKbG9jYWwgLXIgYXJvX21pc2Vfc2VydmljZV9jb25mX2ZpbGU9IkZQQ0xJRU5USUQ9JyRGUENMSUVOVElEJwpGUFRFTkFOVElEPSckRlBURU5BTlRJRCcKTUlTRUlNQUdFPSckaW1hZ2UnCk1JU0VWQUxJREFVRElFTkNFUz0nJE1JU0VWQUxJREFVRElFTkNFUycKTUlTRVZBTElEQVBQSURTPSckTUlTRVZBTElEQVBQSURTJwpMT0dJTklOU1RBTkNFPSckTE9HSU5JTlNUQU5DRScKUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpFTlZJUk9OTUVOVD0nJEVOVklST05NRU5UJyIKd3JpdGVfZmlsZSBhcm9fbWlzZV9zZXJ2aWNlX2NvbmZfZmlsZW5hbWUgYXJvX21pc2Vfc2VydmljZV9jb25mX2ZpbGUgdHJ1ZQpta2RpciAtcCAvYXBwL21pc2UKbG9jYWwgLXIgYXJvX21pc2VfYXBwc2V0dGluZ3NfZmlsZW5hbWU9Jy9hcHAvbWlzZS9hcHBzZXR0aW5ncy5qc29uJwpsb2NhbCAtciBhcm9fbWlzZV9hcHBzZXR0aW5nc19maWxlPSJ7CiAgICBcIlZlcnNpb25cIjogXCIxXCIsCiAgICBcIkhlYXJ0YmVhdEludGVydmFsTXNcIjogNTAwMCwKICAgIFwiQXp1cmVBZFwiOiB7CiAgICAgICAgXCJJbnN0YW5jZVwiOiBcIiRMT0dJTklOU1RBTkNFXCIsCiAgICAgICAgXCJDbGllbnRJZFwiOiBcIiRGUENMSUVOVElEXCIsCiAgICAgICAgXCJUZW5hbnRJZFwiOiBcIiRGUFRFTkFOVElEXCIsCiAgICAgICAgXCJBdWRpZW5jZVwiOiBcImFwaTovLyRGUENMSUVOVElEXCIsCiAgICAgICAgXCJTaG93UElJXCI6IGZhbHNlLAogICAgICAgIFwiSW5ib3VuZFBvbGljaWVzXCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgXCJMYWJlbFwiOiBcImFyb3JwLWFybS1pbmJvdW5kLXBvbGljeVwiLAogICAgICAgICAgICAgICAgXCJBdXRob3JpdHlcIjogXCIkTE9HSU5JTlNUQU5DRS8kRlBURU5BTlRJRC9cIgosCiAgICAgICAgICAgICAgICBcIkF1dGhlbnRpY2F0aW9uU2NoZW1lc1wiOiBbCiAgICAgICAgICAgICAgICAgICAgXCJQb1BcIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFwiVmFsaWRBdWRpZW5jZXNcIjogJE1JU0VWQUxJREFVRElFTkNFUywKICAgICAgICAgICAgICAgIFwiU2lnbmVkSHR0cFJlcXVlc3RWYWxpZGF0aW9uUG9saWN5XCI6IHsKICAgICAgICAgICAgICAgICAgICBcIlZhbGlkYXRlVHNcIjogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBcIlZhbGlkYXRlTVwiOiB0cnVlLAogICAgICAgICAgICAgICAgICAgIFwiVmFsaWRhdGVVXCI6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgXCJWYWxpZGF0ZVBcIjogdHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFwiVmFsaWRBcHBsaWNhdGlvbklkc1wiOiAkTUlTRVZBTElEQVBQSURTCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIFwiTG9nZ2luZ1wiOiB7CiAgICAgICAgICAgIFwiTG9nTGV2ZWxcIjogXCJJbmZvcm1hdGlvblwiCiAgICAgICAgfSwKICAgICAgICBcIk1vZHVsZXNcIjogewogICAgICAgICAgICBcIlRyVjJcIjogewogICAgICAgICAgICAgICAgXCJNb2R1bGVUeXBlXCI6IFwiVHJWMk1vZHVsZVwiLAogICAgICAgICAgICAgICAgXCJFbmFibGVkXCI6IHRydWUKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sCiAgICBcIkFsbG93ZWRIb3N0c1wiOiBcIipcIiwKICAgIFwiS2VzdHJlbFwiOiB7CiAgICAgICAgXCJFbmRwb2ludHNcIjogewogICAgICAgICAgICBcIkh0dHBcIjogewogICAgICAgICAgICAgICAgXCJVcmxcIjogXCJodHRwOi8vJGlwYWRkcmVzczo1MDAwXCIKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sCiAgICBcIkxvZ2dpbmdcIjogewogICAgICAgIFwiTG9nTGV2ZWxcIjogewogICAgICAgICAgICBcIkRlZmF1bHRcIjogXCJJbmZvcm1hdGlvblwiLAogICAgICAgICAgICBcIk1pY3Jvc29mdFwiOiBcIkluZm9ybWF0aW9uXCIsCiAgICAgICAgICAgIFwiTWljcm9zb2Z0Lkhvc3RpbmcuTGlmZXRpbWVcIjogXCJJbmZvcm1hdGlvblwiCiAgICAgICAgfSwKICAgICAgICBcIkNvbnNvbGVcIjogewogICAgICAgICAgICBcIkZvcm1hdHRlck5hbWVcIjogXCJTaW1wbGVcIiwKICAgICAgICAgICAgXCJGb3JtYXR0ZXJPcHRpb25zXCI6IHsKICAgICAgICAgICAgICAgIFwiSW5jbHVkZVNjb3Blc1wiOiB0cnVlLAogICAgICAgICAgICAgICAgXCJTaW5nbGVMaW5lXCI6IHRydWUsCiAgICAgICAgICAgICAgICBcIlRpbWVzdGFtcEZvcm1hdFwiOiBcIkhIOm1tOnNzLmZmZmYgXCIsCiAgICAgICAgICAgICAgICBcIlVzZVV0Y1RpbWVzdGFtcFwiOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0iCndyaXRlX2ZpbGUgYXJvX21pc2VfYXBwc2V0dGluZ3NfZmlsZW5hbWUgYXJvX21pc2VfYXBwc2V0dGluZ3NfZmlsZSB0cnVlCmxvY2FsIC1yIGFyb19taXNlX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLW1pc2Uuc2VydmljZScKbG9jYWwgLXIgYXJvX21pc2Vfc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldApTdGFydExpbWl0SW50ZXJ2YWxTZWM9MApbU2VydmljZV0KUmVzdGFydFNlYz0xcwpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLW1pc2UKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC1wIDUwMDA6NTAwMCBcCiAgLXYgL2FwcC9taXNlL2FwcHNldHRpbmdzLmpzb246L2FwcC9hcHBzZXR0aW5ncy5qc29uOnogXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1uZXR3b3JrPSR7UE9ETUFOX05FVFdPUkt9IFwKICAtLWlwICR7SVBBRERSRVNTfSBcCiAgLS1ybSBcCiAgLWUgRU5WSVJPTk1FTlQgXAogICR7TUlTRUlNQUdFfQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAlTgpSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTMKU3RhcnRMaW1pdEludGVydmFsPTAKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Jwp3cml0ZV9maWxlIGFyb19taXNlX3NlcnZpY2VfZmlsZW5hbWUgYXJvX21pc2Vfc2VydmljZV9maWxlIHRydWUKfQpjb25maWd1cmVfc2VydmljZV9hcm9fb3RlbF9jb2xsZWN0b3IoKXsKbG9jYWwgLW4gaW1hZ2U9IiQxIgpsb2NhbCAtbiBzdGF0aWNfaXBfYWRkcmVzcz0iJDIiCmxvY2FsIC1uIGlwYWRkcmVzcz0iJDMiCmxvZyAic3RhcnRpbmciCmxvZyAiQ29uZmlndXJpbmcgYXJvLW90ZWwtY29sbGVjdG9yIHNlcnZpY2UiCmxvY2FsIC1yIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1vdGVsLWNvbGxlY3RvcicKbG9jYWwgLXIgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfY29uZl9maWxlPSJHT01FTUxJTUlUPTEwMDBNaUIKT1RFTElNQUdFPSckaW1hZ2UnClBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcycKRU5WSVJPTk1FTlQ9JyRFTlZJUk9OTUVOVCciCndyaXRlX2ZpbGUgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfY29uZl9maWxlbmFtZSBhcm9fb3RlbF9jb2xsZWN0b3Jfc2VydmljZV9jb25mX2ZpbGUgdHJ1ZQpta2RpciAtcCAvYXBwL290ZWwKbG9jYWwgLXIgYXJvX290ZWxfY29sbGVjdG9yX2FwcGNvbmZpZ19maWxlbmFtZT0nL2FwcC9vdGVsL2NvbmZpZy55YW1sJwpsb2NhbCAtciBhcm9fb3RlbF9jb2xsZWN0b3JfYXBwY29uZmlnX2ZpbGU9InJlY2VpdmVyczoKICBodHRwY2hlY2s6CiAgICB0YXJnZXRzOgogICAgIyBNSVNFIEVuZHBvaW50cwogICAgICAtIGVuZHBvaW50OiBodHRwOi8vJHtzdGF0aWNfaXBfYWRkcmVzc1sibWlzZSJdfTo1MDAwL2hlYWx0aHoKICAgICAgICBtZXRob2Q6IEdFVAogICAgICAtIGVuZHBvaW50OiBodHRwOi8vJHtzdGF0aWNfaXBfYWRkcmVzc1sibWlzZSJdfTo1MDAwL3JlYWR5egogICAgICAgIG1ldGhvZDogR0VUCiAgICAjIE9URUxzIG93biBFbmRwb2ludHMKICAgICAgLSBlbmRwb2ludDogaHR0cDovLyRpcGFkZHJlc3M6MTMxMzMvaGVhbHRoegogICAgICAgIG1ldGhvZDogR0VUCiAgICAgIC0gZW5kcG9pbnQ6IGh0dHA6Ly8kaXBhZGRyZXNzOjEzMTMzL3JlYWR5egogICAgICAgIG1ldGhvZDogR0VUCiAgICBjb2xsZWN0aW9uX2ludGVydmFsOiAyMHMKcHJvY2Vzc29yczoKICBiYXRjaDoKICBhdHRyaWJ1dGVzL2luc2VydDoKICAgIGFjdGlvbnM6CiAgICAgIC0ga2V5OiBcImxvY2F0aW9uXCIKICAgICAgICBhY3Rpb246IGluc2VydAogICAgICAgIHZhbHVlOiBcIiRMT0NBVElPTlwiCiAgICAgIC0ga2V5OiBcImhvc3RcIgogICAgICAgIGFjdGlvbjogaW5zZXJ0CiAgICAgICAgdmFsdWU6IFwiJChob3N0bmFtZSlcIgpleHRlbnNpb25zOgogIGhlYWx0aF9jaGVjazoKICAgIGVuZHBvaW50OiAkaXBhZGRyZXNzOjEzMTMzCmV4cG9ydGVyczoKICBvdGxwOgogICAgZW5kcG9pbnQ6ICR7c3RhdGljX2lwX2FkZHJlc3NbIm1kbSJdfTo0MzE3CiAgICB0bHM6CiAgICAgIGluc2VjdXJlOiB0cnVlCnNlcnZpY2U6CiAgZXh0ZW5zaW9uczogW2hlYWx0aF9jaGVja10KICBwaXBlbGluZXM6CiAgICBtZXRyaWNzOgogICAgICByZWNlaXZlcnM6IFtodHRwY2hlY2tdCiAgICAgIHByb2Nlc3NvcnM6IFtiYXRjaCwgYXR0cmlidXRlcy9pbnNlcnRdCiAgICAgIGV4cG9ydGVyczogW290bHBdIgp3cml0ZV9maWxlIGFyb19vdGVsX2NvbGxlY3Rvcl9hcHBjb25maWdfZmlsZW5hbWUgYXJvX290ZWxfY29sbGVjdG9yX2FwcGNvbmZpZ19maWxlIHRydWUKbG9jYWwgLXIgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLW90ZWwtY29sbGVjdG9yLnNlcnZpY2UnCmxvY2FsIC1yIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1tZG0uc2VydmljZQpXYW50cz1tZG0uc2VydmljZQpTdGFydExpbWl0SW50ZXJ2YWxTZWM9MApbU2VydmljZV0KUmVzdGFydFNlYz0xcwpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLW90ZWwtY29sbGVjdG9yCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC1tIDJnIFwKICAtZSBFTlZJUk9OTUVOVCBcCiAgLXYgL2FwcC9vdGVsL2NvbmZpZy55YW1sOi9ldGMvb3RlbGNvbC1jb250cmliL2NvbmZpZy55YW1sOnogXAogICR7T1RFTElNQUdFfQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAlTgpSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTMKU3RhcnRMaW1pdEludGVydmFsPTAKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Jwp3cml0ZV9maWxlIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CmNvbmZpZ3VyZV9zZXJ2aWNlX21kc2QoKXsKbG9jYWwgLW4gcm9sZT0iJDEiCmxvY2FsIC1uIG1vbml0b3JfY29uZmlnX3ZlcnNpb249IiQyIgpsb2cgInN0YXJ0aW5nIgpsb2cgImNvbmZpZ3VyaW5nIG1kc2Qgc2VydmljZSIKdmVyaWZ5X3JvbGUgcm9sZQpsb2NhbCAtciBtZHNkX3NlcnZpY2VfZGlyPSIvZXRjL3N5c3RlbWQvc3lzdGVtL21kc2Quc2VydmljZS5kIgpta2RpciAtcCAiJG1kc2Rfc2VydmljZV9kaXIiCmxvY2FsIC1yIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlbmFtZT0iJG1kc2Rfc2VydmljZV9kaXIvb3ZlcnJpZGUuY29uZiIKbG9jYWwgLXIgbWRzZF9jZXJ0aWZpY2F0ZV9zYW49IiQob3BlbnNzbCB4NTA5IC1pbiAvdmFyL2xpYi93YWFnZW50L01pY3Jvc29mdC5BenVyZS5LZXlWYXVsdC5TdG9yZS9tZHNkLnBlbSAtbm9vdXQgLXN1YmplY3R8c2VkIC1lICdzLy4qQ04gPSAvLycpIgpsb2NhbCAtciBtZHNkX292ZXJyaWRlX2NvbmZfZmlsZT0iW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldCIKd3JpdGVfZmlsZSBtZHNkX292ZXJyaWRlX2NvbmZfZmlsZW5hbWUgbWRzZF9vdmVycmlkZV9jb25mX2ZpbGUgdHJ1ZQpsb2NhbCAtciBkZWZhdWx0X21kc2RfZmlsZW5hbWU9Ii9ldGMvZGVmYXVsdC9tZHNkIgpsb2NhbCAtciBkZWZhdWx0X21kc2RfZmlsZT0iTURTRF9ST0xFX1BSRUZJWD0vdmFyL3J1bi9tZHNkL2RlZmF1bHQKTURTRF9PUFRJT05TPVwiLUEgLWQgLXIgXCRNRFNEX1JPTEVfUFJFRklYXCIKCmV4cG9ydCBNT05JVE9SSU5HX0dDU19FTlZJUk9OTUVOVD0nJE1EU0RFTlZJUk9OTUVOVCcKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0FDQ09VTlQ9JyRSUE1EU0RBQ0NPVU5UJwpleHBvcnQgTU9OSVRPUklOR19HQ1NfUkVHSU9OPSckTE9DQVRJT04nCmV4cG9ydCBNT05JVE9SSU5HX0dDU19BVVRIX0lEX1RZUEU9QXV0aEtleVZhdWx0CmV4cG9ydCBNT05JVE9SSU5HX0dDU19BVVRIX0lEPSckbWRzZF9jZXJ0aWZpY2F0ZV9zYW4nCmV4cG9ydCBNT05JVE9SSU5HX0dDU19OQU1FU1BBQ0U9JyRSUE1EU0ROQU1FU1BBQ0UnCmV4cG9ydCBNT05JVE9SSU5HX0NPTkZJR19WRVJTSU9OPSckbW9uaXRvcl9jb25maWdfdmVyc2lvbicKZXhwb3J0IE1PTklUT1JJTkdfVVNFX0dFTkVWQV9DT05GSUdfU0VSVklDRT10cnVlCmV4cG9ydCBNT05JVE9SSU5HX1RFTkFOVD0nJExPQ0FUSU9OJwpleHBvcnQgTU9OSVRPUklOR19ST0xFPSckcm9sZScKZXhwb3J0IE1PTklUT1JJTkdfUk9MRV9JTlNUQU5DRT1cIiQoaG9zdG5hbWUpXCIKZXhwb3J0IE1PTklUT1JJTkdfRU5WSVJPTk1FTlQ9JyRFTlZJUk9OTUVOVCcKCmV4cG9ydCBNRFNEX01TR1BBQ0tfU09SVF9DT0xVTU5TPVwiMVwiIgp3cml0ZV9maWxlIGRlZmF1bHRfbWRzZF9maWxlbmFtZSBkZWZhdWx0X21kc2RfZmlsZSB0cnVlCn0KY29uZmlndXJlX3NlcnZpY2VfZmx1ZW50Yml0KCl7CmxvY2FsIC1uIGNvbmZfZmlsZT0iJDEiCmxvY2FsIC1uIGltYWdlPSIkMiIKbG9nICJzdGFydGluZyIKbG9nICJDb25maWd1cmluZyBmbHVlbnRiaXQgc2VydmljZSIKbWtkaXIgLXAgL2V0Yy9mbHVlbnRiaXQvCm1rZGlyIC1wIC92YXIvbGliL2ZsdWVudApsb2NhbCAtciBjb25mX2ZpbGVuYW1lPScvZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZicKd3JpdGVfZmlsZSBjb25mX2ZpbGVuYW1lIGNvbmZfZmlsZSB0cnVlCmxvY2FsIC1yIHN5c2NvbmZpZ19maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvZmx1ZW50Yml0Jwpsb2NhbCAtciBzeXNjb25maWdfZmlsZT0iRkxVRU5UQklUSU1BR0U9JyRpbWFnZScKRU5WSVJPTk1FTlQ9JyRFTlZJUk9OTUVOVCciCndyaXRlX2ZpbGUgc3lzY29uZmlnX2ZpbGVuYW1lIHN5c2NvbmZpZ19maWxlIHRydWUKbG9jYWwgLXIgc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9mbHVlbnRiaXQuc2VydmljZScKbG9jYWwgLXIgc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldApTdGFydExpbWl0SW50ZXJ2YWxTZWM9MAoKW1NlcnZpY2VdClJlc3RhcnRTZWM9MXMKRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2ZsdWVudGJpdApFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1zZWN1cml0eS1vcHQgbGFiZWw9ZGlzYWJsZSBcCiAgLS1lbnRyeXBvaW50IC9vcHQvdGQtYWdlbnQtYml0L2Jpbi90ZC1hZ2VudC1iaXQgXAogIC0tbmV0PWhvc3QgXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLWUgRU5WSVJPTk1FTlQgXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLXYgL2V0Yy9mbHVlbnRiaXQvZmx1ZW50Yml0LmNvbmY6L2V0Yy9mbHVlbnRiaXQvZmx1ZW50Yml0LmNvbmYgXAogIC12IC92YXIvbGliL2ZsdWVudDovdmFyL2xpYi9mbHVlbnQ6eiBcCiAgLXYgL3Zhci9sb2cvam91cm5hbDovdmFyL2xvZy9qb3VybmFsOnJvIFwKICAtdiAvZXRjL21hY2hpbmUtaWQ6L2V0Yy9tYWNoaW5lLWlkOnJvIFwKICAke0ZMVUVOVEJJVElNQUdFfSBcCiAgLWMgL2V0Yy9mbHVlbnRiaXQvZmx1ZW50Yml0LmNvbmYKCkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wICVOClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9NQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Jwp3cml0ZV9maWxlIHNlcnZpY2VfZmlsZW5hbWUgc2VydmljZV9maWxlIHRydWUKfQpjb25maWd1cmVfdGltZXJzX21kbV9tZHNkKCl7CmxvY2FsIC1uIHJvbGU9IiQxIgpsb2cgInN0YXJ0aW5nIgp2ZXJpZnlfcm9sZSByb2xlCmxvY2FsIGtleXZhdWx0X3N1ZmZpeCBzZWNyZXRfcHJlZml4CmdldF9rZXl2YXVsdF9zdWZmaXggcm9sZSBrZXl2YXVsdF9zdWZmaXggc2VjcmV0X3ByZWZpeApmb3IgdmFyIGluICJtZHNkIiAibWRtIjtkbwpsb2NhbCBkb3dubG9hZF9jcmVkc19zZXJ2aWNlX2ZpbGVuYW1lPSIvZXRjL3N5c3RlbWQvc3lzdGVtL2Rvd25sb2FkLSR2YXItY3JlZGVudGlhbHMuc2VydmljZSIKbG9jYWwgZG93bmxvYWRfY3JlZHNfc2VydmljZV9maWxlPSJbVW5pdF0KRGVzY3JpcHRpb249UGVyaW9kaWMgJHZhciBjcmVkZW50aWFscyByZWZyZXNoCgpbU2VydmljZV0KVHlwZT1vbmVzaG90CkV4ZWNTdGFydD0vdXNyL2xvY2FsL2Jpbi9kb3dubG9hZC1jcmVkZW50aWFscy5zaCAkdmFyIgp3cml0ZV9maWxlIGRvd25sb2FkX2NyZWRzX3NlcnZpY2VfZmlsZW5hbWUgZG93bmxvYWRfY3JlZHNfc2VydmljZV9maWxlIHRydWUKbG9jYWwgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZW5hbWU9Ii9ldGMvc3lzdGVtZC9zeXN0ZW0vZG93bmxvYWQtJHZhci1jcmVkZW50aWFscy50aW1lciIKbG9jYWwgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZT0iW1VuaXRdCkRlc2NyaXB0aW9uPVBlcmlvZGljICR2YXIgY3JlZGVudGlhbHMgcmVmcmVzaApBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbVGltZXJdCk9uQm9vdFNlYz0wbWluCk9uQ2FsZW5kYXI9MC8xMjowMDowMApBY2N1cmFjeVNlYz01cwoKW0luc3RhbGxdCldhbnRlZEJ5PXRpbWVycy50YXJnZXQiCndyaXRlX2ZpbGUgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZW5hbWUgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZSB0cnVlCmRvbmUKbG9jYWwgLXIgZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGVuYW1lPSIvdXNyL2xvY2FsL2Jpbi9kb3dubG9hZC1jcmVkZW50aWFscy5zaCIKbG9jYWwgLXIgZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGU9IiMhL2Jpbi9iYXNoCnNldCAtZXUKCkNPTVBPTkVOVD1cJDEKZWNobyBcIkRvd25sb2FkIFwkQ09NUE9ORU5UIGNyZWRlbnRpYWxzXCIKClRFTVBfRElSPVwiXCQobWt0ZW1wIC1kKVwiCmV4cG9ydCBBWlVSRV9DT05GSUdfRElSPVwiXCQobWt0ZW1wIC1kKVwiCgplY2hvIFwiTG9nZ2luZyBpbnRvIEF6dXJlLi4uXCIKUkVUUklFUz0zCndoaWxlIFtbIFwkUkVUUklFUyAtZ3QgMCBdXTsgZG8KICAgIGlmIGF6IGxvZ2luIC1pIC0tYWxsb3ctbm8tc3Vic2NyaXB0aW9ucwogICAgdGhlbgogICAgICAgIGVjaG8gXCJheiBsb2dpbiBzdWNjZXNzZnVsXCIKICAgICAgICBicmVhawogICAgZWxzZQogICAgICAgIGVjaG8gXCJheiBsb2dpbiBmYWlsZWQuIFJldHJ5aW5nLi4uXCIKICAgICAgICBsZXQgUkVUUklFUy09MQogICAgICAgIHNsZWVwIDUKICAgIGZpCmRvbmUKCnRyYXAgXCJjbGVhbnVwXCIgRVhJVAoKY2xlYW51cCgpIHsKICBheiBsb2dvdXQKICBbWyBcJFRFTVBfRElSID1+IC90bXAvLisgXV0gJiYgcm0gLXJmIFwkVEVNUF9ESVIKICBbWyBcJEFaVVJFX0NPTkZJR19ESVIgPX4gL3RtcC8uKyBdXSAmJiBybSAtcmYgXCRBWlVSRV9DT05GSUdfRElSCn0KCmlmIFtbIFwkQ09NUE9ORU5UID0gXCJtZG1cIiBdXTsgdGhlbgogIENVUlJFTlRfQ0VSVF9GSUxFPVwiL2V0Yy9tZG0ucGVtXCIKZWxpZiBbWyBcJENPTVBPTkVOVCA9IFwibWRzZFwiIF1dOyB0aGVuCiAgQ1VSUkVOVF9DRVJUX0ZJTEU9XCIvdmFyL2xpYi93YWFnZW50L01pY3Jvc29mdC5BenVyZS5LZXlWYXVsdC5TdG9yZS9tZHNkLnBlbVwiCmVsc2UKICBlY2hvIEludmFsaWQgdXNhZ2UgJiYgZXhpdCAxCmZpCgpTRUNSRVRfTkFNRT1cIiRzZWNyZXRfcHJlZml4LVwke0NPTVBPTkVOVH1cIgpORVdfQ0VSVF9GSUxFPVwiXCRURU1QX0RJUi9cJENPTVBPTkVOVC5wZW1cIgpmb3IgYXR0ZW1wdCBpbiB7MS4uNX07IGRvCiAgYXoga2V5dmF1bHQgXAogICAgc2VjcmV0IFwKICAgIGRvd25sb2FkIFwKICAgIC0tZmlsZSBcIlwkTkVXX0NFUlRfRklMRVwiIFwKICAgIC0taWQgXCJodHRwczovLyRLRVlWQVVMVFBSRUZJWC0ka2V5dmF1bHRfc3VmZml4LiRLRVlWQVVMVEROU1NVRkZJWC9zZWNyZXRzL1wkU0VDUkVUX05BTUVcIiBcCiAgICAmJiBicmVhawogIGlmIFtbIFwkYXR0ZW1wdCAtbHQgNSBdXTsgdGhlbiBzbGVlcCAxMDsgZWxzZSBleGl0IDE7IGZpCmRvbmUKCmlmIFsgLWYgXCRORVdfQ0VSVF9GSUxFIF07IHRoZW4KICBpZiBbWyBcJENPTVBPTkVOVCA9IFwibWRzZFwiIF1dOyB0aGVuCiAgICBjaG93biBzeXNsb2c6c3lzbG9nIFwkTkVXX0NFUlRfRklMRQogIGVsc2UKICAgIHNlZCAtaSAtbmUgJzEsL0VORCBDRVJUSUZJQ0FURS8gcCcgXCRORVdfQ0VSVF9GSUxFCiAgZmkKCiAgbmV3X2NlcnRfc249XCJcJChvcGVuc3NsIHg1MDkgLWluIFwiXCRORVdfQ0VSVF9GSUxFXCIgLW5vb3V0IC1zZXJpYWwgfCBhd2sgLUY9ICd7cHJpbnQgXCQyfScpXCIKICBjdXJyZW50X2NlcnRfc249XCJcJChvcGVuc3NsIHg1MDkgLWluIFwiXCRDVVJSRU5UX0NFUlRfRklMRVwiIC1ub291dCAtc2VyaWFsIHwgYXdrIC1GPSAne3ByaW50IFwkMn0nKVwiCiAgaWYgW1sgISAteiBcJG5ld19jZXJ0X3NuIF1dICYmIFtbIFwkbmV3X2NlcnRfc24gIT0gXCJcJGN1cnJlbnRfY2VydF9zblwiIF1dOyB0aGVuCiAgICBlY2hvIHVwZGF0aW5nIGNlcnRpZmljYXRlIGZvciBcJENPTVBPTkVOVAogICAgY2htb2QgMDYwMCBcJE5FV19DRVJUX0ZJTEUKICAgIG12IFwkTkVXX0NFUlRfRklMRSBcJENVUlJFTlRfQ0VSVF9GSUxFCiAgZmkKZWxzZQogIGVjaG8gRmFpbGVkIHRvIHJlZnJlc2ggY2VydGlmaWNhdGUgZm9yIFwkQ09NUE9ORU5UICYmIGV4aXQgMQpmaSIKd3JpdGVfZmlsZSBkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZW5hbWUgZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGUgdHJ1ZQpjaG1vZCB1K3ggL3Vzci9sb2NhbC9iaW4vZG93bmxvYWQtY3JlZGVudGlhbHMuc2gKJGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlbmFtZSBtZHNkJgp3YWl0ICIkISIKJGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlbmFtZSBtZG0mCndhaXQgIiQhIgpsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHNfc2VydmljZV9maWxlbmFtZT0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS93YXRjaC1tZG0tY3JlZGVudGlhbHMuc2VydmljZSIKbG9jYWwgLXIgd2F0Y2hfbWRtX2NyZWRzX3NlcnZpY2VfZmlsZT0iW1VuaXRdCkRlc2NyaXB0aW9uPVdhdGNoIGZvciBjaGFuZ2VzIGluIG1kbS5wZW0gYW5kIHJlc3RhcnRzIHRoZSBtZG0gc2VydmljZQoKW1NlcnZpY2VdClR5cGU9b25lc2hvdApFeGVjU3RhcnQ9L3Vzci9iaW4vc3lzdGVtY3RsIHJlc3RhcnQgbWRtLnNlcnZpY2UKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCIKd3JpdGVfZmlsZSB3YXRjaF9tZG1fY3JlZHNfc2VydmljZV9maWxlbmFtZSB3YXRjaF9tZG1fY3JlZHNfc2VydmljZV9maWxlIHRydWUKbG9jYWwgLXIgd2F0Y2hfbWRtX2NyZWRzX3BhdGhfZmlsZW5hbWU9Jy91c3IvbGliL3N5c3RlbWQvc3lzdGVtL3dhdGNoLW1kbS1jcmVkZW50aWFscy5wYXRoJwpsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHNfcGF0aF9maWxlPSdbUGF0aF0KUGF0aE1vZGlmaWVkPS9ldGMvbWRtLnBlbQoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Jwp3cml0ZV9maWxlIHdhdGNoX21kbV9jcmVkc19wYXRoX2ZpbGVuYW1lIHdhdGNoX21kbV9jcmVkc19wYXRoX2ZpbGUgdHJ1ZQpsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHM9J3dhdGNoLW1kbS1jcmVkZW50aWFscy5wYXRoJwpzeXN0ZW1jdGwgZW5hYmxlIC0tbm93ICIkd2F0Y2hfbWRtX2NyZWRzInx8YWJvcnQgImZhaWxlZCB0byBlbmFibGUgYW5kIHN0YXJ0ICR3YXRjaF9tZG1fY3JlZHMiCn0KY29uZmlndXJlX3NlcnZpY2VfbWRtKCl7CmxvY2FsIC1uIHJvbGU9IiQxIgpsb2NhbCAtbiBpbWFnZT0iJDIiCmxvY2FsIC1uIGlwYWRkcmVzcz0iJDMiCmxvZyAic3RhcnRpbmciCmxvZyAiQ29uZmlndXJpbmcgbWRtIHNlcnZpY2UiCnZlcmlmeV9yb2xlIHJvbGUKbG9jYWwgLXIgc3lzY29uZmlnX21kbV9maWxlbmFtZT0iL2V0Yy9zeXNjb25maWcvbWRtIgpsb2NhbCAtciBzeXNjb25maWdfbWRtX2ZpbGU9Ik1ETUZST05URU5EVVJMPSckTURNRlJPTlRFTkRVUkwnCk1ETUlNQUdFPSckaW1hZ2UnCk1ETVNPVVJDRUVOVklST05NRU5UPSckTE9DQVRJT04nCk1ETVNPVVJDRVJPTEU9JyRyb2xlJwpNRE1TT1VSQ0VST0xFSU5TVEFOQ0U9XCIkKGhvc3RuYW1lKVwiCk1ETV9JTlBVVD1zdGF0c2RfbG9jYWwsb3RscF9ncnBjCk1ETV9OQU1FU1BBQ0U9J09URUwnCk1ETV9BQ0NPVU5UPSdBenVyZVJlZEhhdE9wZW5TaGlmdFJQJwpQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnIgp3cml0ZV9maWxlIHN5c2NvbmZpZ19tZG1fZmlsZW5hbWUgc3lzY29uZmlnX21kbV9maWxlIHRydWUKbWtkaXIgLXAgL3Zhci9ldHcKbG9jYWwgLXIgbWRtX3NlcnZpY2VfZmlsZW5hbWU9Ii9ldGMvc3lzdGVtZC9zeXN0ZW0vbWRtLnNlcnZpY2UiCmxvY2FsIC1yIG1kbV9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL21kbQpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1lbnRyeXBvaW50IC91c3Ivc2Jpbi9NZXRyaWNzRXh0ZW5zaW9uIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLS1uZXR3b3JrPSR7UE9ETUFOX05FVFdPUkt9IFwKICAtLWlwICR7SVBBRERSRVNTfSBcCiAgLW0gMmcgXAogIC12IC9ldGMvbWRtLnBlbTovZXRjL21kbS5wZW0gXAogIC12IC92YXIvZXR3Oi92YXIvZXR3OnogXAogICR7TURNSU1BR0V9IFwKICAtSW5wdXQgJHtNRE1fSU5QVVR9IFwKICAtTWV0cmljTmFtZXNwYWNlICR7TURNX05BTUVTUEFDRX0gXAogIC1Nb25pdG9yaW5nQWNjb3VudCAke01ETV9BQ0NPVU5UfSBcCiAgLUNlcnRGaWxlIC9ldGMvbWRtLnBlbSBcCiAgLUZyb250RW5kVXJsICR7TURNRlJPTlRFTkRVUkx9IFwKICAtTG9nZ2VyIENvbnNvbGUgXAogIC1Mb2dMZXZlbCBXYXJuaW5nIFwKICAtUHJpdmF0ZUtleUZpbGUgL2V0Yy9tZG0ucGVtIFwKICAtU291cmNlRW52aXJvbm1lbnQgJHtNRE1TT1VSQ0VFTlZJUk9OTUVOVH0gXAogIC1Tb3VyY2VSb2xlICR7TURNU09VUkNFUk9MRX0gXAogIC1Tb3VyY2VSb2xlSW5zdGFuY2UgJHtNRE1TT1VSQ0VST0xFSU5TVEFOQ0V9CkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wICVOClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Jwp3cml0ZV9maWxlIG1kbV9zZXJ2aWNlX2ZpbGVuYW1lIG1kbV9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CmNvbmZpZ3VyZV92bXNzX2Fyb19zZXJ2aWNlcygpewpsb2NhbCAtbiByPSIkMSIKbG9jYWwgLW4gaW1hZ2VzPSIkMiIKbG9jYWwgLW4gY29uZmlncz0iJDMiCmxvZyAic3RhcnRpbmciCnZlcmlmeV9yb2xlICIkMSIKaWYgWyAiJHIiID09ICIkcm9sZV9nYXRld2F5IiBdO3RoZW4KY29uZmlndXJlX3NlcnZpY2VfYXJvX2dhdGV3YXkgIiR7aW1hZ2VzWyJycCJdfSIgIiQxIiAiJHtjb25maWdzWyJnYXRld2F5X2NvbmZpZyJdfSIgIiR7Y29uZmlnc1sic3RhdGljX2lwX2FkZHJlc3MiXX1bZ2F0ZXdheV0iCmNvbmZpZ3VyZV9jZXJ0c19nYXRld2F5CmVsaWYgWyAiJHIiID09ICIkcm9sZV9ycCIgXTt0aGVuCmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19ycCAiJHtpbWFnZXNbInJwIl19IiBcCiIkMSIgXAoiJHtjb25maWdzW3JwX2NvbmZpZ119IiBcCiIke2NvbmZpZ3Nbc3RhdGljX2lwX2FkZHJlc3NdfVtycF0iCmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19taW1vX2FjdHVhdG9yICIke2ltYWdlc1tycF19IiBcCiIke2NvbmZpZ3NbcnBfY29uZmlnXX0iIFwKIiR7Y29uZmlnc1tzdGF0aWNfaXBfYWRkcmVzc119W21pbW9fYWN0dWF0b3JdIgpjb25maWd1cmVfc2VydmljZV9hcm9fbWltb19zY2hlZHVsZXIgIiR7aW1hZ2VzW3JwXX0iIFwKIiR7Y29uZmlnc1tycF9jb25maWddfSIgXAoiJHtjb25maWdzW3N0YXRpY19pcF9hZGRyZXNzXX1bbWltb19zY2hlZHVsZXJdIgpjb25maWd1cmVfc2VydmljZV9hcm9fbW9uaXRvciAiJHtpbWFnZXNbcnBdfSIgIiR7Y29uZmlnc1tzdGF0aWNfaXBfYWRkcmVzc119W21vbml0b3JdIgpjb25maWd1cmVfc2VydmljZV9hcm9fcG9ydGFsICIke2ltYWdlc1tycF19IiAiJHtjb25maWdzW3N0YXRpY19pcF9hZGRyZXNzXX1bcG9ydGFsXSIKY29uZmlndXJlX3NlcnZpY2VfYXJvX21pc2UgIiR7aW1hZ2VzW21pc2VdfSIgIiR7Y29uZmlnc1tzdGF0aWNfaXBfYWRkcmVzc119W21pc2VdIgpjb25maWd1cmVfc2VydmljZV9hcm9fb3RlbF9jb2xsZWN0b3IgIiR7aW1hZ2VzW290ZWxdfSIgXAoiJHtjb25maWdzW3N0YXRpY19pcF9hZGRyZXNzXX0iIFwKIiR7Y29uZmlnc1sic3RhdGljX2lwX2FkZHJlc3MiXX1bb3RlbF9jb2xsZWN0b3JdIgpjb25maWd1cmVfY2VydHNfcnAKZmkKY29uZmlndXJlX3NlcnZpY2VfZmx1ZW50Yml0ICIke2NvbmZpZ3NbZmx1ZW50Yml0XX0iICIke2ltYWdlc1tmbHVlbnRiaXRdfSIKY29uZmlndXJlX3RpbWVyc19tZG1fbWRzZCAiJDEiCmNvbmZpZ3VyZV9zZXJ2aWNlX21kbSAiJDEiIFwKIiR7aW1hZ2VzW21kbV19IiBcCiIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19W21kbV0iCmNvbmZpZ3VyZV9zZXJ2aWNlX21kc2QgIiQxIiAiJHtjb25maWdzW21kc2RdfSIKcnVuX2F6c2VjZF9jb25maWdfc2Nhbgp9CnV0aWxfY29tbW9uPSJ1dGlsLWNvbW1vbi5zaCIKaWYgWyAtZiAiJHV0aWxfY29tbW9uIiBdO3RoZW4Kc291cmNlICIkdXRpbF9jb21tb24iCmZpCnV0aWxfc3lzdGVtPSJ1dGlsLXN5c3RlbS5zaCIKaWYgWyAtZiAiJHV0aWxfc3lzdGVtIiBdO3RoZW4Kc291cmNlICIkdXRpbF9zeXN0ZW0iCmZpCmdldF9ib290X2Rldl91dWlkKCl7CmxvY2FsIC1uIGJvb3RfZGV2X3V1aWQ9IiQxIgpib290X2Rldj0iJChkZiAvYm9vdC98dGFpbCAtMXxjdXQgLWQnICcgLWYxKSIKcm9vdF9kZXY9IiQoZGYgL3x0YWlsIC0xfGN1dCAtZCcgJyAtZjEpIgpib290X2Rldl91dWlkPSIkcm9vdF9kZXYiCmlmIFsgIiRib290X2RldiIgIT0gIiRyb290X2RldiIgXTt0aGVuCmJvb3RfZGV2X3V1aWQ9ImJvb3Q9VVVJRD0kKGJsa2lkICIkYm9vdF9kZXYiIC1zIFVVSUQgLW8gdmFsdWUpIgpmaQp9CmZpcHNfdmVyaWZ5KCl7CmZpcHNfZW5hYmxlZF9wcm9jPSIkKGNhdCAvcHJvYy9zeXMvY3J5cHRvL2ZpcHNfZW5hYmxlZCkiCmZpcHNfZW5hYmxlZF9zeXNjdGw9IiQoc3lzY3RsIC1uIGNyeXB0by5maXBzX2VuYWJsZWQpIgppZiBbICIkZmlwc19lbmFibGVkX3Byb2MiIC1uZSAxIF18fFsgIiRmaXBzX2VuYWJsZWRfc3lzY3RsIiAtbmUgMSBdO3RoZW4KYWJvcnQgIkZJUFMgbW9kZSBpcyBkaXNhYmxlZCIKZmkKbG9nICJGSVBTIG1vZGUgaXMgZW5hYmxlZCIKfQpmaXBzX2NvbmZpZ3VyZSgpewpsb2NhbCBib290X3V1aWQKZ2V0X2Jvb3RfZGV2X3V1aWQgYm9vdF91dWlkCmxvY2FsIGdydWIyX2VudgppZiBncnViMl9lbnY9IiQoZ3J1YjItZWRpdGVudiAtIGxpc3R8Z3JlcCBrZXJuZWxvcHRzKSI7dGhlbgpncnViMi1lZGl0ZW52IC0gc2V0ICIkZ3J1YjJfZW52IGZpcHM9MSAkYm9vdF91dWlkIgplbHNlCmdydWJieSAtLXVwZGF0ZS1rZXJuZWw9QUxMIC0tYXJncz0iZmlwcz0xICRib290X3V1aWQiCmZpCn0KY29uZmlndXJlX3NzaGQoKXsKbG9nICJzdGFydGluZyIKbG9jYWwgLXIgc3NoZF9jb25maWc9Ii9ldGMvc3NoL3NzaGRfY29uZmlnIgpsb2cgIkVkaXRpbmcgJHNzaGRfY29uZmlnIHRvIGFsbG93IHBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uIgpzZWQgLWkgJ3MvUGFzc3dvcmRBdXRoZW50aWNhdGlvbiBuby9QYXNzd29yZEF1dGhlbnRpY2F0aW9uIHllcy9nJyAiJHNzaGRfY29uZmlnIgpzeXN0ZW1jdGwgcmVsb2FkIHNzaGQuc2VydmljZXx8YWJvcnQgInNzaGQgZmFpbGVkIHRvIHJlbG9hZCIKfQpjb25maWd1cmVfbG9ncm90YXRlKCl7CmxvY2FsIC1uIGRyb3Bpbl9maWxlcz0iJHsxOi1lbXB0eV9zdHJ9Igpsb2cgInN0YXJ0aW5nIgpsb2NhbCAtciBsb2dyb3RhdGVfY29uZl9maWxlbmFtZT0nL2V0Yy9sb2dyb3RhdGUuY29uZicKbG9jYWwgLXIgbG9ncm90YXRlX2NvbmZfZmlsZT0nIyBzZWUgIm1hbiBsb2dyb3RhdGUiIGZvciBkZXRhaWxzCiMgcm90YXRlIGxvZyBmaWxlcyB3ZWVrbHkKd2Vla2x5CgojIGtlZXAgMiB3ZWVrcyB3b3J0aCBvZiBiYWNrbG9ncwpyb3RhdGUgMgoKIyBjcmVhdGUgbmV3IChlbXB0eSkgbG9nIGZpbGVzIGFmdGVyIHJvdGF0aW5nIG9sZCBvbmVzCmNyZWF0ZQoKIyB1c2UgZGF0ZSBhcyBhIHN1ZmZpeCBvZiB0aGUgcm90YXRlZCBmaWxlCmRhdGVleHQKCiMgdW5jb21tZW50IHRoaXMgaWYgeW91IHdhbnQgeW91ciBsb2cgZmlsZXMgY29tcHJlc3NlZApjb21wcmVzcwoKIyBSUE0gcGFja2FnZXMgZHJvcCBsb2cgcm90YXRpb24gaW5mb3JtYXRpb24gaW50byB0aGlzIGRpcmVjdG9yeQppbmNsdWRlIC9ldGMvbG9ncm90YXRlLmQKCiMgbm8gcGFja2FnZXMgb3duIHd0bXAgYW5kIGJ0bXAgLS0gd2Ugd2lsbCByb3RhdGUgdGhlbSBoZXJlCi92YXIvbG9nL3d0bXAgewogICAgbW9udGhseQogICAgY3JlYXRlIDA2NjQgcm9vdCB1dG1wCiAgICAgICAgbWluc2l6ZSAxTQogICAgcm90YXRlIDEKfQoKL3Zhci9sb2cvYnRtcCB7CiAgICBtaXNzaW5nb2sKICAgIG1vbnRobHkKICAgIGNyZWF0ZSAwNjAwIHJvb3QgdXRtcAogICAgcm90YXRlIDEKfScKd3JpdGVfZmlsZSBsb2dyb3RhdGVfY29uZl9maWxlbmFtZSBsb2dyb3RhdGVfY29uZl9maWxlIHRydWUKaWYgWyAtbiAiJHtkcm9waW5fZmlsZXNbKl19IiBdO3RoZW4KbG9jYWwgLXIgbG9ncm90YXRlX2Q9Ii9ldGMvbG9ncm90YXRlLmQiCmxvZyAiV3JpdGluZyBsb2dyb3RhdGUgZmlsZXMgdG8gJGxvZ3JvdGF0ZV9kIgpmb3IgZHJvcGluX25hbWUgaW4gIiR7IWRyb3Bpbl9maWxlc1tAXX0iO2RvCmxvY2FsIC1yIGRyb3Bpbl9maWxlbmFtZT0iJGxvZ3JvdGF0ZV9kLyRkcm9waW5fbmFtZSIKbG9jYWwgLXIgZHJvcGluX2ZpbGU9IiR7ZHJvcGluX2ZpbGVzWyIkZHJvcGluX25hbWUiXX0iCndyaXRlX2ZpbGUgZHJvcGluX2ZpbGVuYW1lIGRyb3Bpbl9maWxlIHRydWUKZG9uZQpmaQp9CnB1bGxfY29udGFpbmVyX2ltYWdlcygpewpsb2NhbCAtbiBwdWxsX2ltYWdlcz0iJDEiCmxvY2FsIC1uIHJlZ2lzdHJ5X2NvbmY9IiR7MjotZW1wdHlfc3RyfSIKbG9nICJzdGFydGluZyIKbG9jYWwgLWlyIHJldHJ5X3RpbWU9MzAKY21kPSgKYXoKbG9naW4KLWkKLS1hbGxvdy1uby1zdWJzY3JpcHRpb25zKQpsb2cgIlJ1bm5pbmcgYXogbG9naW4gd2l0aCByZXRyaWVzIgpyZXRyeSBjbWQgcmV0cnlfdGltZQpta2RpciAtcCAvZXRjL2NvbnRhaW5lcnMvCm1rZGlyIC1wIC9yb290Ly5kb2NrZXIKdG91Y2ggL2V0Yy9jb250YWluZXJzL25vZG9ja2VyClsgLW4gIiRyZWdpc3RyeV9jb25mIiBdJiZ3cml0ZV9maWxlIFJFR0lTVFJZX0FVVEhfRklMRSByZWdpc3RyeV9jb25mICJ0cnVlIgpleHBvcnQgUkVHSVNUUllfQVVUSF9GSUxFPSIvcm9vdC8uZG9ja2VyL2NvbmZpZy5qc29uIgpfKCl7CmxvY2FsIC1yIGFjcj0iJDEiCmxvY2FsIC1yIHJlZ2lzdHJ5PSIkMiIKbG9jYWwgLXIgeHRyYWNlX2luaXRpYWxfc2V0PSIkKHh0cmFjZV9pc19zZXQpIgp4dHJhY2VfdG9nZ2xlIFhUUkFDRV9VTlNFVApsb2cgImxvZ2dpbmcgaW50byBjb250YWluZXIgcmVnaXN0cnkgJDIiCmF6IGFjciBsb2dpbiBcCi0tbmFtZSAiJGFjciIgXAotLWV4cG9zZS10b2tlbiBcCi0tb3V0cHV0IHRzdiBcCi0tcXVlcnkgYWNjZXNzVG9rZW58cG9kbWFuIGxvZ2luIFwKLS11c2VybmFtZSAiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIiBcCi0tcGFzc3dvcmQtc3RkaW4gXAoiJHJlZ2lzdHJ5Igpsb2NhbCAtaXIgc3RhdHVzPSQ/Cnh0cmFjZV90b2dnbGUgIiR4dHJhY2VfaW5pdGlhbF9zZXQiCnJldHVybiAiJHN0YXR1cyIKfQpsb2NhbCAtciBhY3JfbmFtZT0iJHtBQ1JSRVNPVVJDRUlEIyMqL30iCmxvY2FsIC1yIHJlZ2lzdHJ5X25hbWU9IiRhY3JfbmFtZS5henVyZWNyLmlvIgpjbWQ9KF8gIiRhY3JfbmFtZSIgIiRyZWdpc3RyeV9uYW1lIikKcmV0cnkgY21kIHJldHJ5X3RpbWUKZm9yIGkgaW4gJHtwdWxsX2ltYWdlc1tAXX07ZG8KbG9jYWwgLW4gaW1hZ2U9IiRpIgpjbWQ9KApwb2RtYW4KcHVsbAoiJGltYWdlIikKbG9nICJQdWxsaW5nIGltYWdlICRpbWFnZSB3aXRoIHJldHJpZXMgbm93IgpyZXRyeSBjbWQgcmV0cnlfdGltZQpkb25lCmNtZD0oCmF6CmxvZ291dCkKbG9nICJSdW5uaW5nIGF6IGxvZ291dCB3aXRoIHJldHJpZXMiCnJldHJ5IGNtZCByZXRyeV90aW1lCn0KY29uZmlndXJlX2NhX2J1bmRsZSgpewpsb2cgInN0YXJ0aW5nIgpsb2NhbCAtciB4dHJhY2VfaW5pdGlhbF92YWx1ZT0iJCh4dHJhY2VfaXNfc2V0KSIKeHRyYWNlX3RvZ2dsZSBYVFJBQ0VfVU5TRVQKbG9jYWwgLXIgc3NsX2NlcnRzX2Jhc2VkaXI9Ii91c3IvbGliL3NzbC9jZXJ0cyIKbWtkaXIgLXAgIiRzc2xfY2VydHNfYmFzZWRpciIKY2FfYnVuZGxlPSIvZXRjL3BraS90bHMvY2VydHMvY2EtYnVuZGxlLmNydCIKbG9nICJDb25maWd1cmluZyAkY2FfYnVuZGxlIgpjc3BsaXQgLWYgIiRzc2xfY2VydHNfYmFzZWRpci9jZXJ0LSIgLWIgJTAzZC5wZW0gIiRjYV9idW5kbGUiIC9eJC8xICJ7Kn0iIDE+L2Rldi9udWxsCmNfcmVoYXNoICIkc3NsX2NlcnRzX2Jhc2VkaXIiCnh0cmFjZV90b2dnbGUgIiR4dHJhY2VfaW5pdGlhbF92YWx1ZSIKfQpjb25maWd1cmVfY2VydHNfcnAoKXsKbG9nICJzdGFydGluZyIKdmVyaWZ5X3JvbGUgcm9sZV9ycApsb2NhbCAtciB4dHJhY2VfaW5pdGlhbF92YWx1ZT0iJCh4dHJhY2VfaXNfc2V0KSIKeHRyYWNlX3RvZ2dsZSBYVFJBQ0VfVU5TRVQKbG9jYWwgLXIgcnBfY2VydHNfYmFzZWRpcj0iL2V0Yy9hcm8tcnAiCm1rZGlyIC1wICIkcnBfY2VydHNfYmFzZWRpciIKYmFzZTY0IC1kIDw8PCIkQURNSU5BUElDQUJVTkRMRSIgPiIkcnBfY2VydHNfYmFzZWRpci9hZG1pbi1jYS1idW5kbGUucGVtIgppZiBbWyAtbiAkQVJNQVBJQ0FCVU5ETEUgXV07dGhlbgpiYXNlNjQgLWQgPDw8IiRBUk1BUElDQUJVTkRMRSIgPiIkcnBfY2VydHNfYmFzZWRpci9hcm0tY2EtYnVuZGxlLnBlbSIKZmkKY2hvd24gLVIgMTAwMDoxMDAwICIkcnBfY2VydHNfYmFzZWRpciIKeHRyYWNlX3RvZ2dsZSAiJHh0cmFjZV9pbml0aWFsX3ZhbHVlIgpjb25maWd1cmVfY2FfYnVuZGxlCn0KY29uZmlndXJlX2NlcnRzX2dhdGV3YXkoKXsKbG9nICJzdGFydGluZyIKdmVyaWZ5X3JvbGUgcm9sZV9nYXRld2F5CmNvbmZpZ3VyZV9jYV9idW5kbGUKfQpjb25maWd1cmVfY2VydHNfZGV2cHJveHkoKXsKbG9nICJzdGFydGluZyIKdmVyaWZ5X3JvbGUgcm9sZV9kZXZwcm94eQp4dHJhY2VfaW5pdGlhbF92YWx1ZT0iJCh4dHJhY2VfaXNfc2V0KSIKeHRyYWNlX3RvZ2dsZSBYVFJBQ0VfVU5TRVQKbG9jYWwgLXIgcHJveHlfY2VydHNfYmFzZWRpcj0iL2V0Yy9wcm94eSIKbWtkaXIgLXAgIiRwcm94eV9jZXJ0c19iYXNlZGlyIgpiYXNlNjQgLWQgPDw8IiRQUk9YWUNFUlQiID4iJHByb3h5X2NlcnRzX2Jhc2VkaXIvcHJveHkuY3J0IgpiYXNlNjQgLWQgPDw8IiRQUk9YWUtFWSIgPiIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS5rZXkiCmJhc2U2NCAtZCA8PDwiJFBST1hZQ0xJRU5UQ0VSVCIgPiIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS1jbGllbnQuY3J0IgpjaG93biAtUiAxMDAwOjEwMDAgL2V0Yy9wcm94eQpjaG1vZCAwNjAwICIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS5rZXkiCnh0cmFjZV90b2dnbGUgIiR4dHJhY2VfaW5pdGlhbF92YWx1ZSIKfQpjb25maWd1cmVfYXpzZWNkX3NjYW4oKXsKbG9nICJzdGFydGluZyIKbG9jYWwgLXIgbm9kZXNjYW5fYWdlbnRfZmlsZW5hbWU9Ii9ldGMvZGVmYXVsdC92c2Etbm9kZXNjYW4tYWdlbnQuY29uZmlnIgpsb2NhbCAtciBub2Rlc2Nhbl9hZ2VudF9maWxlPSJ7CiAgICBcIk5pY2VcIjogMTksCiAgICBcIlRpbWVvdXRcIjogMTA4MDAsCiAgICBcIkNsaWVudElkXCI6IFwiXCIsCiAgICBcIlRlbmFudElkXCI6ICRBWlVSRVNFQ1BBQ0tWU0FURU5BTlRJRCwKICAgIFwiUXVhbHlzU3RvcmVCYXNlVXJsXCI6ICRBWlVSRVNFQ1BBQ0tRVUFMWVNVUkwsCiAgICBcIlByb2Nlc3NUaW1lb3V0XCI6IDMwMCwKICAgIFwiQ29tbWFuZERlbGF5XCI6IDAKICB9Igp3cml0ZV9maWxlIG5vZGVzY2FuX2FnZW50X2ZpbGVuYW1lIG5vZGVzY2FuX2FnZW50X2ZpbGUgdHJ1ZQp9CnJ1bl9henNlY2RfY29uZmlnX3NjYW4oKXsKbG9nICJzdGFydGluZyIKY29uZmlndXJlX2F6c2VjZF9zY2FuCmxvY2FsIC1hciBjb25maWdzPSgKImJhc2VsaW5lIgoiY2xhbWF2Igoic29mdHdhcmUiKQpsb2cgIlNjYW5uaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2l0aCBhenNlY2QgJHtjb25maWdzWypdfSIKZm9yIHNjYW4gaW4gJHtjb25maWdzW0BdfTtkbwpsb2cgIlNjYW5uaW5nIGNvbmZpZyBmaWxlICRzY2FuIG5vdyIKL3Vzci9sb2NhbC9iaW4vYXpzZWNkIGNvbmZpZyAtcyAiJHNjYW4iIC1kIFAxRApkb25lCn0KY3JlYXRlX3JlcXVpcmVkX2RpcnMoKXsKY3JlYXRlX2RpcnM9KAovdmFyL2xvZy9qb3VybmFsCi92YXIvbGliL3dhYWdlbnQvTWljcm9zb2Z0LkF6dXJlLktleVZhdWx0LlN0b3JlCi92YXIvb3B0L21pY3Jvc29mdC9saW51eG1vbmFnZW50KQpmb3IgZCBpbiAke2NyZWF0ZV9kaXJzW0BdfTtkbwpsb2cgIkNyZWF0aW5nIGRpcmVjdG9yeSAkZCIKbWtkaXIgLXAgIiRkInx8YWJvcnQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICRkIgpkb25lCn0KZmlyZXdhbGxkX2NvbmZpZ3VyZV9iYWNrZW5kKCl7CmxvZyAic3RhcnRpbmciCmxvZyAiQ2hhbmdpbmcgZmlyZXdhbGxkIGJhY2tlbmQgdG8gaXB0YWJsZXMiCmNvbmZfZmlsZT0iL2V0Yy9maXJld2FsbGQvZmlyZXdhbGxkLmNvbmYiCnNlZCAtaSAncy9GaXJld2FsbEJhY2tlbmQ9bmZ0YWJsZXMvRmlyZXdhbGxCYWNrZW5kPWlwdGFibGVzL2cnICIkY29uZl9maWxlIgp9CmZpcmV3YWxsZF9jb25maWd1cmUoKXsKbG9jYWwgLW4gcG9ydHM9IiQxIgpsb2cgInN0YXJ0aW5nIgpmaXJld2FsbGRfY29uZmlndXJlX2JhY2tlbmQKbG9jYWwgLXJhIHNlcnZpY2U9KAoiZmlyZXdhbGxkIikKZW5hYmxlX3NlcnZpY2VzIHNlcnZpY2UKbG9nICJFbmFibGluZyBwb3J0cyAke3BvcnRzWypdfSBvbiBkZWZhdWx0IGZpcmV3YWxsZCB6b25lIgpmb3IgcG9ydCBpbiAke3BvcnRzW0BdfTtkbwpsb2cgIkVuYWJsaW5nIHBvcnQgJHBvcnQgbm93IgpmaXJld2FsbC1jbWQgIi0tYWRkLXBvcnQ9JHBvcnQiIFwKLS1wZXJtYW5lbnQKZG9uZQpsb2cgIldyaXRpbmcgcnVudGltZSBjb25maWcgdG8gcGVybWFuZW50IGNvbmZpZyIKZmlyZXdhbGwtY21kIC0tcnVudGltZS10by1wZXJtYW5lbnQKfQp1dGlsX2NvbW1vbj0idXRpbC1jb21tb24uc2giCmlmIFsgLWYgIiR1dGlsX2NvbW1vbiIgXTt0aGVuCnNvdXJjZSAiJHV0aWxfY29tbW9uIgpmaQpzZXQgLW8gZXJyZXhpdCBcCi1vIHBpcGVmYWlsIFwKLW8gbm91bnNldAptYWluKCl7CmxvY2FsIC1yaSByZXRyeV93YWl0X3RpbWU9MzAKY3JlYXRlX3JlcXVpcmVkX2RpcnMKY29uZmlndXJlX3NzaGQKbG9jYWwgLXJpIHBrZ19yZXRyeV9jb3VudD02MApjb25maWd1cmVfcnBtX3JlcG9zIHJldHJ5X3dhaXRfdGltZSBcCiIkcGtnX3JldHJ5X2NvdW50Igpsb2NhbCAtYXIgZXhjbHVkZV9wa2dzPSgKIi14IFdBTGludXhBZ2VudCIKIi14IFdBTGludXhBZ2VudC11ZGV2IikKZG5mX3VwZGF0ZV9wa2dzIGV4Y2x1ZGVfcGtncyBcCnJldHJ5X3dhaXRfdGltZSBcCiIkcGtnX3JldHJ5X2NvdW50Igpsb2NhbCAtcmEgaW5zdGFsbF9wa2dzPSgKYXp1cmUtY2xpCmF6dXJlLW1kc2QKcG9kbWFuCnBvZG1hbi1kb2NrZXIKb3BlbnNzbC1wZXJsCnB5dGhvbjMKZmlyZXdhbGxkCmdydWJieQpkcmFjdXQtZmlwcykKZG5mX2luc3RhbGxfcGtncyBpbnN0YWxsX3BrZ3MgXApyZXRyeV93YWl0X3RpbWUgXAoiJHBrZ19yZXRyeV9jb3VudCIKZmlwc19jb25maWd1cmUKY29uZmlndXJlX2xvZ3JvdGF0ZQpsb2NhbCAtciBtZG1pbWFnZT0iJHtSUElNQUdFJSUvKn0vJHtNRE1JTUFHRSMqL30iCmxvY2FsIC1yIHJwaW1hZ2U9IiRSUElNQUdFIgpsb2NhbCAtciBtaXNlaW1hZ2U9IiR7UlBJTUFHRSUlLyp9LyR7TUlTRUlNQUdFIyovfSIKbG9jYWwgLXIgb3RlbGltYWdlPSIkT1RFTElNQUdFIgpsb2NhbCAtciBmbHVlbnRiaXRfaW1hZ2U9IiRGTFVFTlRCSVRJTUFHRSIKbG9jYWwgLXJBIGFyb19pbWFnZXM9KApbIm1kbSJdPSJtZG1pbWFnZSIKWyJycCJdPSJycGltYWdlIgpbImZsdWVudGJpdCJdPSJmbHVlbnRiaXRfaW1hZ2UiClsibWlzZSJdPSJtaXNlaW1hZ2UiClsib3RlbCJdPSJvdGVsaW1hZ2UiKQpwdWxsX2NvbnRhaW5lcl9pbWFnZXMgYXJvX2ltYWdlcwpsb2NhbCAtcmEgZW5hYmxlX3BvcnRzPSgKIjQ0My90Y3AiCiI0NDQvdGNwIgoiNDQ1L3RjcCIKIjQ0Ni90Y3AiCiIyMjIyL3RjcCIKIjIyL3RjcCIpCmZpcmV3YWxsZF9jb25maWd1cmUgZW5hYmxlX3BvcnRzCmxvY2FsIC1yIGZsdWVudGJpdF9jb25mX2ZpbGU9J1tJTlBVVF0KCU5hbWUgc3lzdGVtZAoJVGFnIGpvdXJuYWxkCglTeXN0ZW1kX0ZpbHRlciBfQ09NTT1hcm8KCURCIC92YXIvbGliL2ZsdWVudC9qb3VybmFsZGIKCltJTlBVVF0KCU5hbWUgc3lzdGVtZAoJVGFnIGpvdXJuYWxkCglTeXN0ZW1kX0ZpbHRlciBfU1lTVEVNRF9VTklUPWFyby1taXNlLnNlcnZpY2UKCURCIC92YXIvbGliL2ZsdWVudC9qb3VybmFsZGIKCltJTlBVVF0KCU5hbWUgc3lzdGVtZAoJVGFnIGpvdXJuYWxkCglTeXN0ZW1kX0ZpbHRlciBfU1lTVEVNRF9VTklUPWFyby1vdGVsLWNvbGxlY3Rvci5zZXJ2aWNlCglEQiAvdmFyL2xpYi9mbHVlbnQvam91cm5hbGRiCgpbRklMVEVSXQoJTmFtZSBtb2RpZnkKCU1hdGNoIGpvdXJuYWxkCglBZGQgRW52aXJvbm1lbnQgJHtFTlZJUk9OTUVOVH0KCltGSUxURVJdCglOYW1lIG1vZGlmeQoJTWF0Y2ggam91cm5hbGQKCVJlbW92ZV93aWxkY2FyZCBfCglSZW1vdmUgVElNRVNUQU1QCgpbRklMVEVSXQoJTmFtZSByZXdyaXRlX3RhZwoJTWF0Y2ggam91cm5hbGQKCVJ1bGUgJExPR0tJTkQgYXN5bmNxb3MgYXN5bmNxb3MgdHJ1ZQoKW0ZJTFRFUl0KCU5hbWUgbW9kaWZ5CglNYXRjaCBhc3luY3FvcwoJUmVtb3ZlIENMSUVOVF9QUklOQ0lQQUxfTkFNRQoJUmVtb3ZlIEZJTEUKCVJlbW92ZSBDT01QT05FTlQKCltGSUxURVJdCglOYW1lIHJld3JpdGVfdGFnCglNYXRjaCBqb3VybmFsZAoJUnVsZSAkTE9HS0lORCBpZnhhdWRpdCBpZnhhdWRpdCBmYWxzZQoKW09VVFBVVF0KCU5hbWUgZm9yd2FyZAoJTWF0Y2ggKgoJUG9ydCAyOTIzMCcKbG9jYWwgLXJBIGFyb19jb25maWdzPSgKWyJycF9jb25maWciXT0iYXJvX3JwX2NvbmZfZmlsZSIKWyJmbHVlbnRiaXQiXT0iZmx1ZW50Yml0X2NvbmZfZmlsZSIKWyJtZHNkIl09Im1kc2RfY29uZmlnX3ZlcnNpb24iClsic3RhdGljX2lwX2FkZHJlc3MiXT0ic3RhdGljX2lwX2FkZHJlc3NlcyIpCmxvY2FsIC1yQSBzdGF0aWNfaXBfYWRkcmVzc2VzPSgKWyJycCJdPSIxMC44OC4wLjIiClsibW9uaXRvciJdPSIxMC44OC4wLjMiClsicG9ydGFsIl09IjEwLjg4LjAuNCIKWyJtaW1vX2FjdHVhdG9yIl09IjEwLjg4LjAuMTAiClsibWltb19zY2hlZHVsZXIiXT0iMTAuODguMC4xMSIKWyJtaXNlIl09IjEwLjg4LjAuNSIKWyJvdGVsX2NvbGxlY3RvciJdPSIxMC44OC4wLjYiClsibWRtIl09IjEwLjg4LjAuOCIpCmxvY2FsIC1yIG1kc2RfY29uZmlnX3ZlcnNpb249IiRSUE1EU0RDT05GSUdWRVJTSU9OIgpsb2NhbCAtciBhcm9fcnBfY29uZl9maWxlPSJBQ1JfUkVTT1VSQ0VfSUQ9JyRBQ1JSRVNPVVJDRUlEJwpBRE1JTl9BUElfQ0xJRU5UX0NFUlRfQ09NTU9OX05BTUU9JyRBRE1JTkFQSUNMSUVOVENFUlRDT01NT05OQU1FJwpBUk1fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FPSckQVJNQVBJQ0xJRU5UQ0VSVENPTU1PTk5BTUUnCkFaVVJFX0FSTV9DTElFTlRfSUQ9JyRBUk1DTElFTlRJRCcKQVpVUkVfRlBfQ0xJRU5UX0lEPSckRlBDTElFTlRJRCcKQVpVUkVfRlBfU0VSVklDRV9QUklOQ0lQQUxfSUQ9JyRGUFNFUlZJQ0VQUklOQ0lQQUxJRCcKQ0xVU1RFUl9NRE1fQUNDT1VOVD0nJENMVVNURVJNRE1BQ0NPVU5UJwpDTFVTVEVSX01ETV9OQU1FU1BBQ0U9UlAKQ0xVU1RFUl9NRFNEX0FDQ09VTlQ9JyRDTFVTVEVSTURTREFDQ09VTlQnCkNMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTj0nJENMVVNURVJNRFNEQ09ORklHVkVSU0lPTicKQ0xVU1RFUl9NRFNEX05BTUVTUEFDRT0nJENMVVNURVJNRFNETkFNRVNQQUNFJwpEQVRBQkFTRV9BQ0NPVU5UX05BTUU9JyREQVRBQkFTRUFDQ09VTlROQU1FJwpET01BSU5fTkFNRT0nJExPQ0FUSU9OLiRDTFVTVEVSUEFSRU5URE9NQUlOTkFNRScKR0FURVdBWV9ET01BSU5TPSckR0FURVdBWURPTUFJTlMnCkdBVEVXQVlfUkVTT1VSQ0VHUk9VUD0nJEdBVEVXQVlSRVNPVVJDRUdST1VQTkFNRScKS0VZVkFVTFRfUFJFRklYPSckS0VZVkFVTFRQUkVGSVgnCk1ETV9BQ0NPVU5UPSckUlBNRE1BQ0NPVU5UJwpNRE1fTkFNRVNQQUNFPScke3JvbGVfcnBeXn0nCk1EU0RfRU5WSVJPTk1FTlQ9JyRNRFNERU5WSVJPTk1FTlQnCk1JU0VfQUREUkVTUz0naHR0cDovLyR7c3RhdGljX2lwX2FkZHJlc3Nlc1sibWlzZSJdfTo1MDAwJwpSUF9GRUFUVVJFUz0nJFJQRkVBVFVSRVMnClJQSU1BR0U9JyRycGltYWdlJwpBUk9fSU5TVEFMTF9WSUFfSElWRT0nJENMVVNURVJTSU5TVEFMTFZJQUhJVkUnCkFST19ISVZFX0RFRkFVTFRfSU5TVEFMTEVSX1BVTExTUEVDPSckQ0xVU1RFUkRFRkFVTFRJTlNUQUxMRVJQVUxMU1BFQycKQVJPX0FET1BUX0JZX0hJVkU9JyRDTFVTVEVSU0FET1BUQllISVZFJwpPSURDX0FGRF9FTkRQT0lOVD0nJExPQ0FUSU9OLm9pYy4kUlBQQVJFTlRET01BSU5OQU1FJwpPSURDX1NUT1JBR0VfQUNDT1VOVF9OQU1FPSckT0lEQ1NUT1JBR0VBQ0NPVU5UTkFNRScKT1RFTF9BVURJVF9RVUVVRV9TSVpFPSckT1RFTEFVRElUUVVFVUVTSVpFJwpNU0lfUlBfRU5EUE9JTlQ9JyRNU0lSUEVORFBPSU5UJwpFTlZJUk9OTUVOVD0nJEVOVklST05NRU5UJwoiCmNvbmZpZ3VyZV92bXNzX2Fyb19zZXJ2aWNlcyByb2xlX3JwIFwKYXJvX2ltYWdlcyBcCmFyb19jb25maWdzCmxvY2FsIC1yYSBhcm9fc2VydmljZXM9KAoiYXJvLW1pc2UiCiJhcm8tbW9uaXRvciIKImFyby1vdGVsLWNvbGxlY3RvciIKImFyby1wb3J0YWwiCiJhcm8tbWltby1hY3R1YXRvciIKImFyby1taW1vLXNjaGVkdWxlciIKImFyby1ycCIKImF6c2VjZCIKIm1kc2QiCiJtZG0iCiJjaHJvbnlkIgoiZmx1ZW50Yml0IgoiZG93bmxvYWQtbWRzZC1jcmVkZW50aWFscy50aW1lciIKImRvd25sb2FkLW1kbS1jcmVkZW50aWFscy50aW1lciIKImZpcmV3YWxsZCIpCmVuYWJsZV9zZXJ2aWNlcyBhcm9fc2VydmljZXMKcmVib290X3ZtCn0KZXhwb3J0IEFaVVJFX0NMT1VEX05BTUU9IiR7QVpVUkVDTE9VRE5BTUU6PyJGYWlsZWQgdG8gY2Fycnkgb3ZlciB2YXJpYWJsZXMifSIKdXRpbD0idXRpbC5zaCIKaWYgWyAtZiAiJHV0aWwiIF07dGhlbgpzb3VyY2UgIiR1dGlsIgpmaQptYWluICIkQCIK')))]" } } }, diff --git a/pkg/deploy/generator/scripts/gatewayVMSS.sh b/pkg/deploy/generator/scripts/gatewayVMSS.sh index 7e2289e1819..446b2855914 100644 --- a/pkg/deploy/generator/scripts/gatewayVMSS.sh +++ b/pkg/deploy/generator/scripts/gatewayVMSS.sh @@ -153,8 +153,11 @@ ENVIRONMENT='$ENVIRONMENT'" reboot_vm } +# export AZURE_CLOUD_NAME="${AZURECLOUDNAME:?"Failed to carry over variables"}" export AZURE_CLOUD_NAME="${AZURECLOUDNAME:?"Failed to carry over variables"}" +# util="util.sh" +# # util.sh does not exist when deployed to VMSS via VMSS extensions # Provides shellcheck definitions util="util.sh" diff --git a/pkg/deploy/generator/scripts/rpVMSS.sh b/pkg/deploy/generator/scripts/rpVMSS.sh index 369b99c7a25..170597af05e 100644 --- a/pkg/deploy/generator/scripts/rpVMSS.sh +++ b/pkg/deploy/generator/scripts/rpVMSS.sh @@ -8,10 +8,12 @@ main() { # transaction attempt retry time in seconds # shellcheck disable=SC2034 local -ri retry_wait_time=30 - local -ri pkg_retry_count=60 create_required_dirs + configure_sshd + + local -ri pkg_retry_count=60 configure_rpm_repos retry_wait_time \ "$pkg_retry_count" @@ -53,10 +55,16 @@ main() { # shellcheck disable=SC2153 disable=SC2034 local -r mdmimage="${RPIMAGE%%/*}/${MDMIMAGE#*/}" local -r rpimage="$RPIMAGE" + + # shellcheck disable=SC2034 local -r miseimage="${RPIMAGE%%/*}/${MISEIMAGE#*/}" + + # shellcheck disable=SC2034 local -r otelimage="$OTELIMAGE" + # shellcheck disable=SC2034 local -r fluentbit_image="$FLUENTBITIMAGE" + # shellcheck disable=SC2034 local -rA aro_images=( ["mdm"]="mdmimage" @@ -224,11 +232,15 @@ ENVIRONMENT='$ENVIRONMENT' reboot_vm } +# export AZURE_CLOUD_NAME="${AZURECLOUDNAME:?"Failed to carry over variables"}" +# # This variable is used by az-cli # It's assumed that if this variable hasn't been carried over, that others are also not present, so we fail early by returning an error # This was mostly helpful when testing on a development VM, but is still applicable export AZURE_CLOUD_NAME="${AZURECLOUDNAME:?"Failed to carry over variables"}" +# util="util.sh" +# # util.sh does not exist when deployed to VMSS via VMSS extensions # Provides shellcheck definitions util="util.sh" diff --git a/pkg/deploy/generator/scripts/util-common.sh b/pkg/deploy/generator/scripts/util-common.sh index a78a4dbf589..a515c719347 100644 --- a/pkg/deploy/generator/scripts/util-common.sh +++ b/pkg/deploy/generator/scripts/util-common.sh @@ -1,37 +1,97 @@ #!/bin/bash # Internal Functions and Constants -# empty_str - constant; used by functions for optional nameref string arguements -# empty_str="" +# declare -r empty_str="" +# +# empty_str - constant +# * used by functions for optional nameref string arguments # shellcheck disable=SC2034 declare -r empty_str="" -# role_gateway - constant; Is used to determine which VMSS is being bootstrapped +# declare -r role_gateway="gateway" +# # this should be referenced by scripts sourcing this file # role_gateway="gateway" declare -r role_gateway="gateway" -# role_rp - constant; Is used to determine which VMSS is being bootstrapped + +# declare -r role_rp="rp" +# # this should be referenced by scripts sourcing this file # role_rp="rp" declare -r role_rp="rp" -# role_devproxy - constant; Is used to determine which VMSS is being bootstrapped -# role_devproxy="devproxy" + +# declare -r role_devproxy="devproxy" +# +# role_devproxy - constant +# * Is used to determine which VMSS is being bootstrapped declare -r role_devproxy="devproxy" -# us_gov_cloud - constant; Is the name of AZURECLOUDNAME for US government cloud -# us_gov_cloud="AzureUSGovernment" + +# declare -r us_gov_cloud="AzureUSGovernment" +# +# us_gov_cloud - constant +# * Is the name of AZURECLOUDNAME for US government cloud declare -r us_gov_cloud="AzureUSGovernment" -# log is a wrapper for echo that includes the function name -# Args -# 1) msg - string -# 2) stack_level - int; optional, defaults to the function at the bottom of the call stack +# declare -i XTRACE_SET=1 +# +# constant value signifying xtrace shell value is/should be set +declare -ir XTRACE_SET=1 + +# declare -i XTRACE_UNSET=0 +# +# constant value signifying xtrace shell value is/should be unset +declare -ir XTRACE_UNSET=0 + +# xtrace_is_set() +# +# Check if xtrace shell option is enabled/disabled +# * Returns XTRACE_SET value if set +# * Returns XTRACE_UNSET value if unset +xtrace_is_set() { + if [[ $- =~ "x" ]]; then + echo XTRACE_SET + fi + + echo XTRACE_UNSET +} + +# xtrace_toggle() +# +# set/unset xtrace shell option +# args: +# 1) string - nameref +# * Must be XTRACE_SET or XTRACE_UNSET +xtrace_toggle() { + if ! [[ $1 =~ ("XTRACE_SET"|"XTRACE_UNSET") ]]; then + log "\$1 invalid; \$1 must be XTRACE_SET or XTRACE_UNSET. \$1: $1" + return 1 + fi + + if (( $1 == XTRACE_SET )); then + set -x + elif + (( $1 == XTRACE_UNSET )); then + set +x + fi +} + +# log() +# +# Wrapper for echo that includes the function name +# args: +# 1) msg - string +# 2) stack_level - int +# * optional +# * defaults to the function at the bottom of the call stack log() { local -r msg="${1:-"log message is empty"}" local -r stack_level="${2:-1}" echo "${FUNCNAME[${stack_level}]}: ${msg}" } -# abort is a wrapper for log that exits with an error code +# abort() +# +# Wrapper for log that exits with an error code abort() { local -ri origin_stacklevel=2 log "${1}" "$origin_stacklevel" @@ -39,11 +99,13 @@ abort() { exit 1 } -# write_file -# Args -# 1) filename - string -# 2) file_contents - string -# 3) clobber - boolean; optional - defaults to false +# write_file() +# +# args: +# 1) filename - string +# 2) file_contents - string +# 3) clobber - boolean +# * Optional; defaults to false write_file() { local -n filename="$1" local -n file_contents="$2" @@ -58,11 +120,16 @@ write_file() { fi } -# retry Adding retry logic to yum commands in order to avoid stalling out on resource locks +# retry() +# +# Add retry logic to commands in order to avoid stalling out on resource locks # args: -# 1) cmd_retry - nameref, array; Command and arguement(s) to retry -# 2) wait_time - nameref, integer; Time to wait before retrying command -# 3) retries - integer, optional; Ammount of times to retry command, defaults to 5 +# 1) cmd_retry - nameref, array +# * Command and argument(s) to retry +# 2) wait_time - nameref, integer +# * Time to wait before retrying command +# 3) retries - integer, optional +# * Amount of times to retry command, defaults to 5 retry() { local -n cmd_retry="$1" local -n wait_time="$2" @@ -81,9 +148,11 @@ retry() { abort "${cmd_retry[*]} failed after #$retries attempts" } -# verify_role +# verify_role() +# # args: -# 1) test_role - nameref; role being verified +# 1) test_role - nameref +# * role being verified verify_role() { local -n test_role="$1" @@ -95,11 +164,15 @@ verify_role() { fi } -# get_keyvault_suffix +# get_keyvault_suffix() +# # args: -# 1) rl - nameref, string; role to get short role for -# 2) kv_suffix - nameref, string; short role will be assigned to this nameref -# 3) sec_prefix - nameref, string; keyvault certificate prefix will be assigned to this nameref +# 1) rl - nameref, string +# * role to get short role for +# 2) kv_suffix - nameref, string +# * short role will be assigned to this nameref +# 3) sec_prefix - nameref, string +# * keyvault certificate prefix will be assigned to this nameref get_keyvault_suffix() { local -n rl="$1" local -n kv_suffix="$2" @@ -118,14 +191,16 @@ get_keyvault_suffix() { sec_prefix="$role_rp" ;; *) - abort "unkown role $rl" + abort "unknown role $rl" ;; esac } +# reboot_vm() +# # reboot_vm restores calls shutdown -r in a subshell -# Reboots should scheduled after all VM extensions have had time to complete -# Reference: https://learn.microsoft.com/en-us/azure/virtual-machines/extensions/custom-script-linux#tips +# * Reboots should scheduled after all VM extensions have had time to complete +# * Reference: https://learn.microsoft.com/en-us/azure/virtual-machines/extensions/custom-script-linux#tips reboot_vm() { log "starting" diff --git a/pkg/deploy/generator/scripts/util-packages.sh b/pkg/deploy/generator/scripts/util-packages.sh index 95102ba25d1..b8d37cdf198 100644 --- a/pkg/deploy/generator/scripts/util-packages.sh +++ b/pkg/deploy/generator/scripts/util-packages.sh @@ -1,6 +1,7 @@ #!/bin/bash # Repository and package management related functions +# configure_repo_mariner_extended() configure_repo_mariner_extended() { local -r extended_repo_config="https://packages.microsoft.com/cbl-mariner/2.0/prod/extended/x86_64/config.repo" curl -sSL "$extended_repo_config" -o /etc/yum.repos.d/mariner-extended.repo @@ -19,10 +20,13 @@ configure_repo_mariner_extended() { } # configure_rpm_repos +# # New repositories should be added in their own functions, and called here # args: -# 1) wait_time - nameref, integer; Time to wait before retrying command -# 2) retries - integer, optional; Amount of times to retry command, defaults to 5 +# 1) wait_time - nameref, integer +# * Time to wait before retrying command +# 2) retries - integer, optional +# * Amount of times to retry command, defaults to 5 configure_rpm_repos() { log "starting" @@ -30,10 +34,14 @@ configure_rpm_repos() { } # dnf_install_pkgs +# # args: -# 1) pkgs - nameref, string array; Packages to be installed -# 2) wait_time - nameref, integer; Time to wait before retrying command -# 3) retries - integer, optional; Amount of times to retry command, defaults to 5 +# 1) pkgs - nameref, string array +# * Packages to be installed +# 2) wait_time - nameref, integer +# * Time to wait before retrying command +# 3) retries - integer, optional +# * Amount of times to retry command, defaults to 5 dnf_install_pkgs() { local -n pkgs="$1" log "starting" @@ -55,11 +63,15 @@ dnf_install_pkgs() { # dnf_update_pkgs +# # args: -# 1) excludes - nameref, string array, optional; Packages to exclude from updating -# Each index must be prefixed with -x -# 2) wait_time - nameref, integer; Time to wait before retrying command -# 3) retries - integer, optional; Ammount of times to retry command, defaults to 5 +# 1) excludes - nameref, string array, optional +# * Packages to exclude from updating +# * Each index must be prefixed with -x +# 2) wait_time - nameref, integer +# * Time to wait before retrying command +# 3) retries - integer, optional +# * Amount of times to retry command, defaults to 5 dnf_update_pkgs() { local -n excludes="${1:-empty_str}" log "starting" @@ -87,9 +99,12 @@ dnf_update_pkgs() { } # rpm_import_keys +# # args: -# 1) keys - nameref, string array; rpm keys to be imported -# 2) wait_time - nameref, integer; Time to wait before retrying command +# 1) keys - nameref, string array +# * rpm keys to be imported +# 2) wait_time - nameref, integer +# * Time to wait before retrying command rpm_import_keys() { local -n keys="$1" log "starting" @@ -112,6 +127,8 @@ rpm_import_keys() { done } +# util_common="util-common.sh" +# # util-common.sh does not exist when deployed to VMSS via VMSS extensions # Provides shellcheck definitions util_common="util-common.sh" diff --git a/pkg/deploy/generator/scripts/util-services.sh b/pkg/deploy/generator/scripts/util-services.sh index 20f6e3ef9e5..9b586ea27ba 100644 --- a/pkg/deploy/generator/scripts/util-services.sh +++ b/pkg/deploy/generator/scripts/util-services.sh @@ -1,9 +1,12 @@ #!/bin/bash # ARO service setup functions -# enable_services enables the systemd services that are passed in +# enable_services +# +# enables the systemd services that are passed in # args: -# 1) services - array; services to be enabled +# * 1) services - array +# * services to be enabled enable_services() { local -n svcs="$1" log "starting" @@ -21,11 +24,16 @@ enable_services() { } # configure_service_aro_gateway +# # args: -# 1) image - nameref, string; container image -# 2) role - nameref, string; VMSS role -# 3) conf_file - nameref, string; aro gateway environment file -# 4) ipaddress - nameref, string; static ip of podman network to be attached +# 1) image - nameref, string +# * container image +# 2) role - nameref, string +# * VMSS role +# 3) conf_file - nameref, string +# * aro gateway environment file +# 4) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_aro_gateway() { local -n image="$1" local -n role="$2" @@ -34,6 +42,7 @@ configure_service_aro_gateway() { log "starting" log "Configuring aro-gateway service" + # shellcheck disable=SC2034 local -r aro_gateway_conf_filename='/etc/sysconfig/aro-gateway' local -r add_conf_file="PODMAN_NETWORK='podman' IPADDRESS='$ipaddress' @@ -48,6 +57,7 @@ ENVIRONMENT='$ENVIRONMENT'" local -r aro_gateway_service_filename='/etc/systemd/system/aro-gateway.service' # shellcheck disable=SC2034 + # shellcheck disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r aro_gateway_service_file='[Unit] @@ -94,11 +104,16 @@ WantedBy=multi-user.target } # configure_service_aro_rp +# # args: -# 1) image - nameref, string; RP container image -# 2) role - nameref, string; VMSS role -# 3) conf_file - nameref, string; aro rp environment file -# 4) ipaddress - nameref, string; static ip of podman network to be attached +# * 1) image - nameref, string +# * RP container image +# * 2) role - nameref, string +# * VMSS role +# * 3) conf_file - nameref, string +# * aro rp environment file +# * 4) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_aro_rp() { local -n image="$1" local -n role="$2" @@ -107,6 +122,7 @@ configure_service_aro_rp() { log "starting" log "Configuring aro-rp service" + # shellcheck disable=SC2034 local -r aro_rp_conf_filename='/etc/sysconfig/aro-rp' local -r add_conf_file="PODMAN_NETWORK='podman' IPADDRESS='$ipaddress' @@ -119,7 +135,9 @@ ARO_LOG_LEVEL='$RPLOGLEVEL'" # shellcheck disable=SC2034 local -r aro_rp_service_filename='/etc/systemd/system/aro-rp.service' + # shellcheck disable=SC2034 + # shellcheck disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r aro_rp_service_file='[Unit] @@ -186,9 +204,12 @@ WantedBy=multi-user.target' } # configure_service_aro_monitor +# # args: -# 1) image - nameref, string; RP container image -# 2) ipaddress - nameref, string; static ip of podman network to be attached +# 1) image - nameref, string +# * RP container image +# 2) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_aro_monitor() { local -n image="$1" local -n ipaddress="$2" @@ -199,6 +220,7 @@ configure_service_aro_monitor() { # are not used, but can't easily be refactored out. Should be revisited in the future. # shellcheck disable=SC2034 local -r aro_monitor_service_conf_filename='/etc/sysconfig/aro-monitor' + # shellcheck disable=SC2034 local -r aro_monitor_service_conf_file="AZURE_FP_CLIENT_ID='$FPCLIENTID' DOMAIN_NAME='$LOCATION.$CLUSTERPARENTDOMAINNAME' @@ -227,7 +249,9 @@ ARO_LOG_LEVEL='$MONITORLOGLEVEL'" # shellcheck disable=SC2034 local -r aro_monitor_service_filename='/etc/systemd/system/aro-monitor.service' + # shellcheck disable=SC2034 + # shellcheck disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r aro_monitor_service_file='[Unit] @@ -279,9 +303,12 @@ WantedBy=multi-user.target' } # configure_service_aro_portal +# # args: -# 1) image - nameref, string; RP container image -# 2) ipaddress - nameref, string; static ip of podman network to be attached +# * 1) image - nameref, string +# * RP container image +# * 2) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_aro_portal() { local -n image="$1" local -n ipaddress="$2" @@ -310,7 +337,9 @@ ARO_LOG_LEVEL='$PORTALLOGLEVEL'" # shellcheck disable=SC2034 local -r aro_portal_service_filename='/etc/systemd/system/aro-portal.service' + # shellcheck disable=SC2034 + # shellcheck disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r aro_portal_service_file='[Unit] @@ -357,10 +386,14 @@ WantedBy=multi-user.target' } # configure_service_aro_mimo_actuator +# # args: -# 1) image - nameref, string; RP container image -# 2) conf_file - nameref, string; aro rp environment file -# 3) ipaddress - nameref, string; static ip of podman network to be attached +# 1) image - nameref, string +# * RP container image +# 2) conf_file - nameref, string +# * aro rp environment file +# 3) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_aro_mimo_actuator() { local -n image="$1" local -n conf_file="$2" @@ -368,7 +401,10 @@ configure_service_aro_mimo_actuator() { log "starting" log "Configuring aro-mimo-actuator service" + # shellcheck disable=SC2034 local -r aro_mimo_actuator_conf_filename='/etc/sysconfig/aro-mimo-actuator' + + # shellcheck disable=SC2034 local -r add_conf_file="PODMAN_NETWORK='podman' IPADDRESS='$ipaddress' ARO_LOG_LEVEL='$MIMOACTUATORLOGLEVEL'" @@ -378,7 +414,9 @@ ARO_LOG_LEVEL='$MIMOACTUATORLOGLEVEL'" # shellcheck disable=SC2034 local -r aro_mimo_actuator_service_filename='/etc/systemd/system/aro-mimo-actuator.service' + # shellcheck disable=SC2034 + # shellcheck disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r aro_mimo_actuator_service_file='[Unit] @@ -443,9 +481,12 @@ WantedBy=multi-user.target' # configure_service_aro_mimo_scheduler # args: -# 1) image - nameref, string; RP container image -# 2) conf_file - nameref, string; aro rp environment file -# 3) ipaddress - nameref, string; static ip of podman network to be attached +# 1) image - nameref, string +# * RP container image +# 2) conf_file - nameref, string +# * aro rp environment file +# 3) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_aro_mimo_scheduler() { local -n image="$1" local -n conf_file="$2" @@ -453,7 +494,9 @@ configure_service_aro_mimo_scheduler() { log "starting" log "Configuring aro-mimo-scheduler service" + # shellcheck disable=SC2034 local -r aro_mimo_scheduler_conf_filename='/etc/sysconfig/aro-mimo-scheduler' + # shellcheck disable=SC2034 local -r add_conf_file="PODMAN_NETWORK='podman' IPADDRESS='$ipaddress' ARO_LOG_LEVEL='$MIMOSCHEDULERLOGLEVEL'" @@ -463,7 +506,7 @@ ARO_LOG_LEVEL='$MIMOSCHEDULERLOGLEVEL'" # shellcheck disable=SC2034 local -r aro_mimo_scheduler_service_filename='/etc/systemd/system/aro-mimo-scheduler.service' - # shellcheck disable=SC2034 + # shellcheck disable=SC2034 disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r aro_mimo_scheduler_service_file='[Unit] @@ -526,9 +569,12 @@ WantedBy=multi-user.target' } # configure_service_aro_mise +# # args: -# 1) image - nameref, string; MISE container image -# 2) ipaddress - nameref, string; static ip of podman network to be attached +# 1) image - nameref, string +# * MISE container image +# 2) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_aro_mise() { local -n image="$1" local -n ipaddress="$2" @@ -625,7 +671,9 @@ ENVIRONMENT='$ENVIRONMENT'" # shellcheck disable=SC2034 local -r aro_mise_service_filename='/etc/systemd/system/aro-mise.service' + # shellcheck disable=SC2034 + # shellcheck disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r aro_mise_service_file='[Unit] @@ -655,11 +703,16 @@ WantedBy=multi-user.target' write_file aro_mise_service_filename aro_mise_service_file true } + # configure_service_aro_otel_collector +# # args: -# 1) image - nameref, string; OTEL container image -# 2) static_ip_address - nameref, array; static ips of all services -# 3) ipaddress - nameref, string; static ip of podman network to be attached +# 1) image - nameref, string +# * OTEL container image +# 2) static_ip_address - nameref, array +# * static ips of all services +# 3) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_aro_otel_collector() { local -n image="$1" local -n static_ip_address="$2" @@ -726,7 +779,9 @@ service: # shellcheck disable=SC2034 local -r aro_otel_collector_service_filename='/etc/systemd/system/aro-otel-collector.service' + # shellcheck disable=SC2034 + # shellcheck disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r aro_otel_collector_service_file='[Unit] @@ -758,9 +813,12 @@ WantedBy=multi-user.target' } # configure_service_mdsd +# # args: -# 1) monitoring_role - nameref, string; can be "gateway" or "rp" -# 2) monitor_config_version - nameref, string; mdsd config version +# 1) monitoring_role - nameref, string +# * can be "gateway" or "rp" +# 2) monitor_config_version - nameref, string +# * mdsd config version configure_service_mdsd() { local -n role="$1" local -n monitor_config_version="$2" @@ -806,10 +864,14 @@ export MDSD_MSGPACK_SORT_COLUMNS=\"1\"" } # configure_service_fluentbit +# # args: -# 1) conf_file - string; fluenbit configuration file -# 2) image - string; fluentbit container image to run -# 3) ipaddress - nameref, string; static ip of podman network to be attached +# 1) conf_file - string +# * fluenbit configuration file +# 2) image - string +# * fluentbit container image to run +# 3) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_fluentbit() { # shellcheck disable=SC2034 local -n conf_file="$1" @@ -834,7 +896,9 @@ ENVIRONMENT='$ENVIRONMENT'" # shellcheck disable=SC2034 local -r service_filename='/etc/systemd/system/fluentbit.service' + # shellcheck disable=SC2034 + # shellcheck disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r service_file='[Unit] @@ -874,8 +938,10 @@ WantedBy=multi-user.target' } # configure_timers_mdm_mdsd +# # args: -# 1) role - string; can be "gateway" or "rp" +# 1) role - string +# * can be "gateway" or "rp" configure_timers_mdm_mdsd() { local -n role="$1" log "starting" @@ -1030,10 +1096,14 @@ WantedBy=multi-user.target' } # configure_service_mdm +# # args: -# 1) role - nameref, string; can be "gateway" or "rp" -# 2) image - nameref, string; mdm container image to run -# 3) ipaddress - nameref, string; static ip of podman network to be attached +# 1) role - nameref, string +# * can be "gateway" or "rp" +# 2) image - nameref, string +# * mdm container image to run +# 3) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_mdm() { local -n role="$1" local -n image="$2" @@ -1062,7 +1132,9 @@ IPADDRESS='$ipaddress'" mkdir -p /var/etw # shellcheck disable=SC2034 local -r mdm_service_filename="/etc/systemd/system/mdm.service" + # shellcheck disable=SC2034 + # shellcheck disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r mdm_service_file='[Unit] @@ -1107,11 +1179,16 @@ WantedBy=multi-user.target' } # configure_vmss_aro_service +# # args: -# 1) r - nameref, string; role of VMSS -# 2) images - nameref, associative array; ARO container images -# 3) configs - nameref, associative array; configuration files and versions. The values should be a reference to variables, not dereferenced. -# This is because the value is used when creating nameref variables by helper functions. +# 1) r - nameref, string +# * role of VMSS +# 2) images - nameref, associative array +# * ARO container images +# 3) configs - nameref, associative array +# * configuration files and versions. +# * The values should be a reference to variables, not dereferenced. +# * This is because the value is used when creating nameref variables by helper functions. configure_vmss_aro_services() { local -n r="$1" local -n images="$2" @@ -1120,26 +1197,50 @@ configure_vmss_aro_services() { verify_role "$1" if [ "$r" == "$role_gateway" ]; then - configure_service_aro_gateway "${images["rp"]}" "$1" "${configs["gateway_config"]}" "${configs["static_ip_address"]}["gateway"]" + configure_service_aro_gateway "${images["rp"]}" "$1" "${configs["gateway_config"]}" "${configs["static_ip_address"]}[gateway]" configure_certs_gateway elif [ "$r" == "$role_rp" ]; then - configure_service_aro_rp "${images["rp"]}" "$1" "${configs["rp_config"]}" "${configs["static_ip_address"]}["rp"]" - configure_service_aro_mimo_actuator "${images["rp"]}" "${configs["rp_config"]}" "${configs["static_ip_address"]}["mimo_actuator"]" - configure_service_aro_mimo_scheduler "${images["rp"]}" "${configs["rp_config"]}" "${configs["static_ip_address"]}["mimo_scheduler"]" - configure_service_aro_monitor "${images["rp"]}" "${configs["static_ip_address"]}["monitor"]" - configure_service_aro_portal "${images["rp"]}" "${configs["static_ip_address"]}["portal"]" - configure_service_aro_mise "${images["mise"]}" "${configs["static_ip_address"]}["mise"]" - configure_service_aro_otel_collector "${images["otel"]}" "${configs["static_ip_address"]}" "${configs["static_ip_address"]}["otel_collector"]" + configure_service_aro_rp "${images["rp"]}" \ + "$1" \ + "${configs[rp_config]}" \ + "${configs[static_ip_address]}[rp]" + + configure_service_aro_mimo_actuator "${images[rp]}" \ + "${configs[rp_config]}" \ + "${configs[static_ip_address]}[mimo_actuator]" + + configure_service_aro_mimo_scheduler "${images[rp]}" \ + "${configs[rp_config]}" \ + "${configs[static_ip_address]}[mimo_scheduler]" + + configure_service_aro_monitor "${images[rp]}" "${configs[static_ip_address]}[monitor]" + + configure_service_aro_portal "${images[rp]}" "${configs[static_ip_address]}[portal]" + + configure_service_aro_mise "${images[mise]}" "${configs[static_ip_address]}[mise]" + + configure_service_aro_otel_collector "${images[otel]}" \ + "${configs[static_ip_address]}" \ + "${configs["static_ip_address"]}[otel_collector]" + configure_certs_rp fi - configure_service_fluentbit "${configs["fluentbit"]}" "${images["fluentbit"]}" + configure_service_fluentbit "${configs[fluentbit]}" "${images[fluentbit]}" + configure_timers_mdm_mdsd "$1" - configure_service_mdm "$1" "${images["mdm"]}" "${configs["static_ip_address"]}["mdm"]" - configure_service_mdsd "$1" "${configs["mdsd"]}" + + configure_service_mdm "$1" \ + "${images[mdm]}" \ + "${configs["static_ip_address"]}[mdm]" + + configure_service_mdsd "$1" "${configs[mdsd]}" + run_azsecd_config_scan } +# util_common="util-common.sh" +# # util-common.sh does not exist when deployed to VMSS via VMSS extensions # Provides shellcheck definitions util_common="util-common.sh" @@ -1148,6 +1249,8 @@ if [ -f "$util_common" ]; then source "$util_common" fi +# util_system="util-system.sh" +# # util-system.sh does not exist when deployed to VMSS via VMSS extensions # Provides shellcheck definitions util_system="util-system.sh" diff --git a/pkg/deploy/generator/scripts/util-system.sh b/pkg/deploy/generator/scripts/util-system.sh index 0fc156f9a35..aabae1c5f60 100644 --- a/pkg/deploy/generator/scripts/util-system.sh +++ b/pkg/deploy/generator/scripts/util-system.sh @@ -2,10 +2,15 @@ # This file is intended to be sourced by bootstrapping scripts for commonly used functions # get_boot_dev_uuid +# # Get the boot devices uuid # args: -# 1) boot_dev_uuid - nameref, string; Empty variable for boot device uuid assignment +# +# * 1) boot_dev_uuid - nameref, string; Empty variable for boot device uuid assignment +# # Taken and refactored from https://eng.ms/docs/products/azure-linux/features/security/fips +# TODO remove this once sku cbl-mariner-2-gen2-fips is supported by automatic OS updates +# * Reference: https://learn.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-upgrade#supported-os-images get_boot_dev_uuid() { local -n boot_dev_uuid="$1" # Set boot_uuid variable for the boot partition if different from the root @@ -20,8 +25,12 @@ get_boot_dev_uuid() { } # fips_verify +# # Verify that fips mode is enabled +# # Taken and refactored from https://eng.ms/docs/products/azure-linux/features/security/fips +# TODO remove this once sku cbl-mariner-2-gen2-fips is supported by automatic OS updates +# * Reference: https://learn.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-upgrade#supported-os-images fips_verify() { fips_enabled_proc="$(cat /proc/sys/crypto/fips_enabled)" fips_enabled_sysctl="$(sysctl -n crypto.fips_enabled)" @@ -33,10 +42,12 @@ fips_verify() { } # fips_configure +# # Configures VM to run with fips mode enabled +# # Taken and refactored from https://eng.ms/docs/products/azure-linux/features/security/fips # TODO remove this once sku cbl-mariner-2-gen2-fips is supported by automatic OS updates -# Reference: https://learn.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-upgrade#supported-os-images +# * Reference: https://learn.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-upgrade#supported-os-images fips_configure() { # shellcheck disable=SC2034 local boot_uuid @@ -54,6 +65,7 @@ fips_configure() { } # configure_sshd +# # We need to configure PasswordAuthentication to yes in order for the VMSS Access JIT to work configure_sshd() { log "starting" @@ -66,9 +78,12 @@ configure_sshd() { } # configure_logrotate clobbers /etc/logrotate.conf +# # args: -# 1) dropin_files - nameref, associative array, optional; logrotate files to write to /etc/logrotate.d -# Key name dictates filenames written to /etc/logrotate.d. +# 1) dropin_files - nameref, associative array; optional +# * logrotate files to write to /etc/logrotate.d +# * Key name dictates filenames written to /etc/logrotate.d. +# # Example: # Key dictates the filename written in /etc/logrotate.d # shellcheck disable=SC2034 @@ -132,16 +147,19 @@ include /etc/logrotate.d } # pull_container_images +# # args: -# 1) pull_images - nameref, string array -# 2) registry_conf - nameref, string, optional; path to docker/podman configuration file +# 1) pull_images - nameref, string array +# * array of strings. Each string is an image to be pulled. +# 2) registry_conf - nameref, string, optional +# * path to docker/podman configuration file. pull_container_images() { local -n pull_images="$1" local -n registry_conf="${2:-empty_str}" log "starting" # shellcheck disable=SC2034 - local -ri retry_time=30 + local -ir retry_time=30 cmd=( az login @@ -152,29 +170,44 @@ pull_container_images() { log "Running az login with retries" retry cmd retry_time - # Suppress emulation output for podman instead of docker for az acr compatability + # Suppress emulation output for podman instead of docker for az acr compatibility mkdir -p /etc/containers/ mkdir -p /root/.docker touch /etc/containers/nodocker + [ -n "${registry_conf}" ] && write_file REGISTRY_AUTH_FILE registry_conf "true" + # This name is used in the case that az acr login searches for this in it's environment + # exported here as it's used by podman login and subsequent podman pull export REGISTRY_AUTH_FILE="/root/.docker/config.json" - if [ -n "${registry_conf}" ]; then - write_file REGISTRY_AUTH_FILE registry_conf true - fi - - log "logging into prod acr" - cmd=( - az - acr - login - --name - # TODO replace this with variable expansion - # Reference: https://www.shellcheck.net/wiki/SC2001 - "$(sed -e 's|.*/||' <<<"$ACRRESOURCEID")" - ) - + # shellcheck disable=SC2329 + _() { + local -r acr="$1" + local -r registry="$2" + + local -r xtrace_initial_set="$(xtrace_is_set)" + xtrace_toggle XTRACE_UNSET + + log "logging into container registry $2" + az acr login \ + --name "$acr" \ + --expose-token \ + --output tsv \ + --query accessToken \ + | podman login \ + --username "00000000-0000-0000-0000-000000000000" \ + --password-stdin \ + "$registry" + local -ir status=$? + + xtrace_toggle "$xtrace_initial_set" + return "$status" + } + + local -r acr_name="${ACRRESOURCEID##*/}" + local -r registry_name="${acr_name}.azurecr.io" + cmd=(_ "$acr_name" "$registry_name") retry cmd retry_time # shellcheck disable=SC2068 @@ -200,25 +233,39 @@ pull_container_images() { retry cmd retry_time } -# configure_certs_general Configure system certificates common to all VMSS instances -configure_certs_general() { +# configure_ca_bundle() +# +# Configures system ca-bundle certificates common to all VMSS instances. +configure_ca_bundle() { log "starting" + local -r xtrace_initial_value="$(xtrace_is_set)" + xtrace_toggle XTRACE_UNSET + # setting MONITORING_GCS_AUTH_ID_TYPE=AuthKeyVault seems to have caused mdsd not # to honour SSL_CERT_FILE any more, heaven only knows why. local -r ssl_certs_basedir="/usr/lib/ssl/certs" mkdir -p "$ssl_certs_basedir" - csplit -f "$ssl_certs_basedir/cert-" -b %03d.pem /etc/pki/tls/certs/ca-bundle.crt /^$/1 "{*}" 1>/dev/null + + ca_bundle="/etc/pki/tls/certs/ca-bundle.crt" + log "Configuring $ca_bundle" + csplit -f "$ssl_certs_basedir/cert-" -b %03d.pem "$ca_bundle" /^$/1 "{*}" 1>/dev/null c_rehash "$ssl_certs_basedir" + + xtrace_toggle "$xtrace_initial_value" } -# configure_certs_rp Configure system certificates for RP VMSS -# args: +# configure_certs_rp() +# +# Configures RP system certificates configure_certs_rp() { log "starting" verify_role role_rp + local -r xtrace_initial_value="$(xtrace_is_set)" + xtrace_toggle XTRACE_UNSET + local -r rp_certs_basedir="/etc/aro-rp" mkdir -p "$rp_certs_basedir" base64 -d <<<"$ADMINAPICABUNDLE" > "$rp_certs_basedir/admin-ca-bundle.pem" @@ -227,22 +274,30 @@ configure_certs_rp() { fi chown -R 1000:1000 "$rp_certs_basedir" - configure_certs_general + + xtrace_toggle "$xtrace_initial_value" + configure_ca_bundle } -# configure_certs_gateway Configure system certificates for Gateway VMSS instances +# configure_certs_gateway() +# +# Configures system tls certificates for Gateway VMSS instances configure_certs_gateway() { log "starting" verify_role role_gateway - configure_certs_general + configure_ca_bundle } -# configure_certs_devproxy Configure system certificates for devproxy VMSS instances +# configure_certs_devproxy() +# +# Configures system certificates for devproxy VMSS instances configure_certs_devproxy() { log "starting" verify_role role_devproxy + xtrace_initial_value="$(xtrace_is_set)" + xtrace_toggle XTRACE_UNSET local -r proxy_certs_basedir="/etc/proxy" mkdir -p "$proxy_certs_basedir" @@ -251,8 +306,11 @@ configure_certs_devproxy() { base64 -d <<<"$PROXYCLIENTCERT" > "$proxy_certs_basedir/proxy-client.crt" chown -R 1000:1000 /etc/proxy chmod 0600 "$proxy_certs_basedir/proxy.key" + + xtrace_toggle "$xtrace_initial_value" } +# configure_azsecd_scan() configure_azsecd_scan() { log "starting" @@ -320,9 +378,10 @@ firewalld_configure_backend() { } # firewalld_configure +# # args: # 1) ports - nameref, string array; ports to be enabled. -# Ports must be postfixed with /tcp or /udp +# * Ports must be postfixed with /tcp or /udp firewalld_configure() { local -n ports="$1" log "starting" diff --git a/pkg/deploy/generator/scripts/util.sh b/pkg/deploy/generator/scripts/util.sh index ca1f36304ea..ec00f1a1a5b 100644 --- a/pkg/deploy/generator/scripts/util.sh +++ b/pkg/deploy/generator/scripts/util.sh @@ -1,31 +1,35 @@ #!/bin/bash # File to be sourced by *VMSS.sh scripts -# This is only present for the ability to manaully run the VMSS setup scripts seperate from the deploy process. -# e. g. scp copying the script to a test VM +# +# This is only present for the ability to manually run the VMSS setup scripts separate from the deploy process. +# * e.g. scp copying the script to a test VM +# # During normal deployment operations, the other util-*.sh files are prefixed to the VMSS scripts -if [ "${DEBUG:-false}" == true ]; then - set -x -fi +[ "${DEBUG:-false}" == true ] && set -x +# util_common="util-common.sh" util_common="util-common.sh" if [ -f "$util_common" ]; then # shellcheck source=util-common.sh source "$util_common" fi +# util_system="util-system.sh" util_system="util-system.sh" if [ -f "$util_system" ]; then # shellcheck source=util-system.sh source "$util_system" fi +# util_services="util-services.sh" util_services="util-services.sh" if [ -f "$util_services" ]; then # shellcheck source=util-services.sh source "$util_services" fi +# util_pkgs="util-packages.sh" util_pkgs="util-packages.sh" if [ -f "$util_pkgs" ]; then # shellcheck source=util-packages.sh