github.com/replicatedhq/ship@v0.55.0/integration/failing/init/concourse/expected/.ship/state.json (about) 1 { 2 "v1": { 3 "config": {}, 4 "releaseName": "concourse", 5 "helmValuesDefaults": "## Default values for Concourse Helm Chart.\n## This is a YAML-formatted file.\n## Declare variables to be passed into your templates.\n\n## Override the name of the Chart.\n##\n# nameOverride:\n\n## Concourse image.\n##\nimage: concourse/concourse\n\n## Concourse image version.\n## ref: https://hub.docker.com/r/concourse/concourse/tags/\n##\nimageTag: \"4.2.2\"\n\n## Specific image digest to use in place of a tag.\n## ref: https://kubernetes.io/docs/concepts/configuration/overview/#container-images\n##\n# imageDigest: sha256:54ea351808b55ecc14af6590732932e2a6a0ed8f6d10f45e8be3b51165d5526a\n\n## Specify a imagePullPolicy: 'Always' if imageTag is 'latest', else set to 'IfNotPresent'.\n## ref: https://kubernetes.io/docs/user-guide/images/#pre-pulling-images\n##\nimagePullPolicy: IfNotPresent\n\n## Optionally specify an array of imagePullSecrets.\n## Secrets must be manually created in the namespace.\n## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/\n##\n# imagePullSecrets:\n# - myRegistrKeySecretName\n\n## Configuration values for Concourse.\n## ref: https://concourse-ci.org/setting-up.html\n##\nconcourse:\n web:\n ## Minimum level of logs to see.\n # logLevel: info\n ## IP address on which to listen for web traffic.\n # bindIp: 0.0.0.0\n ## Port on which to listen for HTTP traffic.\n bindPort: 8080\n ## TLS configurations for the web component to be able to serve HTTPS traffic.\n ## Once enabled, consumes the certificates set via secrets.\n #\n tls:\n enabled: false\n ## Port on which to listen for HTTPS traffic.\n # bindPort:\n ## URL used to reach any ATC from the outside world.\n # externalUrl: http://127.0.0.1:8080\n ## URL used to reach this ATC from other ATCs in the cluster.\n # peerUrl: http://127.0.0.1:8080\n ## Enable encryption of pipeline configuration. Encryption keys can be set via secrets.\n ## See https://concourse-ci.org/encryption.html\n ##\n encryption:\n enabled: false\n localAuth:\n enabled: true\n ## IP address on which to listen for the pprof debugger endpoints.\n # debugBindIp: 127.0.0.1\n ## Port on which to listen for the pprof debugger endpoints.\n # debugBindPort: 8079\n ## Length of time for a intercepted session to be idle before terminating.\n # interceptIdleTimeout: 0m\n ## Time limit on checking for new versions of resources.\n # globalResourceCheckTimeout: 1h\n ## Interval on which to check for new versions of resources.\n # resourceCheckingInterval: 1m\n ## Interval on which to check for new versions of resource types.\n # resourceTypeCheckingInterval: 1m\n ## Method by which a worker is selected during container placement.\n # containerPlacementStrategy: volume-locality\n ## How long to wait for Baggageclaim to send the response header.\n # baggageclaimResponseHeaderTimeout: 1m\n ## Directory containing downloadable CLI binaries.\n # cliArtifactsDir:\n ## Log database queries.\n # logDbQueries:\n ## Interval on which to run build tracking.\n # buildTrackerInterval: 10s\n ## Default build logs to retain, 0 means all\n # defaultBuildLogsToRetain:\n ## Maximum build logs to retain, 0 means not specified. Will override values configured in jobs\n # maxBuildLogsToRetain:\n ## Default max number of cpu shares per task, 0 means unlimited\n # defaultTaskCpuLimit:\n ## Default maximum memory per task, 0 means unlimited\n # defaultTaskMemoryLimit:\n postgres:\n ## The host to connect to.\n host: 127.0.0.1\n ## The port to connect to.\n port: 5432\n ## Path to a UNIX domain socket to connect to.\n # socket:\n ## Whether or not to use SSL.\n sslmode: disable\n ## Dialing timeout. (0 means wait indefinitely)\n connectTimeout: 5m\n ## The name of the database to use.\n database: atc\n\n kubernetes:\n\n ## Enable the use of in-cluster Kubernetes Secrets.\n ##\n enabled: true\n\n ## Prefix to use for Kubernetes namespaces under which secrets will be looked up. Defaults to\n ## the Release name hyphen, e.g. \"my-release-\" produces namespace \"my-release-main\" for the\n ## \"main\" Concourse team.\n ##\n ## namespacePrefix:\n\n ## Teams to create namespaces for to hold secrets.\n teams:\n - main\n\n ## Create the Kubernetes namespace for each team listed above.\n createTeamNamespaces: true\n\n ## When true, namespaces are not deleted when the release is deleted.\n ## Irrelevant if the namespaces are not created by this chart.\n keepNamespaces: true\n\n ## Path to Kubernetes config when running ATC outside Kubernetes.\n # configPath:\n\n awsSecretsManager:\n ## Enable the use of AWS Secrets Manager.\n ##\n enabled: false\n\n ## AWS region to use when reading from Secrets Manager\n ##\n # region:\n\n ## pipeline-specific template for Secrets Manager parameters, defaults to: /concourse/{team}/{pipeline}/{secret}\n ##\n # pipelineSecretTemplate:\n\n ## team-specific template for Secrets Manager parameters, defaults to: /concourse/{team}/{secret}\n ##\n # teamSecretTemplate: ''\n\n awsSsm:\n ## Enable the use of AWS SSM.\n ##\n enabled: false\n\n ## AWS region to use when reading from SSM\n ##\n # region:\n\n ## pipeline-specific template for SSM parameters, defaults to: /concourse/{team}/{pipeline}/{secret}\n ##\n # pipelineSecretTemplate:\n\n ## team-specific template for SSM parameters, defaults to: /concourse/{team}/{secret}\n ##\n # teamSecretTemplate: ''\n\n\n vault:\n enabled: false\n\n ## URL pointing to vault addr (i.e. http://vault:8200).\n ##\n # url:\n\n ## vault path under which to namespace credential lookup, defaults to /concourse.\n ##\n pathPrefix: /concourse\n\n ## if the Vault server is using a self-signed certificate, set this to true,\n ## and provide a value for the cert in secrets.\n ##\n # useCaCert:\n\n ## vault authentication backend, leave this blank if using an initial periodic token\n ## currently supported backends: token, approle, cert.\n ##\n # authBackend:\n\n ## Cache returned secrets for their lease duration in memory\n # cache:\n ## If the cache is enabled, and this is set, override secrets lease duration with a maximum value\n # maxLease:\n ## Path to a directory of PEMEncoded CA cert files to verify the vault server SSL cert.\n # caPath:\n ## If set, is used to set the SNI host when connecting via TLS.\n # serverName:\n ## Enable insecure SSL verification.\n # insecureSkipVerify:\n ## Client token for accessing secrets within the Vault server.\n # clientToken:\n ## Auth backend to use for logging in to Vault.\n # authBackend:\n ## Time after which to force a reLogin. If not set, the token will just be continuously renewed.\n # authBackendMaxTtl:\n ## The maximum time between retries when logging in or reAuthing a secret.\n retryMax: 5m\n ## The initial time between retries when logging in or reAuthing a secret.\n retryInitial: 1s\n ## Don't actually do any automatic scheduling or checking.\n # noop:\n staticWorker:\n enabled: false\n ## A Garden API endpoint to register as a worker.\n gardenUrl:\n ## A Baggageclaim API endpoint to register with the worker.\n baggageclaimUrl:\n ## A resource type to advertise for the worker. Can be specified multiple times.\n resource:\n metrics:\n ## Host string to attach to emitted metrics.\n hostName:\n ## A keyValue attribute to attach to emitted metrics. Can be specified multiple times.\n attribute:\n datadog:\n enabled: false\n ## Use IP of node the pod is scheduled on, overrides `agentHost`\n agentHostUseHostIP: false\n ## Datadog agent host to expose dogstatsd metrics\n agentHost: 127.0.0.1\n ## Datadog agent port to expose dogstatsd metrics\n agentPort: 8125\n ## Prefix for all metrics to easily find them in Datadog\n # prefix: concoursedev\n influxdb:\n enabled: false\n ## InfluxDB server address to emit points to.\n url: http://127.0.0.1:8086\n ## InfluxDB database to write points to.\n database: concourse\n ## InfluxDB server username.\n # username:\n ## Skip SSL verification when emitting to InfluxDB.\n insecureSkipVerify: false\n ## Emit metrics to logs.\n # emitToLogs:\n newrelic:\n enabled: false\n ## New Relic Account ID\n # accountId:\n ## New Relic Insights API Key\n # apiKey:\n ## An optional prefix for emitted New Relic events\n # servicePrefix:\n prometheus:\n enabled: false\n ## IP to listen on to expose Prometheus metrics.\n bindIp: \"0.0.0.0\"\n ## Port to listen on to expose Prometheus metrics.\n bindPort: 9391\n riemann:\n enabled: false\n ## Riemann server address to emit metrics to.\n # host:\n ## Port of the Riemann server to emit metrics to.\n port: 5555\n ## An optional prefix for emitted Riemann services\n # servicePrefix:\n ## Tag to attach to emitted metrics. Can be specified multiple times.\n # tag:\n ## The value to set for XFrame-Options. If omitted, the header is not set.\n # xFrameOptions:\n gc:\n overrideDefaults: false\n ## Interval on which to perform garbage collection.\n interval: 30s\n ## Grace period before reaping oneOff task containers\n oneOffGracePeriod: 5m\n syslog:\n enabled: false\n ## Client hostname with which the build logs will be sent to the syslog server.\n hostName: atc-syslog-drainer\n ## Remote syslog server address with port (Example: 0.0.0.0:514).\n # address:\n ## Transport protocol for syslog messages (Currently supporting tcp, udp \u0026 tls).\n # transport:\n ## Interval over which checking is done for new build logs to send to syslog server (duration measurement units are s/m/h; eg. 30s/30m/1h)\n drainInterval: 30s\n ## if the syslog server is using a self-signed certificate, set this to true,\n ## and provide a value for the cert in secrets.\n useCaCert: false\n auth:\n ## Force sending secure flag on http cookies\n # cookieSecure:\n ## Length of time for which tokens are valid. Afterwards, users will have to log back in.\n # duration: 24h\n mainTeam:\n ## List of whitelisted local concourse users. These are the users you've added at atc startup with the addLocalUser setting.\n localUser: \"test\"\n ## Setting this flag will whitelist all logged in users in the system. ALL OF THEM. If, for example, you've configured GitHub, any user with a GitHub account will have access to your team.\n # allowAllUsers:\n ## Authentication (Main Team) (CloudFoundry)\n cf:\n ## List of whitelisted CloudFoundry users.\n user:\n ## List of whitelisted CloudFoundry orgs\n org:\n ## List of whitelisted CloudFoundry spaces\n space:\n ## (Deprecated) List of whitelisted CloudFoundry space guids\n spaceGuid:\n ## Authentication (Main Team) (GitHub)\n github:\n ## List of whitelisted GitHub users\n user:\n ## List of whitelisted GitHub orgs\n org:\n ## List of whitelisted GitHub teams\n team:\n ## Authentication (Main Team) (GitLab)\n gitlab:\n ## List of whitelisted GitLab users\n user:\n ## List of whitelisted GitLab groups\n group:\n ## Authentication (Main Team) (LDAP)\n ldap:\n ## List of whitelisted LDAP users\n user:\n ## List of whitelisted LDAP groups\n group:\n ## Authentication (Main Team) (OAuth2)\n oauth:\n ## List of whitelisted OAuth2 users\n user:\n ## List of whitelisted OAuth2 groups\n group:\n ## Authentication (Main Team) (OIDC)\n oidc:\n ## List of whitelisted OIDC users\n user:\n ## List of whitelisted OIDC groups\n group:\n ## Authentication (CloudFoundry)\n cf:\n enabled: false\n ## (Required) The base API URL of your CF deployment. It will use this information to discover information about the authentication provider.\n # apiUrl: https://api.run.pivotal.io\n ## CA Certificate\n # useCaCert:\n ## Skip SSL validation\n # skipSslValidation:\n ## Authentication (GitHub)\n github:\n enabled: false\n ## Hostname of GitHub Enterprise deployment (No scheme, No trailing slash)\n # host:\n ## CA certificate of GitHub Enterprise deployment\n # useCaCert:\n ## Authentication (GitLab)\n gitlab:\n enabled: false\n ## Hostname of Gitlab Enterprise deployment (Include scheme, No trailing slash)\n # host:\n ## Authentication (LDAP)\n ldap:\n enabled: false\n ## The auth provider name displayed to users on the login page\n # displayName:\n ## (Required) The host and optional port of the LDAP server. If port isn't supplied, it will be guessed based on the TLS configuration. 389 or 636.\n # host:\n ## (Required) Bind DN for searching LDAP users and groups. Typically this is a readOnly user.\n # bindDn:\n ## (Required) Bind Password for the user specified by 'bindDn'\n # bindPw:\n ## Required if LDAP host does not use TLS.\n # insecureNoSsl:\n ## Skip certificate verification\n # insecureSkipVerify:\n ## Start on insecure port, then negotiate TLS\n # startTls:\n ## CA certificate\n # useCaCert:\n ## BaseDN to start the search from. For example 'cn=users,dc=example,dc=com'\n # userSearchBaseDn:\n ## Optional filter to apply when searching the directory. For example '(objectClass=person)'\n # userSearchFilter:\n ## Attribute to match against the inputted username. This will be translated and combined with the other filter as '(\u003cattr\u003e=\u003cusername\u003e)'.\n # userSearchUsername:\n ## Can either be: 'sub' search the whole sub tree or 'one' - only search one level. Defaults to 'sub'.\n # userSearchScope:\n ## A mapping of attributes on the user entry to claims. Defaults to 'uid'.\n # userSearchIdAttr:\n ## A mapping of attributes on the user entry to claims. Defaults to 'mail'.\n # userSearchEmailAttr:\n ## A mapping of attributes on the user entry to claims.\n # userSearchNameAttr:\n ## BaseDN to start the search from. For example 'cn=groups,dc=example,dc=com'\n # groupSearchBaseDn:\n ## Optional filter to apply when searching the directory. For example '(objectClass=posixGroup)'\n # groupSearchFilter:\n ## Can either be: 'sub' search the whole sub tree or 'one' - only search one level. Defaults to 'sub'.\n # groupSearchScope:\n ## Adds an additional requirement to the filter that an attribute in the group match the user's attribute value. The exact filter being added is: (\u003cgroupAttr\u003e=\u003cuserAttr value\u003e)\n # groupSearchUserAttr:\n ## Adds an additional requirement to the filter that an attribute in the group match the user's attribute value. The exact filter being added is: (\u003cgroupAttr\u003e=\u003cuserAttr value\u003e)\n # groupSearchGroupAttr:\n ## The attribute of the group that represents its name.\n # groupSearchNameAttr:\n ## Authentication (OAuth2)\n oauth:\n enabled: false\n ## The auth provider name displayed to users on the login page\n # displayName:\n ## (Required) Authorization URL\n # authUrl:\n ## (Required) Token URL\n # tokenUrl:\n ## UserInfo URL\n # userinfoUrl:\n ## Any additional scopes that need to be requested during authorization\n # scope:\n ## The groups key indicates which claim to use to map external groups to Concourse teams.\n # groupsKey:\n ## CA Certificate\n # useCaCert:\n ## Skip SSL validation\n # skipSslValidation:\n ## Authentication (OIDC)\n oidc:\n enabled: false\n ## The auth provider name displayed to users on the login page\n # displayName:\n ## (Required) An OIDC issuer URL that will be used to discover provider configuration using the .wellKnown/openid-configuration\n # issuer:\n ## Any additional scopes that need to be requested during authorization\n # scope:\n ## The groups key indicates which claim to use to map external groups to Concourse teams.\n # groupsKey:\n ## CA Certificate\n # useCaCert:\n ## Skip SSL validation\n # skipSslValidation:\n tsa:\n ## Minimum level of logs to see.\n # logLevel: info\n ## IP address on which to listen for SSH.\n # bindIp: 0.0.0.0\n ## Port on which to listen for SSH.\n bindPort: 2222\n ## Port on which to listen for TSA pprof server.\n # bindDebugPort: 8089\n ## IP address of this TSA, reachable by the ATCs. Used for forwarded worker addresses.\n # peerIp:\n ## Path to private key to use for the SSH server.\n # hostKey:\n ## Path to file containing keys to authorize, in SSH authorized_keys format (one public key per line).\n # authorizedKeys:\n ## Path to file containing keys to authorize, in SSH authorized_keys format (one public key per line).\n # teamAuthorizedKeys:\n ## ATC API endpoints to which workers will be registered.\n # atcUrl:\n ## Path to private key to use when signing tokens in reqests to the ATC during registration.\n # sessionSigningKey:\n ## interval on which to heartbeat workers to the ATC\n # heartbeatInterval: 30s\n worker:\n ## The name to set for the worker during registration. If not specified, the hostname will be used.\n # name:\n ## A tag to set during registration. Can be specified multiple times.\n # tag:\n ## The name of the team that this worker will be assigned to.\n # team:\n ## HTTP proxy endpoint to use for containers.\n # http_proxy:\n ## HTTPS proxy endpoint to use for containers.\n # https_proxy:\n ## Blacklist of addresses to skip the proxy when reaching.\n # no_proxy:\n ## If set, the worker will be immediately removed upon stalling.\n # ephemeral:\n ## Port on which to listen for beacon pprof server.\n # bindDebugPort: 9099\n ## Version of the worker. This is normally baked in to the binary, so this flag is hidden.\n # version:\n ## Directory in which to place container data.\n workDir: /concourse-work-dir\n ## IP address on which to listen for the Garden server.\n # bindIp: 127.0.0.1\n ## Port on which to listen for the Garden server.\n # bindPort: 7777\n ## IP used to reach this worker from the ATC nodes.\n # peerIp:\n ## Minimum level of logs to see.\n # logLevel: info\n tsa:\n ## TSA host to forward the worker through. Can be specified multiple times.\n host: 127.0.0.1:2222\n ## File containing a public key to expect from the TSA.\n # publicKey:\n ## File containing the private key to use when authenticating to the TSA.\n # workerPrivateKey:\n garden:\n ## Minimum level of logs to see.\n # logLevel: info\n ## format of log timestamps\n # timeFormat: unix-epoch\n ## Bind with TCP on the given IP.\n # bindIp:\n ## Bind with TCP on the given port.\n bindPort: 7777\n ## Bind with Unix on the given socket path.\n # bindSocket: /tmp/garden.sock\n ## Bind the debug server on the given IP.\n # debugBindIp:\n ## Bind the debug server to the given port.\n # debugBindPort: 17013\n ## Skip the preparation part of the host that requires root privileges\n # skipSetup:\n ## Directory in which to store container data.\n # depot: /var/run/gdn/depot\n ## Path in which to store properties.\n # propertiesPath:\n ## Path in which to store temporary sockets\n # consoleSocketsPath:\n ## Clean up proccess dirs on first invocation of wait\n # cleanupProcessDirsOnWait:\n ## Disable creation of privileged containers\n # disablePrivilegedContainers:\n ## The lowest numerical subordinate user ID the user is allowed to map\n # uidMapStart: 1\n ## The number of numerical subordinate user IDs the user is allowed to map\n # uidMapLength:\n ## The lowest numerical subordinate group ID the user is allowed to map\n # gidMapStart: 1\n ## The number of numerical subordinate group IDs the user is allowed to map\n # gidMapLength:\n ## Default rootfs to use when not specified on container creation.\n # defaultRootfs:\n ## Default time after which idle containers should expire.\n # defaultGraceTime:\n ## Clean up all the existing containers on startup.\n # destroyContainersOnStartup:\n ## Apparmor profile to use for unprivileged container processes\n # apparmor:\n ## Directory in which to extract packaged assets\n # assetsDir: /var/gdn/assets\n ## Path to the 'dadoo' binary.\n # dadooBin:\n ## Path to the 'nstar' binary.\n # nstarBin:\n ## Path to the 'tar' binary.\n # tarBin:\n ## path to the iptables binary\n # iptablesBin: /sbin/iptables\n ## path to the iptables-restore binary\n # iptablesRestoreBin: /sbin/iptables-restore\n ## Path execute as pid 1 inside each container.\n # initBin:\n ## Path to the runtime plugin binary.\n # runtimePlugin: runc\n ## Extra argument to pass to the runtime plugin. Can be specified multiple times.\n # runtimePluginExtraArg:\n ## Directory on which to store imported rootfs graph data.\n # graph:\n ## Disk usage of the graph dir at which cleanup should trigger, or -1 to disable graph cleanup.\n # graphCleanupThresholdInMegabytes: -1\n ## Image that should never be garbage collected. Can be specified multiple times.\n # persistentImage:\n ## Path to image plugin binary.\n # imagePlugin:\n ## Extra argument to pass to the image plugin to create unprivileged images. Can be specified multiple times.\n # imagePluginExtraArg:\n ## Path to privileged image plugin binary.\n # privilegedImagePlugin:\n ## Extra argument to pass to the image plugin to create privileged images. Can be specified multiple times.\n # privilegedImagePluginExtraArg:\n ## Docker registry API endpoint.\n # dockerRegistry: registry-1.docker.io\n ## Docker registry to allow connecting to even if not secure. Can be specified multiple times.\n # insecureDockerRegistry:\n ## Network range to use for dynamically allocated container subnets.\n # networkPool: 10.254.0.0/22\n ## Allow network access to the host machine.\n # allowHostAccess:\n ## Network ranges to which traffic from containers will be denied. Can be specified multiple times.\n # denyNetwork:\n ## DNS server IP address to use instead of automatically determined servers. Can be specified multiple times.\n # dnsServer:\n ## DNS server IP address to append to the automatically determined servers. Can be specified multiple times.\n # additionalDnsServer:\n ## Per line hosts entries. Can be specified multiple times and will be appended verbatim in order to /etc/hosts\n # additionalHostEntry:\n ## IP address to use to reach container's mapped ports. Autodetected if not specified.\n # externalIp:\n ## Start of the ephemeral port range used for mapped container ports.\n # portPoolStart: 61001\n ## Size of the port pool used for mapped container ports.\n # portPoolSize: 4534\n ## Path in which to store port pool properties.\n # portPoolPropertiesPath:\n ## MTU size for container network interfaces. Defaults to the MTU of the interface used for outbound access by the host. Max allowed value is 1500.\n # mtu:\n ## Path to network plugin binary.\n # networkPlugin:\n ## Extra argument to pass to the network plugin. Can be specified multiple times.\n # networkPluginExtraArg:\n ## Maximum number of microseconds each cpu share assigned to a container allows per quota period\n # cpuQuotaPerShare: 0\n ## Set hard limit for the tcp buf memory, value in bytes\n # tcpMemoryLimit: 0\n ## Default block IO weight assigned to a container\n # defaultContainerBlockioWeight: 0\n ## Maximum number of containers that can be created.\n # maxContainers: 0\n ## Disable swap memory limit\n # disableSwapLimit:\n ## Interval on which to emit metrics.\n # metricsEmissionInterval: 1m\n ## Origin identifier for Dropsonde-emitted metrics.\n # dropsondeOrigin: garden-linux\n ## Destination for Dropsonde-emitted metrics.\n # dropsondeDestination: 127.0.0.1:3457\n ## Path to a containerd socket.\n # containerdSocket:\n ## Use containerd to run processes in containers.\n # useContainerdForProcesses:\n ## Enable proxy DNS server.\n # dnsProxyEnable:\n baggageclaim:\n ## Minimum level of logs to see.\n # logLevel: info\n ## IP address on which to listen for API traffic.\n # bindIp: 127.0.0.1\n ## Port on which to listen for API traffic.\n # bindPort: 7788\n ## Port on which to listen for baggageclaim pprof server.\n # bindDebugPort: 8099\n ## Directory in which to place volume data.\n # volumes:\n ## Driver to use for managing volumes.\n driver: naive\n ## Path to btrfs binary\n # btrfsBin: btrfs\n ## Path to mkfs.btrfs binary\n # mkfsBin: mkfs.btrfs\n ## Path to directory in which to store overlay data\n # overlaysDir:\n ## Interval on which to reap expired volumes.\n # reapInterval: 10s\n\n## Configuration values for Concourse Web components.\n##\nweb:\n ## Override the components name (defaults to web).\n ##\n # nameOverride:\n\n ## Number of replicas.\n ##\n replicas: 1\n\n ## Configures the liveness probe used to determine\n ## if the Web component is up.\n ## Note.: if you're upgrading Concourse from one version\n ## to another, the probe will probably fail for some time\n ## before migrations are finished - in such situations,\n ## either consider bumping the values set here.\n livenessProbe:\n failureThreshold: 5\n httpGet:\n path: /api/v1/info\n port: atc\n initialDelaySeconds: 10\n periodSeconds: 15\n timeoutSeconds: 3\n\n ## Configures the readiness probes.\n readinessProbe:\n httpGet:\n path: /api/v1/info\n port: atc\n\n ## Configure resource requests and limits.\n ## ref: https://kubernetes.io/docs/user-guide/compute-resources/\n ##\n resources:\n requests:\n cpu: \"100m\"\n memory: \"128Mi\"\n\n ## Configure additional environment variables for the\n ## web containers.\n # env:\n # - name: CONCOURSE_LOG_LEVEL\n # value: \"debug\"\n # - name: CONCOURSE_TSA_LOG_LEVEL\n # value: \"debug\"\n\n ## For managing where secrets should be mounted for the web agents\n keySecretsPath: \"/concourse-keys\"\n authSecretsPath: \"/concourse-auth\"\n vaultSecretsPath: \"/concourse-vault\"\n postgresqlSecretsPath: \"/concourse-postgresql\"\n syslogSecretsPath: \"/concourse-syslog\"\n tlsSecretsPath: \"/concourse-web-tls\"\n\n ## Configure additional volumes for the\n ## web container(s)\n ##\n # additionalVolumes:\n # - name: my-team-authorized-keys\n # configMap:\n # name: my-team-authorized-keys-config\n\n ## Configure additional volumeMounts for the\n ## web container(s)\n ##\n # additionalVolumeMounts:\n # - name: my-team-authorized-keys\n # mountPath: /my-team-authorized-keys\n\n ## Additional affinities to add to the web pods.\n ##\n # additionalAffinities:\n # nodeAffinity:\n # preferredDuringSchedulingIgnoredDuringExecution:\n # - weight: 50\n # preference:\n # matchExpressions:\n # - key: spot\n # operator: NotIn\n # values:\n # - \"true\"\n\n ## Annotations for the web nodes.\n ## Ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/\n annotations: {}\n # annotations:\n # key1: \"value1\"\n # key2: \"value2\"\n\n ## Node selector for web nodes.\n nodeSelector: {}\n\n ## Tolerations for the web nodes.\n ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/\n tolerations: []\n # tolerations:\n # - key: \"toleration=key\"\n # operator: \"Equal\"\n # value: \"value\"\n # effect: \"NoSchedule\"\n\n ## Service configuration.\n ## ref: https://kubernetes.io/docs/user-guide/services/\n ##\n service:\n ## For minikube, set this to ClusterIP, elsewhere use LoadBalancer or NodePort\n ## ref: https://kubernetes.io/docs/user-guide/services/#publishing-services---service-types\n ##\n type: ClusterIP\n\n ## When using web.service.type: LoadBalancer, sets the user-specified load balancer IP\n # loadBalancerIP: 172.217.1.174\n\n # # Additional Labels to be added to the web service.\n # labels:\n\n ## Annotations to be added to the web service.\n ##\n # annotations:\n # prometheus.io/probe: \"true\"\n # prometheus.io/probe_path: \"/\"\n #\n # ## When using web.service.type: LoadBalancer, enable HTTPS with an ACM cert\n # service.beta.kubernetes.io/aws-load-balancer-ssl-cert: \"arn:aws:acm:eu-west-1:123456789:certificate/abc123-abc123-abc123-abc123\"\n # service.beta.kubernetes.io/aws-load-balancer-backend-protocol: \"http\"\n # service.beta.kubernetes.io/aws-load-balancer-backend-port: \"atc\"\n # service.beta.kubernetes.io/aws-load-balancer-ssl-ports: \"443\"\n #\n # ## When using web.service.type: LoadBalancer, whitelist the load balancer to particular IPs\n # loadBalancerSourceRanges:\n # - 192.168.1.10/32\n\n # When using web.service.type: NodePort, sets the nodePort for atc\n # atcNodePort: 30150\n #\n # When using web.service.type: NodePort, sets the nodePort for atc tls\n # atcTlsNodePort: 30151\n #\n # When using web.service.type: NodePort, sets the nodePort for tsa\n # tsaNodePort: 30152\n\n ## Ingress configuration.\n ## ref: https://kubernetes.io/docs/user-guide/ingress/\n ##\n ingress:\n ## Enable Ingress.\n ##\n enabled: false\n\n ## Annotations to be added to the web ingress.\n ##\n # annotations:\n # kubernetes.io/ingress.class: nginx\n # kubernetes.io/tls-acme: 'true'\n\n ## Hostnames.\n ## Must be provided if Ingress is enabled.\n ##\n # hosts:\n # - concourse.domain.com\n\n ## TLS configuration.\n ## Secrets must be manually created in the namespace.\n ##\n # tls:\n # - secretName: concourse-web-tls\n # hosts:\n # - concourse.domain.com\n #\n #\n\n## Configuration values for Concourse Worker components.\n##\nworker:\n ## Override the components name (defaults to worker).\n ##\n # nameOverride:\n\n ## Number of replicas.\n ##\n replicas: 2\n\n ## Minimum number of workers available after an eviction\n ## ref: https://kubernetes.io/docs/admin/disruptions/\n ##\n minAvailable: 1\n\n ## Configure resource requests and limits.\n ## ref: https://kubernetes.io/docs/user-guide/compute-resources/\n ##\n resources:\n requests:\n cpu: \"100m\"\n memory: \"512Mi\"\n\n ## Configure additional environment variables for the\n ## worker container(s)\n # env:\n # - name: http_proxy\n # value: \"http://proxy.your-domain.com:3128\"\n # - name: https_proxy\n # value: \"http://proxy.your-domain.com:3128\"\n # - name: no_proxy\n # value: \"your-domain.com\"\n # - name: CONCOURSE_GARDEN_DNS_SERVER\n # value: \"8.8.8.8\"\n # - name: CONCOURSE_GARDEN_DNS_PROXY_ENABLE\n # value: \"true\"\n # - name: CONCOURSE_GARDEN_ALLOW_HOST_ACCESS\n # value: \"true\"\n\n\n ## For managing where secrets should be mounted for worker agents\n keySecretsPath: \"/concourse-keys\"\n\n ## Configure additional volumeMounts for the\n ## worker container(s)\n # additionalVolumeMounts:\n # - name: concourse-baggageclaim\n # mountPath: /baggageclaim\n\n ## Annotations to be added to the worker pods.\n ##\n # annotations:\n # iam.amazonaws.com/role: arn:aws:iam::123456789012:role/concourse\n #\n\n ## Node selector for the worker nodes.\n ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector\n nodeSelector: {}\n # nodeSelector: {type: concourse}\n\n ## Additional affinities to add to the worker pods.\n ## Useful if you prefer to run workers on non-spot instances, for example\n ##\n # additionalAffinities:\n # nodeAffinity:\n # preferredDuringSchedulingIgnoredDuringExecution:\n # - weight: 50\n # preference:\n # matchExpressions:\n # - key: spot\n # operator: NotIn\n # values:\n # - \"true\"\n\n ## Configure additional volumes for the\n ## worker container(s)\n # additionalVolumes:\n # - name: concourse-baggageclaim\n # hostPath:\n # path: /dev/nvme0n1\n # type: BlockDevice\n #\n # As a special exception, this allows taking over the `concourse-work-dir`\n # volume (from the default emptyDir) if `persistence.enabled` is false:\n #\n # additionalVolumes:\n # - name: concourse-work-dir\n # hostPath:\n # path: /mnt/locally-mounted-fast-disk/concourse\n # type: DirectoryOrCreate\n\n ## Whether the workers should be forced to run on separate nodes.\n ## This is accomplished by setting their AntiAffinity with requiredDuringSchedulingIgnoredDuringExecution as opposed to preferred\n ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#inter-pod-affinity-and-anti-affinity-beta-feature\n hardAntiAffinity: false\n\n ## Tolerations for the worker nodes.\n ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/\n tolerations: []\n # tolerations:\n # - key: \"toleration=key\"\n # operator: \"Equal\"\n # value: \"value\"\n # effect: \"NoSchedule\"\n\n ## Time to allow the pod to terminate before being forcefully terminated. This should provide time for\n ## the worker to retire, i.e. drain its tasks. See https://concourse-ci.org/worker-internals.html for worker\n ## lifecycle semantics.\n terminationGracePeriodSeconds: 60\n\n ## If any of the strings are found in logs, the worker's livenessProbe will fail and trigger a pod restart.\n ## Specify one string per line, exact matching is used.\n ##\n fatalErrors: |-\n guardian.api.garden-server.create.failed\n baggageclaim.api.volume-server.create-volume-async.failed-to-create\n\n ## Strategy for StatefulSet updates (requires Kubernetes 1.6+)\n ## Ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset\n ##\n updateStrategy: RollingUpdate\n\n ## Pod Management strategy (requires Kubernetes 1.7+)\n ## Ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-management-policies\n ##\n ## \"OrderedReady\" is default. \"Parallel\" means worker pods will launch or terminate\n ## in parallel.\n podManagementPolicy: Parallel\n\n ## When persistance is disabled this value will be used to limit the emptyDir volume size\n ## Ref: https://kubernetes.io/docs/concepts/storage/volumes/#emptydir\n # emptyDirSize: 20Gi\n\n## Persistent Volume Storage configuration.\n## ref: https://kubernetes.io/docs/user-guide/persistent-volumes\n##\npersistence:\n ## Enable persistence using Persistent Volume Claims.\n ##\n enabled: true\n\n ## Worker Persistence configuration.\n ##\n worker:\n ## concourse data Persistent Volume Storage Class\n ## If defined, storageClassName: \u003cstorageClass\u003e\n ## If set to \"-\", storageClassName: \"\", which disables dynamic provisioning\n ## If undefined (the default) or set to null, no storageClassName spec is\n ## set, choosing the default provisioner. (gp2 on AWS, standard on\n ## GKE, AWS \u0026 OpenStack)\n ##\n # storageClass: \"-\"\n\n ## Persistent Volume Access Mode.\n ##\n accessMode: ReadWriteOnce\n\n ## Persistent Volume Storage Size.\n ##\n size: 20Gi\n\n## Configuration values for the postgresql dependency.\n## ref: https://github.com/kubernetes/charts/blob/master/stable/postgresql/README.md\n##\npostgresql:\n\n ## Use the PostgreSQL chart dependency.\n ## Set to false if bringing your own PostgreSQL, and set secret value postgresql-uri.\n ##\n enabled: true\n\n ### PostgreSQL User to create.\n ##\n postgresUser: concourse\n\n ## PostgreSQL Password for the new user.\n ## If not set, a random 10 characters password will be used.\n ##\n postgresPassword: concourse\n\n ## PostgreSQL Database to create.\n ##\n postgresDatabase: concourse\n\n ## Persistent Volume Storage configuration.\n ## ref: https://kubernetes.io/docs/user-guide/persistent-volumes\n ##\n persistence:\n ## Enable PostgreSQL persistence using Persistent Volume Claims.\n ##\n enabled: true\n ## concourse data Persistent Volume Storage Class\n ## If defined, storageClassName: \u003cstorageClass\u003e\n ## If set to \"-\", storageClassName: \"\", which disables dynamic provisioning\n ## If undefined (the default) or set to null, no storageClassName spec is\n ## set, choosing the default provisioner. (gp2 on AWS, standard on\n ## GKE, AWS \u0026 OpenStack)\n ##\n # storageClass: \"-\"\n ## Persistent Volume Access Mode.\n ##\n accessMode: ReadWriteOnce\n ## Persistent Volume Storage Size.\n ##\n size: 8Gi\n\n## For RBAC support:\nrbac:\n # true here enables creation of rbac resources\n create: true\n\n # rbac version\n apiVersion: v1beta1\n\n ## The name of the service account to use for web pods if rbac.create is false\n ##\n webServiceAccountName: default\n\n ## The name of the service account to use for worker pods if rbac.create is false\n ##\n workerServiceAccountName: default\n\n## For managing secrets using Helm\n##\nsecrets:\n\n ## List of username:password or username:bcrypted_password combinations for all your local concourse users.\n localUsers: \"test:test\"\n ## Create the secret resource from the following values. Set this to\n ## false to manage these secrets outside Helm.\n ##\n create: true\n\n ## The TLS certificate and private key for the web component to be able to terminate\n ## TLS connections.\n # webTlsCert:\n # webTlsKey:\n\n ## Concourse Host Keys.\n ## ref: https://concourse-ci.org/install.html#generating-keys\n ##\n hostKey: |-\n -----BEGIN RSA PRIVATE KEY-----\n MIIEogIBAAKCAQEA2AUPXxuiDC/qrBWjIdT5fvNcMlMEYpR3X4SLQIgLC1ULDsCO\n fleKZ+Wi4RzwbkUKiKmJm5GeyNVVCDdfvdD1Sd1+5faqmp2/OQBzLS7o8NY/btMw\n 8h9lx4KVJaJJ1EM1EiyGY41Nx591KP14pBfr0/NdOIrDu2JvF6e7CHEbrzkN57kb\n BVQkaIMaS01Rw/5Oe68GFalli2ii8L8dNWVVzquBh5PwVWimvTgwv3TYG2TH8L1V\n V7n+/zRRpkjMl2+PUouGqD+Bp+4wF+hp4AW5v24CqjtLJEMv4IEJv2FRfrOauBIZ\n XjAS1SSg9VaTOS3iwxaYrv8uG1XfMFHICvkEPQIDAQABAoIBAG87W8jrX6vK2Jm3\n ooJ/OeFmymiXWsCwFi+2/kVCR/2T0tfLyxO/W+NX2WD1F9CP+HaaZeMXPp3HS7up\n V8FT4ZohVYBwXTS0WYyucKApcYThrVQRpzhldnEfClGQmVeVK7Sp/KEyV4Sc1SVA\n L2i/cI142N2Ohm7spquVkLcuFsVINzZ0fXCv25dTqbkEgjTJzNdBzyFXvc4z0Mt9\n gW14M7mz+YKYOfsCxIEm438fC9b16C96yIFBdN+/jaP8pmb2RoIE2D0F8bj5K1hR\n YyGFKMOU4e6cYq59iWfubKuu2WNJEBk/5aO7x7Xu2S0k8wIYlwxFuu4LfR2Kvizu\n +mFVf3kCgYEA9e0+40tJGpOPM8hAB3DwXjYc8lCuyYf3z30T3RqVNCUVSWnlaj/s\n 3ENi6+Ng3u+Zs8cR2CFou+jAClTyWLuSnI9yACD0eyW9n4bzYMUbgdC6vneLjpzx\n wWR9Xv5RmZVly7xWuqcgEeEf8RNcYI3oXby0laF3EObvuAx/4ETIkFcCgYEA4N42\n w1UEWGopWBIIXYHkEPHQuF0SxR2CZyh9ExTeSxFphyibkcHRjDW+t91ZLnSm5k1N\n TOdYuc0ApBV3U+TexeFvDI94L/Oze6Ht5MatRQz8kRwMFGJL3TrpbgTmWdfG05Ad\n oiScJzwY16oJXnKusxik7V+gCCNNE0/2UuMnY4sCgYAEf82pvOPef5qcGOrK+A79\n ukG3UTCRcVJgUmp9nhHivVbxW+WdlwPPV9BEfol0KrAGMPsrmBjhbzWsOregVfYt\n tRYh2HiAlEUu2Po06AZDzrzL5UYBWu+1WRBOH5sAk1IkcxKnIY2dph++elszTQVW\n SbCIGEckYQU7ucbRJJECywKBgBb4vHFx8vKxTa3wkagzx7+vZFohL/SxEgxFx5k2\n bYsPqU8kZ9gZC7YeG3CfDShAxHgMd5QeoiLA/YrFop4QaG2gnP6UfXuwkqpTnYDc\n hwDh1b9hNR6z9/oOtaAGoh2VfHtKYqyYvtcHPaZyeWiLoKstHlQdi7SpHouVhJ1t\n FS4HAoGAGy+56+zvdROjJy9A2Mn/4BvWrsu4RSQILBJ6Hb4TpF46p2fn0rwqyhOj\n Occs+xkdEsI9w5phXzIEeOq2LqvWHDPxtdLpxOrrmx4AftAWdM8S1+OqTpzHihK1\n y1ZOrWfvON+XjWFFAEej/CpQZkNUkTzjTtSC0dnfAveZlasQHdI=\n -----END RSA PRIVATE KEY-----\n\n hostKeyPub: |-\n ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYBQ9fG6IML+qsFaMh1Pl+81wyUwRilHdfhItAiAsLVQsOwI5+V4pn5aLhHPBuRQqIqYmbkZ7I1VUIN1+90PVJ3X7l9qqanb85AHMtLujw1j9u0zDyH2XHgpUloknUQzUSLIZjjU3Hn3Uo/XikF+vT8104isO7Ym8Xp7sIcRuvOQ3nuRsFVCRogxpLTVHD/k57rwYVqWWLaKLwvx01ZVXOq4GHk/BVaKa9ODC/dNgbZMfwvVVXuf7/NFGmSMyXb49Si4aoP4Gn7jAX6GngBbm/bgKqO0skQy/ggQm/YVF+s5q4EhleMBLVJKD1VpM5LeLDFpiu/y4bVd8wUcgK+QQ9 Concourse\n\n ## Concourse Session Signing Keys.\n ## ref: https://concourse-ci.org/install.html#generating-keys\n ##\n sessionSigningKey: |-\n -----BEGIN RSA PRIVATE KEY-----\n MIIEowIBAAKCAQEAwLql/rUIaI+PX7Tl3FWcTee4sQf8/daakALXx955tPwkhqlY\n e4T2V84p/ylFvNWpM4vfcMYKfMY0JLKgAgBvJhCytSkDBhTBoWmN6yE0AB11P9En\n lIZRBWNYqaC2cSge2ZD8qOSnwfFhnQAW8+7pE+ElJAVh7dtdF3A478H50lIigq8I\n zMWp2EGJpFC7/Uu36oIL/03MNGCmrH1jvtTuJiAMQUZYyL1ReBkvvHOzw9i4HXPy\n SMVtcllm4NBs2aVPtwhr2kwSkLt8t1bPdRn6OIyEAw5WktzAKaiZnkTvj6g3xzdp\n zKcrdlBr9aznlNvoSinBUfvtwyFmvFN1HHbA9wIDAQABAoIBAE7G/DrUfI9gvtX7\n 90jMpYsigFe8UCjho2PiBZlo0o6r0bJJXiV+/8J8PqZRlHPPUc4EClzqVjcSPRYS\n /VxUGRqSELoD/Xxq14rGvn+xnrO9VsOzFl6bWFq/dOpBCtHN+G4t2VifvgKES8YE\n 11z19sdta+UBXjn/RFnkQSGfRCI3QqTaYvjxevt0uWlyPmqkFPQQw8bvHIXzoB+B\n rzeiMa++nMvbX5pAH9XA0BvhyuH3fHidTUwiVBpkMcpLWtjP0A0JTsecDdbinDDq\n un2EIo8zMWRwKQN/JnUxsi8AUEigBTCUqeDgREXtW62uvFkSpcVMXwmVityLYIVy\n qnVLUCECgYEA6IwXkP1qnSfcNeoVI/ypDuz1/kdqcjSPhLYe+jdiLLoFkMW9AlDm\n lzwNaWlTFD9ygo+NjJCo63/A8HCm55sajws5hZ6r20vdZcKFMk9h0qF5oVA7lkQ2\n gvG2WaznuU7KkqhfP+pXhiLgZKoJkst/+g7r6uHpredwDY6hxeBK4vsCgYEA1CqH\n 8ywC5qUo/36kQg/TU2adN/YEHdJAAbU23EVrGQSVmnXW08H2NLFk0tsxrwoNnbgp\n PIk2J7BimbJvbND17ibr4GAklDTsR8aJkDl+0JgNCAK9N07qVt1s7FXzhg95jUL9\n EQW55z60GAJpecqNwA4Jsa8P852N0355Obp92TUCgYBkOBvf7JcJ66fHxH4f6D+j\n oxPQ5k5Fsck4VJS9GSlCRVkor09ptBvsiYDuMOoRC9b51YwXTDDAbWplNOd5YSrt\n AtVjdKJz/BoKRO7KY9Owxs54au+DLxqfDDSeKRokjoRW+CE0lnXp5RX3zCAcF3+r\n 8MpTi9D9lYSBEzs84BDmCQKBgQCMcH6/K3HcJJVn0fd+tyUGftUw9sswxjySJNbk\n pZrH263/qWMDls+Xf5kire9MU1ZCAWZiaN0NFoed/2wcVpGEDAV0548u/30r4bKr\n YjOcdhmiJNYFJ1qdF0MDib2CDvpB1IbZXrX46RujDO2urbJ435HxKNVhR/had8xc\n tyKYxQKBgCVDhN0MhnlUQJVZfX42APmF4gQg0r3sfL/NGXjEjMIKKFe5a88eZVHr\n L8x1+dp0q7czC8a/l1DUuiwDKl8OEpxLsGCq/J/wAfrSMPifu6EUlbUwlJOPdgha\n +p/KFAelHXJ2w/8yackAcarh35VP7ixhuvxswHNdgvfsBTFcjn30\n -----END RSA PRIVATE KEY-----\n\n ## Concourse Worker Keys.\n ## ref: https://concourse-ci.org/install.html#generating-keys\n ##\n workerKey: |-\n -----BEGIN RSA PRIVATE KEY-----\n MIIEpAIBAAKCAQEAuPehUmBXAQCoA7TLAQCYhf+vzcZVyj+VGXnMhLHnWLk7dRjo\n CU8GgNamdS5h7G3ywxOvKA3YjOLr8XyOMLS4c+e8N7tIzlMWdiXhe0lcBH9Z1ai5\n +Bof3/BlDUBksiKdc1A+QcfX6tDwMkOO5re1H4vOK3H/Cype58wCB03HYNgb05ED\n fW1Bj2qvz29VtmyjwEMuDs100iMqwCfPUx9oxXmmX8sUBRmw/Y1Rx/8pdKIjKw3m\n kWIHHBOSCPimO1qC47Aa8v/UH9hERCykyuFHiBiKlnIvZWm9bYvhsRTz4gt5KzRY\n 6OI0oVeHlLOHDSK48Da8VWij15lOqO2Nx6WssQIDAQABAoIBADET22UNFOi6MNpS\n 5S5N5ypezlnOD0NLnZcV3zMyNQ0wkNsgEakuo64Zxi7/cJIYFjq2hVoeWl//cdUw\n VFYODYcLbMBo3AeKukH9CRf6PgUfeUmcrENtQxnbIiTi+hTd5GMNXod7rAmtCJ59\n mHQVOGS3ZqvWYnKm+mmMktk3RPinynX/A4y3WHPacuAS58HM09Ck43WcHMxbGpsL\n /gZpICyFYZ2DviM+AHyWGcmw7LJrpC0QHo6+BAFMs4xlUecNgVIFUpfOoAcfsdtG\n K9j4AbuZ47iFisbay+1pyg/7O5eRTdGVQRtc7PBMOjea5jGsfmlDmdn1ZS50ykun\n ANfoQ5UCgYEA9Ak73PRy9nLlRkt4OBCF/4fwThUCMedsnWaVjQBMJYim4FB2ivF5\n cKdWt3y/RZI85KKYu0EXhLEoSIEAfz057R8t3QdVK4tZx6B47UFjBjCYeVMtwHDQ\n prxQiOPHIHCplBNFuGzA5VXL9gQLRD+ek0uOy2GJJ0Wu1xyeouI+SW8CgYEAwgkO\n TOtOogqmcAALjWgeeQiZetflSKbJlpQNhmCPAMm0SFI8eF4SpRXLzd41VC2mLIwT\n L3tjc7/8ocXoElFM4L0fo9Lx/SHFH4JEn5FT0PXPmvsF2JRhsXJFLJSihxF/91Xs\n 2aBcQILPFzLcrI6OFUakNwGTU/CIxpkzRvQrG98CgYEAzNVnUuo4CNadzagRK3Xr\n E3Yl5VRK+FpY17FAfA6w25xc/dFr/un61e0Po4no/ltmEz7LVfmn5O/ScTEemq5o\n jbjrBShfe+JGpIH0nqiQlqR5hvSjZXEMIbfVHWGbRYZrQGgA0HEwZA7k2QXB8zI3\n R0lXfSzMM5OQ0uwp12xxfa8CgYBHILq1R6zTicPpWprhg0FobNaWSX4rW7iaEjvC\n /rJtP4Nu33Z7SUDcc1j6ZnJ2ISXBPrfpt/mE/OPHCZ1A2bysxadLjpBWkoKIQmCV\n fdiTyQgJb+t8sSf+vDzPUs0hZjDaogzo2ff3TfxMLMDoIHnFItgfsdwn8QyygIZj\n hC4pUQKBgQDqsxnkI6yXFE5gshnW7H8zqKNlzKd/dZEL6e+lRz4R3UY/KcEkRAfq\n Yi3cwo9fE3U3kSmpl5MQwUjWm/BZ7JyueoY/4ndwaFPgc34IKsgJ0wau9pZiQAB1\n DxpOSF+BR71Jx3sxvIdCODNTtm645j5yrZVnJAuMPofo5XFmunDoJA==\n -----END RSA PRIVATE KEY-----\n\n workerKeyPub: |-\n ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC496FSYFcBAKgDtMsBAJiF/6/NxlXKP5UZecyEsedYuTt1GOgJTwaA1qZ1LmHsbfLDE68oDdiM4uvxfI4wtLhz57w3u0jOUxZ2JeF7SVwEf1nVqLn4Gh/f8GUNQGSyIp1zUD5Bx9fq0PAyQ47mt7Ufi84rcf8LKl7nzAIHTcdg2BvTkQN9bUGPaq/Pb1W2bKPAQy4OzXTSIyrAJ89TH2jFeaZfyxQFGbD9jVHH/yl0oiMrDeaRYgccE5II+KY7WoLjsBry/9Qf2ERELKTK4UeIGIqWci9lab1ti+GxFPPiC3krNFjo4jShV4eUs4cNIrjwNrxVaKPXmU6o7Y3Hpayx Concourse\n\n ## Secrets for DB access\n # postgresUser:\n # postgresPassword:\n # postgresCaCert:\n # postgresClientCert:\n # postgresClientKey:\n\n ## Secrets for DB encryption\n ##\n # encryptionKey:\n # oldEncryptionKey:\n\n ## Secrets for SSM AWS access\n # awsSsmAccessKey:\n # awsSsmSecretKey:\n # awsSsmSessionToken:\n\n ## Secrets for Secrets Manager AWS access\n # awsSecretsmanagerAccessKey:\n # awsSecretsmanagerSecretKey:\n # awsSecretsmanagerSessionToken:\n\n ## Secrets for CF OAuth\n # cfClientId:\n # cfClientSecret:\n # cfCaCert: |-\n\n ## Secrets for GitHub OAuth.\n ##\n # githubClientId:\n # githubClientSecret:\n # githubCaCert: |-\n\n ## Secrets for GitLab OAuth.\n ##\n # gitlabClientId:\n # gitlabClientSecret:\n\n ## Secrets for LDAP Auth.\n ##\n # ldapCaCert: |-\n\n ## Secrets for generic OAuth.\n ##\n # oauthClientId:\n # oauthClientSecret:\n # oauthCaCert: |-\n\n ## Secrets for oidc OAuth.\n ##\n # oidcClientId:\n # oidcClientSecret:\n # oidcCaCert: |-\n\n ## Secrets for using Hashcorp Vault as a credential manager.\n ##\n ## if the Vault server is using a self-signed certificate, provide the CA public key.\n ## the value will be written to /concourse-vault/ca.cert\n ##\n # vaultCaCert: |-\n\n ## initial periodic token issued for concourse\n ## ref: https://www.vaultproject.io/docs/concepts/tokens.html#periodic-tokens\n ##\n # vaultClientToken:\n\n ## vault authentication parameters\n ## Paramter to pass when logging in via the backend\n ## Required for \"approle\" authenication method\n ## e.g. \"role_id=x,secret_id=x\"\n ## ref: https://concourse-ci.org/creds.html#vault-auth-param=NAME=VALUE\n ##\n # vaultAuthParam:\n\n ## provide the client certificate for authenticating with the [TLS](https://www.vaultproject.io/docs/auth/cert.html) backend\n ## the value will be written to /concourse-vault/client.cert\n ## make sure to also set credentialManager.vault.authBackend to `cert`\n ##\n # vaultClientCert: |-\n\n ## provide the client key for authenticating with the [TLS](https://www.vaultproject.io/docs/auth/cert.html) backend\n ## the value will be written to /concourse-vault/client.key\n ## make sure to also set credentialManager.vault.authBackend to `cert`\n ##\n # vaultClientKey: |-\n\n ## If influxdb metrics are enabled and authentication is required,\n ## provide a password here to authenticate with the influxdb server configured.\n ##\n # influxdbPassword:\n\n ## SSL certificate used to verify the Syslog server for draining build logs.\n # syslogCaCert: |-\n", 6 "upstream": "https://github.com/helm/charts/tree/0662ec9efe30dda63467bf19ae00217472b1385c/stable/concourse", 7 "metadata": { 8 "applicationType": "helm", 9 "sequence": 0, 10 "icon": "https://avatars1.githubusercontent.com/u/7809479", 11 "name": "concourse", 12 "releaseNotes": "[stable/concourse] Allow namespace creation independently of rbac (#10786)\n\n* Allow namespace creation independently of rbac\n\nAt the moment, when defining `concourse.web.kubernetes.teams`, the helm\nchart will take care of namespace generation. Although this is very\nuseful in most cases, we believe some people may find it problematic.\n\nOur use case, is to create the namespaces ahead of time and fill them\nwith `Pipeline` type resources defining Concourse pipelines. These are\nthen picked by our `pipeline-operator` and continuously applied to\nConcourse for specific teams.\n\nA hacky way around it, would be to set the\n`concourse.web.kubernetes.teams` value to an empty array, and create the\nrole bindings manually. It feels a little like cheating, and a cleaner\nway to accomplish that would be to have a separate flag responsible for\nnamespace creation in the Concourse helm chart.\n\nSigned-off-by: Rafal Proszowski \u003cparoxp@gmail.com\u003e\n\n* Bump patch\n\nSigned-off-by: Rafal Proszowski \u003cparoxp@gmail.com\u003e", 13 "version": "3.7.2", 14 "license": { 15 "id": "", 16 "assignee": "", 17 "createdAt": "0001-01-01T00:00:00Z", 18 "expiresAt": "0001-01-01T00:00:00Z", 19 "type": "" 20 } 21 }, 22 "upstreamContents": { 23 "upstreamFiles": [ 24 { 25 "filePath": ".helmignore", 26 "fileContents": "IyBQYXR0ZXJucyB0byBpZ25vcmUgd2hlbiBidWlsZGluZyBwYWNrYWdlcy4KIyBUaGlzIHN1cHBvcnRzIHNoZWxsIGdsb2IgbWF0Y2hpbmcsIHJlbGF0aXZlIHBhdGggbWF0Y2hpbmcsIGFuZAojIG5lZ2F0aW9uIChwcmVmaXhlZCB3aXRoICEpLiBPbmx5IG9uZSBwYXR0ZXJuIHBlciBsaW5lLgouRFNfU3RvcmUKIyBDb21tb24gVkNTIGRpcnMKLmdpdC8KLmdpdGlnbm9yZQouYnpyLwouYnpyaWdub3JlCi5oZy8KLmhnaWdub3JlCi5zdm4vCiMgQ29tbW9uIGJhY2t1cCBmaWxlcwoqLnN3cAoqLmJhawoqLnRtcAoqfgojIFZhcmlvdXMgSURFcwoucHJvamVjdAouaWRlYS8KKi50bXByb2oK" 27 }, 28 { 29 "filePath": "Chart.yaml", 30 "fileContents": "bmFtZTogY29uY291cnNlCnZlcnNpb246IDMuNy4yCmFwcFZlcnNpb246IDQuMi4yCmRlc2NyaXB0aW9uOiBDb25jb3Vyc2UgaXMgYSBzaW1wbGUgYW5kIHNjYWxhYmxlIENJIHN5c3RlbS4KaWNvbjogaHR0cHM6Ly9hdmF0YXJzMS5naXRodWJ1c2VyY29udGVudC5jb20vdS83ODA5NDc5CmtleXdvcmRzOgotIGNpCi0gY29uY291cnNlCi0gY29uY291cnNlLmNpCmhvbWU6IGh0dHBzOi8vY29uY291cnNlLWNpLm9yZy8Kc291cmNlczoKLSBodHRwczovL2dpdGh1Yi5jb20vY29uY291cnNlL2NvbmNvdXJzZQotIGh0dHBzOi8vZ2l0aHViLmNvbS9oZWxtL2NoYXJ0cwptYWludGFpbmVyczoKLSBuYW1lOiBjaXJvY29zdGEKICBlbWFpbDogY3Njb3N0YUBwaXZvdGFsLmlvCi0gbmFtZTogd2lsbGlhbS10cmFuCiAgZW1haWw6IHdpbGxAYXV0b25vbWljLmFpCmVuZ2luZTogZ290cGwK" 31 }, 32 { 33 "filePath": "OWNERS", 34 "fileContents": "YXBwcm92ZXJzOgotIGNpcm9jb3N0YQotIHdpbGxpYW0tdHJhbgpyZXZpZXdlcnM6Ci0gY2lyb2Nvc3RhCi0gd2lsbGlhbS10cmFuCg==" 35 }, 36 { 37 "filePath": "README.md", 38 "fileContents": "IyBDb25jb3Vyc2UgSGVsbSBDaGFydAoKW0NvbmNvdXJzZV0oaHR0cHM6Ly9jb25jb3Vyc2UtY2kub3JnLykgaXMgYSBzaW1wbGUgYW5kIHNjYWxhYmxlIENJIHN5c3RlbS4KCiMjIFRMO0RSOwoKYGBgY29uc29sZQokIGhlbG0gaW5zdGFsbCBzdGFibGUvY29uY291cnNlCmBgYAoKIyMgSW50cm9kdWN0aW9uCgpUaGlzIGNoYXJ0IGJvb3RzdHJhcHMgYSBbQ29uY291cnNlXShodHRwczovL2NvbmNvdXJzZS1jaS5vcmcvKSBkZXBsb3ltZW50IG9uIGEgW0t1YmVybmV0ZXNdKGh0dHBzOi8va3ViZXJuZXRlcy5pbykgY2x1c3RlciB1c2luZyB0aGUgW0hlbG1dKGh0dHBzOi8vaGVsbS5zaCkgcGFja2FnZSBtYW5hZ2VyLgoKIyMgUHJlcmVxdWlzaXRlcyBEZXRhaWxzCgoqIEt1YmVybmV0ZXMgMS42IChmb3IgYHBvZCBhZmZpbml0eWAgc3VwcG9ydCkKKiBQViBzdXBwb3J0IG9uIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgKGlmIHBlcnNpc3RlbmNlIGlzIHJlcXVpcmVkKQoKIyMgSW5zdGFsbGluZyB0aGUgQ2hhcnQKClRvIGluc3RhbGwgdGhlIGNoYXJ0IHdpdGggdGhlIHJlbGVhc2UgbmFtZSBgbXktcmVsZWFzZWA6CgpgYGBjb25zb2xlCiQgaGVsbSBpbnN0YWxsIC0tbmFtZSBteS1yZWxlYXNlIHN0YWJsZS9jb25jb3Vyc2UKYGBgCgojIyBVbmluc3RhbGxpbmcgdGhlIENoYXJ0CgpUbyB1bmluc3RhbGwvZGVsZXRlIHRoZSBgbXktcmVsZWFzZWAgZGVwbG95bWVudDoKCmBgYGNvbnNvbGUKJCBoZWxtIGRlbGV0ZSBteS1yZWxlYXNlCmBgYAoKVGhlIGNvbW1hbmQgcmVtb3ZlcyBuZWFybHkgYWxsIHRoZSBLdWJlcm5ldGVzIGNvbXBvbmVudHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGFydCBhbmQgZGVsZXRlcyB0aGUgcmVsZWFzZS4KCiMjIyBDbGVhbnVwIG9ycGhhbmVkIFBlcnNpc3RlbnQgVm9sdW1lcwoKVGhpcyBjaGFydCB1c2VzIGBTdGF0ZWZ1bFNldHNgIGZvciBDb25jb3Vyc2UgV29ya2Vycy4gRGVsZXRpbmcgYSBgU3RhdGVmdWxTZXRgIGRvZXMgbm90IGRlbGV0ZSBhc3NvY2lhdGVkIFBlcnNpc3RlbnQgVm9sdW1lcy4KCkRvIHRoZSBmb2xsb3dpbmcgYWZ0ZXIgZGVsZXRpbmcgdGhlIGNoYXJ0IHJlbGVhc2UgdG8gY2xlYW4gdXAgb3JwaGFuZWQgUGVyc2lzdGVudCBWb2x1bWVzLgoKYGBgY29uc29sZQokIGt1YmVjdGwgZGVsZXRlIHB2YyAtbCBhcHA9JHtSRUxFQVNFLU5BTUV9LXdvcmtlcgpgYGAKCiMjIFNjYWxpbmcgdGhlIENoYXJ0CgpTY2FsaW5nIHNob3VsZCB0eXBpY2FsbHkgYmUgbWFuYWdlZCB2aWEgdGhlIGBoZWxtIHVwZ3JhZGVgIGNvbW1hbmQsIGJ1dCBgU3RhdGVmdWxTZXRzYCBkb24ndCB5ZXQgd29yayB3aXRoIGBoZWxtIHVwZ3JhZGVgLiBJbiB0aGUgbWVhbnRpbWUsIHVudGlsIGBoZWxtIHVwZ3JhZGVgIHdvcmtzLCBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIG51bWJlciBvZiByZXBsaWNhcywgeW91IGNhbiB1c2UgdGhlIGBrdWJlY3RsIHNjYWxlYCBjb21tYW5kIGFzIHNob3duIGJlbG93OgoKYGBgY29uc29sZQokIGt1YmVjdGwgc2NhbGUgc3RhdGVmdWxzZXQgbXktcmVsZWFzZS13b3JrZXIgLS1yZXBsaWNhcz0zCmBgYAoKIyMjIFJlc3RhcnRpbmcgd29ya2VycwoKSWYgYSB3b3JrZXIgaXNuJ3QgdGFraW5nIG9uIHdvcmssIHlvdSBjYW4gcmVzdGFydCB0aGUgd29ya2VyIHdpdGggYGt1YmVjdGwgZGVsZXRlIHBvZGAuIFRoaXMgaW5pdGlhdGVzIGEgZ3JhY2VmdWwgc2h1dGRvd24gYnkgInJldGlyaW5nIiB0aGUgd29ya2VyLCB0byBlbnN1cmUgQ29uY291cnNlIGRvZXNuJ3QgdHJ5IGxvb2tpbmcgZm9yIG9sZCB2b2x1bWVzIG9uIHRoZSBuZXcgd29ya2VyLiBUaGUgdmFsdWVgd29ya2VyLnRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzYCBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGFuIHVwcGVyIGxpbWl0IG9uIGdyYWNlZnVsIHNodXRkb3duIHRpbWUgYmVmb3JlIGZvcmNlZnVsbHkgdGVybWluYXRpbmcgdGhlIGNvbnRhaW5lci4gQ2hlY2sgdGhlIG91dHB1dCBvZiBgZmx5IHdvcmtlcnNgLCBhbmQgaWYgYSB3b3JrZXIgaXMgYHN0YWxsZWRgLCB5b3UnbGwgYWxzbyBuZWVkIHRvIHJ1biBgZmx5IHBydW5lLXdvcmtlcmAgdG8gYWxsb3cgdGhlIG5ldyBpbmNhcm5hdGlvbiBvZiB0aGUgd29ya2VyIHRvIHN0YXJ0LgoKIyMjIFdvcmtlciBMaXZlbmVzcyBQcm9iZQoKVGhlIHdvcmtlcidzIExpdmVuZXNzIFByb2JlIHdpbGwgdHJpZ2dlciBhIHJlc3RhcnQgb2YgdGhlIHdvcmtlciBpZiBpdCBkZXRlY3RzIHVucmVjb3ZlcmFibGUgZXJyb3JzLCBieSBsb29raW5nIGF0IHRoZSB3b3JrZXIncyBsb2dzLiBUaGUgc2V0IG9mIHN0cmluZ3MgdXNlZCB0byBpZGVudGlmeSBzdWNoIGVycm9ycyBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSwgYnV0IGNhbiBiZSB0dW5lZCB3aXRoIGB3b3JrZXIuZmF0YWxFcnJvcnNgLiBTZWUgW3ZhbHVlcy55YW1sXSh2YWx1ZXMueWFtbCkgZm9yIHRoZSBkZWZhdWx0cy4KCiMjIENvbmZpZ3VyYXRpb24KClRoZSBmb2xsb3dpbmcgdGFibGUgbGlzdHMgdGhlIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzIG9mIHRoZSBDb25jb3Vyc2UgY2hhcnQgYW5kIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgoKfCBQYXJhbWV0ZXIgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwKfCBgaW1hZ2VgIHwgQ29uY291cnNlIGltYWdlIHwgYGNvbmNvdXJzZS9jb25jb3Vyc2VgIHwKfCBgaW1hZ2VUYWdgIHwgQ29uY291cnNlIGltYWdlIHZlcnNpb24gfCBgNC4yLjJgIHwKfCBgaW1hZ2VQdWxsUG9saWN5YCB8IENvbmNvdXJzZSBpbWFnZSBwdWxsIHBvbGljeSB8IGBJZk5vdFByZXNlbnRgIHwKfCBgaW1hZ2VQdWxsU2VjcmV0c2AgfCBBcnJheSBvZiBpbWFnZVB1bGxTZWNyZXRzIGluIHRoZSBuYW1lc3BhY2UgZm9yIHB1bGxpbmcgaW1hZ2VzIHwgYFtdYCB8CnwgYHdlYi5hZGRpdGlvbmFsQWZmaW5pdGllc2AgfCBBZGRpdGlvbmFsIGFmZmluaXRpZXMgdG8gYXBwbHkgdG8gd2ViIHBvZHMuIEUuZzogbm9kZSBhZmZpbml0eSB8IGB7fWAgfAp8IGB3ZWIuYWRkaXRpb25hbFZvbHVtZU1vdW50c2AgfCBWb2x1bWVNb3VudHMgdG8gYmUgYWRkZWQgdG8gdGhlIHdlYiBwb2RzIHwgYG5pbGAgfAp8IGB3ZWIuYWRkaXRpb25hbFZvbHVtZXNgIHwgVm9sdW1lcyB0byBiZSBhZGRlZCB0byB0aGUgd2ViIHBvZHMgfCBgbmlsYCB8CnwgYHdlYi5hbm5vdGF0aW9uc2B8IENvbmNvdXJzZSBXZWIgZGVwbG95bWVudCBhbm5vdGF0aW9ucyB8IGBuaWxgIHwKfCBgd2ViLmF1dGhTZWNyZXRzUGF0aGAgfCBTcGVjaWZ5IHRoZSBtb3VudCBkaXJlY3Rvcnkgb2YgdGhlIHdlYiBhdXRoIHNlY3JldHMgfCBgL2NvbmNvdXJzZS1hdXRoYCB8CnwgYHdlYi5lbnZgIHwgQ29uZmlndXJlIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgd2ViIGNvbnRhaW5lcnMgfCBgW11gIHwKfCBgd2ViLmluZ3Jlc3MuYW5ub3RhdGlvbnNgIHwgQ29uY291cnNlIFdlYiBJbmdyZXNzIGFubm90YXRpb25zIHwgYHt9YCB8CnwgYHdlYi5pbmdyZXNzLmVuYWJsZWRgIHwgRW5hYmxlIENvbmNvdXJzZSBXZWIgSW5ncmVzcyB8IGBmYWxzZWAgfAp8IGB3ZWIuaW5ncmVzcy5ob3N0c2AgfCBDb25jb3Vyc2UgV2ViIEluZ3Jlc3MgSG9zdG5hbWVzIHwgYFtdYCB8CnwgYHdlYi5pbmdyZXNzLnRsc2AgfCBDb25jb3Vyc2UgV2ViIEluZ3Jlc3MgVExTIGNvbmZpZ3VyYXRpb24gfCBgW11gIHwKfCBgd2ViLmtleXNTZWNyZXRzUGF0aGAgfCBTcGVjaWZ5IHRoZSBtb3VudCBkaXJlY3Rvcnkgb2YgdGhlIHdlYiBrZXlzIHNlY3JldHMgfCBgL2NvbmNvdXJzZS1rZXlzYCB8CnwgYHdlYi5saXZlbmVzc1Byb2JlYCB8IExpdmVuZXNzIFByb2JlIHNldHRpbmdzIHwgYHsiZmFpbHVyZVRocmVzaG9sZCI6NSwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS92MS9pbmZvIiwicG9ydCI6ImF0YyJ9LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTUsInRpbWVvdXRTZWNvbmRzIjozfWAgfAp8IGB3ZWIubmFtZU92ZXJyaWRlYCB8IE92ZXJyaWRlIHRoZSBDb25jb3Vyc2UgV2ViIGNvbXBvbmVudHMgbmFtZSB8IGBuaWxgIHwKfCBgd2ViLm5vZGVTZWxlY3RvcmAgfCBOb2RlIHNlbGVjdG9yIGZvciB3ZWIgbm9kZXMgfCBge31gIHwKfCBgd2ViLnBvc3RncmVzcWxTZWNydHNQYXRoYCB8IFNwZWNpZnkgdGhlIG1vdW50IGRpcmVjdG9yeSBvZiB0aGUgd2ViIHBvc3RncmVzcWwgc2VjcmV0cyB8IGAvY29uY291cnNlLXBvc3RncmVzcWxgIHwKfCBgd2ViLnJlYWRpbmVzc1Byb2JlYCB8IFJlYWRpbmVzcyBQcm9iZSBzZXR0aW5ncyB8IGB7Imh0dHBHZXQiOnsicGF0aCI6Ii9hcGkvdjEvaW5mbyIsInBvcnQiOiJhdGMifX1gIHwKfCBgd2ViLnJlcGxpY2FzYCB8IE51bWJlciBvZiBDb25jb3Vyc2UgV2ViIHJlcGxpY2FzIHwgYDFgIHwKfCBgd2ViLnJlc291cmNlc2AgfCBDb25jb3Vyc2UgV2ViIHJlc291cmNlIHJlcXVlc3RzIGFuZCBsaW1pdHMgfCBge3JlcXVlc3RzOiB7Y3B1OiAiMTAwbSIsIG1lbW9yeTogIjEyOE1pIn19YCB8CnwgYHdlYi5zZXJ2aWNlLmFubm90YXRpb25zYCB8IENvbmNvdXJzZSBXZWIgU2VydmljZSBhbm5vdGF0aW9ucyB8IGBuaWxgIHwKfCBgd2ViLnNlcnZpY2UuYXRjTm9kZVBvcnRgIHwgU2V0cyB0aGUgbm9kZVBvcnQgZm9yIGF0YyB3aGVuIHVzaW5nIGBOb2RlUG9ydGAgfCBgbmlsYCB8CnwgYHdlYi5zZXJ2aWNlLmF0Y1Rsc05vZGVQb3J0YCB8IFNldHMgdGhlIG5vZGVQb3J0IGZvciBhdGMgdGxzIHdoZW4gdXNpbmcgYE5vZGVQb3J0YCB8IGBuaWxgIHwKfCBgd2ViLnNlcnZpY2UubGFiZWxzYCB8IEFkZGl0aW9uYWwgY29uY291cnNlIHdlYiBzZXJ2aWNlIGxhYmVscyB8IGBuaWxgIHwKfCBgd2ViLnNlcnZpY2UubG9hZEJhbGFuY2VySVBgIHwgVGhlIElQIHRvIHVzZSB3aGVuIHdlYi5zZXJ2aWNlLnR5cGUgaXMgTG9hZEJhbGFuY2VyIHwgYG5pbGAgfAp8IGB3ZWIuc2VydmljZS5sb2FkQmFsYW5jZXJTb3VyY2VSYW5nZXNgIHwgQ29uY291cnNlIFdlYiBTZXJ2aWNlIExvYWQgQmFsYW5jZXIgU291cmNlIElQIHJhbmdlcyB8IGBuaWxgIHwKfCBgd2ViLnNlcnZpY2UudHNhTm9kZVBvcnRgIHwgU2V0cyB0aGUgbm9kZVBvcnQgZm9yIHRzYSB3aGVuIHVzaW5nIGBOb2RlUG9ydGAgfCBgbmlsYCB8CnwgYHdlYi5zZXJ2aWNlLnR5cGVgIHwgQ29uY291cnNlIFdlYiBzZXJ2aWNlIHR5cGUgfCBgQ2x1c3RlcklQYCB8CnwgYHdlYi5zeXNsb2dTZWNyZXRzUGF0aGAgfCBTcGVjaWZ5IHRoZSBtb3VudCBkaXJlY3Rvcnkgb2YgdGhlIHdlYiBzeXNsb2cgc2VjcmV0cyB8IGAvY29uY291cnNlLXN5c2xvZ2AgfAp8IGB3ZWIudG9sZXJhdGlvbnNgIHwgVG9sZXJhdGlvbnMgZm9yIHRoZSB3ZWIgbm9kZXMgfCBgW11gIHwKfCBgd2ViLnZhdWx0U2VjcmV0c1BhdGhgIHwgU3BlY2lmeSB0aGUgbW91bnQgZGlyZWN0b3J5IG9mIHRoZSB3ZWIgdmF1bHQgc2VjcmV0cyB8IGAvY29uY291cnNlLXZhdWx0YCB8CnwgYHdvcmtlci5uYW1lT3ZlcnJpZGVgIHwgT3ZlcnJpZGUgdGhlIENvbmNvdXJzZSBXb3JrZXIgY29tcG9uZW50cyBuYW1lIHwgYG5pbGAgfAp8IGB3b3JrZXIucmVwbGljYXNgIHwgTnVtYmVyIG9mIENvbmNvdXJzZSBXb3JrZXIgcmVwbGljYXMgfCBgMmAgfAp8IGB3b3JrZXIubWluQXZhaWxhYmxlYCB8IE1pbmltdW0gbnVtYmVyIG9mIHdvcmtlcnMgYXZhaWxhYmxlIGFmdGVyIGFuIGV2aWN0aW9uIHwgYDFgIHwKfCBgd29ya2VyLnJlc291cmNlc2AgfCBDb25jb3Vyc2UgV29ya2VyIHJlc291cmNlIHJlcXVlc3RzIGFuZCBsaW1pdHMgfCBge3JlcXVlc3RzOiB7Y3B1OiAiMTAwbSIsIG1lbW9yeTogIjUxMk1pIn19YCB8CnwgYHdvcmtlci5lbnZgIHwgQ29uZmlndXJlIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgd29ya2VyIGNvbnRhaW5lcihzKSB8IGBbXWAgfAp8IGB3b3JrZXIuYW5ub3RhdGlvbnNgIHwgQW5ub3RhdGlvbnMgdG8gYmUgYWRkZWQgdG8gdGhlIHdvcmtlciBwb2RzIHwgYHt9YCB8CnwgYHdvcmtlci5rZXlzU2VjcmV0c1BhdGhgIHwgU3BlY2lmeSB0aGUgbW91bnQgZGlyZWN0b3J5IG9mIHRoZSB3b3JrZXIga2V5cyBzZWNyZXRzIHwgYC9jb25jb3Vyc2Uta2V5c2AgfAp8IGB3b3JrZXIuYWRkaXRpb25hbFZvbHVtZU1vdW50c2AgfCBWb2x1bWVNb3VudHMgdG8gYmUgYWRkZWQgdG8gdGhlIHdvcmtlciBwb2RzIHwgYG5pbGAgfAp8IGB3b3JrZXIuYWRkaXRpb25hbFZvbHVtZXNgIHwgVm9sdW1lcyB0byBiZSBhZGRlZCB0byB0aGUgd29ya2VyIHBvZHMgfCBgbmlsYCB8CnwgYHdvcmtlci5hZGRpdGlvbmFsQWZmaW5pdGllc2AgfCBBZGRpdGlvbmFsIGFmZmluaXRpZXMgdG8gYXBwbHkgdG8gd29ya2VyIHBvZHMuIEUuZzogbm9kZSBhZmZpbml0eSB8IGB7fWAgfAp8IGB3b3JrZXIudG9sZXJhdGlvbnNgIHwgVG9sZXJhdGlvbnMgZm9yIHRoZSB3b3JrZXIgbm9kZXMgfCBgW11gIHwKfCBgd29ya2VyLnRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzYCB8IFVwcGVyIGJvdW5kIGZvciBncmFjZWZ1bCBzaHV0ZG93biB0byBhbGxvdyB0aGUgd29ya2VyIHRvIGRyYWluIGl0cyB0YXNrcyB8IGA2MGAgfAp8IGB3b3JrZXIuZmF0YWxFcnJvcnNgIHwgTmV3bGluZSBkZWxpbWl0ZWQgc3RyaW5ncyB3aGljaCwgd2hlbiBsb2dnZWQsIHNob3VsZCB0cmlnZ2VyIGEgcmVzdGFydCBvZiB0aGUgd29ya2VyIHwgKlNlZSBbdmFsdWVzLnlhbWxdKHZhbHVlcy55YW1sKSogfAp8IGB3b3JrZXIudXBkYXRlU3RyYXRlZ3lgIHwgYE9uRGVsZXRlYCBvciBgUm9sbGluZ1VwZGF0ZWAgKHJlcXVpcmVzIEt1YmVybmV0ZXMgPj0gMS43KSB8IGBSb2xsaW5nVXBkYXRlYCB8CnwgYHdvcmtlci5wb2RNYW5hZ2VtZW50UG9saWN5YCB8IGBPcmRlcmVkUmVhZHlgIG9yIGBQYXJhbGxlbGAgKHJlcXVpcmVzIEt1YmVybmV0ZXMgPj0gMS43KSB8IGBQYXJhbGxlbGAgfAp8IGB3b3JrZXIuaGFyZEFudGlBZmZpbml0eWAgfCBTaG91bGQgdGhlIHdvcmtlcnMgYmUgZm9yY2VkIChhcyBvcHBvc2VkIHRvIHByZWZlcnJlZCkgdG8gYmUgb24gZGlmZmVyZW50IG5vZGVzPyB8IGBmYWxzZWAgfAp8IGB3b3JrZXIuZW1wdHlEaXJTaXplYCB8IFdoZW4gcGVyc2lzdGFuY2UgaXMgZGlzYWJsZWQgdGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgdG8gbGltaXQgdGhlIGVtcHR5RGlyIHZvbHVtZSBzaXplIHwgYG5pbGAgfAp8IGBwZXJzaXN0ZW5jZS5lbmFibGVkYCB8IEVuYWJsZSBDb25jb3Vyc2UgcGVyc2lzdGVuY2UgdXNpbmcgUGVyc2lzdGVudCBWb2x1bWUgQ2xhaW1zIHwgYHRydWVgIHwKfCBgcGVyc2lzdGVuY2Uud29ya2VyLnN0b3JhZ2VDbGFzc2AgfCBDb25jb3Vyc2UgV29ya2VyIFBlcnNpc3RlbnQgVm9sdW1lIFN0b3JhZ2UgQ2xhc3MgfCBgZ2VuZXJpY2AgfAp8IGBwZXJzaXN0ZW5jZS53b3JrZXIuYWNjZXNzTW9kZWAgfCBDb25jb3Vyc2UgV29ya2VyIFBlcnNpc3RlbnQgVm9sdW1lIEFjY2VzcyBNb2RlIHwgYFJlYWRXcml0ZU9uY2VgIHwKfCBgcGVyc2lzdGVuY2Uud29ya2VyLnNpemVgIHwgQ29uY291cnNlIFdvcmtlciBQZXJzaXN0ZW50IFZvbHVtZSBTdG9yYWdlIFNpemUgfCBgMjBHaWAgfAp8IGBwb3N0Z3Jlc3FsLmVuYWJsZWRgIHwgRW5hYmxlIFBvc3RncmVTUUwgYXMgYSBjaGFydCBkZXBlbmRlbmN5IHwgYHRydWVgIHwKfCBgcG9zdGdyZXNxbC5wb3N0Z3Jlc1VzZXJgIHwgUG9zdGdyZVNRTCBVc2VyIHRvIGNyZWF0ZSB8IGBjb25jb3Vyc2VgIHwKfCBgcG9zdGdyZXNxbC5wb3N0Z3Jlc1Bhc3N3b3JkYCB8IFBvc3RncmVTUUwgUGFzc3dvcmQgZm9yIHRoZSBuZXcgdXNlciB8IGBjb25jb3Vyc2VgIHwKfCBgcG9zdGdyZXNxbC5wb3N0Z3Jlc0RhdGFiYXNlYCB8IFBvc3RncmVTUUwgRGF0YWJhc2UgdG8gY3JlYXRlIHwgYGNvbmNvdXJzZWAgfAp8IGBwb3N0Z3Jlc3FsLnBlcnNpc3RlbmNlLmVuYWJsZWRgIHwgRW5hYmxlIFBvc3RncmVTUUwgcGVyc2lzdGVuY2UgdXNpbmcgUGVyc2lzdGVudCBWb2x1bWUgQ2xhaW1zIHwgYHRydWVgIHwKfCBgcmJhYy5jcmVhdGVgIHwgRW5hYmxlcyBjcmVhdGlvbiBvZiBSQkFDIHJlc291cmNlcyB8IGB0cnVlYCB8CnwgYHJiYWMuYXBpVmVyc2lvbmAgfCBSQkFDIHZlcnNpb24gfCBgdjFiZXRhMWAgfAp8IGByYmFjLndlYlNlcnZpY2VBY2NvdW50TmFtZWAgfCBOYW1lIG9mIHRoZSBzZXJ2aWNlIGFjY291bnQgdG8gdXNlIGZvciB3ZWIgcG9kcyBpZiBgcmJhYy5jcmVhdGVgIGlzIGBmYWxzZWAgfCBgZGVmYXVsdGAgfAp8IGByYmFjLndvcmtlclNlcnZpY2VBY2NvdW50TmFtZWAgfCBOYW1lIG9mIHRoZSBzZXJ2aWNlIGFjY291bnQgdG8gdXNlIGZvciB3b3JrZXJzIGlmIGByYmFjLmNyZWF0ZWAgaXMgYGZhbHNlYCB8IGBkZWZhdWx0YCB8CnwgYHNlY3JldHMuY3JlYXRlYCB8IENyZWF0ZSB0aGUgc2VjcmV0IHJlc291cmNlIGZyb20gdGhlIGZvbGxvd2luZyB2YWx1ZXMuICpTZWUgW1NlY3JldHNdKCNzZWNyZXRzKSogfCBgdHJ1ZWAgfAp8IGBzZWNyZXRzLmF3c1NzbUFjY2Vzc0tleWAgfCBBV1MgQWNjZXNzIEtleSBJRCBmb3IgU1NNIGFjY2VzcyB8IGBuaWxgIHwKfCBgc2VjcmV0cy5hd3NTc21TZWNyZXRLZXlgIHwgQVdTIFNlY3JldCBBY2Nlc3MgS2V5IElEIGZvciBTU00gYWNjZXNzIHwgYG5pbGAgfAp8IGBzZWNyZXRzLmF3c1NzbVNlc3Npb25Ub2tlbmAgfCBBV1MgU2Vzc2lvbiBUb2tlbiBmb3IgU1NNIGFjY2VzcyB8IGBuaWxgIHwKfCBgc2VjcmV0cy5jZkNhQ2VydGAgfCBDQSBjZXJ0aWZpY2F0ZSBmb3IgY2YgYXV0aCBwcm92aWRlciB8IGBuaWxgIHwKfCBgc2VjcmV0cy5jZkNsaWVudElkYCB8IENsaWVudCBJRCBmb3IgY2YgYXV0aCBwcm92aWRlciB8IGBuaWxgIHwKfCBgc2VjcmV0cy5jZkNsaWVudFNlY3JldGAgfCBDbGllbnQgc2VjcmV0IGZvciBjZiBhdXRoIHByb3ZpZGVyIHwgYG5pbGAgfAp8IGBzZWNyZXRzLmVuY3J5cHRpb25LZXlgIHwgY3VycmVudCBlbmNyeXB0aW9uIGtleSB8IGBuaWxgIHwKfCBgc2VjcmV0cy5naXRodWJDYUNlcnRgIHwgQ0EgY2VydGlmaWNhdGUgZm9yIEVudGVycHJpc2UgR2l0aHViIE9BdXRoIHwgYG5pbGAgfAp8IGBzZWNyZXRzLmdpdGh1YkNsaWVudElkYCB8IEFwcGxpY2F0aW9uIGNsaWVudCBJRCBmb3IgR2l0SHViIE9BdXRoIHwgYG5pbGAgfAp8IGBzZWNyZXRzLmdpdGh1YkNsaWVudFNlY3JldGAgfCBBcHBsaWNhdGlvbiBjbGllbnQgc2VjcmV0IGZvciBHaXRIdWIgT0F1dGggfCBgbmlsYCB8CnwgYHNlY3JldHMuZ2l0bGFiQ2xpZW50SWRgIHwgQXBwbGljYXRpb24gY2xpZW50IElEIGZvciBHaXRMYWIgT0F1dGggfCBgbmlsYCB8CnwgYHNlY3JldHMuZ2l0bGFiQ2xpZW50U2VjcmV0YCB8IEFwcGxpY2F0aW9uIGNsaWVudCBzZWNyZXQgZm9yIEdpdExhYiBPQXV0aCB8IGBuaWxgIHwKfCBgc2VjcmV0cy5ob3N0S2V5UHViYCB8IENvbmNvdXJzZSBIb3N0IFB1YmxpYyBLZXkgfCAqU2VlIFt2YWx1ZXMueWFtbF0odmFsdWVzLnlhbWwpKiB8CnwgYHNlY3JldHMuaG9zdEtleWAgfCBDb25jb3Vyc2UgSG9zdCBQcml2YXRlIEtleSB8ICpTZWUgW3ZhbHVlcy55YW1sXSh2YWx1ZXMueWFtbCkqIHwKfCBgc2VjcmV0cy5pbmZsdXhkYlBhc3N3b3JkYCB8IFBhc3N3b3JkIHVzZWQgdG8gYXV0aGVudGljYXRlIHdpdGggaW5mbHV4ZGIgfCBgbmlsYCB8CnwgYHNlY3JldHMubG9jYWxVc2Vyc2AgfCBDcmVhdGUgY29uY291cnNlIGxvY2FsIHVzZXJzLiBEZWZhdWx0IHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcmUgYHRlc3Q6dGVzdGAgKlNlZSBbdmFsdWVzLnlhbWxdKHZhbHVlcy55YW1sKSogfAp8IGBzZWNyZXRzLm9hdXRoQ2FDZXJ0YCB8IENBIGNlcnRpZmljYXRlIGZvciBHZW5lcmljIE9BdXRoIHwgYG5pbGAgfAp8IGBzZWNyZXRzLm9hdXRoQ2xpZW50SWRgIHwgQXBwbGljYXRpb24gY2xpZW50IElEIGZvciBHZW5lcmljIE9BdXRoIHwgYG5pbGAgfAp8IGBzZWNyZXRzLm9hdXRoQ2xpZW50U2VjcmV0YCB8IEFwcGxpY2F0aW9uIGNsaWVudCBzZWNyZXQgZm9yIEdlbmVyaWMgT0F1dGggfCBgbmlsYCB8CnwgYHNlY3JldHMub2lkY0NhQ2VydGAgfCBDQSBjZXJ0aWZpY2F0ZSBmb3IgT0lEQyBPYXV0aCB8IGBuaWxgIHwKfCBgc2VjcmV0cy5vaWRjQ2xpZW50SWRgIHwgQXBwbGljYXRpb24gY2xpZW50IElEIGZvciBPSURJIE9BdXRoIHwgYG5pbGAgfAp8IGBzZWNyZXRzLm9pZGNDbGllbnRTZWNyZXRgIHwgQXBwbGljYXRpb24gY2xpZW50IHNlY3JldCBmb3IgT0lEQyBPQXV0aCB8IGBuaWxgIHwKfCBgc2VjcmV0cy5vbGRFbmNyeXB0aW9uS2V5YCB8IG9sZCBlbmNyeXB0aW9uIGtleSwgdXNlZCBmb3Iga2V5IHJvdGF0aW9uIHwgYG5pbGAgfAp8IGBzZWNyZXRzLnBvc3RncmVzcWxDYUNlcnRgIHwgUG9zdGdyZVNRTCBDQSBjZXJ0aWZpY2F0ZSB8IGBuaWxgIHwKfCBgc2VjcmV0cy5wb3N0Z3Jlc3FsQ2xpZW50Q2VydGAgfCBQb3N0Z3JlU1FMIENsaWVudCBjZXJ0aWZpY2F0ZSB8IGBuaWxgIHwKfCBgc2VjcmV0cy5wb3N0Z3Jlc3FsQ2xpZW50S2V5YCB8IFBvc3RncmVTUUwgQ2xpZW50IGtleSB8IGBuaWxgIHwKfCBgc2VjcmV0cy5wb3N0Z3Jlc3FsUGFzc3dvcmRgIHwgUG9zdGdyZVNRTCBVc2VyIFBhc3N3b3JkIHwgYG5pbGAgfAp8IGBzZWNyZXRzLnBvc3RncmVzcWxVc2VyYCB8IFBvc3RncmVTUUwgVXNlciBOYW1lIHwgYG5pbGAgfAp8IGBzZWNyZXRzLnNlc3Npb25TaWduaW5nS2V5YCB8IENvbmNvdXJzZSBTZXNzaW9uIFNpZ25pbmcgUHJpdmF0ZSBLZXkgfCAqU2VlIFt2YWx1ZXMueWFtbF0odmFsdWVzLnlhbWwpKiB8CnwgYHNlY3JldHMuc3lzbG9nQ2FDZXJ0YCB8IFNTTCBjZXJ0aWZpY2F0ZSB0byB2ZXJpZnkgU3lzbG9nIHNlcnZlciB8IGBuaWxgIHwKfCBgc2VjcmV0cy52YXVsdEF1dGhQYXJhbWAgfCBQYXJhbXRlciB0byBwYXNzIHdoZW4gbG9nZ2luZyBpbiB2aWEgdGhlIGJhY2tlbmQgfCBgbmlsYCB8CnwgYHNlY3JldHMudmF1bHRDYUNlcnRgIHwgQ0EgY2VydGlmaWNhdGUgdXNlIHRvIHZlcmlmeSB0aGUgdmF1bHQgc2VydmVyIFNTTCBjZXJ0IHwgYG5pbGAgfAp8IGBzZWNyZXRzLnZhdWx0Q2xpZW50Q2VydGAgfCBWYXVsdCBDbGllbnQgQ2VydGlmaWNhdGUgfCBgbmlsYCB8CnwgYHNlY3JldHMudmF1bHRDbGllbnRLZXlgIHwgVmF1bHQgQ2xpZW50IEtleSB8IGBuaWxgIHwKfCBgc2VjcmV0cy52YXVsdENsaWVudFRva2VuYCB8IFZhdWx0IHBlcmlvZGljIGNsaWVudCB0b2tlbiB8IGBuaWxgIHwKfCBgc2VjcmV0cy53ZWJUbHNDZXJ0YCB8IFRMUyBjZXJ0aWZpY2F0ZSBmb3IgdGhlIHdlYiBjb21wb25lbnQgdG8gdGVybWluYXRlIFRMUyBjb25uZWN0aW9ucyB8IGBuaWxgIHwKfCBgc2VjcmV0cy53ZWJUbHNLZXlgIHwgQW4gUlNBIHByaXZhdGUga2V5LCB1c2VkIHRvIGVuY3J5cHQgSFRUUFMgdHJhZmZpYyAgfCBgbmlsYCB8CnwgYHNlY3JldHMud29ya2VyS2V5UHViYCB8IENvbmNvdXJzZSBXb3JrZXIgUHVibGljIEtleSB8ICpTZWUgW3ZhbHVlcy55YW1sXSh2YWx1ZXMueWFtbCkqIHwKfCBgc2VjcmV0cy53b3JrZXJLZXlgIHwgQ29uY291cnNlIFdvcmtlciBQcml2YXRlIEtleSB8ICpTZWUgW3ZhbHVlcy55YW1sXSh2YWx1ZXMueWFtbCkqIHwKCkZvciBjb25maWd1cmFibGUgY29uY291cnNlIHBhcmFtZXRlcnMsIHJlZmVyIHRvIFt2YWx1ZXMueWFtbF0odmFsdWVzLnlhbWwpIGBjb25jb3Vyc2VgIHNlY3Rpb24uIEFsbCBwYXJhbWV0ZXJzIHVuZGVyIHRoaXMgc2VjdGlvbiBhcmUgc3RyaWN0bHkgbWFwcGVkIGZyb20gY29uY291cnNlIGJpbmFyeSBjb21tYW5kcy4gRm9yIGV4YW1wbGUgaWYgb25lIG5lZWRzIHRvIGNvbmZpZ3VyZSB0aGUgY29uY291cnNlIGV4dGVybmFsIFVSTCwgdGhlIHBhcmFtIGBjb25jb3Vyc2VgIC0+IGB3ZWJgIC0+IGBleHRlcm5hbFVybGAgc2hvdWxkIGJlIHNldCwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byBydW5uaW5nIGNvbmNvdXJzZSBiaW5hcnkgYXMgYGNvbmNvdXJzZSB3ZWIgLS1leHRlcm5hbC11cmxgLiBGb3IgdGhvc2Ugc3ViLXNlY3Rpb25zIHRoYXQgaGF2ZSBgZW5hYmxlZGAsIG9uZSBuZWVkcyB0byBzZXQgYGVuYWJsZWRgIHRvIGJlIGB0cnVlYCB0byB1c2UgdGhlIGZvbGxvd2luZyBwYXJhbXMgd2l0aGluIHRoZSBzZWN0aW9uLgoKU3BlY2lmeSBlYWNoIHBhcmFtZXRlciB1c2luZyB0aGUgYC0tc2V0IGtleT12YWx1ZVssa2V5PXZhbHVlXWAgYXJndW1lbnQgdG8gYGhlbG0gaW5zdGFsbGAuCgpBbHRlcm5hdGl2ZWx5LCBhIFlBTUwgZmlsZSB0aGF0IHNwZWNpZmllcyB0aGUgdmFsdWVzIGZvciB0aGUgcGFyYW1ldGVycyBjYW4gYmUgcHJvdmlkZWQgd2hpbGUgaW5zdGFsbGluZyB0aGUgY2hhcnQuIEZvciBleGFtcGxlLAoKYGBgY29uc29sZQokIGhlbG0gaW5zdGFsbCAtLW5hbWUgbXktcmVsZWFzZSAtZiB2YWx1ZXMueWFtbCBzdGFibGUvY29uY291cnNlCmBgYAoKPiAqKlRpcCoqOiBZb3UgY2FuIHVzZSB0aGUgZGVmYXVsdCBbdmFsdWVzLnlhbWxdKHZhbHVlcy55YW1sKQoKIyMjIFNlY3JldHMKCkZvciB5b3VyIGNvbnZlbmllbmNlLCB0aGlzIGNoYXJ0IHByb3ZpZGVzIHNvbWUgZGVmYXVsdCB2YWx1ZXMgZm9yIHNlY3JldHMsIGJ1dCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBnZW5lcmF0ZSBhbmQgbWFuYWdlIHRoZXNlIHNlY3JldHMgb3V0c2lkZSB0aGUgSGVsbSBjaGFydC4gVG8gZG8gdGhpcywgc2V0IGBzZWNyZXRzLmNyZWF0ZWAgdG8gYGZhbHNlYCwgY3JlYXRlIGZpbGVzIGZvciBlYWNoIHNlY3JldCB2YWx1ZSwgYW5kIHR1cm4gaXQgYWxsIGludG8gYSBrOHMgc2VjcmV0LiBCZSBjYXJlZnVsIHdpdGggaW50cm9kdWNpbmcgdHJhaWxpbmcgbmV3bGluZSBjaGFyYWN0ZXJzOyBmb2xsb3dpbmcgdGhlIHN0ZXBzIGJlbG93IGVuc3VyZXMgbm9uZSBlbmQgdXAgaW4geW91ciBzZWNyZXRzLiBGaXJzdCwgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHRvIGNyZWF0ZSB0aGUgbWFuZGF0b3J5IHNlY3JldCB2YWx1ZXM6CgpgYGBjb25zb2xlCm1rZGlyIGNvbmNvdXJzZS1zZWNyZXRzCmNkIGNvbmNvdXJzZS1zZWNyZXRzCnNzaC1rZXlnZW4gLXQgcnNhIC1mIGhvc3Qta2V5ICAtTiAnJwptdiBob3N0LWtleS5wdWIgaG9zdC1rZXktcHViCnNzaC1rZXlnZW4gLXQgcnNhIC1mIHdvcmtlci1rZXkgIC1OICcnCm12IHdvcmtlci1rZXkucHViIHdvcmtlci1rZXktcHViCnNzaC1rZXlnZW4gLXQgcnNhIC1mIHNlc3Npb24tc2lnbmluZy1rZXkgIC1OICcnCnJtIHNlc3Npb24tc2lnbmluZy1rZXkucHViCnByaW50ZiAiJXM6JXMiICJjb25jb3Vyc2UiICIkKG9wZW5zc2wgcmFuZCAtYmFzZTY0IDI0KSIgPiBsb2NhbC11c2VycwpgYGAKCllvdSdsbCBhbHNvIG5lZWQgdG8gY3JlYXRlL2NvcHkgc2VjcmV0IHZhbHVlcyBmb3Igb3B0aW9uYWwgZmVhdHVyZXMuIFNlZSBbdGVtcGxhdGVzL3NlY3JldHMueWFtbF0odGVtcGxhdGVzL3NlY3JldHMueWFtbCkgZm9yIHBvc3NpYmxlIHZhbHVlcy4gSW4gdGhlIGV4YW1wbGUgYmVsb3csIHdlIGFyZSBub3QgdXNpbmcgdGhlIFtQb3N0Z3JlU1FMXSgjcG9zdGdyZXNxbCkgY2hhcnQgZGVwZW5kZW5jeSwgYW5kIHNvIHdlIG11c3Qgc2V0IGBwb3N0Z3Jlc3FsLXVzZXJgIGFuZCBgcG9zdGdyZXNxbC1wYXNzd29yZGAgc2VjcmV0cy4KCmBgYGNvbnNvbGUKIyBjb3B5IGEgcG9zZ3JlcyB1c2VyIHRvIGNsaXBib2FyZCBhbmQgcGFzdGUgaXQgdG8gZmlsZQpwcmludGYgIiVzIiAiJChwYnBhc3RlKSIgPiBwb3N0Z3Jlc3FsLXVzZXIKIyBjb3B5IGEgcG9zZ3JlcyBwYXNzd29yZCB0byBjbGlwYm9hcmQgYW5kIHBhc3RlIGl0IHRvIGZpbGUKcHJpbnRmICIlcyIgIiQocGJwYXN0ZSkiID4gcG9zdGdyZXNxbC1wYXNzd29yZAoKIyBjb3B5IEdpdGh1YiBjbGllbnQgaWQgYW5kIHNlY3JldHMgdG8gY2xpcGJvYXJkIGFuZCBwYXN0ZSB0byBmaWxlcwpwcmludGYgIiVzIiAiJChwYnBhc3RlKSIgPiBnaXRodWItY2xpZW50LWlkCnByaW50ZiAiJXMiICIkKHBicGFzdGUpIiA+IGdpdGh1Yi1jbGllbnQtc2VjcmV0CgojIHNldCBhbiBlbmNyeXB0aW9uIGtleSBmb3IgREIgZW5jcnlwdGlvbiBhdCByZXN0CnByaW50ZiAiJXMiICIkKG9wZW5zc2wgcmFuZCAtYmFzZTY0IDI0KSIgPiBlbmNyeXB0aW9uLWtleQpgYGAKClRoZW4gY3JlYXRlIGEgc2VjcmV0IGNhbGxlZCBgW3JlbGVhc2UtbmFtZV0tY29uY291cnNlYCBmcm9tIGFsbCB0aGUgc2VjcmV0IHZhbHVlIGZpbGVzIGluIHRoZSBjdXJyZW50IGZvbGRlcjoKCmBgYGNvbnNvbGUKa3ViZWN0bCBjcmVhdGUgc2VjcmV0IGdlbmVyaWMgbXktcmVsZWFzZS1jb25jb3Vyc2UgLS1mcm9tLWZpbGU9LgpgYGAKCk1ha2Ugc3VyZSB5b3UgY2xlYW4gdXAgYWZ0ZXIgeW91cnNlbGYuCgojIyMgUGVyc2lzdGVuY2UKClRoaXMgY2hhcnQgbW91bnRzIGEgUGVyc2lzdGVudCBWb2x1bWUgZm9yIGVhY2ggQ29uY291cnNlIFdvcmtlci4gVGhlIHZvbHVtZSBpcyBjcmVhdGVkIHVzaW5nIGR5bmFtaWMgdm9sdW1lIHByb3Zpc2lvbmluZy4gSWYgeW91IHdhbnQgdG8gZGlzYWJsZSBpdCBvciBjaGFuZ2UgdGhlIHBlcnNpc3RlbmNlIHByb3BlcnRpZXMsIHVwZGF0ZSB0aGUgYHBlcnNpc3RlbmNlYCBzZWN0aW9uIG9mIHlvdXIgY3VzdG9tIGB2YWx1ZXMueWFtbGAgZmlsZToKCmBgYHlhbWwKIyMgUGVyc2lzdGVudCBWb2x1bWUgU3RvcmFnZSBjb25maWd1cmF0aW9uLgojIyByZWY6IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzCiMjCnBlcnNpc3RlbmNlOgogICMjIEVuYWJsZSBwZXJzaXN0ZW5jZSB1c2luZyBQZXJzaXN0ZW50IFZvbHVtZSBDbGFpbXMuCiAgIyMKICBlbmFibGVkOiB0cnVlCgogICMjIFdvcmtlciBQZXJzaXN0ZW5jZSBjb25maWd1cmF0aW9uLgogICMjCiAgd29ya2VyOgogICAgIyMgUGVyc2lzdGVudCBWb2x1bWUgU3RvcmFnZSBDbGFzcy4KICAgICMjCiAgICBjbGFzczogZ2VuZXJpYwoKICAgICMjIFBlcnNpc3RlbnQgVm9sdW1lIEFjY2VzcyBNb2RlLgogICAgIyMKICAgIGFjY2Vzc01vZGU6IFJlYWRXcml0ZU9uY2UKCiAgICAjIyBQZXJzaXN0ZW50IFZvbHVtZSBTdG9yYWdlIFNpemUuCiAgICAjIwogICAgc2l6ZTogIjIwR2kiCmBgYAoKSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHVzZSBQZXJzaXN0ZW50IFZvbHVtZXMgZm9yIENvbmNvdXJzZSBXb3JrZXJzOyBvdGhlcndpc2UsIHRoZSBjb250YWluZXIgaW1hZ2VzIG1hbmFnZWQgYnkgdGhlIFdvcmtlciBhcmUgc3RvcmVkIGluIGFuIGBlbXB0eURpcmAgdm9sdW1lIG9uIHRoZSBub2RlJ3MgZGlzay4gVGhpcyB3aWxsIGludGVyZmVyZSB3aXRoIGs4cyBJbWFnZUdDIGFuZCB0aGUgbm9kZSdzIGRpc2sgd2lsbCBmaWxsIHVwIGFzIGEgcmVzdWx0LiBUaGlzIHdpbGwgYmUgZml4ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZSBvZiBrOHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9rdWJlcm5ldGVzL2t1YmVybmV0ZXMvcHVsbC81NzAyMAoKIyMjIEluZ3Jlc3MgVExTCgpJZiB5b3VyIGNsdXN0ZXIgYWxsb3dzIGF1dG9tYXRpYyBjcmVhdGlvbi9yZXRyaWV2YWwgb2YgVExTIGNlcnRpZmljYXRlcyAoZS5nLiBba3ViZS1sZWdvXShodHRwczovL2dpdGh1Yi5jb20vamV0c3RhY2sva3ViZS1sZWdvKSksIHBsZWFzZSByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhhdCBtZWNoYW5pc20uCgpUbyBtYW51YWxseSBjb25maWd1cmUgVExTLCBmaXJzdCBjcmVhdGUvcmV0cmlldmUgYSBrZXkgJiBjZXJ0aWZpY2F0ZSBwYWlyIGZvciB0aGUgYWRkcmVzcyhlcykgeW91IHdpc2ggdG8gcHJvdGVjdC4gVGhlbiBjcmVhdGUgYSBUTFMgc2VjcmV0IGluIHRoZSBuYW1lc3BhY2U6CgpgYGBjb25zb2xlCmt1YmVjdGwgY3JlYXRlIHNlY3JldCB0bHMgY29uY291cnNlLXdlYi10bHMgLS1jZXJ0PXBhdGgvdG8vdGxzLmNlcnQgLS1rZXk9cGF0aC90by90bHMua2V5CmBgYAoKSW5jbHVkZSB0aGUgc2VjcmV0J3MgbmFtZSwgYWxvbmcgd2l0aCB0aGUgZGVzaXJlZCBob3N0bmFtZXMsIGluIHRoZSBgd2ViLmluZ3Jlc3MudGxzYCBzZWN0aW9uIG9mIHlvdXIgY3VzdG9tIGB2YWx1ZXMueWFtbGAgZmlsZToKCmBgYHlhbWwKIyMgQ29uZmlndXJhdGlvbiB2YWx1ZXMgZm9yIENvbmNvdXJzZSBXZWIgY29tcG9uZW50cy4KIyMKd2ViOgogICMjIEluZ3Jlc3MgY29uZmlndXJhdGlvbi4KICAjIyByZWY6IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3VzZXItZ3VpZGUvaW5ncmVzcy8KICAjIwogIGluZ3Jlc3M6CiAgICAjIyBFbmFibGUgaW5ncmVzcy4KICAgICMjCiAgICBlbmFibGVkOiB0cnVlCgogICAgIyMgSG9zdG5hbWVzLgogICAgIyMgTXVzdCBiZSBwcm92aWRlZCBpZiBJbmdyZXNzIGlzIGVuYWJsZWQuCiAgICAjIwogICAgaG9zdHM6CiAgICAgIC0gY29uY291cnNlLmRvbWFpbi5jb20KCiAgICAjIyBUTFMgY29uZmlndXJhdGlvbi4KICAgICMjIFNlY3JldHMgbXVzdCBiZSBtYW51YWxseSBjcmVhdGVkIGluIHRoZSBuYW1lc3BhY2UuCiAgICAjIwogICAgdGxzOgogICAgICAtIHNlY3JldE5hbWU6IGNvbmNvdXJzZS13ZWItdGxzCiAgICAgICAgaG9zdHM6CiAgICAgICAgICAtIGNvbmNvdXJzZS5kb21haW4uY29tCmBgYAoKIyMjIFBvc3RncmVTUUwKCkJ5IGRlZmF1bHQsIHRoaXMgY2hhcnQgdXNlcyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgZGVwbG95ZWQgYXMgYSBjaGFydCBkZXBlbmRlbmN5LCB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciB1c2VybmFtZSwgcGFzc3dvcmQsIGFuZCBkYXRhYmFzZSBuYW1lLiBUaGVzZSBjYW4gYmUgbW9kaWZpZWQgYnkgc2V0dGluZyB0aGUgYHBvc3RncmVzcWwuKmAgdmFsdWVzLgoKWW91IGNhbiBhbHNvIGJyaW5nIHlvdXIgb3duIFBvc3RncmVTUUwuIFRvIGRvIHNvLCBzZXQgYHBvc3RncmVzcWwuZW5hYmxlZGAgdG8gZmFsc2UsIGFuZCB0aGVuIGNvbmZpZ3VyZSBDb25jb3Vyc2UncyBgcG9zdGdyZXNgIHZhbHVlcyAoYGNvbmNvdXJzZS53ZWIucG9zdGdyZXMuKmApLgoKTm90ZSB0aGF0IHNvbWUgdmFsdWVzIGdldCBzZXQgaW4gdGhlIGZvcm0gb2Ygc2VjcmV0cywgbGlrZSBgcG9zdGdyZXNxbC11c2VyYCwgYHBvc3RncmVzcWwtcGFzc3dvcmRgLCBhbmQgb3RoZXJzIChzZWUgW3RlbXBsYXRlcy9zZWNyZXRzLnlhbWxdKHRlbXBsYXRlcy9zZWNyZXRzLnlhbWwpIGZvciBwb3NzaWJsZSB2YWx1ZXMgYW5kIHRoZSBbc2VjcmV0cyBzZWN0aW9uXSgjc2VjcmV0cykgb24gdGhpcyBSRUFETUUgZm9yIGd1aWRhbmNlIG9uIGhvdyB0byBzZXQgdGhvc2Ugc2VjcmV0cykuCgoKIyMjIENyZWRlbnRpYWwgTWFuYWdlbWVudAoKUGlwZWxpbmVzIHVzdWFsbHkgbmVlZCBjcmVkZW50aWFscyB0byBkbyB0aGluZ3MuIENvbmNvdXJzZSBzdXBwb3J0cyB0aGUgdXNlIG9mIGEgW0NyZWRlbnRpYWwgTWFuYWdlcl0oaHR0cHM6Ly9jb25jb3Vyc2UtY2kub3JnL2NyZWRzLmh0bWwpIHNvIHlvdXIgcGlwZWxpbmVzIGNhbiBjb250YWluIHJlZmVyZW5jZXMgdG8gc2VjcmV0cyBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgc2VjcmV0IHZhbHVlcy4gWW91IGNhbid0IHVzZSBtb3JlIHRoYW4gb25lIGNyZWRlbnRpYWwgbWFuYWdlciBhdCBhIHRpbWUuCgojIyMjIEt1YmVybmV0ZXMgU2VjcmV0cwoKQnkgZGVmYXVsdCwgdGhpcyBjaGFydCB1c2VzIEt1YmVybmV0ZXMgU2VjcmV0cyBhcyBhIGNyZWRlbnRpYWwgbWFuYWdlci4gCgpGb3IgYSBnaXZlbiBDb25jb3Vyc2UgKnRlYW0qLCBhIHBpcGVsaW5lIGxvb2tzIGZvciBzZWNyZXRzIGluIGEgbmFtZXNwYWNlIG5hbWVkIGBbbmFtZXNwYWNlUHJlZml4XVt0ZWFtTmFtZV1gLiBUaGUgbmFtZXNwYWNlIHByZWZpeCBpcyB0aGUgcmVsZWFzZSBuYW1lIGZvbGxvd2VkIGJ5IGEgaHlwaGVuIGJ5IGRlZmF1bHQsIGFuZCBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSB2YWx1ZSBgY29uY291cnNlLndlYi5rdWJlcm5ldGVzLm5hbWVzcGFjZVByZWZpeGAuIEVhY2ggdGVhbSBsaXN0ZWQgdW5kZXIgYGNvbmNvdXJzZS53ZWIua3ViZXJuZXRlcy50ZWFtc2Agd2lsbCBoYXZlIGEgbmFtZXNwYWNlIGNyZWF0ZWQgZm9yIGl0LCBhbmQgdGhlIG5hbWVzcGFjZSByZW1haW5zIGFmdGVyIGRlbGV0aW9uIG9mIHRoZSByZWxlYXNlIHVubGVzcyB5b3Ugc2V0IGBjb25jb3Vyc2Uud2ViLmt1YmVybmV0ZXMua2VlcE5hbWVzcGFjZWAgdG8gYGZhbHNlYC4gQnkgZGVmYXVsdCwgYSBuYW1lc3BhY2Ugd2lsbCBiZSBjcmVhdGVkIGZvciB0aGUgYG1haW5gIHRlYW0uCgpUaGUgc2VydmljZSBhY2NvdW50IHVzZWQgYnkgQ29uY291cnNlIG11c3QgaGF2ZSBgZ2V0YCBhY2Nlc3MgdG8gc2VjcmV0cyBpbiB0aGF0IG5hbWVzcGFjZS4gV2hlbiBgcmJhYy5jcmVhdGVgIGlzIHRydWUsIHRoaXMgYWNjZXNzIGlzIGdyYW50ZWQgZm9yIGVhY2ggdGVhbSBsaXN0ZWQgdW5kZXIgYGNvbmNvdXJzZS53ZWIua3ViZXJuZXRlcy50ZWFtc2AuCgpIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIHRoZSBsb29rdXAgaGV1cmlzdGljcywgZ2l2ZW4gcmVsZWFzZSBuYW1lIGBjb25jb3Vyc2VgOgoKSW4gdGVhbSBgYWNjb3VudGluZy1kZXZgLCBwaXBlbGluZSBgbXktYXBwYDsgdGhlIGV4cHJlc3Npb24gYCgoYXBpLWtleSkpYCByZXNvbHZlcyB0bzoKCjEuIHRoZSBzZWNyZXQgdmFsdWUgaW4gbmFtZXNwYWNlOiBgY29uY291cnNlLWFjY291bnRpbmctZGV2YCBzZWNyZXQ6IGBteS1hcHAuYXBpLWtleWAsIGtleTogYHZhbHVlYAoyLiBhbmQgaWYgbm90IGZvdW5kLCBpcyB0aGUgdmFsdWUgaW4gbmFtZXNwYWNlOiBgY29uY291cnNlLWFjY291bnRpbmctZGV2YCBzZWNyZXQ6IGBhcGkta2V5YCwga2V5OiBgdmFsdWVgCgpJbiB0ZWFtIGFjY291bnRpbmctZGV2LCBwaXBlbGluZSBgbXktYXBwYCwgdGhlIGV4cHJlc3Npb24gYCgoY29tbW9uLXNlY3JldHMuYXBpLWtleSkpYCByZXNvbHZlcyB0bzoKCjEuIHRoZSBzZWNyZXQgdmFsdWUgaW4gbmFtZXNwYWNlOiBgY29uY291cnNlLWFjY291bnRpbmctZGV2YCBzZWNyZXQ6IGBteS1hcHAuY29tbW9uLXNlY3JldHNgLCBrZXk6IGBhcGkta2V5YAoyLiBhbmQgaWYgbm90IGZvdW5kLCBpcyB0aGUgdmFsdWUgaW4gbmFtZXNwYWNlOiBgY29uY291cnNlLWFjY291bnRpbmctZGV2YCBzZWNyZXQ6IGBjb21tb24tc2VjcmV0c2AsIGtleTogYGFwaS1rZXlgCgpCZSBtaW5kZnVsIG9mIHlvdXIgdGVhbSBhbmQgcGlwZWxpbmUgbmFtZXMsIHRvIGVuc3VyZSB0aGV5IGNhbiBiZSB1c2VkIGluIG5hbWVzcGFjZSBhbmQgc2VjcmV0IG5hbWVzLCBlLmcuIG5vIHVuZGVyc2NvcmVzLgoKVG8gdGVzdCwgY3JlYXRlIGEgc2VjcmV0IGluIG5hbWVzcGFjZSBgY29uY291cnNlLW1haW5gOgoKYGBgY29uc29sZQprdWJlY3RsIGNyZWF0ZSBzZWNyZXQgZ2VuZXJpYyBoZWxsbyAtLWZyb20tbGl0ZXJhbCAndmFsdWU9SGVsbG8gd29ybGQhJwpgYGAKClRoZW4gYGZseSBzZXQtcGlwZWxpbmVgIHdpdGggdGhlIGZvbGxvd2luZyBwaXBlbGluZSwgYW5kIHRyaWdnZXIgaXQ6CgpgYGB5YW1sCmpvYnM6Ci0gbmFtZTogaGVsbG8td29ybGQKICBwbGFuOgogIC0gdGFzazogc2F5LWhlbGxvCiAgICBjb25maWc6CiAgICAgIHBsYXRmb3JtOiBsaW51eAogICAgICBpbWFnZV9yZXNvdXJjZToKICAgICAgICB0eXBlOiBkb2NrZXItaW1hZ2UKICAgICAgICBzb3VyY2U6IHtyZXBvc2l0b3J5OiBhbHBpbmV9CiAgICAgIHBhcmFtczoKICAgICAgICBIRUxMTzogKChoZWxsbykpCiAgICAgIHJ1bjoKICAgICAgICBwYXRoOiAvYmluL3NoCiAgICAgICAgYXJnczogWyItYyIsICJlY2hvICRIRUxMTyJdCmBgYAoKIyMjIyBIYXNoaWNvcnAgVmF1bHQKClRvIHVzZSBWYXVsdCwgc2V0IGBjb25jb3Vyc2Uud2ViLmt1YmVybmV0ZXMuZW5hYmxlZGAgdG8gZmFsc2UsIGFuZCBzZXQgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CgoKYGBgeWFtbAojIyBDb25maWd1cmF0aW9uIHZhbHVlcyBmb3IgdGhlIENyZWRlbnRpYWwgTWFuYWdlci4KIyMgcmVmOiBodHRwczovL2NvbmNvdXJzZS1jaS5vcmcvY3JlZHMuaHRtbAojIwpjb25jb3Vyc2U6CiAgd2ViOgogICAgdmF1bHQ6CiAgICAgICMjIFVzZSBIYXNoaWNvcnAgVmF1bHQgZm9yIHRoZSBDcmVkZW50aWFsIE1hbmFnZXIuCiAgICAgICMjCiAgICAgIGVuYWJsZWQ6IGZhbHNlCgogICAgICAjIyBVUkwgcG9pbnRpbmcgdG8gdmF1bHQgYWRkciAoaS5lLiBodHRwOi8vdmF1bHQ6ODIwMCkuCiAgICAgICMjCiAgICAgICMgdXJsOgoKICAgICAgIyMgdmF1bHQgcGF0aCB1bmRlciB3aGljaCB0byBuYW1lc3BhY2UgY3JlZGVudGlhbCBsb29rdXAsIGRlZmF1bHRzIHRvIC9jb25jb3Vyc2UuCiAgICAgICMjCiAgICAgICMgcGF0aFByZWZpeDoKYGBgCgojIyMjIEFXUyBTeXN0ZW1zIE1hbmFnZXIgUGFyYW1ldGVyIFN0b3JlIChTU00pCgpUbyB1c2UgU1NNLCBzZXQgYGNvbmNvdXJzZS53ZWIua3ViZXJuZXRlcy5lbmFibGVkYCB0byBmYWxzZSwgYW5kIHNldCBgY29uY291cnNlLndlYi5hd3NTc20uZW5hYmxlZGAgdG8gdHJ1ZS4KCkZvciBhIGdpdmVuIENvbmNvdXJzZSAqdGVhbSosIGEgcGlwZWxpbmUgbG9va3MgZm9yIHNlY3JldHMgaW4gU1NNIHVzaW5nIGVpdGhlciBgL2NvbmNvdXJzZS97dGVhbX0ve3NlY3JldH1gIG9yIGAvY29uY291cnNlL3t0ZWFtfS97cGlwZWxpbmV9L3tzZWNyZXR9YDsgdGhlIHBhdHRlcm5zIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBgY29uY291cnNlLndlYi5hd3NTc20udGVhbVNlY3JldFRlbXBsYXRlYCBhbmQgYGNvbmNvdXJzZS53ZWIuYXdzU3NtLnBpcGVsaW5lU2VjcmV0VGVtcGxhdGVgIHNldHRpbmdzLgoKQ29uY291cnNlIHJlcXVpcmVzIEFXUyBjcmVkZW50aWFscyB3aGljaCBhcmUgYWJsZSB0byByZWFkIGZyb20gU1NNIGZvciB0aGlzIGZlYXR1cmUgdG8gZnVuY3Rpb24uIENyZWRlbnRpYWxzIGNhbiBiZSBzZXQgaW4gdGhlIGBzZWNyZXRzLmF3c1NzbSpgIHNldHRpbmdzOyBpZiB5b3VyIGNsdXN0ZXIgaXMgcnVubmluZyBpbiBhIGRpZmZlcmVudCBBV1MgcmVnaW9uLCB5b3UgbWF5IGFsc28gbmVlZCB0byBzZXQgYGNvbmNvdXJzZS53ZWIuYXdzU3NtLnJlZ2lvbmAuCgpUaGUgbWluaW11bSBJQU0gcG9saWN5IHlvdSBuZWVkIHRvIHVzZSBTU00gd2l0aCBDb25jb3Vyc2UgaXM6CgpgYGBqc29uCnsKICAiVmVyc2lvbiI6ICIyMDEyLTEwLTE3IiwKICAiU3RhdGVtZW50IjogWwogICAgewogICAgICAiQWN0aW9uIjogImttczpEZWNyeXB0IiwKICAgICAgIlJlc291cmNlIjogIjxrbXMta2V5LWFybj4iLAogICAgICAiRWZmZWN0IjogIkFsbG93IgogICAgfSwKICAgIHsKICAgICAgIkFjdGlvbiI6ICJzc206R2V0UGFyYW1ldGVyKiIsCiAgICAgICJSZXNvdXJjZSI6ICI8Li4uYXJuLi4uPjpwYXJhbWV0ZXIvY29uY291cnNlLyoiLAogICAgICAiRWZmZWN0IjogIkFsbG93IgogICAgfQogIF0KfQpgYGAKCldoZXJlIGA8a21zLWtleS1hcm4+YCBpcyB0aGUgQVJOIG9mIHRoZSBLTVMga2V5IHVzZWQgdG8gZW5jcnlwdCB0aGUgc2VjcmV0cyBpbiBQYXJhbWV0ZXIgU3RvcmUsIGFuZCB0aGUgYDwuLi5hcm4uLi4+YCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCBhIGNvcnJlY3QgQVJOIGZvciB5b3VyIGFjY291bnQgYW5kIHJlZ2lvbidzIFBhcmFtZXRlciBTdG9yZS4KCiMjIyMgQVdTIFNlY3JldHMgTWFuYWdlcgoKVG8gdXNlIFNlY3JldHMgTWFuYWdlciwgc2V0IGBjb25jb3Vyc2Uud2ViLmt1YmVybmV0ZXMuZW5hYmxlZGAgdG8gZmFsc2UsIGFuZCBzZXQgYGNvbmNvdXJzZS53ZWIuYXdzU2VjcmV0c01hbmFnZXIuZW5hYmxlZGAgdG8gdHJ1ZS4KCkZvciBhIGdpdmVuIENvbmNvdXJzZSAqdGVhbSosIGEgcGlwZWxpbmUgbG9va3MgZm9yIHNlY3JldHMgaW4gU2VjcmV0cyBNYW5hZ2VyIHVzaW5nIGVpdGhlciBgL2NvbmNvdXJzZS97dGVhbX0ve3NlY3JldH1gIG9yIGAvY29uY291cnNlL3t0ZWFtfS97cGlwZWxpbmV9L3tzZWNyZXR9YDsgdGhlIHBhdHRlcm5zIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBgY29uY291cnNlLndlYi5hd3NTZWNyZXRzTWFuYWdlci50ZWFtU2VjcmV0VGVtcGxhdGVgIGFuZCBgY29uY291cnNlLndlYi5hd3NTZWNyZXRzTWFuYWdlci5waXBlbGluZVNlY3JldFRlbXBsYXRlYCBzZXR0aW5ncy4KCkNvbmNvdXJzZSByZXF1aXJlcyBBV1MgY3JlZGVudGlhbHMgd2hpY2ggYXJlIGFibGUgdG8gcmVhZCBmcm9tIFNlY3JldHMgTWFuYWdlciBmb3IgdGhpcyBmZWF0dXJlIHRvIGZ1bmN0aW9uLiBDcmVkZW50aWFscyBjYW4gYmUgc2V0IGluIHRoZSBgc2VjcmV0cy5hd3NTZWNyZXRzbWFuYWdlcipgIHNldHRpbmdzOyBpZiB5b3VyIGNsdXN0ZXIgaXMgcnVubmluZyBpbiBhIGRpZmZlcmVudCBBV1MgcmVnaW9uLCB5b3UgbWF5IGFsc28gbmVlZCB0byBzZXQgYGNvbmNvdXJzZS53ZWIuYXdzU2VjcmV0c01hbmFnZXIucmVnaW9uYC4KClRoZSBtaW5pbXVtIElBTSBwb2xpY3kgeW91IG5lZWQgdG8gdXNlIFNlY3JldHMgTWFuYWdlciB3aXRoIENvbmNvdXJzZSBpczoKCmBgYGpzb24KewogICJWZXJzaW9uIjogIjIwMTItMTAtMTciLAogICJTdGF0ZW1lbnQiOiBbCiAgICB7CiAgICAgICJTaWQiOiAiQWxsb3dBY2Nlc3NUb1NlY3JldE1hbmFnZXJQYXJhbWV0ZXJzIiwKICAgICAgIkVmZmVjdCI6ICJBbGxvdyIsCiAgICAgICJBY3Rpb24iOiBbCiAgICAgICAgInNlY3JldHNtYW5hZ2VyOkxpc3RTZWNyZXRzIgogICAgICBdLAogICAgICAiUmVzb3VyY2UiOiAiKiIKICAgIH0sCiAgICB7CiAgICAgICJTaWQiOiAiQWxsb3dBY2Nlc3NHZXRTZWNyZXQiLAogICAgICAiRWZmZWN0IjogIkFsbG93IiwKICAgICAgIkFjdGlvbiI6IFsKICAgICAgICAic2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWUiLAogICAgICAgICJzZWNyZXRzbWFuYWdlcjpEZXNjcmliZVNlY3JldCIKICAgICAgXSwKICAgICAgIlJlc291cmNlIjogWwogICAgICAgICJhcm46YXdzOnNlY3JldHNtYW5hZ2VyOjo6c2VjcmV0Oi9jb25jb3Vyc2UvKiIKICAgICAgXQogICAgfQogIF0KfQpgYGAK" 39 }, 40 { 41 "filePath": "more-config.yaml", 42 "fileContents": "d2ViOgogIGFkZGl0aW9uYWxWb2x1bWVzOgogIC0gbmFtZTogdGVhbS1hdXRob3JpemVkLWtleXMKICAgIGNvbmZpZ01hcDoKICAgICAgbmFtZTogaHVzaC1ob3VzZS10ZWFtLWF1dGhvcml6ZWQta2V5cwogIGFkZGl0aW9uYWxWb2x1bWVNb3VudHM6CiAgLSBuYW1lOiB0ZWFtLWF1dGhvcml6ZWQta2V5cwogICAgbW91bnRQYXRoOiAvdGVhbS1hdXRob3JpemVkLWtleXMvCg==" 43 }, 44 { 45 "filePath": "requirements.lock", 46 "fileContents": "ZGVwZW5kZW5jaWVzOgotIG5hbWU6IHBvc3RncmVzcWwKICByZXBvc2l0b3J5OiBodHRwczovL2t1YmVybmV0ZXMtY2hhcnRzLnN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vCiAgdmVyc2lvbjogMC4xMy4xCmRpZ2VzdDogc2hhMjU2OjY1ZDM1ODg3OGU0OTZhYjFiNTE3MjFhNzZlMmFmNWI3ZmQzZTZiYjc2MzBiMWQ0MDJhZjY3YTE3YmY3ODJiYjQKZ2VuZXJhdGVkOiAyMDE4LTA1LTMxVDE2OjExOjQwLjY1NTc5NDA4OCswMTowMAo=" 47 }, 48 { 49 "filePath": "requirements.yaml", 50 "fileContents": "ZGVwZW5kZW5jaWVzOgotIG5hbWU6IHBvc3RncmVzcWwKICB2ZXJzaW9uOiAwLjEzLjEKICByZXBvc2l0b3J5OiBodHRwczovL2t1YmVybmV0ZXMtY2hhcnRzLnN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vCiAgY29uZGl0aW9uOiBwb3N0Z3Jlc3FsLmVuYWJsZWQK" 51 }, 52 { 53 "filePath": "templates/NOTES.txt", 54 "fileContents": "CiogQ29uY291cnNlIGNhbiBiZSBhY2Nlc3NlZDoKCiAgKiBXaXRoaW4geW91ciBjbHVzdGVyLCBhdCB0aGUgZm9sbG93aW5nIEROUyBuYW1lIGF0IHBvcnQge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmJpbmRQb3J0IH19OgoKICAgIHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uud2ViLmZ1bGxuYW1lIiAuIH19Lnt7IC5SZWxlYXNlLk5hbWVzcGFjZSB9fS5zdmMuY2x1c3Rlci5sb2NhbAoKICB7ey0gaWYgLlZhbHVlcy53ZWIuaW5ncmVzcy5lbmFibGVkIH19CgogICogRnJvbSBvdXRzaWRlIHRoZSBjbHVzdGVyLCB0aGUgVVJMKHMpIGFyZToKICAgIHt7IHJhbmdlIC5WYWx1ZXMud2ViLmluZ3Jlc3MuaG9zdHMgfX0KICAgIGh0dHA6Ly97eyAuIH19CiAgICB7ey0gZW5kIH19CiAge3stIGVsc2UgfX0KCiAgKiBGcm9tIG91dHNpZGUgdGhlIGNsdXN0ZXIsIHJ1biB0aGVzZSBjb21tYW5kcyBpbiB0aGUgc2FtZSBzaGVsbDoKICAgIHt7LSBpZiBjb250YWlucyAiTm9kZVBvcnQiIC5WYWx1ZXMud2ViLnNlcnZpY2UudHlwZSB9fQoKICAgIGV4cG9ydCBOT0RFX1BPUlQ9JChrdWJlY3RsIGdldCAtLW5hbWVzcGFjZSB7eyAuUmVsZWFzZS5OYW1lc3BhY2UgfX0gLW8ganNvbnBhdGg9Insuc3BlYy5wb3J0c1swXS5ub2RlUG9ydH0iIHNlcnZpY2VzIHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uud2ViLmZ1bGxuYW1lIiAuIH19KQogICAgZXhwb3J0IE5PREVfSVA9JChrdWJlY3RsIGdldCBub2RlcyAtLW5hbWVzcGFjZSB7eyAuUmVsZWFzZS5OYW1lc3BhY2UgfX0gLW8ganNvbnBhdGg9InsuaXRlbXNbMF0uc3RhdHVzLmFkZHJlc3Nlc1swXS5hZGRyZXNzfSIpCiAgICBlY2hvIGh0dHA6Ly8kTk9ERV9JUDokTk9ERV9QT1JUCiAgICB7ey0gZWxzZSBpZiBjb250YWlucyAiTG9hZEJhbGFuY2VyIiAuVmFsdWVzLndlYi5zZXJ2aWNlLnR5cGUgfX0KCiAgICAgTk9URTogSXQgbWF5IHRha2UgYSBmZXcgbWludXRlcyBmb3IgdGhlIExvYWRCYWxhbmNlciBJUCB0byBiZSBhdmFpbGFibGUuCiAgICAgICAgICAgWW91IGNhbiB3YXRjaCB0aGUgc3RhdHVzIG9mIGJ5IHJ1bm5pbmcgJ2t1YmVjdGwgZ2V0IHN2YyAtdyB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLndlYi5mdWxsbmFtZSIgLiB9fScKCiAgICBleHBvcnQgU0VSVklDRV9JUD0kKGt1YmVjdGwgZ2V0IHN2YyAtLW5hbWVzcGFjZSB7eyAuUmVsZWFzZS5OYW1lc3BhY2UgfX0ge3sgdGVtcGxhdGUgImNvbmNvdXJzZS53ZWIuZnVsbG5hbWUiIC4gfX0gLW8ganNvbnBhdGg9J3suc3RhdHVzLmxvYWRCYWxhbmNlci5pbmdyZXNzWzBdLmlwfScpCiAgICBlY2hvIGh0dHA6Ly8kU0VSVklDRV9JUDp7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYmluZFBvcnQgfX0KICAgIHt7LSBlbHNlIGlmIGNvbnRhaW5zICJDbHVzdGVySVAiICAuVmFsdWVzLndlYi5zZXJ2aWNlLnR5cGUgfX0KCiAgICBleHBvcnQgUE9EX05BTUU9JChrdWJlY3RsIGdldCBwb2RzIC0tbmFtZXNwYWNlIHt7IC5SZWxlYXNlLk5hbWVzcGFjZSB9fSAtbCAiYXBwPXt7IHRlbXBsYXRlICJjb25jb3Vyc2Uud2ViLmZ1bGxuYW1lIiAuIH19IiAtbyBqc29ucGF0aD0iey5pdGVtc1swXS5tZXRhZGF0YS5uYW1lfSIpCiAgICBlY2hvICJWaXNpdCBodHRwOi8vMTI3LjAuMC4xOjgwODAgdG8gdXNlIENvbmNvdXJzZSIKICAgIGt1YmVjdGwgcG9ydC1mb3J3YXJkIC0tbmFtZXNwYWNlIHt7IC5SZWxlYXNlLk5hbWVzcGFjZSB9fSAkUE9EX05BTUUgODA4MDp7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYmluZFBvcnQgfX0KICAgIHt7LSBlbmQgfX0KICB7ey0gZW5kIH19CiogSWYgdGhpcyBpcyB5b3VyIGZpcnN0IHRpbWUgdXNpbmcgQ29uY291cnNlLCBmb2xsb3cgdGhlIHR1dG9yaWFscyBhdCBodHRwczovL2NvbmNvdXJzZS1jaS5vcmcvdHV0b3JpYWxzLmh0bWwKCnt7LSBpZiBjb250YWlucyAibmFpdmUiIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5iYWdnYWdlY2xhaW0uZHJpdmVyIH19CgoqKioqKioqKioqKioqKioqKioqCioqKioqKldBUk5JTkcqKioqKioKKioqKioqKioqKioqKioqKioqKgoKWW91IGFyZSB1c2luZyB0aGUgIm5haXZlIiBiYWdnYWdlIGNsYWltIGRyaXZlciwgd2hpY2ggaXMgYWxzbyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBjaGFydC4gCgpUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIGJ1dCBpcyB2ZXJ5IHNwYWNlIGluZWZmaWNpZW50LCBhbmQgc2hvdWxkIGJlIGNoYW5nZWQgdG8gZWl0aGVyICJidHJmcyIgKHJlY29tbWVuZGVkKSBvciAib3ZlcmxheSIgZGVwZW5kaW5nIG9uIHRoYXQgZmlsZXN5c3RlbSdzIHN1cHBvcnQgaW4gdGhlIExpbnV4IGtlcm5lbCB5b3VyIGNsdXN0ZXIgaXMgdXNpbmcuIAoKUGxlYXNlIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY29uY291cnNlL2NvbmNvdXJzZS9pc3N1ZXMvMTIzMCBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2NvbmNvdXJzZS9jb25jb3Vyc2UvaXNzdWVzLzE5NjYgZm9yIGJhY2tncm91bmQuCgp7ey0gZW5kIH19CgoKCnt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIubG9jYWxBdXRoLmVuYWJsZWQgfX0Ke3stIGlmIGNvbnRhaW5zICJ0ZXN0OnRlc3QiIC5WYWx1ZXMuc2VjcmV0cy5sb2NhbFVzZXJzIH19CgoqKioqKioqKioqKioqKioqKioqCioqKioqKldBUk5JTkcqKioqKioKKioqKioqKioqKioqKioqKioqKgoKWW91J3JlIHVzaW5nIHRoZSBkZWZhdWx0ICJ0ZXN0IiB1c2VyIHdpdGggdGhlIGRlZmF1bHQgInRlc3QiIHBhc3N3b3JkLgoKTWFrZSBzdXJlIHlvdSBlaXRoZXIgZGlzYWJsZSBsb2NhbCBhdXRoIG9yIGNoYW5nZSB0aGUgY29tYmluYXRpb24gdG8gc29tZXRoaW5nIG1vcmUgc2VjdXJlLCBwcmVmZXJhYmx5IHNwZWNpZnlpbmcgYSBwYXNzd29yZCBpbiB0aGUgYmNyeXB0ZWQgZm9ybS4KClBsZWFzZSBzZWUgYFJFQURNRS5tZGAgZm9yIGV4YW1wbGVzLgoKe3stIGVuZCB9fQp7ey0gZW5kIH19Cg==" 55 }, 56 { 57 "filePath": "templates/_helpers.tpl", 58 "fileContents": "e3svKiB2aW06IHNldCBmaWxldHlwZT1tdXN0YWNoZTogKi99fQp7ey8qCkV4cGFuZCB0aGUgbmFtZSBvZiB0aGUgY2hhcnQuCiovfX0Ke3stIGRlZmluZSAiY29uY291cnNlLm5hbWUiIC19fQp7ey0gZGVmYXVsdCAuQ2hhcnQuTmFtZSAuVmFsdWVzLm5hbWVPdmVycmlkZSB8IHRydW5jIDYzIHwgdHJpbVN1ZmZpeCAiLSIgLX19Cnt7LSBlbmQgLX19Cgp7ey8qCkNyZWF0ZSBhIGRlZmF1bHQgZnVsbHkgcXVhbGlmaWVkIGNvbmNvdXJzZSBuYW1lLgpXZSB0cnVuY2F0ZSBhdCA2MyBjaGFycyBiZWNhdXNlIHNvbWUgS3ViZXJuZXRlcyBuYW1lIGZpZWxkcyBhcmUgbGltaXRlZCB0byB0aGlzIChieSB0aGUgRE5TIG5hbWluZyBzcGVjKS4KKi99fQp7ey0gZGVmaW5lICJjb25jb3Vyc2UuY29uY291cnNlLmZ1bGxuYW1lIiAtfX0Ke3stICRuYW1lIDo9IGRlZmF1bHQgLkNoYXJ0Lk5hbWUgLlZhbHVlcy5uYW1lT3ZlcnJpZGUgLX19Cnt7LSBwcmludGYgIiVzLSVzIiAuUmVsZWFzZS5OYW1lICRuYW1lIHwgdHJ1bmMgNjMgfCB0cmltU3VmZml4ICItIiAtfX0Ke3stIGVuZCAtfX0KCnt7LSBkZWZpbmUgImNvbmNvdXJzZS53ZWIuZnVsbG5hbWUiIC19fQp7ey0gJG5hbWUgOj0gZGVmYXVsdCAid2ViIiAuVmFsdWVzLndlYi5uYW1lT3ZlcnJpZGUgLX19Cnt7LSBwcmludGYgIiVzLSVzIiAuUmVsZWFzZS5OYW1lICRuYW1lIHwgdHJ1bmMgNjMgfCB0cmltU3VmZml4ICItIiAtfX0Ke3stIGVuZCAtfX0KCnt7LSBkZWZpbmUgImNvbmNvdXJzZS53b3JrZXIuZnVsbG5hbWUiIC19fQp7ey0gJG5hbWUgOj0gZGVmYXVsdCAid29ya2VyIiAuVmFsdWVzLndvcmtlci5uYW1lT3ZlcnJpZGUgLX19Cnt7LSBwcmludGYgIiVzLSVzIiAuUmVsZWFzZS5OYW1lICRuYW1lIHwgdHJ1bmMgNjMgfCB0cmltU3VmZml4ICItIiAtfX0Ke3stIGVuZCAtfX0KCnt7LyoKQ3JlYXRlIGEgZGVmYXVsdCBmdWxseSBxdWFsaWZpZWQgcG9zdGdyZXNxbCBuYW1lLgpXZSB0cnVuY2F0ZSBhdCA2MyBjaGFycyBiZWNhdXNlIHNvbWUgS3ViZXJuZXRlcyBuYW1lIGZpZWxkcyBhcmUgbGltaXRlZCB0byB0aGlzIChieSB0aGUgRE5TIG5hbWluZyBzcGVjKS4KKi99fQp7ey0gZGVmaW5lICJjb25jb3Vyc2UucG9zdGdyZXNxbC5mdWxsbmFtZSIgLX19Cnt7LSAkbmFtZSA6PSBkZWZhdWx0ICJwb3N0Z3Jlc3FsIiAuVmFsdWVzLnBvc3RncmVzcWwubmFtZU92ZXJyaWRlIC19fQp7ey0gcHJpbnRmICIlcy0lcyIgLlJlbGVhc2UuTmFtZSAkbmFtZSB8IHRydW5jIDYzIHwgdHJpbVN1ZmZpeCAiLSIgLX19Cnt7LSBlbmQgLX19Cgp7ey0gZGVmaW5lICJjb25jb3Vyc2Uuc2VjcmV0LnJlcXVpcmVkIiAtfX0Ke3stIGlmIC5pcyB9fQp7ey0gcmVxdWlyZWQgKHByaW50ZiAic2VjcmV0cy4lcyBpcyByZXF1aXJlZCBiZWNhdXNlIHNlY3JldHMuY3JlYXRlIGlzIHRydWUgYW5kICVzIGlzIHRydWUiIC5rZXkgLmlzKSAoaW5kZXggLnJvb3QuVmFsdWVzLnNlY3JldHMgLmtleSApIHwgYjY0ZW5jIHwgcXVvdGUgfX0Ke3stIGVsc2UgLX19Cnt7LSByZXF1aXJlZCAocHJpbnRmICJzZWNyZXRzLiVzIGlzIHJlcXVpcmVkIGJlY2F1c2Ugc2VjcmV0cy5jcmVhdGUgaXMgdHJ1ZSBhbmQgJXMgaXNuJ3QgdHJ1ZSIgLmtleSAuaXNudCkgKGluZGV4IC5yb290LlZhbHVlcy5zZWNyZXRzIC5rZXkgKSB8IGI2NGVuYyB8IHF1b3RlIH19Cnt7LSBlbmQgLX19Cnt7LSBlbmQgLX19Cgp7ey0gZGVmaW5lICJjb25jb3Vyc2UubmFtZXNwYWNlUHJlZml4IiAtfX0Ke3stIGRlZmF1bHQgKHByaW50ZiAiJXMtIiAuUmVsZWFzZS5OYW1lICkgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmt1YmVybmV0ZXMubmFtZXNwYWNlUHJlZml4IC19fQp7ey0gZW5kIC19fQo=" 59 }, 60 { 61 "filePath": "templates/namespace.yaml", 62 "fileContents": "e3stIGlmIGFuZCAuVmFsdWVzLmNvbmNvdXJzZS53ZWIua3ViZXJuZXRlcy5lbmFibGVkIC5WYWx1ZXMuY29uY291cnNlLndlYi5rdWJlcm5ldGVzLmNyZWF0ZVRlYW1OYW1lc3BhY2VzIC19fQp7ey0gcmFuZ2UgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmt1YmVybmV0ZXMudGVhbXMgfX0KLS0tCmFwaVZlcnNpb246IHYxCmtpbmQ6IE5hbWVzcGFjZQptZXRhZGF0YToKe3stIGlmICQuVmFsdWVzLmNvbmNvdXJzZS53ZWIua3ViZXJuZXRlcy5rZWVwTmFtZXNwYWNlcyB9fQogIGFubm90YXRpb25zOgogICAgImhlbG0uc2gvcmVzb3VyY2UtcG9saWN5Ijoga2VlcAp7ey0gZW5kIH19CiAgbmFtZToge3sgdGVtcGxhdGUgImNvbmNvdXJzZS5uYW1lc3BhY2VQcmVmaXgiICQgfX17eyAuIH19CiAgbGFiZWxzOgogICAgYXBwOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLmNvbmNvdXJzZS5mdWxsbmFtZSIgJCB9fQogICAgY2hhcnQ6ICJ7eyAkLkNoYXJ0Lk5hbWUgfX0te3sgJC5DaGFydC5WZXJzaW9uIH19IgogICAgcmVsZWFzZTogInt7ICQuUmVsZWFzZS5OYW1lIH19IgogICAgaGVyaXRhZ2U6ICJ7eyAkLlJlbGVhc2UuU2VydmljZSB9fSIKe3stIGVuZCB9fQp7ey0gZW5kIC19fQo=" 63 }, 64 { 65 "filePath": "templates/secrets.yaml", 66 "fileContents": "e3stIGlmIC5WYWx1ZXMuc2VjcmV0cy5jcmVhdGUgfX0KYXBpVmVyc2lvbjogdjEKa2luZDogU2VjcmV0Cm1ldGFkYXRhOgogIG5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2UuY29uY291cnNlLmZ1bGxuYW1lIiAuIH19CiAgbGFiZWxzOgogICAgYXBwOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLmNvbmNvdXJzZS5mdWxsbmFtZSIgLiB9fQogICAgY2hhcnQ6ICJ7eyAuQ2hhcnQuTmFtZSB9fS17eyAuQ2hhcnQuVmVyc2lvbiB9fSIKICAgIHJlbGVhc2U6ICJ7eyAuUmVsZWFzZS5OYW1lIH19IgogICAgaGVyaXRhZ2U6ICJ7eyAuUmVsZWFzZS5TZXJ2aWNlIH19Igp0eXBlOiBPcGFxdWUKZGF0YToKICBob3N0LWtleToge3sgLlZhbHVlcy5zZWNyZXRzLmhvc3RLZXkgfCBiNjRlbmMgfCBxdW90ZSB9fQogIGhvc3Qta2V5LXB1Yjoge3sgLlZhbHVlcy5zZWNyZXRzLmhvc3RLZXlQdWIgfCBiNjRlbmMgfCBxdW90ZSB9fQogIHNlc3Npb24tc2lnbmluZy1rZXk6IHt7IC5WYWx1ZXMuc2VjcmV0cy5zZXNzaW9uU2lnbmluZ0tleSB8IGI2NGVuYyB8IHF1b3RlIH19CiAgd29ya2VyLWtleToge3sgLlZhbHVlcy5zZWNyZXRzLndvcmtlcktleSB8IGI2NGVuYyB8IHF1b3RlIH19CiAgd29ya2VyLWtleS1wdWI6IHt7IC5WYWx1ZXMuc2VjcmV0cy53b3JrZXJLZXlQdWIgfCBiNjRlbmMgfCBxdW90ZSB9fQogIHt7LSBpZiBub3QgLlZhbHVlcy5wb3N0Z3Jlc3FsLmVuYWJsZWQgfX0KICBwb3N0Z3Jlc3FsLXVzZXI6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uuc2VjcmV0LnJlcXVpcmVkIiBkaWN0ICJrZXkiICJwb3N0Z3Jlc1VzZXIiICJpc250IiAicG9zdGdyZXNxbC5lbmFibGVkIiAicm9vdCIgLiB9fQogIHBvc3RncmVzcWwtcGFzc3dvcmQ6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uuc2VjcmV0LnJlcXVpcmVkIiBkaWN0ICJrZXkiICJwb3N0Z3Jlc1Bhc3N3b3JkIiAiaXNudCIgInBvc3RncmVzcWwuZW5hYmxlZCIgInJvb3QiIC4gfX0KICBwb3N0Z3Jlc3FsLWNhLWNlcnQ6IHt7IGRlZmF1bHQgIiIgLlZhbHVlcy5zZWNyZXRzLnBvc3RncmVzQ2FDZXJ0IHwgYjY0ZW5jIHwgcXVvdGUgfX0KICBwb3N0Z3Jlc3FsLWNsaWVudC1jZXJ0OiB7eyBkZWZhdWx0ICIiIC5WYWx1ZXMuc2VjcmV0cy5wb3N0Z3Jlc0NsaWVudENlcnQgfCBiNjRlbmMgfCBxdW90ZSB9fQogIHBvc3RncmVzcWwtY2xpZW50LWtleToge3sgZGVmYXVsdCAiIiAuVmFsdWVzLnNlY3JldHMucG9zdGdyZXNDbGllbnRLZXkgfCBiNjRlbmMgfCBxdW90ZSB9fQogIHt7LSBlbmQgfX0KICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmVuY3J5cHRpb24uZW5hYmxlZCB9fQogIGVuY3J5cHRpb24ta2V5OiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLnNlY3JldC5yZXF1aXJlZCIgZGljdCAia2V5IiAiZW5jcnlwdGlvbktleSIgImlzIiAiY29uY291cnNlLmVuY3J5cHRpb24uZW5hYmxlZCIgInJvb3QiIC4gfX0KICBvbGQtZW5jcnlwdGlvbi1rZXk6IHt7IGRlZmF1bHQgIiIgLlZhbHVlcy5zZWNyZXRzLm9sZEVuY3J5cHRpb25LZXkgfCBiNjRlbmMgfCBxdW90ZSB9fQogIHt7LSBlbmQgfX0KICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmxvY2FsQXV0aC5lbmFibGVkIH19CiAgbG9jYWwtdXNlcnM6IHt7IC5WYWx1ZXMuc2VjcmV0cy5sb2NhbFVzZXJzIHwgYjY0ZW5jIHwgcXVvdGUgfX0KICB7ey0gZW5kIH19CiAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmNmLmVuYWJsZWQgfX0KICBjZi1jbGllbnQtaWQ6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uuc2VjcmV0LnJlcXVpcmVkIiBkaWN0ICJrZXkiICJjZkNsaWVudElkIiAiaXMiICJjb25jb3Vyc2Uud2ViLmF1dGguY2YuZW5hYmxlZCIgInJvb3QiIC4gfX0KICBjZi1jbGllbnQtc2VjcmV0OiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLnNlY3JldC5yZXF1aXJlZCIgZGljdCAia2V5IiAiY2ZDbGllbnRTZWNyZXQiICJpcyIgImNvbmNvdXJzZS53ZWIuYXV0aC5jZi5lbmFibGVkIiAicm9vdCIgLiB9fQogIGNmLWNhLWNlcnQ6IHt7IGRlZmF1bHQgIiIgLlZhbHVlcy5zZWNyZXRzLmNmQ2FDZXJ0IHwgYjY0ZW5jIHwgcXVvdGUgfX0KICB7ey0gZW5kIH19CiAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmdpdGh1Yi5lbmFibGVkIH19CiAgZ2l0aHViLWNsaWVudC1pZDoge3sgdGVtcGxhdGUgImNvbmNvdXJzZS5zZWNyZXQucmVxdWlyZWQiIGRpY3QgImtleSIgImdpdGh1YkNsaWVudElkIiAiaXMiICJjb25jb3Vyc2Uud2ViLmF1dGguZ2l0aHViLmVuYWJsZWQiICJyb290IiAuIH19CiAgZ2l0aHViLWNsaWVudC1zZWNyZXQ6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uuc2VjcmV0LnJlcXVpcmVkIiBkaWN0ICJrZXkiICJnaXRodWJDbGllbnRTZWNyZXQiICJpcyIgImNvbmNvdXJzZS53ZWIuYXV0aC5naXRodWIuZW5hYmxlZCIgInJvb3QiIC4gfX0KICBnaXRodWItY2EtY2VydDoge3sgZGVmYXVsdCAiIiAuVmFsdWVzLnNlY3JldHMuZ2l0aHViQ2FDZXJ0IHwgYjY0ZW5jIHwgcXVvdGUgfX0KICB7ey0gZW5kIH19CiAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmdpdGxhYi5lbmFibGVkIH19CiAgZ2l0bGFiLWNsaWVudC1pZDoge3sgdGVtcGxhdGUgImNvbmNvdXJzZS5zZWNyZXQucmVxdWlyZWQiIGRpY3QgImtleSIgImdpdGxhYkNsaWVudElkIiAiaXMiICJjb25jb3Vyc2Uud2ViLmF1dGguZ2l0bGFiLmVuYWJsZWQiICJyb290IiAuIH19CiAgZ2l0bGFiLWNsaWVudC1zZWNyZXQ6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uuc2VjcmV0LnJlcXVpcmVkIiBkaWN0ICJrZXkiICJnaXRsYWJDbGllbnRTZWNyZXQiICJpcyIgImNvbmNvdXJzZS53ZWIuYXV0aC5naXRsYWIuZW5hYmxlZCIgInJvb3QiIC4gfX0KICB7ey0gZW5kIH19CiAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmxkYXAuZW5hYmxlZCB9fQogIGxkYXAtY2EtY2VydDoge3sgZGVmYXVsdCAiIiAuVmFsdWVzLnNlY3JldHMubGRhcENhQ2VydCB8IGI2NGVuYyB8IHF1b3RlIH19CiAge3stIGVuZCB9fQogIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5vYXV0aC5lbmFibGVkIH19CiAgb2F1dGgtY2xpZW50LWlkOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLnNlY3JldC5yZXF1aXJlZCIgZGljdCAia2V5IiAib2F1dGhDbGllbnRJZCIgImlzIiAiY29uY291cnNlLndlYi5hdXRoLm9hdXRoLmVuYWJsZWQiICJyb290IiAuIH19CiAgb2F1dGgtY2xpZW50LXNlY3JldDoge3sgdGVtcGxhdGUgImNvbmNvdXJzZS5zZWNyZXQucmVxdWlyZWQiIGRpY3QgImtleSIgIm9hdXRoQ2xpZW50U2VjcmV0IiAiaXMiICJjb25jb3Vyc2Uud2ViLmF1dGgub2F1dGguZW5hYmxlZCIgInJvb3QiIC4gfX0KICBvYXV0aC1jYS1jZXJ0OiB7eyBkZWZhdWx0ICIiIC5WYWx1ZXMuc2VjcmV0cy5vYXV0aENhQ2VydCB8IGI2NGVuYyB8IHF1b3RlIH19CiAge3stIGVuZCB9fQogIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5vaWRjLmVuYWJsZWQgfX0KICBvaWRjLWNsaWVudC1pZDoge3sgdGVtcGxhdGUgImNvbmNvdXJzZS5zZWNyZXQucmVxdWlyZWQiIGRpY3QgImtleSIgIm9pZGNDbGllbnRJZCIgImlzIiAiY29uY291cnNlLndlYi5hdXRoLm9pZGMuZW5hYmxlZCIgInJvb3QiIC4gfX0KICBvaWRjLWNsaWVudC1zZWNyZXQ6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uuc2VjcmV0LnJlcXVpcmVkIiBkaWN0ICJrZXkiICJvaWRjQ2xpZW50U2VjcmV0IiAiaXMiICJjb25jb3Vyc2Uud2ViLmF1dGgub2lkYy5lbmFibGVkIiAicm9vdCIgLiB9fQogIG9pZGMtY2EtY2VydDoge3sgZGVmYXVsdCAiIiAuVmFsdWVzLnNlY3JldHMub2lkY0NhQ2VydCB8IGI2NGVuYyB8IHF1b3RlIH19CiAge3stIGVuZCB9fQogIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudGxzLmVuYWJsZWQgfX0KICB3ZWItdGxzLWNlcnQ6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uuc2VjcmV0LnJlcXVpcmVkIiBkaWN0ICJrZXkiICJ3ZWJUbHNDZXJ0IiAiaXMiICJjb25jb3Vyc2Uud2ViLnRscy5lbmFibGVkIiAicm9vdCIgLiB9fQogIHdlYi10bHMta2V5OiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLnNlY3JldC5yZXF1aXJlZCIgZGljdCAia2V5IiAid2ViVGxzS2V5IiAiaXMiICJjb25jb3Vyc2Uud2ViLnRscy5lbmFibGVkIiAicm9vdCIgLiB9fQogIHt7LSBlbmQgfX0KICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnZhdWx0LmVuYWJsZWQgfX0KICB2YXVsdC1jYS1jZXJ0OiB7eyBkZWZhdWx0ICIiIC5WYWx1ZXMuc2VjcmV0cy52YXVsdENhQ2VydCB8IGI2NGVuYyB8IHF1b3RlIH19CiAgdmF1bHQtY2xpZW50LXRva2VuOiB7eyBkZWZhdWx0ICIiIC5WYWx1ZXMuc2VjcmV0cy52YXVsdENsaWVudFRva2VuIHwgYjY0ZW5jIHwgcXVvdGUgfX0KICB2YXVsdC1jbGllbnQtY2VydDoge3sgZGVmYXVsdCAiIiAuVmFsdWVzLnNlY3JldHMudmF1bHRDbGllbnRDZXJ0IHwgYjY0ZW5jIHwgcXVvdGUgfX0KICB2YXVsdC1jbGllbnQta2V5OiB7eyBkZWZhdWx0ICIiIC5WYWx1ZXMuc2VjcmV0cy52YXVsdENsaWVudEtleSB8IGI2NGVuYyB8IHF1b3RlIH19CiAgdmF1bHQtY2xpZW50LWF1dGgtcGFyYW06IHt7IGRlZmF1bHQgIiIgLlZhbHVlcy5zZWNyZXRzLnZhdWx0QXV0aFBhcmFtIHwgYjY0ZW5jIHwgcXVvdGUgfX0KICB7ey0gZW5kIH19CiAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hd3NTc20uZW5hYmxlZCB9fQogIGF3cy1zc20tYWNjZXNzLWtleToge3sgZGVmYXVsdCAiIiAuVmFsdWVzLnNlY3JldHMuYXdzU3NtQWNjZXNzS2V5IHwgYjY0ZW5jIHwgcXVvdGUgfX0KICBhd3Mtc3NtLXNlY3JldC1rZXk6IHt7IGRlZmF1bHQgIiIgLlZhbHVlcy5zZWNyZXRzLmF3c1NzbVNlY3JldEtleSB8IGI2NGVuYyB8IHF1b3RlIH19CiAge3stIGlmIC5WYWx1ZXMuc2VjcmV0cy5hd3NTc21TZXNzaW9uVG9rZW4gfX0KICBhd3Mtc3NtLXNlc3Npb24tdG9rZW46IHt7IC5WYWx1ZXMuc2VjcmV0cy5hd3NTc21TZXNzaW9uVG9rZW4gfCBiNjRlbmMgfCBxdW90ZSB9fQogIHt7LSBlbmQgfX0KICB7ey0gZW5kIH19CiAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hd3NTZWNyZXRzTWFuYWdlci5lbmFibGVkIH19CiAgYXdzLXNlY3JldHNtYW5hZ2VyLWFjY2Vzcy1rZXk6IHt7IGRlZmF1bHQgIiIgLlZhbHVlcy5zZWNyZXRzLmF3c1NlY3JldHNtYW5hZ2VyQWNjZXNzS2V5IHwgYjY0ZW5jIHwgcXVvdGUgfX0KICBhd3Mtc2VjcmV0c21hbmFnZXItc2VjcmV0LWtleToge3sgZGVmYXVsdCAiIiAuVmFsdWVzLnNlY3JldHMuYXdzU2VjcmV0c21hbmFnZXJTZWNyZXRLZXkgfCBiNjRlbmMgfCBxdW90ZSB9fQogIHt7LSBpZiAuVmFsdWVzLnNlY3JldHMuYXdzU2VjcmV0c21hbmFnZXJTZXNzaW9uVG9rZW4gfX0KICBhd3Mtc2VjcmV0c21hbmFnZXItc2Vzc2lvbi10b2tlbjoge3sgLlZhbHVlcy5zZWNyZXRzLmF3c1NlY3JldHNtYW5hZ2VyU2Vzc2lvblRva2VuIHwgYjY0ZW5jIHwgcXVvdGUgfX0KICB7ey0gZW5kIH19CiAge3stIGVuZCB9fQogIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuaW5mbHV4ZGIuZW5hYmxlZCB9fQogIGluZmx1eGRiLXBhc3N3b3JkOiB7eyBkZWZhdWx0ICIiIC5WYWx1ZXMuc2VjcmV0cy5pbmZsdXhkYlBhc3N3b3JkIHwgYjY0ZW5jIHwgcXVvdGUgfX0KICB7ey0gZW5kIH19CiAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5zeXNsb2cuZW5hYmxlZCB9fQogIHN5c2xvZy1jYS1jZXJ0OiB7eyBkZWZhdWx0ICIiIC5WYWx1ZXMuc2VjcmV0cy5zeXNsb2dDYUNlcnQgfCBiNjRlbmMgfCBxdW90ZSB9fQogIHt7LSBlbmQgfX0Ke3stIGVuZCB9fQo=" 67 }, 68 { 69 "filePath": "templates/web-deployment.yaml", 70 "fileContents": "YXBpVmVyc2lvbjogZXh0ZW5zaW9ucy92MWJldGExCmtpbmQ6IERlcGxveW1lbnQKbWV0YWRhdGE6CiAgbmFtZToge3sgdGVtcGxhdGUgImNvbmNvdXJzZS53ZWIuZnVsbG5hbWUiIC4gfX0KICBsYWJlbHM6CiAgICBhcHA6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uud2ViLmZ1bGxuYW1lIiAuIH19CiAgICBjaGFydDogInt7IC5DaGFydC5OYW1lIH19LXt7IC5DaGFydC5WZXJzaW9uIH19IgogICAgcmVsZWFzZTogInt7IC5SZWxlYXNlLk5hbWUgfX0iCiAgICBoZXJpdGFnZTogInt7IC5SZWxlYXNlLlNlcnZpY2UgfX0iCnNwZWM6CiAgcmVwbGljYXM6IHt7IC5WYWx1ZXMud2ViLnJlcGxpY2FzIH19CiAgdGVtcGxhdGU6CiAgICBtZXRhZGF0YToKICAgICAgbGFiZWxzOgogICAgICAgIGFwcDoge3sgdGVtcGxhdGUgImNvbmNvdXJzZS53ZWIuZnVsbG5hbWUiIC4gfX0KICAgICAgICByZWxlYXNlOiAie3sgLlJlbGVhc2UuTmFtZSB9fSIKICAgICAgYW5ub3RhdGlvbnM6Cnt7IHRvWWFtbCAuVmFsdWVzLndlYi5hbm5vdGF0aW9ucyB8IGluZGVudCA4IH19CiAgICBzcGVjOgogICAge3stIHdpdGggLlZhbHVlcy53ZWIubm9kZVNlbGVjdG9yIH19CiAgICAgIG5vZGVTZWxlY3RvcjoKe3sgdG9ZYW1sIC4gfCBpbmRlbnQgOCB9fQogICAge3stIGVuZCB9fQogICAgICBzZXJ2aWNlQWNjb3VudE5hbWU6IHt7IGlmIC5WYWx1ZXMucmJhYy5jcmVhdGUgfX17eyB0ZW1wbGF0ZSAiY29uY291cnNlLndlYi5mdWxsbmFtZSIgLiB9fXt7IGVsc2UgfX17eyAuVmFsdWVzLnJiYWMud2ViU2VydmljZUFjY291bnROYW1lIH19e3sgZW5kIH19CiAgICAgIHRvbGVyYXRpb25zOgp7eyB0b1lhbWwgLlZhbHVlcy53ZWIudG9sZXJhdGlvbnMgfCBpbmRlbnQgOCB9fQogICAgICB7ey0gaWYgLlZhbHVlcy5pbWFnZVB1bGxTZWNyZXRzIH19CiAgICAgIGltYWdlUHVsbFNlY3JldHM6CiAgICAgIHt7LSByYW5nZSAuVmFsdWVzLmltYWdlUHVsbFNlY3JldHMgfX0KICAgICAgICAtIG5hbWU6IHt7IC4gfX0KICAgICAge3stIGVuZCB9fQogICAgICB7ey0gZW5kIH19CiAgICAgIGNvbnRhaW5lcnM6CiAgICAgICAgLSBuYW1lOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLndlYi5mdWxsbmFtZSIgLiB9fQogICAgICAgICAge3stIGlmIC5WYWx1ZXMuaW1hZ2VEaWdlc3QgfX0KICAgICAgICAgIGltYWdlOiAie3sgLlZhbHVlcy5pbWFnZSB9fUB7eyAuVmFsdWVzLmltYWdlRGlnZXN0IH19IgogICAgICAgICAge3stIGVsc2UgfX0KICAgICAgICAgIGltYWdlOiAie3sgLlZhbHVlcy5pbWFnZSB9fTp7eyAuVmFsdWVzLmltYWdlVGFnIH19IgogICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgaW1hZ2VQdWxsUG9saWN5OiB7eyAuVmFsdWVzLmltYWdlUHVsbFBvbGljeSB8IHF1b3RlIH19CiAgICAgICAgICBhcmdzOgogICAgICAgICAgICAtICJ3ZWIiCiAgICAgICAgICAgIHt7LSBpZiBhbmQgKC5WYWx1ZXMuY29uY291cnNlLndlYi5hd3NTZWNyZXRzTWFuYWdlci5lbmFibGVkKSAoLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF3c1NlY3JldHNNYW5hZ2VyLnJlZ2lvbikgfX0KICAgICAgICAgICAgLSAnLS1hd3Mtc2VjcmV0c21hbmFnZXItcmVnaW9uPXt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5hd3NTZWNyZXRzTWFuYWdlci5yZWdpb24gfCBxdW90ZSB9fScKICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgYW5kICguVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXdzU3NtLmVuYWJsZWQpICguVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXdzU3NtLnJlZ2lvbikgfX0KICAgICAgICAgICAgLSAnLS1hd3Mtc3NtLXJlZ2lvbj17eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXdzU3NtLnJlZ2lvbiB8IHF1b3RlIH19JwogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICBlbnY6CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIubG9nTGV2ZWwgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfTE9HX0xFVkVMCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5sb2dMZXZlbCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5iaW5kUG9ydCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9CSU5EX1BPUlQKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmJpbmRQb3J0IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmJpbmRJcCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9CSU5EX0lQCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5iaW5kSXAgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIubG9jYWxBdXRoLmVuYWJsZWQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfQUREX0xPQ0FMX1VTRVIKICAgICAgICAgICAgICB2YWx1ZUZyb206CiAgICAgICAgICAgICAgICBzZWNyZXRLZXlSZWY6CiAgICAgICAgICAgICAgICAgIG5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2UuY29uY291cnNlLmZ1bGxuYW1lIiAuIH19CiAgICAgICAgICAgICAgICAgIGtleTogbG9jYWwtdXNlcnMKICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnRscy5lbmFibGVkIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1RMU19CSU5EX1BPUlQKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnRscy5iaW5kUG9ydCB8IGRlZmF1bHQgIjQ0MyIgfCBxdW90ZSB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9UTFNfQ0VSVAogICAgICAgICAgICAgIHZhbHVlOiAie3sgLlZhbHVlcy53ZWIudGxzU2VjcmV0c1BhdGggfX0vY2xpZW50LmNlcnQiCiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1RMU19LRVkKICAgICAgICAgICAgICB2YWx1ZTogInt7IC5WYWx1ZXMud2ViLnRsc1NlY3JldHNQYXRoIH19L2NsaWVudC5rZXkiCiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi50bHMuZW5hYmxlZCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9FWFRFUk5BTF9VUkwKICAgICAgICAgICAgICB2YWx1ZToge3sgcmVxdWlyZWQgIk11c3Qgc3BlY2lmeSBIVFRQUyBleHRlcm5hbCBVUkwgd2hlbiBjb25jb3Vyc2Uud2ViLnRscy5lbmFibGVkIGlzIHRydWUiIC5WYWx1ZXMuY29uY291cnNlLndlYi5leHRlcm5hbFVybCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbHNlIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuZXh0ZXJuYWxVcmwgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfRVhURVJOQUxfVVJMCiAgICAgICAgICAgICAgdmFsdWU6CiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5leHRlcm5hbFVybCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnBlZXJVcmwgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfUEVFUl9VUkwKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnBlZXJVcmwgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZWxzZSB9fQogICAgICAgICAgICAtIG5hbWU6IFBPRF9JUAogICAgICAgICAgICAgIHZhbHVlRnJvbToKICAgICAgICAgICAgICAgIGZpZWxkUmVmOgogICAgICAgICAgICAgICAgICBmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUAogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9QRUVSX1VSTAogICAgICAgICAgICAgIHZhbHVlOiAiaHR0cDovLyQoUE9EX0lQKTokKENPTkNPVVJTRV9CSU5EX1BPUlQpIgogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuZW5jcnlwdGlvbi5lbmFibGVkIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0VOQ1JZUFRJT05fS0VZCiAgICAgICAgICAgICAgdmFsdWVGcm9tOgogICAgICAgICAgICAgICAgc2VjcmV0S2V5UmVmOgogICAgICAgICAgICAgICAgICBuYW1lOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLmNvbmNvdXJzZS5mdWxsbmFtZSIgLiB9fQogICAgICAgICAgICAgICAgICBrZXk6IGVuY3J5cHRpb24ta2V5CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX09MRF9FTkNSWVBUSU9OX0tFWQogICAgICAgICAgICAgIHZhbHVlRnJvbToKICAgICAgICAgICAgICAgIHNlY3JldEtleVJlZjoKICAgICAgICAgICAgICAgICAgbmFtZToge3sgdGVtcGxhdGUgImNvbmNvdXJzZS5jb25jb3Vyc2UuZnVsbG5hbWUiIC4gfX0KICAgICAgICAgICAgICAgICAga2V5OiBvbGQtZW5jcnlwdGlvbi1rZXkKICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmRlYnVnQmluZElwIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0RFQlVHX0JJTkRfSVAKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmRlYnVnQmluZElwIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmRlYnVnQmluZFBvcnQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfREVCVUdfQklORF9QT1JUCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5kZWJ1Z0JpbmRQb3J0IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmludGVyY2VwdElkbGVUaW1lb3V0IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0lOVEVSQ0VQVF9JRExFX1RJTUVPVVQKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmludGVyY2VwdElkbGVUaW1lb3V0IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmdsb2JhbFJlc291cmNlQ2hlY2tUaW1lb3V0IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dMT0JBTF9SRVNPVVJDRV9DSEVDS19USU1FT1VUCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5nbG9iYWxSZXNvdXJjZUNoZWNrVGltZW91dCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5yZXNvdXJjZUNoZWNraW5nSW50ZXJ2YWwgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfUkVTT1VSQ0VfQ0hFQ0tJTkdfSU5URVJWQUwKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnJlc291cmNlQ2hlY2tpbmdJbnRlcnZhbCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5yZXNvdXJjZVR5cGVDaGVja2luZ0ludGVydmFsIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1JFU09VUkNFX1RZUEVfQ0hFQ0tJTkdfSU5URVJWQUwKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnJlc291cmNlVHlwZUNoZWNraW5nSW50ZXJ2YWwgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuY29udGFpbmVyUGxhY2VtZW50U3RyYXRlZ3kgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfQ09OVEFJTkVSX1BMQUNFTUVOVF9TVFJBVEVHWQogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuY29udGFpbmVyUGxhY2VtZW50U3RyYXRlZ3kgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYmFnZ2FnZWNsYWltUmVzcG9uc2VIZWFkZXJUaW1lb3V0IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0JBR0dBR0VDTEFJTV9SRVNQT05TRV9IRUFERVJfVElNRU9VVAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYmFnZ2FnZWNsYWltUmVzcG9uc2VIZWFkZXJUaW1lb3V0IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmNsaUFydGlmYWN0c0RpciB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9DTElfQVJUSUZBQ1RTX0RJUgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuY2xpQXJ0aWZhY3RzRGlyIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmxvZ0RiUXVlcmllcyB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9MT0dfREJfUVVFUklFUwogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIubG9nRGJRdWVyaWVzIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmJ1aWxkVHJhY2tlckludGVydmFsIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0JVSUxEX1RSQUNLRVJfSU5URVJWQUwKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmJ1aWxkVHJhY2tlckludGVydmFsIHwgcXVvdGUgIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5kZWZhdWx0QnVpbGRMb2dzVG9SZXRhaW4gfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfREVGQVVMVF9CVUlMRF9MT0dTX1RPX1JFVEFJTgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuZGVmYXVsdEJ1aWxkTG9nc1RvUmV0YWluIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLm1heEJ1aWxkTG9nc1RvUmV0YWluIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX01BWF9CVUlMRF9MT0dTX1RPX1JFVEFJTgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIubWF4QnVpbGRMb2dzVG9SZXRhaW4gfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuZGVmYXVsdFRhc2tDcHVMaW1pdCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9ERUZBVUxUX1RBU0tfQ1BVX0xJTUlUCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5kZWZhdWx0VGFza0NwdUxpbWl0IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmRlZmF1bHRUYXNrTWVtb3J5TGltaXQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfREVGQVVMVF9UQVNLX01FTU9SWV9MSU1JVAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuZGVmYXVsdFRhc2tNZW1vcnlMaW1pdCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KCiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLnBvc3RncmVzcWwuZW5hYmxlZCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9QT1NUR1JFU19IT1NUCiAgICAgICAgICAgICAgdmFsdWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2UucG9zdGdyZXNxbC5mdWxsbmFtZSIgLiB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9QT1NUR1JFU19VU0VSCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMucG9zdGdyZXNxbC5wb3N0Z3Jlc1VzZXIgfCBxdW90ZSB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9QT1NUR1JFU19QQVNTV09SRAogICAgICAgICAgICAgIHZhbHVlRnJvbToKICAgICAgICAgICAgICAgIHNlY3JldEtleVJlZjoKICAgICAgICAgICAgICAgICAgbmFtZToge3sgdGVtcGxhdGUgImNvbmNvdXJzZS5wb3N0Z3Jlc3FsLmZ1bGxuYW1lIiAuIH19CiAgICAgICAgICAgICAgICAgIGtleTogcG9zdGdyZXMtcGFzc3dvcmQKICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfUE9TVEdSRVNfREFUQUJBU0UKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5wb3N0Z3Jlc3FsLnBvc3RncmVzRGF0YWJhc2UgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZWxzZSB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnBvc3RncmVzLmhvc3QgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfUE9TVEdSRVNfSE9TVAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIucG9zdGdyZXMuaG9zdCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5wb3N0Z3Jlcy5wb3J0IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1BPU1RHUkVTX1BPUlQKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnBvc3RncmVzLnBvcnQgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIucG9zdGdyZXMuc29ja2V0IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1BPU1RHUkVTX1NPQ0tFVAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIucG9zdGdyZXMuc29ja2V0IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9QT1NUR1JFU19VU0VSCiAgICAgICAgICAgICAgdmFsdWVGcm9tOgogICAgICAgICAgICAgICAgc2VjcmV0S2V5UmVmOgogICAgICAgICAgICAgICAgICBuYW1lOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLmNvbmNvdXJzZS5mdWxsbmFtZSIgLiB9fQogICAgICAgICAgICAgICAgICBrZXk6IHBvc3RncmVzcWwtdXNlcgogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9QT1NUR1JFU19QQVNTV09SRAogICAgICAgICAgICAgIHZhbHVlRnJvbToKICAgICAgICAgICAgICAgIHNlY3JldEtleVJlZjoKICAgICAgICAgICAgICAgICAgbmFtZToge3sgdGVtcGxhdGUgImNvbmNvdXJzZS5jb25jb3Vyc2UuZnVsbG5hbWUiIC4gfX0KICAgICAgICAgICAgICAgICAga2V5OiBwb3N0Z3Jlc3FsLXBhc3N3b3JkCiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIucG9zdGdyZXMuc3NsbW9kZSB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9QT1NUR1JFU19TU0xNT0RFCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5wb3N0Z3Jlcy5zc2xtb2RlIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5zZWNyZXRzLnBvc3RncmVzQ2FDZXJ0IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1BPU1RHUkVTX0NBX0NFUlQKICAgICAgICAgICAgICB2YWx1ZTogInt7IC5WYWx1ZXMud2ViLnBvc3RncmVzcWxTZWNyZXRzUGF0aCB9fS9jYS5jZXJ0IgogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLnNlY3JldHMucG9zdGdyZXNDbGllbnRDZXJ0IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1BPU1RHUkVTX0NMSUVOVF9DRVJUCiAgICAgICAgICAgICAgdmFsdWU6ICJ7eyAuVmFsdWVzLndlYi5wb3N0Z3Jlc3FsU2VjcmV0c1BhdGggfX0vY2xpZW50LmNlcnQiCiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuc2VjcmV0cy5wb3N0Z3Jlc0NsaWVudEtleSB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9QT1NUR1JFU19DTElFTlRfS0VZCiAgICAgICAgICAgICAgdmFsdWU6ICJ7eyAuVmFsdWVzLndlYi5wb3N0Z3Jlc3FsU2VjcmV0c1BhdGggfX0vY2xpZW50LmtleSIKICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnBvc3RncmVzLmNvbm5lY3RUaW1lb3V0IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1BPU1RHUkVTX0NPTk5FQ1RfVElNRU9VVAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIucG9zdGdyZXMuY29ubmVjdFRpbWVvdXQgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIucG9zdGdyZXMuZGF0YWJhc2UgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfUE9TVEdSRVNfREFUQUJBU0UKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnBvc3RncmVzLmRhdGFiYXNlIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gZW5kIH19CgogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmt1YmVybmV0ZXMuZW5hYmxlZCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9LVUJFUk5FVEVTX0lOX0NMVVNURVIKICAgICAgICAgICAgICB2YWx1ZTogInRydWUiCiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0tVQkVSTkVURVNfTkFNRVNQQUNFX1BSRUZJWAogICAgICAgICAgICAgIHZhbHVlOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLm5hbWVzcGFjZVByZWZpeCIgLiB9fQogICAgICAgICAgICB7ey0gZWxzZX19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIua3ViZXJuZXRlcy5jb25maWdQYXRoIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0tVQkVSTkVURVNfQ09ORklHX1BBVEgKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmt1YmVybmV0ZXMuY29uZmlnUGF0aCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5rdWJlcm5ldGVzLm5hbWVzcGFjZVByZWZpeCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9LVUJFUk5FVEVTX05BTUVTUEFDRV9QUkVGSVgKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmt1YmVybmV0ZXMubmFtZXNwYWNlUHJlZml4IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gZW5kIH19CgogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF3c1NlY3JldHNNYW5hZ2VyLmVuYWJsZWQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfQVdTX1NFQ1JFVFNNQU5BR0VSX0FDQ0VTU19LRVkKICAgICAgICAgICAgICB2YWx1ZUZyb206CiAgICAgICAgICAgICAgICBzZWNyZXRLZXlSZWY6CiAgICAgICAgICAgICAgICAgIG5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2UuY29uY291cnNlLmZ1bGxuYW1lIiAuIH19CiAgICAgICAgICAgICAgICAgIGtleTogYXdzLXNlY3JldHNtYW5hZ2VyLWFjY2Vzcy1rZXkKICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfQVdTX1NFQ1JFVFNNQU5BR0VSX1NFQ1JFVF9LRVkKICAgICAgICAgICAgICB2YWx1ZUZyb206CiAgICAgICAgICAgICAgICBzZWNyZXRLZXlSZWY6CiAgICAgICAgICAgICAgICAgIG5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2UuY29uY291cnNlLmZ1bGxuYW1lIiAuIH19CiAgICAgICAgICAgICAgICAgIGtleTogYXdzLXNlY3JldHNtYW5hZ2VyLXNlY3JldC1rZXkKICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuc2VjcmV0cy5hd3NTZWNyZXRzTWFuYWdlclNlc3Npb25Ub2tlbiB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9BV1NfU0VDUkVUU01BTkFHRVJfU0VTU0lPTl9UT0tFTgogICAgICAgICAgICAgIHZhbHVlRnJvbToKICAgICAgICAgICAgICAgIHNlY3JldEtleVJlZjoKICAgICAgICAgICAgICAgICAgbmFtZToge3sgdGVtcGxhdGUgImNvbmNvdXJzZS5jb25jb3Vyc2UuZnVsbG5hbWUiIC4gfX0KICAgICAgICAgICAgICAgICAga2V5OiBhd3Mtc2VjcmV0c21hbmFnZXItc2Vzc2lvbi10b2tlbgogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXdzU2VjcmV0c01hbmFnZXIucGlwZWxpbmVTZWNyZXRUZW1wbGF0ZSB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9BV1NfU0VDUkVUU01BTkFHRVJfUElQRUxJTkVfU0VDUkVUX1RFTVBMQVRFCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5hd3NTZWNyZXRzTWFuYWdlci5waXBlbGluZVNlY3JldFRlbXBsYXRlIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF3c1NlY3JldHNNYW5hZ2VyLnRlYW1TZWNyZXRUZW1wbGF0ZSB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9BV1NfU0VDUkVUU01BTkFHRVJfVEVBTV9TRUNSRVRfVEVNUExBVEUKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF3c1NlY3JldHNNYW5hZ2VyLnRlYW1TZWNyZXRUZW1wbGF0ZSB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGVuZCB9fQoKICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hd3NTc20uZW5hYmxlZCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9BV1NfU1NNX0FDQ0VTU19LRVkKICAgICAgICAgICAgICB2YWx1ZUZyb206CiAgICAgICAgICAgICAgICBzZWNyZXRLZXlSZWY6CiAgICAgICAgICAgICAgICAgIG5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2UuY29uY291cnNlLmZ1bGxuYW1lIiAuIH19CiAgICAgICAgICAgICAgICAgIGtleTogYXdzLXNzbS1hY2Nlc3Mta2V5CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0FXU19TU01fU0VDUkVUX0tFWQogICAgICAgICAgICAgIHZhbHVlRnJvbToKICAgICAgICAgICAgICAgIHNlY3JldEtleVJlZjoKICAgICAgICAgICAgICAgICAgbmFtZToge3sgdGVtcGxhdGUgImNvbmNvdXJzZS5jb25jb3Vyc2UuZnVsbG5hbWUiIC4gfX0KICAgICAgICAgICAgICAgICAga2V5OiBhd3Mtc3NtLXNlY3JldC1rZXkKICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuc2VjcmV0cy5hd3NTc21TZXNzaW9uVG9rZW4gfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfQVdTX1NTTV9TRVNTSU9OX1RPS0VOCiAgICAgICAgICAgICAgdmFsdWVGcm9tOgogICAgICAgICAgICAgICAgc2VjcmV0S2V5UmVmOgogICAgICAgICAgICAgICAgICBuYW1lOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLmNvbmNvdXJzZS5mdWxsbmFtZSIgLiB9fQogICAgICAgICAgICAgICAgICBrZXk6IGF3cy1zc20tc2Vzc2lvbi10b2tlbgogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXdzU3NtLnBpcGVsaW5lU2VjcmV0VGVtcGxhdGUgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfQVdTX1NTTV9QSVBFTElORV9TRUNSRVRfVEVNUExBVEUKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF3c1NzbS5waXBlbGluZVNlY3JldFRlbXBsYXRlIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF3c1NzbS50ZWFtU2VjcmV0VGVtcGxhdGUgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfQVdTX1NTTV9URUFNX1NFQ1JFVF9URU1QTEFURQogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXdzU3NtLnRlYW1TZWNyZXRUZW1wbGF0ZSB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGVuZCB9fQoKICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi52YXVsdC5lbmFibGVkIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1ZBVUxUX1VSTAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudmF1bHQudXJsIHwgcXVvdGUgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfVkFVTFRfUEFUSF9QUkVGSVgKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnZhdWx0LnBhdGhQcmVmaXggfCBxdW90ZSB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9WQVVMVF9BVVRIX0JBQ0tFTkQKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnZhdWx0LmF1dGhCYWNrZW5kIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi52YXVsdC51c2VDYUNlcnQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfVkFVTFRfQ0FfQ0VSVAogICAgICAgICAgICAgIHZhbHVlOiAie3sgLlZhbHVlcy53ZWIudmF1bHRTZWNyZXRzUGF0aCB9fS9jYS5jZXJ0IgogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiBlcSAoZGVmYXVsdCAiIiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudmF1bHQuYXV0aEJhY2tlbmQpICJ0b2tlbiIgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfVkFVTFRfQ0xJRU5UX1RPS0VOCiAgICAgICAgICAgICAgdmFsdWVGcm9tOgogICAgICAgICAgICAgICAgc2VjcmV0S2V5UmVmOgogICAgICAgICAgICAgICAgICBuYW1lOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLmNvbmNvdXJzZS5mdWxsbmFtZSIgLiB9fQogICAgICAgICAgICAgICAgICBrZXk6IHZhdWx0LWNsaWVudC10b2tlbgogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiBlcSAoZGVmYXVsdCAiIiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudmF1bHQuYXV0aEJhY2tlbmQpICJjZXJ0IiB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9WQVVMVF9DTElFTlRfQ0VSVAogICAgICAgICAgICAgIHZhbHVlOiAie3sgLlZhbHVlcy53ZWIudmF1bHRTZWNyZXRzUGF0aCB9fS9jbGllbnQuY2VydCIKICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfVkFVTFRfQ0xJRU5UX0tFWQogICAgICAgICAgICAgIHZhbHVlOiAie3sgLlZhbHVlcy53ZWIudmF1bHRTZWNyZXRzUGF0aCB9fS9jbGllbnQua2V5IgogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiBlcSAoZGVmYXVsdCAiIiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudmF1bHQuYXV0aEJhY2tlbmQpICJhcHByb2xlIiB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9WQVVMVF9BVVRIX1BBUkFNCiAgICAgICAgICAgICAgdmFsdWVGcm9tOgogICAgICAgICAgICAgICAgc2VjcmV0S2V5UmVmOgogICAgICAgICAgICAgICAgICBuYW1lOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLmNvbmNvdXJzZS5mdWxsbmFtZSIgLiB9fQogICAgICAgICAgICAgICAgICBrZXk6IHZhdWx0LWNsaWVudC1hdXRoLXBhcmFtCiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi52YXVsdC5hdXRoQmFja2VuZE1heFR0bCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9WQVVMVF9BVVRIX0JBQ0tFTkRfTUFYX1RUTAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudmF1bHQuYXV0aEJhY2tlbmRNYXhUdGwgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudmF1bHQuY2FjaGUgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfVkFVTFRfQ0FDSEUKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnZhdWx0LmNhY2hlIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnZhdWx0LmNhUGF0aCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9WQVVMVF9DQV9QQVRICiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi52YXVsdC5jYVBhdGggfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudmF1bHQuaW5zZWN1cmVTa2lwVmVyaWZ5IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1ZBVUxUX0lOU0VDVVJFX1NLSVBfVkVSSUZZCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi52YXVsdC5pbnNlY3VyZVNraXBWZXJpZnkgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudmF1bHQubWF4TGVhc2UgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfVkFVTFRfTUFYX0xFQVNFCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi52YXVsdC5tYXhMZWFzZSB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi52YXVsdC5yZXRyeUluaXRpYWwgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfVkFVTFRfUkVUUllfSU5JVElBTAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudmF1bHQucmV0cnlJbml0aWFsIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnZhdWx0LnJldHJ5TWF4IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1ZBVUxUX1JFVFJZX01BWAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudmF1bHQucmV0cnlNYXggfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudmF1bHQuc2VydmVyTmFtZSB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9WQVVMVF9TRVJWRVJfTkFNRQogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudmF1bHQuc2VydmVyTmFtZSB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGVuZCB9fQoKICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5ub29wIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX05PT1AKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLm5vb3AgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CgogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnN0YXRpY1dvcmtlci5lbmFibGVkIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuc3RhdGljV29ya2VyLmdhcmRlblVybCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9XT1JLRVJfR0FSREVOX1VSTAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuc3RhdGljV29ya2VyLmdhcmRlblVybCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5zdGF0aWNXb3JrZXIuYmFnZ2FnZWNsYWltVXJsIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1dPUktFUl9CQUdHQUdFQ0xBSU1fVVJMCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5zdGF0aWNXb3JrZXIuYmFnZ2FnZWNsYWltVXJsIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnN0YXRpY1dvcmtlci5yZXNvdXJjZSB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9XT1JLRVJfUkVTT1VSQ0UKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnN0YXRpY1dvcmtlci5yZXNvdXJjZSB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGVuZCB9fQoKICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5tZXRyaWNzLmhvc3ROYW1lIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX01FVFJJQ1NfSE9TVF9OQU1FCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5tZXRyaWNzLmhvc3ROYW1lIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLm1ldHJpY3MuYXR0cmlidXRlIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX01FVFJJQ1NfQVRUUklCVVRFCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5tZXRyaWNzLmF0dHJpYnV0ZSB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KCiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuZGF0YWRvZy5lbmFibGVkIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0RBVEFET0dfQUdFTlRfSE9TVAogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmRhdGFkb2cuYWdlbnRIb3N0VXNlSG9zdElQIH19CiAgICAgICAgICAgICAgdmFsdWVGcm9tOgogICAgICAgICAgICAgICAgZmllbGRSZWY6CiAgICAgICAgICAgICAgICAgIGZpZWxkUGF0aDogc3RhdHVzLmhvc3RJUAogICAgICAgICAgICB7ey0gZWxzZSB9fQogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuZGF0YWRvZy5hZ2VudEhvc3QgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0RBVEFET0dfQUdFTlRfUE9SVAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuZGF0YWRvZy5hZ2VudFBvcnQgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmRhdGFkb2cucHJlZml4IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0RBVEFET0dfUFJFRklYCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5kYXRhZG9nLnByZWZpeCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGVuZCB9fQoKICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5pbmZsdXhkYi5lbmFibGVkIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0lORkxVWERCX1VSTAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuaW5mbHV4ZGIudXJsIHwgcXVvdGUgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfSU5GTFVYREJfREFUQUJBU0UKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmluZmx1eGRiLmRhdGFiYXNlIHwgcXVvdGUgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfSU5GTFVYREJfVVNFUk5BTUUKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmluZmx1eGRiLnVzZXJuYW1lIHwgcXVvdGUgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfSU5GTFVYREJfUEFTU1dPUkQKICAgICAgICAgICAgICB2YWx1ZUZyb206CiAgICAgICAgICAgICAgICBzZWNyZXRLZXlSZWY6CiAgICAgICAgICAgICAgICAgIG5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2UuY29uY291cnNlLmZ1bGxuYW1lIiAuIH19CiAgICAgICAgICAgICAgICAgIGtleTogaW5mbHV4ZGItcGFzc3dvcmQKICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfSU5GTFVYREJfSU5TRUNVUkVfU0tJUF9WRVJJRlkKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmluZmx1eGRiLmluc2VjdXJlU2tpcFZlcmlmeSB8IHF1b3RlfX0KICAgICAgICAgICAge3stIGVuZCB9fQoKICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5lbWl0VG9Mb2dzIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0VNSVRfVE9fTE9HUwogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuZW1pdFRvTG9ncyB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KCiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIubmV3cmVsaWMuZW5hYmxlZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLm5ld3JlbGljLmFjY291bnRJZCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9ORVdSRUxJQ19BQ0NPVU5UX0lECiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5uZXdyZWxpYy5hY2NvdW50SWQgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIubmV3cmVsaWMuYXBpS2V5IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX05FV1JFTElDX0FQSV9LRVkKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLm5ld3JlbGljLmFwaUtleSB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5uZXdyZWxpYy5zZXJ2aWNlUHJlZml4IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX05FV1JFTElDX1NFUlZJQ0VfUFJFRklYCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5uZXdyZWxpYy5zZXJ2aWNlUHJlZml4IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gZW5kIH19CgogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnByb21ldGhldXMuZW5hYmxlZCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9QUk9NRVRIRVVTX0JJTkRfSVAKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnByb21ldGhldXMuYmluZElwIHwgcXVvdGUgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfUFJPTUVUSEVVU19CSU5EX1BPUlQKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnByb21ldGhldXMuYmluZFBvcnQgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CgogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnJpZW1hbm4uZW5hYmxlZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnJpZW1hbm4uaG9zdCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9SSUVNQU5OX0hPU1QKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnJpZW1hbm4uaG9zdCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5yaWVtYW5uLnBvcnQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfUklFTUFOTl9QT1JUCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5yaWVtYW5uLnBvcnQgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIucmllbWFubi5zZXJ2aWNlUHJlZml4IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1JJRU1BTk5fU0VSVklDRV9QUkVGSVgKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnJpZW1hbm4uc2VydmljZVByZWZpeCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5yaWVtYW5uLnRhZyB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9SSUVNQU5OX1RBRwogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIucmllbWFubi50YWcgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KCiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIueEZyYW1lT3B0aW9ucyB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9YX0ZSQU1FX09QVElPTlMKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnhGcmFtZU9wdGlvbnMgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CgogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmdjLm92ZXJyaWRlRGVmYXVsdHMgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5nYy5pbnRlcnZhbCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQ19JTlRFUlZBTAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuZ2MuaW50ZXJ2YWwgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuZ2Mub25lT2ZmR3JhY2VQZXJpb2QgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0NfT05FX09GRl9HUkFDRV9QRVJJT0QKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmdjLm9uZU9mZkdyYWNlUGVyaW9kIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gZW5kIH19CgogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnN5c2xvZy5lbmFibGVkIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuc3lzbG9nLmhvc3RuYW1lIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1NZU0xPR19IT1NUTkFNRQogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuc3lzbG9nLmhvc3RuYW1lIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnN5c2xvZy5hZGRyZXNzIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1NZU0xPR19BRERSRVNTCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5zeXNsb2cuYWRkcmVzcyB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5zeXNsb2cudHJhbnNwb3J0IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1NZU0xPR19UUkFOU1BPUlQKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnN5c2xvZy50cmFuc3BvcnQgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuc3lzbG9nLmRyYWluSW50ZXJ2YWwgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfU1lTTE9HX0RSQUlOX0lOVEVSVkFMCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5zeXNsb2cuZHJhaW5JbnRlcnZhbCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5zeXNsb2cudXNlQ2FDZXJ0IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1NZU0xPR19DQV9DRVJUCiAgICAgICAgICAgICAgdmFsdWU6ICJ7eyAuVmFsdWVzLndlYi5zeXNsb2dTZWNyZXRzUGF0aCB9fS9jYS5jZXJ0IgogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KCiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5jb29raWVTZWN1cmUgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfQ09PS0lFX1NFQ1VSRQogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5jb29raWVTZWN1cmUgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5kdXJhdGlvbiB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9BVVRIX0RVUkFUSU9OCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmR1cmF0aW9uIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9TRVNTSU9OX1NJR05JTkdfS0VZCiAgICAgICAgICAgICAgdmFsdWU6ICJ7eyAuVmFsdWVzLndlYi5rZXlTZWNyZXRzUGF0aCB9fS9zZXNzaW9uX3NpZ25pbmdfa2V5IgoKICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLm1haW5UZWFtLmxvY2FsVXNlciB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9NQUlOX1RFQU1fTE9DQUxfVVNFUgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5tYWluVGVhbS5sb2NhbFVzZXIgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5tYWluVGVhbS5hbGxvd0FsbFVzZXJzIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX01BSU5fVEVBTV9BTExPV19BTExfVVNFUlMKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubWFpblRlYW0uYWxsb3dBbGxVc2VycyB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KCiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5tYWluVGVhbS5jZi5vcmcgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfTUFJTl9URUFNX0NGX09SRwogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5tYWluVGVhbS5jZi5vcmcgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5tYWluVGVhbS5jZi5zcGFjZSB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9NQUlOX1RFQU1fQ0ZfU1BBQ0UKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubWFpblRlYW0uY2Yuc3BhY2UgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5tYWluVGVhbS5jZi5zcGFjZUd1aWQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfTUFJTl9URUFNX0NGX1NQQUNFX0dVSUQKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubWFpblRlYW0uY2Yuc3BhY2VHdWlkIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubWFpblRlYW0uY2YudXNlciB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9NQUlOX1RFQU1fQ0ZfVVNFUgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5tYWluVGVhbS5jZi51c2VyIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQoKICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLm1haW5UZWFtLmdpdGh1Yi51c2VyIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX01BSU5fVEVBTV9HSVRIVUJfVVNFUgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5tYWluVGVhbS5naXRodWIudXNlciB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLm1haW5UZWFtLmdpdGh1Yi5vcmcgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfTUFJTl9URUFNX0dJVEhVQl9PUkcKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubWFpblRlYW0uZ2l0aHViLm9yZyB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLm1haW5UZWFtLmdpdGh1Yi50ZWFtIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX01BSU5fVEVBTV9HSVRIVUJfVEVBTQogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5tYWluVGVhbS5naXRodWIudGVhbSB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KCiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5tYWluVGVhbS5naXRsYWIudXNlciB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9NQUlOX1RFQU1fR0lUTEFCX1VTRVIKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubWFpblRlYW0uZ2l0bGFiLnVzZXIgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5tYWluVGVhbS5naXRsYWIuZ3JvdXAgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfTUFJTl9URUFNX0dJVExBQl9HUk9VUAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5tYWluVGVhbS5naXRsYWIuZ3JvdXAgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CgogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubWFpblRlYW0ubGRhcC51c2VyIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX01BSU5fVEVBTV9MREFQX1VTRVIKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubWFpblRlYW0ubGRhcC51c2VyIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubWFpblRlYW0ubGRhcC5ncm91cCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9NQUlOX1RFQU1fTERBUF9HUk9VUAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5tYWluVGVhbS5sZGFwLmdyb3VwIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQoKICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLm1haW5UZWFtLm9hdXRoLnVzZXIgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfTUFJTl9URUFNX09BVVRIX1VTRVIKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubWFpblRlYW0ub2F1dGgudXNlciB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLm1haW5UZWFtLm9hdXRoLmdyb3VwIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX01BSU5fVEVBTV9PQVVUSF9HUk9VUAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5tYWluVGVhbS5vYXV0aC5ncm91cCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KCiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5tYWluVGVhbS5vaWRjLmdyb3VwIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX01BSU5fVEVBTV9PSURDX0dST1VQCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLm1haW5UZWFtLm9pZGMuZ3JvdXAgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5tYWluVGVhbS5vaWRjLnVzZXIgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfTUFJTl9URUFNX09JRENfVVNFUgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5tYWluVGVhbS5vaWRjLnVzZXIgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CgogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGguY2YuZW5hYmxlZCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9DRl9DTElFTlRfSUQKICAgICAgICAgICAgICB2YWx1ZUZyb206CiAgICAgICAgICAgICAgICBzZWNyZXRLZXlSZWY6CiAgICAgICAgICAgICAgICAgIG5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2UuY29uY291cnNlLmZ1bGxuYW1lIiAuIH19CiAgICAgICAgICAgICAgICAgIGtleTogY2YtY2xpZW50LWlkCiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0NGX0NMSUVOVF9TRUNSRVQKICAgICAgICAgICAgICB2YWx1ZUZyb206CiAgICAgICAgICAgICAgICBzZWNyZXRLZXlSZWY6CiAgICAgICAgICAgICAgICAgIG5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2UuY29uY291cnNlLmZ1bGxuYW1lIiAuIH19CiAgICAgICAgICAgICAgICAgIGtleTogY2YtY2xpZW50LXNlY3JldAogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGguY2YuYXBpVXJsIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0NGX0FQSV9VUkwKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGguY2YuYXBpVXJsIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGguY2YudXNlQ2FDZXJ0IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0NGX0NBX0NFUlQKICAgICAgICAgICAgICB2YWx1ZTogInt7IC5WYWx1ZXMud2ViLmF1dGhTZWNyZXRzUGF0aCB9fS9jZl9jYS5jZXJ0IgogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5jZi5za2lwU3NsVmFsaWRhdGlvbiB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9DRl9TS0lQX1NTTF9WQUxJREFUSU9OCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmNmLnNraXBTc2xWYWxpZGF0aW9uIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gZW5kIH19CgogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGguZ2l0aHViLmVuYWJsZWQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0lUSFVCX0NMSUVOVF9JRAogICAgICAgICAgICAgIHZhbHVlRnJvbToKICAgICAgICAgICAgICAgIHNlY3JldEtleVJlZjoKICAgICAgICAgICAgICAgICAgbmFtZToge3sgdGVtcGxhdGUgImNvbmNvdXJzZS5jb25jb3Vyc2UuZnVsbG5hbWUiIC4gfX0KICAgICAgICAgICAgICAgICAga2V5OiBnaXRodWItY2xpZW50LWlkCiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dJVEhVQl9DTElFTlRfU0VDUkVUCiAgICAgICAgICAgICAgdmFsdWVGcm9tOgogICAgICAgICAgICAgICAgc2VjcmV0S2V5UmVmOgogICAgICAgICAgICAgICAgICBuYW1lOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLmNvbmNvdXJzZS5mdWxsbmFtZSIgLiB9fQogICAgICAgICAgICAgICAgICBrZXk6IGdpdGh1Yi1jbGllbnQtc2VjcmV0CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5naXRodWIuaG9zdCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HSVRIVUJfSE9TVAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5naXRodWIuaG9zdCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmdpdGh1Yi51c2VDYUNlcnQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0lUSFVCX0NBX0NFUlQKICAgICAgICAgICAgICB2YWx1ZTogInt7IC5WYWx1ZXMud2ViLmF1dGhTZWNyZXRzUGF0aCB9fS9naXRodWJfY2EuY2VydCIKICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gZW5kIH19CgogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGguZ2l0bGFiLmVuYWJsZWQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0lUTEFCX0NMSUVOVF9JRAogICAgICAgICAgICAgIHZhbHVlRnJvbToKICAgICAgICAgICAgICAgIHNlY3JldEtleVJlZjoKICAgICAgICAgICAgICAgICAgbmFtZToge3sgdGVtcGxhdGUgImNvbmNvdXJzZS5jb25jb3Vyc2UuZnVsbG5hbWUiIC4gfX0KICAgICAgICAgICAgICAgICAga2V5OiBnaXRsYWItY2xpZW50LWlkCiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dJVExBQl9DTElFTlRfU0VDUkVUCiAgICAgICAgICAgICAgdmFsdWVGcm9tOgogICAgICAgICAgICAgICAgc2VjcmV0S2V5UmVmOgogICAgICAgICAgICAgICAgICBuYW1lOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLmNvbmNvdXJzZS5mdWxsbmFtZSIgLiB9fQogICAgICAgICAgICAgICAgICBrZXk6IGdpdGxhYi1jbGllbnQtc2VjcmV0CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5naXRsYWIuaG9zdCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HSVRMQUJfSE9TVAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5naXRsYWIuaG9zdCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGVuZCB9fQoKICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmxkYXAuZW5hYmxlZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubGRhcC5iaW5kRG4gfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfTERBUF9CSU5EX0ROCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmxkYXAuYmluZERuIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubGRhcC5iaW5kUHcgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfTERBUF9CSU5EX1BXCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmxkYXAuYmluZFB3IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubGRhcC51c2VDYUNlcnQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfTERBUF9DQV9DRVJUCiAgICAgICAgICAgICAgdmFsdWU6ICJ7eyAuVmFsdWVzLndlYi5hdXRoU2VjcmV0c1BhdGggfX0vbGRhcF9jYS5jZXJ0IgogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5sZGFwLmRpc3BsYXlOYW1lIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0xEQVBfRElTUExBWV9OQU1FCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmxkYXAuZGlzcGxheU5hbWUgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5sZGFwLmdyb3VwU2VhcmNoQmFzZURuIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0xEQVBfR1JPVVBfU0VBUkNIX0JBU0VfRE4KICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubGRhcC5ncm91cFNlYXJjaEJhc2VEbiB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmxkYXAuZ3JvdXBTZWFyY2hGaWx0ZXIgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfTERBUF9HUk9VUF9TRUFSQ0hfRklMVEVSCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmxkYXAuZ3JvdXBTZWFyY2hGaWx0ZXIgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5sZGFwLmdyb3VwU2VhcmNoR3JvdXBBdHRyIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0xEQVBfR1JPVVBfU0VBUkNIX0dST1VQX0FUVFIKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubGRhcC5ncm91cFNlYXJjaEdyb3VwQXR0ciB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmxkYXAuZ3JvdXBTZWFyY2hOYW1lQXR0ciB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9MREFQX0dST1VQX1NFQVJDSF9OQU1FX0FUVFIKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubGRhcC5ncm91cFNlYXJjaE5hbWVBdHRyIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubGRhcC5ncm91cFNlYXJjaFNjb3BlIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0xEQVBfR1JPVVBfU0VBUkNIX1NDT1BFCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmxkYXAuZ3JvdXBTZWFyY2hTY29wZSB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmxkYXAuZ3JvdXBTZWFyY2hVc2VyQXR0ciB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9MREFQX0dST1VQX1NFQVJDSF9VU0VSX0FUVFIKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubGRhcC5ncm91cFNlYXJjaFVzZXJBdHRyIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubGRhcC5ob3N0IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0xEQVBfSE9TVAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5sZGFwLmhvc3QgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5sZGFwLmluc2VjdXJlTm9Tc2wgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfTERBUF9JTlNFQ1VSRV9OT19TU0wKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubGRhcC5pbnNlY3VyZU5vU3NsIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubGRhcC5pbnNlY3VyZVNraXBWZXJpZnkgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfTERBUF9JTlNFQ1VSRV9TS0lQX1ZFUklGWQogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5sZGFwLmluc2VjdXJlU2tpcFZlcmlmeSB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmxkYXAuc3RhcnRUbHMgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfTERBUF9TVEFSVF9UTFMKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubGRhcC5zdGFydFRscyB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmxkYXAudXNlclNlYXJjaEJhc2VEbiB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9MREFQX1VTRVJfU0VBUkNIX0JBU0VfRE4KICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubGRhcC51c2VyU2VhcmNoQmFzZURuIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubGRhcC51c2VyU2VhcmNoRW1haWxBdHRyIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0xEQVBfVVNFUl9TRUFSQ0hfRU1BSUxfQVRUUgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5sZGFwLnVzZXJTZWFyY2hFbWFpbEF0dHIgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5sZGFwLnVzZXJTZWFyY2hGaWx0ZXIgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfTERBUF9VU0VSX1NFQVJDSF9GSUxURVIKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubGRhcC51c2VyU2VhcmNoRmlsdGVyIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubGRhcC51c2VyU2VhcmNoSWRBdHRyIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0xEQVBfVVNFUl9TRUFSQ0hfSURfQVRUUgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5sZGFwLnVzZXJTZWFyY2hJZEF0dHIgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5sZGFwLnVzZXJTZWFyY2hOYW1lQXR0ciB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9MREFQX1VTRVJfU0VBUkNIX05BTUVfQVRUUgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5sZGFwLnVzZXJTZWFyY2hOYW1lQXR0ciB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmxkYXAudXNlclNlYXJjaFNjb3BlIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0xEQVBfVVNFUl9TRUFSQ0hfU0NPUEUKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgubGRhcC51c2VyU2VhcmNoU2NvcGUgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5sZGFwLnVzZXJTZWFyY2hVc2VybmFtZSB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9MREFQX1VTRVJfU0VBUkNIX1VTRVJOQU1FCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmxkYXAudXNlclNlYXJjaFVzZXJuYW1lIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gZW5kIH19CgogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgub2F1dGguZW5hYmxlZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgub2F1dGguZGlzcGxheU5hbWUgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfT0FVVEhfRElTUExBWV9OQU1FCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLm9hdXRoLmRpc3BsYXlOYW1lIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9PQVVUSF9DTElFTlRfSUQKICAgICAgICAgICAgICB2YWx1ZUZyb206CiAgICAgICAgICAgICAgICBzZWNyZXRLZXlSZWY6CiAgICAgICAgICAgICAgICAgIG5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2UuY29uY291cnNlLmZ1bGxuYW1lIiAuIH19CiAgICAgICAgICAgICAgICAgIGtleTogb2F1dGgtY2xpZW50LWlkCiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX09BVVRIX0NMSUVOVF9TRUNSRVQKICAgICAgICAgICAgICB2YWx1ZUZyb206CiAgICAgICAgICAgICAgICBzZWNyZXRLZXlSZWY6CiAgICAgICAgICAgICAgICAgIG5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2UuY29uY291cnNlLmZ1bGxuYW1lIiAuIH19CiAgICAgICAgICAgICAgICAgIGtleTogb2F1dGgtY2xpZW50LXNlY3JldAogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgub2F1dGguYXV0aFVybCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9PQVVUSF9BVVRIX1VSTAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5vYXV0aC5hdXRoVXJsIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgub2F1dGgudG9rZW5VcmwgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfT0FVVEhfVE9LRU5fVVJMCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLm9hdXRoLnRva2VuVXJsIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgub2F1dGgudXNlcmluZm9VcmwgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfT0FVVEhfVVNFUklORk9fVVJMCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLm9hdXRoLnVzZXJpbmZvVXJsIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgub2F1dGguc2NvcGUgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfT0FVVEhfU0NPUEUKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgub2F1dGguc2NvcGUgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5vYXV0aC5ncm91cHNLZXkgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfT0FVVEhfR1JPVVBTX0tFWQogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5vYXV0aC5ncm91cHNLZXkgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5vYXV0aC51c2VDYUNlcnQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfT0FVVEhfQ0FfQ0VSVAogICAgICAgICAgICAgIHZhbHVlOiAie3sgLlZhbHVlcy53ZWIuYXV0aFNlY3JldHNQYXRoIH19L29hdXRoX2NhLmNlcnQiCiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLm9hdXRoLnNraXBTc2xWYWxpZGF0aW9uIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX09BVVRIX1NLSVBfU1NMX1ZBTElEQVRJT04KICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgub2F1dGguc2tpcFNzbFZhbGlkYXRpb24gfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KCiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5vaWRjLmVuYWJsZWQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLm9pZGMuZGlzcGxheU5hbWUgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfT0lEQ19ESVNQTEFZX05BTUUKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgub2lkYy5kaXNwbGF5TmFtZSB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLm9pZGMuaXNzdWVyIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX09JRENfSVNTVUVSCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLm9pZGMuaXNzdWVyIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9PSURDX0NMSUVOVF9JRAogICAgICAgICAgICAgIHZhbHVlRnJvbToKICAgICAgICAgICAgICAgIHNlY3JldEtleVJlZjoKICAgICAgICAgICAgICAgICAgbmFtZToge3sgdGVtcGxhdGUgImNvbmNvdXJzZS5jb25jb3Vyc2UuZnVsbG5hbWUiIC4gfX0KICAgICAgICAgICAgICAgICAga2V5OiBvaWRjLWNsaWVudC1pZAogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9PSURDX0NMSUVOVF9TRUNSRVQKICAgICAgICAgICAgICB2YWx1ZUZyb206CiAgICAgICAgICAgICAgICBzZWNyZXRLZXlSZWY6CiAgICAgICAgICAgICAgICAgIG5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2UuY29uY291cnNlLmZ1bGxuYW1lIiAuIH19CiAgICAgICAgICAgICAgICAgIGtleTogb2lkYy1jbGllbnQtc2VjcmV0CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5vaWRjLnNjb3BlIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX09JRENfU0NPUEUKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgub2lkYy5zY29wZSB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLm9pZGMuZ3JvdXBzS2V5IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX09JRENfR1JPVVBTX0tFWQogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5vaWRjLmdyb3Vwc0tleSB8IHF1b3RlfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgub2lkYy5ob3N0ZWREb21haW5zIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX09JRENfSE9TVEVEX0RPTUFJTlMKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgub2lkYy5ob3N0ZWREb21haW5zIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgub2lkYy51c2VDYUNlcnQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfT0lEQ19DQV9DRVJUCiAgICAgICAgICAgICAgdmFsdWU6ICJ7eyAuVmFsdWVzLndlYi5hdXRoU2VjcmV0c1BhdGggfX0vb2lkY19jYS5jZXJ0IgogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5vaWRjLnNraXBTc2xWYWxpZGF0aW9uIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX09JRENfU0tJUF9TU0xfVkFMSURBVElPTgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5vaWRjLnNraXBTc2xWYWxpZGF0aW9uIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gZW5kIH19CgogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnRzYS5sb2dMZXZlbCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9UU0FfTE9HX0xFVkVMCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi50c2EubG9nTGV2ZWwgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudHNhLmJpbmRJcCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9UU0FfQklORF9JUAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudHNhLmJpbmRJcCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfVFNBX0JJTkRfUE9SVAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudHNhLmJpbmRQb3J0IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi50c2EuYmluZERlYnVnUG9ydCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9UU0FfQklORF9ERUJVR19QT1JUCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi50c2EuYmluZERlYnVnUG9ydCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi50c2EucGVlcklwIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1RTQV9QRUVSX0lQCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi50c2EucGVlcklwIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9UU0FfSE9TVF9LRVkKICAgICAgICAgICAgICB2YWx1ZTogInt7IC5WYWx1ZXMud2ViLmtleVNlY3JldHNQYXRoIH19L2hvc3Rfa2V5IgogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9UU0FfQVVUSE9SSVpFRF9LRVlTCiAgICAgICAgICAgICAgdmFsdWU6ICJ7eyAuVmFsdWVzLndlYi5rZXlTZWNyZXRzUGF0aCB9fS93b3JrZXJfa2V5LnB1YiIKICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi50c2EudGVhbUF1dGhvcml6ZWRLZXlzIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1RTQV9URUFNX0FVVEhPUklaRURfS0VZUwogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudHNhLnRlYW1BdXRob3JpemVkS2V5cyB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi50c2EuYXRjVXJsIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1RTQV9BVENfVVJMCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi50c2EuYXRjVXJsIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnRzYS5zZXNzaW9uU2lnbmluZ0tleSB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9UU0FfU0VTU0lPTl9TSUdOSU5HX0tFWQogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudHNhLnNlc3Npb25TaWduaW5nS2V5IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnRzYS5oZWFydGJlYXRJbnRlcnZhbCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9UU0FfSEVBUlRCRUFUX0lOVEVSVkFMCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi50c2EuaGVhcnRiZWF0SW50ZXJ2YWwgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19Cnt7LSBpZiAuVmFsdWVzLndlYi5lbnYgfX0Ke3sgdG9ZYW1sIC5WYWx1ZXMud2ViLmVudiB8IGluZGVudCAxMiB9fQp7ey0gZW5kIH19CiAgICAgICAgICBwb3J0czoKICAgICAgICAgICAgLSBuYW1lOiBhdGMKICAgICAgICAgICAgICBjb250YWluZXJQb3J0OiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYmluZFBvcnQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi50bHMuZW5hYmxlZCB9fQogICAgICAgICAgICAtIG5hbWU6IGF0Yy10bHMKICAgICAgICAgICAgICBjb250YWluZXJQb3J0OiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudGxzLmJpbmRQb3J0IH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAgLSBuYW1lOiB0c2EKICAgICAgICAgICAgICBjb250YWluZXJQb3J0OiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudHNhLmJpbmRQb3J0IH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuZGVidWdCaW5kUG9ydCB9fQogICAgICAgICAgICAtIG5hbWU6IGF0Yy1kZWJ1ZwogICAgICAgICAgICAgIGNvbnRhaW5lclBvcnQ6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5kZWJ1Z0JpbmRQb3J0IH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi50c2EuYmluZERlYnVnUG9ydCB9fQogICAgICAgICAgICAtIG5hbWU6IHRzYS1kZWJ1ZwogICAgICAgICAgICAgIGNvbnRhaW5lclBvcnQ6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi50c2EuYmluZERlYnVnUG9ydCB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIucHJvbWV0aGV1cy5lbmFibGVkIH19CiAgICAgICAgICAgIC0gbmFtZTogcHJvbWV0aGV1cwogICAgICAgICAgICAgIGNvbnRhaW5lclBvcnQ6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5wcm9tZXRoZXVzLmJpbmRQb3J0IH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgIGxpdmVuZXNzUHJvYmU6Cnt7IHRvWWFtbCAuVmFsdWVzLndlYi5saXZlbmVzc1Byb2JlIHwgaW5kZW50IDEyIH19CiAgICAgICAgICByZWFkaW5lc3NQcm9iZToKe3sgdG9ZYW1sIC5WYWx1ZXMud2ViLnJlYWRpbmVzc1Byb2JlIHwgaW5kZW50IDEyIH19CiAgICAgICAgICByZXNvdXJjZXM6Cnt7IHRvWWFtbCAuVmFsdWVzLndlYi5yZXNvdXJjZXMgfCBpbmRlbnQgMTIgfX0KICAgICAgICAgIHZvbHVtZU1vdW50czoKICAgICAgICAgICAgLSBuYW1lOiBjb25jb3Vyc2Uta2V5cwogICAgICAgICAgICAgIG1vdW50UGF0aDoge3sgLlZhbHVlcy53ZWIua2V5U2VjcmV0c1BhdGggfCBxdW90ZSB9fQogICAgICAgICAgICAgIHJlYWRPbmx5OiB0cnVlCiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudGxzLmVuYWJsZWQgfX0KICAgICAgICAgICAgLSBuYW1lOiB3ZWItdGxzCiAgICAgICAgICAgICAgbW91bnRQYXRoOiB7eyAuVmFsdWVzLndlYi50bHNTZWNyZXRzUGF0aCB8IHF1b3RlIH19CiAgICAgICAgICAgICAgcmVhZE9ubHk6IHRydWUKICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnZhdWx0LmVuYWJsZWQgfX0KICAgICAgICAgICAgLSBuYW1lOiB2YXVsdC1rZXlzCiAgICAgICAgICAgICAgbW91bnRQYXRoOiB7eyAuVmFsdWVzLndlYi52YXVsdFNlY3JldHNQYXRoIHwgcXVvdGUgfX0KICAgICAgICAgICAgICByZWFkT25seTogdHJ1ZQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiBub3QgKGVxIChkZWZhdWx0ICJkaXNhYmxlIiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIucG9zdGdyZXMuc3NsbW9kZSkgImRpc2FibGUiKSB9fQogICAgICAgICAgICAtIG5hbWU6IHBvc3RncmVzcWwta2V5cwogICAgICAgICAgICAgIG1vdW50UGF0aDoge3sgLlZhbHVlcy53ZWIucG9zdGdyZXNxbFNlY3JldHNQYXRoIHwgcXVvdGUgfX0KICAgICAgICAgICAgICByZWFkT25seTogdHJ1ZQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuc3lzbG9nLmVuYWJsZWQgfX0KICAgICAgICAgICAgLSBuYW1lOiBzeXNsb2cta2V5cwogICAgICAgICAgICAgIG1vdW50UGF0aDoge3sgLlZhbHVlcy53ZWIuc3lzbG9nU2VjcmV0c1BhdGggfCBxdW90ZSB9fQogICAgICAgICAgICAgIHJlYWRPbmx5OiB0cnVlCiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAgLSBuYW1lOiBhdXRoLWtleXMKICAgICAgICAgICAgICBtb3VudFBhdGg6IHt7IC5WYWx1ZXMud2ViLmF1dGhTZWNyZXRzUGF0aCB8IHF1b3RlIH19CiAgICAgICAgICAgICAgcmVhZE9ubHk6IHRydWUKe3stIGlmIC5WYWx1ZXMud2ViLmFkZGl0aW9uYWxWb2x1bWVNb3VudHMgfX0Ke3sgdG9ZYW1sIC5WYWx1ZXMud2ViLmFkZGl0aW9uYWxWb2x1bWVNb3VudHMgfCBpbmRlbnQgMTIgfX0Ke3stIGVuZCB9fQogICAgICBhZmZpbml0eToKe3stIGlmIC5WYWx1ZXMud2ViLmFkZGl0aW9uYWxBZmZpbml0aWVzIH19Cnt7IHRvWWFtbCAuVmFsdWVzLndlYi5hZGRpdGlvbmFsQWZmaW5pdGllcyB8IGluZGVudCA4IH19Cnt7LSBlbmQgfX0KICAgICAgdm9sdW1lczoKe3stIGlmIC5WYWx1ZXMud2ViLmFkZGl0aW9uYWxWb2x1bWVzIH19Cnt7IHRvWWFtbCAuVmFsdWVzLndlYi5hZGRpdGlvbmFsVm9sdW1lcyB8IGluZGVudCA4IH19Cnt7LSBlbmQgfX0KICAgICAgICAtIG5hbWU6IGNvbmNvdXJzZS1rZXlzCiAgICAgICAgICBzZWNyZXQ6CiAgICAgICAgICAgIHNlY3JldE5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2UuY29uY291cnNlLmZ1bGxuYW1lIiAuIH19CiAgICAgICAgICAgIGRlZmF1bHRNb2RlOiAwNDAwCiAgICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAgIC0ga2V5OiBob3N0LWtleQogICAgICAgICAgICAgICAgcGF0aDogaG9zdF9rZXkKICAgICAgICAgICAgICAtIGtleTogc2Vzc2lvbi1zaWduaW5nLWtleQogICAgICAgICAgICAgICAgcGF0aDogc2Vzc2lvbl9zaWduaW5nX2tleQogICAgICAgICAgICAgIC0ga2V5OiB3b3JrZXIta2V5LXB1YgogICAgICAgICAgICAgICAgcGF0aDogd29ya2VyX2tleS5wdWIKICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnRscy5lbmFibGVkIH19CiAgICAgICAgLSBuYW1lOiB3ZWItdGxzCiAgICAgICAgICBzZWNyZXQ6CiAgICAgICAgICAgIHNlY3JldE5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2UuY29uY291cnNlLmZ1bGxuYW1lIiAuIH19CiAgICAgICAgICAgIGRlZmF1bHRNb2RlOiAwNDAwCiAgICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAgIC0ga2V5OiB3ZWItdGxzLWNlcnQKICAgICAgICAgICAgICAgIHBhdGg6IGNsaWVudC5jZXJ0CiAgICAgICAgICAgICAgLSBrZXk6IHdlYi10bHMta2V5CiAgICAgICAgICAgICAgICBwYXRoOiBjbGllbnQua2V5CiAgICAgICAge3stIGVuZCB9fQogICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudmF1bHQuZW5hYmxlZCB9fQogICAgICAgIC0gbmFtZTogdmF1bHQta2V5cwogICAgICAgICAgc2VjcmV0OgogICAgICAgICAgICBzZWNyZXROYW1lOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLmNvbmNvdXJzZS5mdWxsbmFtZSIgLiB9fQogICAgICAgICAgICBkZWZhdWx0TW9kZTogMDQwMAogICAgICAgICAgICBpdGVtczoKICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi52YXVsdC51c2VDYUNlcnQgfX0KICAgICAgICAgICAgICAtIGtleTogdmF1bHQtY2EtY2VydAogICAgICAgICAgICAgICAgcGF0aDogY2EuY2VydAogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiBlcSAoZGVmYXVsdCAiIiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudmF1bHQuYXV0aEJhY2tlbmQpICJjZXJ0IiB9fQogICAgICAgICAgICAgIC0ga2V5OiB2YXVsdC1jbGllbnQtY2VydAogICAgICAgICAgICAgICAgcGF0aDogY2xpZW50LmNlcnQKICAgICAgICAgICAgICAtIGtleTogdmF1bHQtY2xpZW50LWtleQogICAgICAgICAgICAgICAgcGF0aDogY2xpZW50LmtleQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAge3stIGVuZCB9fQogICAgICAgIHt7LSBpZiBub3QgKGVxIChkZWZhdWx0ICJkaXNhYmxlIiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIucG9zdGdyZXMuc3NsbW9kZSkgImRpc2FibGUiKSB9fQogICAgICAgIC0gbmFtZTogcG9zdGdyZXNxbC1rZXlzCiAgICAgICAgICBzZWNyZXQ6CiAgICAgICAgICAgIHNlY3JldE5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2UuY29uY291cnNlLmZ1bGxuYW1lIiAuIH19CiAgICAgICAgICAgIGRlZmF1bHRNb2RlOiAwNDAwCiAgICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAgIC0ga2V5OiBwb3N0Z3Jlc3FsLWNhLWNlcnQKICAgICAgICAgICAgICAgIHBhdGg6IGNhLmNlcnQKICAgICAgICAgICAgICAtIGtleTogcG9zdGdyZXNxbC1jbGllbnQtY2VydAogICAgICAgICAgICAgICAgcGF0aDogY2xpZW50LmNlcnQKICAgICAgICAgICAgICAtIGtleTogcG9zdGdyZXNxbC1jbGllbnQta2V5CiAgICAgICAgICAgICAgICBwYXRoOiBjbGllbnQua2V5CiAgICAgICAge3stIGVuZCB9fQogICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuc3lzbG9nLmVuYWJsZWQgfX0KICAgICAgICAtIG5hbWU6IHN5c2xvZy1rZXlzCiAgICAgICAgICBzZWNyZXQ6CiAgICAgICAgICAgIHNlY3JldE5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2UuY29uY291cnNlLmZ1bGxuYW1lIiAuIH19CiAgICAgICAgICAgIGRlZmF1bHRNb2RlOiAwNDAwCiAgICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAgIC0ga2V5OiBzeXNsb2ctY2EtY2VydAogICAgICAgICAgICAgICAgcGF0aDogY2EuY2VydAogICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAtIG5hbWU6IGF1dGgta2V5cwogICAgICAgICAgc2VjcmV0OgogICAgICAgICAgICBzZWNyZXROYW1lOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLmNvbmNvdXJzZS5mdWxsbmFtZSIgLiB9fQogICAgICAgICAgICBkZWZhdWx0TW9kZTogMDQwMAogICAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGguY2YudXNlQ2FDZXJ0IH19CiAgICAgICAgICAgICAgLSBrZXk6IGNmLWNhLWNlcnQKICAgICAgICAgICAgICAgIHBhdGg6IGNmX2NhLmNlcnQKICAgICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLmdpdGh1Yi51c2VDYUNlcnQgfX0KICAgICAgICAgICAgICAtIGtleTogZ2l0aHViLWNhLWNlcnQKICAgICAgICAgICAgICAgIHBhdGg6IGdpdGh1Yl9jYS5jZXJ0CiAgICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIuYXV0aC5sZGFwLnVzZUNhQ2VydCB9fQogICAgICAgICAgICAgIC0ga2V5OiBsZGFwLWNhLWNlcnQKICAgICAgICAgICAgICAgIHBhdGg6IGxkYXBfY2EuY2VydAogICAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmF1dGgub2F1dGgudXNlQ2FDZXJ0IH19CiAgICAgICAgICAgICAgLSBrZXk6IG9hdXRoLWNhLWNlcnQKICAgICAgICAgICAgICAgIHBhdGg6IG9hdXRoX2NhLmNlcnQKICAgICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi5hdXRoLm9pZGMudXNlQ2FDZXJ0IH19CiAgICAgICAgICAgICAgLSBrZXk6IG9pZGMtY2EtY2VydAogICAgICAgICAgICAgICAgcGF0aDogb2lkY19jYS5jZXJ0CiAgICAgICAgICAgICAge3stIGVuZCB9fQo=" 71 }, 72 { 73 "filePath": "templates/web-ingress.yaml", 74 "fileContents": "e3stIGlmIC5WYWx1ZXMud2ViLmluZ3Jlc3MuZW5hYmxlZCAtfX0Ke3stICRyZWxlYXNlTmFtZSA6PSAuUmVsZWFzZS5OYW1lIC19fQp7ey0gJHNlcnZpY2VOYW1lIDo9IGRlZmF1bHQgIndlYiIgLlZhbHVlcy53ZWIubmFtZU92ZXJyaWRlIC19fQp7ey0gJHNlcnZpY2VQb3J0IDo9IC5WYWx1ZXMuY29uY291cnNlLndlYi5iaW5kUG9ydCAtfX0KYXBpVmVyc2lvbjogZXh0ZW5zaW9ucy92MWJldGExCmtpbmQ6IEluZ3Jlc3MKbWV0YWRhdGE6CiAgbmFtZToge3sgdGVtcGxhdGUgImNvbmNvdXJzZS53ZWIuZnVsbG5hbWUiIC4gfX0KICBsYWJlbHM6CiAgICBhcHA6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uud2ViLmZ1bGxuYW1lIiAuIH19CiAgICBjaGFydDogInt7IC5DaGFydC5OYW1lIH19LXt7IC5DaGFydC5WZXJzaW9uIH19IgogICAgcmVsZWFzZTogInt7IC5SZWxlYXNlLk5hbWUgfX0iCiAgICBoZXJpdGFnZTogInt7IC5SZWxlYXNlLlNlcnZpY2UgfX0iCiAgYW5ub3RhdGlvbnM6CiAgICB7ey0gcmFuZ2UgJGtleSwgJHZhbHVlIDo9IC5WYWx1ZXMud2ViLmluZ3Jlc3MuYW5ub3RhdGlvbnMgfX0KICAgIHt7ICRrZXkgfX06IHt7ICR2YWx1ZSB8IHF1b3RlIH19CiAgICB7ey0gZW5kIH19CnNwZWM6CiAgcnVsZXM6CiAgICB7ey0gcmFuZ2UgLlZhbHVlcy53ZWIuaW5ncmVzcy5ob3N0cyB9fQogICAgLSBob3N0OiB7eyAuIH19CiAgICAgIGh0dHA6CiAgICAgICAgcGF0aHM6CiAgICAgICAgICAtIGJhY2tlbmQ6CiAgICAgICAgICAgICAgc2VydmljZU5hbWU6IHt7IHByaW50ZiAiJXMtJXMiICRyZWxlYXNlTmFtZSAkc2VydmljZU5hbWUgfCB0cnVuYyA2MyB8IHRyaW1TdWZmaXggIi0iIH19CiAgICAgICAgICAgICAgc2VydmljZVBvcnQ6IHt7ICRzZXJ2aWNlUG9ydCB9fQogICAge3stIGVuZCAtfX0KICB7ey0gaWYgLlZhbHVlcy53ZWIuaW5ncmVzcy50bHMgfX0KICB0bHM6Cnt7IHRvWWFtbCAuVmFsdWVzLndlYi5pbmdyZXNzLnRscyB8IGluZGVudCA0IH19CiAge3stIGVuZCAtfX0Ke3stIGVuZCAtfX0K" 75 }, 76 { 77 "filePath": "templates/web-role.yaml", 78 "fileContents": "e3stIGlmIC5WYWx1ZXMucmJhYy5jcmVhdGUgLX19Cnt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIua3ViZXJuZXRlcy5lbmFibGVkIC19fQphcGlWZXJzaW9uOiByYmFjLmF1dGhvcml6YXRpb24uazhzLmlvL3t7IC5WYWx1ZXMucmJhYy5hcGlWZXJzaW9uIH19CmtpbmQ6IENsdXN0ZXJSb2xlCm1ldGFkYXRhOgogIG5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uud2ViLmZ1bGxuYW1lIiAuIH19CiAgbGFiZWxzOgogICAgYXBwOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLndlYi5mdWxsbmFtZSIgLiB9fQogICAgY2hhcnQ6IHt7IC5DaGFydC5OYW1lIH19LXt7IC5DaGFydC5WZXJzaW9uIH19CiAgICBoZXJpdGFnZToge3sgLlJlbGVhc2UuU2VydmljZSB9fQogICAgcmVsZWFzZToge3sgLlJlbGVhc2UuTmFtZSB9fQpydWxlczoKLSBhcGlHcm91cHM6IFsiIl0KICByZXNvdXJjZXM6IFsic2VjcmV0cyJdCiAgdmVyYnM6IFsiZ2V0Il0Ke3stIGVuZCAtfX0Ke3stIGVuZCAtfX0K" 79 }, 80 { 81 "filePath": "templates/web-rolebinding.yaml", 82 "fileContents": "e3stIGlmIC5WYWx1ZXMucmJhYy5jcmVhdGUgLX19Cnt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53ZWIua3ViZXJuZXRlcy5lbmFibGVkIC19fQp7ey0gcmFuZ2UgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLmt1YmVybmV0ZXMudGVhbXMgfX0KLS0tCmFwaVZlcnNpb246IHJiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8ve3sgJC5WYWx1ZXMucmJhYy5hcGlWZXJzaW9uIH19CmtpbmQ6IFJvbGVCaW5kaW5nCm1ldGFkYXRhOgogIG5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uud2ViLmZ1bGxuYW1lIiAkIH19LXt7IC4gfX0KICBuYW1lc3BhY2U6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2UubmFtZXNwYWNlUHJlZml4IiAkIH19e3sgLiB9fQogIGxhYmVsczoKICAgIGFwcDoge3sgdGVtcGxhdGUgImNvbmNvdXJzZS53ZWIuZnVsbG5hbWUiICQgfX0KICAgIGNoYXJ0OiB7eyAkLkNoYXJ0Lk5hbWUgfX0te3sgJC5DaGFydC5WZXJzaW9uIH19CiAgICBoZXJpdGFnZToge3sgJC5SZWxlYXNlLlNlcnZpY2UgfX0KICAgIHJlbGVhc2U6IHt7ICQuUmVsZWFzZS5OYW1lIH19CnJvbGVSZWY6CiAgYXBpR3JvdXA6IHJiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8KICBraW5kOiBDbHVzdGVyUm9sZQogIG5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uud2ViLmZ1bGxuYW1lIiAkIH19CnN1YmplY3RzOgotIGtpbmQ6IFNlcnZpY2VBY2NvdW50CiAgbmFtZToge3sgdGVtcGxhdGUgImNvbmNvdXJzZS53ZWIuZnVsbG5hbWUiICQgfX0KICBuYW1lc3BhY2U6IHt7ICQuUmVsZWFzZS5OYW1lc3BhY2UgfX0Ke3stIGVuZCB9fQp7ey0gZW5kIC19fQp7ey0gZW5kIC19fQo=" 83 }, 84 { 85 "filePath": "templates/web-serviceaccount.yaml", 86 "fileContents": "e3stIGlmIC5WYWx1ZXMucmJhYy5jcmVhdGUgLX19CmFwaVZlcnNpb246IHYxCmtpbmQ6IFNlcnZpY2VBY2NvdW50Cm1ldGFkYXRhOgogIG5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uud2ViLmZ1bGxuYW1lIiAuIH19CiAgbGFiZWxzOgogICAgYXBwOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLndlYi5mdWxsbmFtZSIgLiB9fQogICAgY2hhcnQ6IHt7IC5DaGFydC5OYW1lIH19LXt7IC5DaGFydC5WZXJzaW9uIH19CiAgICBoZXJpdGFnZToge3sgLlJlbGVhc2UuU2VydmljZSB9fQogICAgcmVsZWFzZToge3sgLlJlbGVhc2UuTmFtZSB9fQp7ey0gZW5kIC19fQo=" 87 }, 88 { 89 "filePath": "templates/web-svc.yaml", 90 "fileContents": "YXBpVmVyc2lvbjogdjEKa2luZDogU2VydmljZQptZXRhZGF0YToKICBuYW1lOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLndlYi5mdWxsbmFtZSIgLiB9fQogIGxhYmVsczoKICAgIGFwcDoge3sgdGVtcGxhdGUgImNvbmNvdXJzZS53ZWIuZnVsbG5hbWUiIC4gfX0KICAgIGNoYXJ0OiAie3sgLkNoYXJ0Lk5hbWUgfX0te3sgLkNoYXJ0LlZlcnNpb24gfX0iCiAgICByZWxlYXNlOiAie3sgLlJlbGVhc2UuTmFtZSB9fSIKICAgIGhlcml0YWdlOiAie3sgLlJlbGVhc2UuU2VydmljZSB9fSIKICAgIHt7LSByYW5nZSAka2V5LCAkdmFsdWUgOj0gLlZhbHVlcy53ZWIuc2VydmljZS5sYWJlbHMgfX0KICAgIHt7ICRrZXkgfX06IHt7ICR2YWx1ZSB8IHF1b3RlIH19CiAgICB7ey0gZW5kIH19CiAgYW5ub3RhdGlvbnM6CiAgICB7ey0gcmFuZ2UgJGtleSwgJHZhbHVlIDo9IC5WYWx1ZXMud2ViLnNlcnZpY2UuYW5ub3RhdGlvbnMgfX0KICAgIHt7ICRrZXkgfX06IHt7ICR2YWx1ZSB8IHF1b3RlIH19CiAgICB7ey0gZW5kIH19CiAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnByb21ldGhldXMuZW5hYmxlZCB9fQogICAgcHJvbWV0aGV1cy5pby9zY3JhcGU6ICJ0cnVlIgogICAgcHJvbWV0aGV1cy5pby9wb3J0OiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIucHJvbWV0aGV1cy5iaW5kUG9ydCB8IHF1b3RlIH19CiAgICB7ey0gZW5kIH19CnNwZWM6CiAgdHlwZToge3sgLlZhbHVlcy53ZWIuc2VydmljZS50eXBlIH19CiAge3sgaWYgLlZhbHVlcy53ZWIuc2VydmljZS5sb2FkQmFsYW5jZXJTb3VyY2VSYW5nZXMgfX0KICBsb2FkQmFsYW5jZXJTb3VyY2VSYW5nZXM6CiAgICB7ey0gcmFuZ2UgLlZhbHVlcy53ZWIuc2VydmljZS5sb2FkQmFsYW5jZXJTb3VyY2VSYW5nZXMgfX0KICAgIC0ge3sgLiB9fQogICAge3stIGVuZCB9fQogIHt7IGVuZCB9fQogIHt7IGlmIGFuZCAoZXEgIkxvYWRCYWxhbmNlciIgLlZhbHVlcy53ZWIuc2VydmljZS50eXBlKSAuVmFsdWVzLndlYi5zZXJ2aWNlLmxvYWRCYWxhbmNlcklQIH19CiAgbG9hZEJhbGFuY2VySVA6IHt7IC5WYWx1ZXMud2ViLnNlcnZpY2UubG9hZEJhbGFuY2VySVAgfX0KICB7eyBlbmQgfX0KICBwb3J0czoKICAgIC0gbmFtZTogYXRjCiAgICAgIHBvcnQ6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5iaW5kUG9ydCB9fQogICAgICB0YXJnZXRQb3J0OiBhdGMKICAgICAge3sgaWYgYW5kIChlcSAiTm9kZVBvcnQiIC5WYWx1ZXMud2ViLnNlcnZpY2UudHlwZSkgLlZhbHVlcy53ZWIuc2VydmljZS5hdGNOb2RlUG9ydCB9fQogICAgICBub2RlUG9ydDoge3sgLlZhbHVlcy53ZWIuc2VydmljZS5hdGNOb2RlUG9ydH19CiAgICAgIHt7IGVuZCB9fQogICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndlYi50bHMuZW5hYmxlZCB9fQogICAgLSBuYW1lOiBhdGMtdGxzCiAgICAgIHBvcnQ6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi50bHMuYmluZFBvcnQgfX0KICAgICAgdGFyZ2V0UG9ydDogYXRjLXRscwogICAgICB7eyBpZiBhbmQgKGVxICJOb2RlUG9ydCIgLlZhbHVlcy53ZWIuc2VydmljZS50eXBlKSAuVmFsdWVzLndlYi5zZXJ2aWNlLmF0Y1Rsc05vZGVQb3J0IH19CiAgICAgIG5vZGVQb3J0OiB7eyAuVmFsdWVzLndlYi5zZXJ2aWNlLmF0Y1Rsc05vZGVQb3J0fX0KICAgICAge3sgZW5kIH19CiAgICB7ey0gZW5kIH19CiAgICAtIG5hbWU6IHRzYQogICAgICBwb3J0OiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53ZWIudHNhLmJpbmRQb3J0IH19CiAgICAgIHRhcmdldFBvcnQ6IHRzYQogICAgICB7eyBpZiBhbmQgKGVxICJOb2RlUG9ydCIgLlZhbHVlcy53ZWIuc2VydmljZS50eXBlKSAuVmFsdWVzLndlYi5zZXJ2aWNlLnRzYU5vZGVQb3J0IH19CiAgICAgIG5vZGVQb3J0OiB7eyAuVmFsdWVzLndlYi5zZXJ2aWNlLnRzYU5vZGVQb3J0fX0KICAgICAge3sgZW5kIH19CiAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud2ViLnByb21ldGhldXMuZW5hYmxlZCB9fQogICAgLSBuYW1lOiBwcm9tZXRoZXVzCiAgICAgIHBvcnQ6IHt7IC5WYWx1ZXMuY29uY291cnNlLndlYi5wcm9tZXRoZXVzLmJpbmRQb3J0IH19CiAgICAgIHRhcmdldFBvcnQ6IHByb21ldGhldXMKICAgIHt7LSBlbmQgfX0KICBzZWxlY3RvcjoKICAgIGFwcDoge3sgdGVtcGxhdGUgImNvbmNvdXJzZS53ZWIuZnVsbG5hbWUiIC4gfX0K" 91 }, 92 { 93 "filePath": "templates/worker-policy.yaml", 94 "fileContents": "YXBpVmVyc2lvbjogcG9saWN5L3YxYmV0YTEKa2luZDogUG9kRGlzcnVwdGlvbkJ1ZGdldAptZXRhZGF0YToKICBuYW1lOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLndvcmtlci5mdWxsbmFtZSIgLiB9fQogIGxhYmVsczoKICAgIGFwcDoge3sgdGVtcGxhdGUgImNvbmNvdXJzZS53b3JrZXIuZnVsbG5hbWUiIC4gfX0KICAgIGNoYXJ0OiAie3sgLkNoYXJ0Lk5hbWUgfX0te3sgLkNoYXJ0LlZlcnNpb24gfX0iCiAgICByZWxlYXNlOiAie3sgLlJlbGVhc2UuTmFtZSB9fSIKICAgIGhlcml0YWdlOiAie3sgLlJlbGVhc2UuU2VydmljZSB9fSIKc3BlYzoKICBtaW5BdmFpbGFibGU6IHt7IC5WYWx1ZXMud29ya2VyLm1pbkF2YWlsYWJsZSB9fQogIHNlbGVjdG9yOgogICAgbWF0Y2hMYWJlbHM6CiAgICAgIGFwcDoge3sgdGVtcGxhdGUgImNvbmNvdXJzZS53b3JrZXIuZnVsbG5hbWUiIC4gfX0K" 95 }, 96 { 97 "filePath": "templates/worker-role.yaml", 98 "fileContents": "e3stIGlmIC5WYWx1ZXMucmJhYy5jcmVhdGUgLX19CmFwaVZlcnNpb246IHJiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8ve3sgLlZhbHVlcy5yYmFjLmFwaVZlcnNpb24gfX0Ka2luZDogUm9sZQptZXRhZGF0YToKICBuYW1lOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLndvcmtlci5mdWxsbmFtZSIgLiB9fQogIGxhYmVsczoKICAgIGFwcDoge3sgdGVtcGxhdGUgImNvbmNvdXJzZS53b3JrZXIuZnVsbG5hbWUiIC4gfX0KICAgIGNoYXJ0OiB7eyAuQ2hhcnQuTmFtZSB9fS17eyAuQ2hhcnQuVmVyc2lvbiB9fQogICAgaGVyaXRhZ2U6IHt7IC5SZWxlYXNlLlNlcnZpY2UgfX0KICAgIHJlbGVhc2U6IHt7IC5SZWxlYXNlLk5hbWUgfX0KcnVsZXM6Ci0gYXBpR3JvdXBzOgogIC0gZXh0ZW5zaW9ucwogIHJlc291cmNlczoKICAtIHBvZHNlY3VyaXR5cG9saWNpZXMKICByZXNvdXJjZU5hbWVzOgogIC0gcHJpdmlsZWdlZAogIHZlcmJzOgogIC0gdXNlCnt7LSBlbmQgLX19Cg==" 99 }, 100 { 101 "filePath": "templates/worker-rolebinding.yaml", 102 "fileContents": "e3stIGlmIC5WYWx1ZXMucmJhYy5jcmVhdGUgLX19CmFwaVZlcnNpb246IHJiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8ve3sgLlZhbHVlcy5yYmFjLmFwaVZlcnNpb24gfX0Ka2luZDogUm9sZUJpbmRpbmcKbWV0YWRhdGE6CiAgbmFtZToge3sgdGVtcGxhdGUgImNvbmNvdXJzZS53b3JrZXIuZnVsbG5hbWUiIC4gfX0KICBsYWJlbHM6CiAgICBhcHA6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uud29ya2VyLmZ1bGxuYW1lIiAuIH19CiAgICBjaGFydDoge3sgLkNoYXJ0Lk5hbWUgfX0te3sgLkNoYXJ0LlZlcnNpb24gfX0KICAgIGhlcml0YWdlOiB7eyAuUmVsZWFzZS5TZXJ2aWNlIH19CiAgICByZWxlYXNlOiB7eyAuUmVsZWFzZS5OYW1lIH19CnJvbGVSZWY6CiAgYXBpR3JvdXA6IHJiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8KICBraW5kOiBSb2xlCiAgbmFtZToge3sgdGVtcGxhdGUgImNvbmNvdXJzZS53b3JrZXIuZnVsbG5hbWUiIC4gfX0Kc3ViamVjdHM6Ci0ga2luZDogU2VydmljZUFjY291bnQKICBuYW1lOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLndvcmtlci5mdWxsbmFtZSIgLiB9fQp7ey0gZW5kIC19fQo=" 103 }, 104 { 105 "filePath": "templates/worker-serviceaccount.yaml", 106 "fileContents": "e3stIGlmIC5WYWx1ZXMucmJhYy5jcmVhdGUgLX19CmFwaVZlcnNpb246IHYxCmtpbmQ6IFNlcnZpY2VBY2NvdW50Cm1ldGFkYXRhOgogIG5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uud29ya2VyLmZ1bGxuYW1lIiAuIH19CiAgbGFiZWxzOgogICAgYXBwOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLndvcmtlci5mdWxsbmFtZSIgLiB9fQogICAgY2hhcnQ6IHt7IC5DaGFydC5OYW1lIH19LXt7IC5DaGFydC5WZXJzaW9uIH19CiAgICBoZXJpdGFnZToge3sgLlJlbGVhc2UuU2VydmljZSB9fQogICAgcmVsZWFzZToge3sgLlJlbGVhc2UuTmFtZSB9fQp7ey0gZW5kIC19fQo=" 107 }, 108 { 109 "filePath": "templates/worker-statefulset.yaml", 110 "fileContents": "YXBpVmVyc2lvbjogYXBwcy92MWJldGExCmtpbmQ6IFN0YXRlZnVsU2V0Cm1ldGFkYXRhOgogIG5hbWU6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uud29ya2VyLmZ1bGxuYW1lIiAuIH19CiAgbGFiZWxzOgogICAgYXBwOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLndvcmtlci5mdWxsbmFtZSIgLiB9fQogICAgY2hhcnQ6ICJ7eyAuQ2hhcnQuTmFtZSB9fS17eyAuQ2hhcnQuVmVyc2lvbiB9fSIKICAgIHJlbGVhc2U6ICJ7eyAuUmVsZWFzZS5OYW1lIH19IgogICAgaGVyaXRhZ2U6ICJ7eyAuUmVsZWFzZS5TZXJ2aWNlIH19IgoKc3BlYzoKICBzZXJ2aWNlTmFtZToge3sgdGVtcGxhdGUgImNvbmNvdXJzZS53b3JrZXIuZnVsbG5hbWUiIC4gfX0KICByZXBsaWNhczoge3sgLlZhbHVlcy53b3JrZXIucmVwbGljYXMgfX0KICB0ZW1wbGF0ZToKICAgIG1ldGFkYXRhOgogICAgICBsYWJlbHM6CiAgICAgICAgYXBwOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLndvcmtlci5mdWxsbmFtZSIgLiB9fQogICAgICAgIHJlbGVhc2U6ICJ7eyAuUmVsZWFzZS5OYW1lIH19IgogICAgICBhbm5vdGF0aW9uczoKICAgICAgICB7ey0gcmFuZ2UgJGtleSwgJHZhbHVlIDo9IC5WYWx1ZXMud29ya2VyLmFubm90YXRpb25zIH19CiAgICAgICAge3sgJGtleSB9fToge3sgJHZhbHVlIHwgcXVvdGUgfX0KICAgICAgICB7ey0gZW5kIH19CiAgICBzcGVjOgogICAge3stIHdpdGggLlZhbHVlcy53b3JrZXIubm9kZVNlbGVjdG9yIH19CiAgICAgIG5vZGVTZWxlY3RvcjoKe3sgdG9ZYW1sIC4gfCBpbmRlbnQgOCB9fQogICAge3stIGVuZCB9fQogICAgICBzZXJ2aWNlQWNjb3VudE5hbWU6IHt7IGlmIC5WYWx1ZXMucmJhYy5jcmVhdGUgfX17eyB0ZW1wbGF0ZSAiY29uY291cnNlLndvcmtlci5mdWxsbmFtZSIgLiB9fXt7IGVsc2UgfX17eyAuVmFsdWVzLnJiYWMud29ya2VyU2VydmljZUFjY291bnROYW1lIH19e3sgZW5kIH19CiAgICAgIHRvbGVyYXRpb25zOgp7eyB0b1lhbWwgLlZhbHVlcy53b3JrZXIudG9sZXJhdGlvbnMgfCBpbmRlbnQgOCB9fQogICAgICB7ey0gaWYgLlZhbHVlcy5pbWFnZVB1bGxTZWNyZXRzIH19CiAgICAgIGltYWdlUHVsbFNlY3JldHM6CiAgICAgIHt7LSByYW5nZSAuVmFsdWVzLmltYWdlUHVsbFNlY3JldHMgfX0KICAgICAgICAtIG5hbWU6IHt7IC4gfX0KICAgICAge3stIGVuZCB9fQogICAgICB7ey0gZW5kIH19CiAgICAgIHRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzOiB7eyAuVmFsdWVzLndvcmtlci50ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kcyB9fQogICAgICBjb250YWluZXJzOgogICAgICAgIC0gbmFtZToge3sgdGVtcGxhdGUgImNvbmNvdXJzZS53b3JrZXIuZnVsbG5hbWUiIC4gfX0KICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmltYWdlRGlnZXN0IH19CiAgICAgICAgICBpbWFnZTogInt7IC5WYWx1ZXMuaW1hZ2UgfX1Ae3sgLlZhbHVlcy5pbWFnZURpZ2VzdCB9fSIKICAgICAgICAgIHt7LSBlbHNlIH19CiAgICAgICAgICBpbWFnZTogInt7IC5WYWx1ZXMuaW1hZ2UgfX06e3sgLlZhbHVlcy5pbWFnZVRhZyB9fSIKICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgIGltYWdlUHVsbFBvbGljeToge3sgLlZhbHVlcy5pbWFnZVB1bGxQb2xpY3kgfCBxdW90ZSB9fQogICAgICAgICAgY29tbWFuZDoKICAgICAgICAgICAgLSAvYmluL3NoCiAgICAgICAgICBhcmdzOgogICAgICAgICAgICAtIC1jCiAgICAgICAgICAgIC0gfC0KICAgICAgICAgICAgICBjcCAvZGV2L251bGwgL3RtcC8ubGl2ZW5lc3NfcHJvYmUKICAgICAgICAgICAgICBybSAtcmYgJHtDT05DT1VSU0VfV09SS19ESVI6LS9jb25jb3Vyc2Utd29yay1kaXJ9LyoKICAgICAgICAgICAgICB3aGlsZSAhIGNvbmNvdXJzZSByZXRpcmUtd29ya2VyIC0tbmFtZT0ke0hPU1ROQU1FfSB8IGdyZXAgLXEgd29ya2VyLW5vdC1mb3VuZDsgZG8KICAgICAgICAgICAgICAgIHRvdWNoIC90bXAvLnByZV9zdGFydF9jbGVhbnVwCiAgICAgICAgICAgICAgICBzbGVlcCA1CiAgICAgICAgICAgICAgZG9uZQogICAgICAgICAgICAgIHJtIC1mIC90bXAvLnByZV9zdGFydF9jbGVhbnVwCiAgICAgICAgICAgICAgY29uY291cnNlIHdvcmtlciAtLW5hbWU9JHtIT1NUTkFNRX0gfCB0ZWUgLWEgL3RtcC8ubGl2ZW5lc3NfcHJvYmUKICAgICAgICAgIGxpdmVuZXNzUHJvYmU6CiAgICAgICAgICAgIGV4ZWM6CiAgICAgICAgICAgICAgY29tbWFuZDoKICAgICAgICAgICAgICAgIC0gL2Jpbi9zaAogICAgICAgICAgICAgICAgLSAtYwogICAgICAgICAgICAgICAgLSB8LQogICAgICAgICAgICAgICAgICBGQVRBTF9FUlJPUlM9JCggZWNobyAiJHtMSVZFTkVTU19QUk9CRV9GQVRBTF9FUlJPUlN9IiB8IGdyZXAgLXEgJ1xTJyAmJiBcCiAgICAgICAgICAgICAgICAgICAgICBncmVwIC1GICIke0xJVkVORVNTX1BST0JFX0ZBVEFMX0VSUk9SU30iIC90bXAvLmxpdmVuZXNzX3Byb2JlICkKICAgICAgICAgICAgICAgICAgY3AgL2Rldi9udWxsIC90bXAvLmxpdmVuZXNzX3Byb2JlCiAgICAgICAgICAgICAgICAgIGlmIFsgISAteiAiJHtGQVRBTF9FUlJPUlN9IiBdOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgPiYyIGVjaG8gIkZhdGFsIGVycm9yIGRldGVjdGVkOiAke0ZBVEFMX0VSUk9SU30iCiAgICAgICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgIGlmIFsgLWYgL3RtcC8ucHJlX3N0YXJ0X2NsZWFudXAgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgID4mMiBlY2hvICJTdGlsbCB0cnlpbmcgdG8gY2xlYW4gdXAgYmVmb3JlIHN0YXJ0aW5nIGNvbmNvdXJzZS4gJ2ZseSBwcnVuZS13b3JrZXIgLXcgJHtIT1NUTkFNRX0nIG1pZ2h0IG5lZWQgdG8gYmUgY2FsbGVkIHRvIGZvcmNlIGNsZWFudXAuIgogICAgICAgICAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICBmYWlsdXJlVGhyZXNob2xkOiAxCiAgICAgICAgICAgIGluaXRpYWxEZWxheVNlY29uZHM6IDEwCiAgICAgICAgICAgIHBlcmlvZFNlY29uZHM6IDEwCiAgICAgICAgICBsaWZlY3ljbGU6CiAgICAgICAgICAgIHByZVN0b3A6CiAgICAgICAgICAgICAgZXhlYzoKICAgICAgICAgICAgICAgIGNvbW1hbmQ6CiAgICAgICAgICAgICAgICAgIC0gL2Jpbi9zaAogICAgICAgICAgICAgICAgICAtIC1jCiAgICAgICAgICAgICAgICAgIC0gfC0KICAgICAgICAgICAgICAgICAgICB3aGlsZSAhIGNvbmNvdXJzZSByZXRpcmUtd29ya2VyIC0tbmFtZT0ke0hPU1ROQU1FfSB8IGdyZXAgLXEgd29ya2VyLW5vdC1mb3VuZDsgZG8KICAgICAgICAgICAgICAgICAgICAgIHNsZWVwIDUKICAgICAgICAgICAgICAgICAgICBkb25lCiAgICAgICAgICBlbnY6CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIubmFtZSB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9OQU1FCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5uYW1lIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLnRhZyB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9UQUcKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLnRhZyB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci50ZWFtIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1RFQU0KICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLnRlYW0gfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuaHR0cF9wcm94eSB9fQogICAgICAgICAgICAtIG5hbWU6IGh0dHBfcHJveHkKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmh0dHBfcHJveHkgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuaHR0cHNfcHJveHkgfX0KICAgICAgICAgICAgLSBuYW1lOiBodHRwc19wcm94eQogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuaHR0cHNfcHJveHkgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIubm9fcHJveHkgfX0KICAgICAgICAgICAgLSBuYW1lOiBub19wcm94eQogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIubm9fcHJveHkgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZXBoZW1lcmFsIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0VQSEVNRVJBTAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZXBoZW1lcmFsIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmJpbmREZWJ1Z1BvcnQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfQklORF9ERUJVR19QT1JUCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5iaW5kRGVidWdQb3J0IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmNlcnRzRGlyIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0NFUlRTX0RJUgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuY2VydHNEaXIgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIud29ya0RpciB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9XT1JLX0RJUgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIud29ya0RpciB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5iaW5kSXAgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfQklORF9JUAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuYmluZElwIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmJpbmRQb3J0IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0JJTkRfUE9SVAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuYmluZFBvcnQgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIucGVlcklwIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX1BFRVJfSVAKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLnBlZXJJcCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5sb2dMZXZlbCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9MT0dfTEVWRUwKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmxvZ0xldmVsIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQoKICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfVFNBX0hPU1QKICAgICAgICAgICAgICB2YWx1ZTogInt7IHRlbXBsYXRlICJjb25jb3Vyc2Uud2ViLmZ1bGxuYW1lIiAuIH19Ont7IC5WYWx1ZXMuY29uY291cnNlLndlYi50c2EuYmluZFBvcnR9fSIKICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfVFNBX1BVQkxJQ19LRVkKICAgICAgICAgICAgICB2YWx1ZTogInt7IC5WYWx1ZXMud29ya2VyLmtleVNlY3JldHNQYXRoIH19L2hvc3Rfa2V5LnB1YiIKICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfVFNBX1dPUktFUl9QUklWQVRFX0tFWQogICAgICAgICAgICAgIHZhbHVlOiAie3sgLlZhbHVlcy53b3JrZXIua2V5U2VjcmV0c1BhdGggfX0vd29ya2VyX2tleSIKCiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmxvZ0xldmVsIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9MT0dfTEVWRUwKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5sb2dMZXZlbCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4udGltZUZvcm1hdCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fVElNRV9GT1JNQVQKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi50aW1lRm9ybWF0IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5iaW5kSXAgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX0JJTkRfSVAKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5iaW5kSXAgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmJpbmRQb3J0IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9CSU5EX1BPUlQKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5iaW5kUG9ydCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uYmluZFNvY2tldCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fQklORF9TT0NLRVQKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5iaW5kU29ja2V0IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5kZWJ1Z0JpbmRJcCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fREVCVUdfQklORF9JUAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmRlYnVnQmluZElwIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5kZWJ1Z0JpbmRQb3J0IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9ERUJVR19CSU5EX1BPUlQKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5kZWJ1Z0JpbmRQb3J0IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5za2lwU2V0dXAgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX1NLSVBfU0VUVVAKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5za2lwU2V0dXAgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmRlcG90IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9ERVBPVAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmRlcG90IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5wcm9wZXJ0aWVzUGF0aCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fUFJPUEVSVElFU19QQVRICiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4ucHJvcGVydGllc1BhdGggfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmNvbnNvbGVTb2NrZXRzUGF0aCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fQ09OU09MRV9TT0NLRVRTX1BBVEgKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5jb25zb2xlU29ja2V0c1BhdGggfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmNsZWFudXBQcm9jZXNzRGlyc09uV2FpdCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fQ0xFQU5VUF9QUk9DRVNTX0RJUlNfT05fV0FJVAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmNsZWFudXBQcm9jZXNzRGlyc09uV2FpdCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uZGlzYWJsZVByaXZpbGVnZWRDb250YWluZXJzIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9ESVNBQkxFX1BSSVZJTEVHRURfQ09OVEFJTkVSUwogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmRpc2FibGVQcml2aWxlZ2VkQ29udGFpbmVycyB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4udWlkTWFwU3RhcnQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX1VJRF9NQVBfU1RBUlQKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi51aWRNYXBTdGFydCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4udWlkTWFwTGVuZ3RoIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9VSURfTUFQX0xFTkdUSAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLnVpZE1hcExlbmd0aCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uZ2lkTWFwU3RhcnQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX0dJRF9NQVBfU1RBUlQKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5naWRNYXBTdGFydCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uZ2lkTWFwTGVuZ3RoIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9HSURfTUFQX0xFTkdUSAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmdpZE1hcExlbmd0aCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uZGVmYXVsdFJvb3RmcyB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fREVGQVVMVF9ST09URlMKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5kZWZhdWx0Um9vdGZzIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5kZWZhdWx0R3JhY2VUaW1lIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9ERUZBVUxUX0dSQUNFX1RJTUUKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5kZWZhdWx0R3JhY2VUaW1lIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5kZXN0cm95Q29udGFpbmVyc09uU3RhcnR1cCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fREVTVFJPWV9DT05UQUlORVJTX09OX1NUQVJUVVAKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5kZXN0cm95Q29udGFpbmVyc09uU3RhcnR1cCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uYXBwYXJtb3IgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX0FQUEFSTU9SCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uYXBwYXJtb3IgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmFzc2V0c0RpciB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fQVNTRVRTX0RJUgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmFzc2V0c0RpciB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uZGFkb29CaW4gfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX0RBRE9PX0JJTgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmRhZG9vQmluIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5uc3RhckJpbiB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fTlNUQVJfQklOCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4ubnN0YXJCaW4gfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLnRhckJpbiB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fVEFSX0JJTgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLnRhckJpbiB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uaXB0YWJsZXNCaW4gfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX0lQVEFCTEVTX0JJTgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmlwdGFibGVzQmluIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5pcHRhYmxlc1Jlc3RvcmVCaW4gfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX0lQVEFCTEVTX1JFU1RPUkVfQklOCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uaXB0YWJsZXNSZXN0b3JlQmluIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5pbml0QmluIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9JTklUX0JJTgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmluaXRCaW4gfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLnJ1bnRpbWVQbHVnaW4gfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX1JVTlRJTUVfUExVR0lOCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4ucnVudGltZVBsdWdpbiB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4ucnVudGltZVBsdWdpbkV4dHJhQXJnIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9SVU5USU1FX1BMVUdJTl9FWFRSQV9BUkcKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5ydW50aW1lUGx1Z2luRXh0cmFBcmcgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmdyYXBoIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9HUkFQSAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmdyYXBoIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5ncmFwaENsZWFudXBUaHJlc2hvbGRJbk1lZ2FieXRlcyB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fR1JBUEhfQ0xFQU5VUF9USFJFU0hPTERfSU5fTUVHQUJZVEVTCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uZ3JhcGhDbGVhbnVwVGhyZXNob2xkSW5NZWdhYnl0ZXMgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLnBlcnNpc3RlbnRJbWFnZSB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fUEVSU0lTVEVOVF9JTUFHRQogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLnBlcnNpc3RlbnRJbWFnZSB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uaW1hZ2VQbHVnaW4gfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX0lNQUdFX1BMVUdJTgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmltYWdlUGx1Z2luIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5pbWFnZVBsdWdpbkV4dHJhQXJnIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9JTUFHRV9QTFVHSU5fRVhUUkFfQVJHCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uaW1hZ2VQbHVnaW5FeHRyYUFyZyB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4ucHJpdmlsZWdlZEltYWdlUGx1Z2luIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9QUklWSUxFR0VEX0lNQUdFX1BMVUdJTgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLnByaXZpbGVnZWRJbWFnZVBsdWdpbiB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4ucHJpdmlsZWdlZEltYWdlUGx1Z2luRXh0cmFBcmcgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX1BSSVZJTEVHRURfSU1BR0VfUExVR0lOX0VYVFJBX0FSRwogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLnByaXZpbGVnZWRJbWFnZVBsdWdpbkV4dHJhQXJnIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5kb2NrZXJSZWdpc3RyeSB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fRE9DS0VSX1JFR0lTVFJZCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uZG9ja2VyUmVnaXN0cnkgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmluc2VjdXJlRG9ja2VyUmVnaXN0cnkgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX0lOU0VDVVJFX0RPQ0tFUl9SRUdJU1RSWQogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmluc2VjdXJlRG9ja2VyUmVnaXN0cnkgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLm5ldHdvcmtQb29sIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9ORVRXT1JLX1BPT0wKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5uZXR3b3JrUG9vbCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uYWxsb3dIb3N0QWNjZXNzIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9BTExPV19IT1NUX0FDQ0VTUwogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmFsbG93SG9zdEFjY2VzcyB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uZGVueU5ldHdvcmsgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX0RFTllfTkVUV09SSwogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmRlbnlOZXR3b3JrIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5kbnNTZXJ2ZXIgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX0ROU19TRVJWRVIKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5kbnNTZXJ2ZXIgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmFkZGl0aW9uYWxEbnNTZXJ2ZXIgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX0FERElUSU9OQUxfRE5TX1NFUlZFUgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmFkZGl0aW9uYWxEbnNTZXJ2ZXIgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmFkZGl0aW9uYWxIb3N0RW50cnkgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX0FERElUSU9OQUxfSE9TVF9FTlRSWQogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmFkZGl0aW9uYWxIb3N0RW50cnkgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmV4dGVybmFsSXAgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX0VYVEVSTkFMX0lQCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uZXh0ZXJuYWxJcCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4ucG9ydFBvb2xTdGFydCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fUE9SVF9QT09MX1NUQVJUCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4ucG9ydFBvb2xTdGFydCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4ucG9ydFBvb2xTaXplIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9QT1JUX1BPT0xfU0laRQogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLnBvcnRQb29sU2l6ZSB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4ucG9ydFBvb2xQcm9wZXJ0aWVzUGF0aCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fUE9SVF9QT09MX1BST1BFUlRJRVNfUEFUSAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLnBvcnRQb29sUHJvcGVydGllc1BhdGggfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLm10dSB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fTVRVCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4ubXR1IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5uZXR3b3JrUGx1Z2luIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9ORVRXT1JLX1BMVUdJTgogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLm5ldHdvcmtQbHVnaW4gfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLm5ldHdvcmtQbHVnaW5FeHRyYUFyZyB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fTkVUV09SS19QTFVHSU5fRVhUUkFfQVJHCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4ubmV0d29ya1BsdWdpbkV4dHJhQXJnIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5jcHVRdW90YVBlclNoYXJlIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9DUFVfUVVPVEFfUEVSX1NIQVJFCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uY3B1UXVvdGFQZXJTaGFyZSB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4udGNwTWVtb3J5TGltaXQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX1RDUF9NRU1PUllfTElNSVQKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi50Y3BNZW1vcnlMaW1pdCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uZGVmYXVsdENvbnRhaW5lckJsb2NraW9XZWlnaHQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX0RFRkFVTFRfQ09OVEFJTkVSX0JMT0NLSU9fV0VJR0hUCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uZGVmYXVsdENvbnRhaW5lckJsb2NraW9XZWlnaHQgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLm1heENvbnRhaW5lcnMgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX01BWF9DT05UQUlORVJTCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4ubWF4Q29udGFpbmVycyB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uZGlzYWJsZVN3YXBMaW1pdCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fRElTQUJMRV9TV0FQX0xJTUlUCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uZGlzYWJsZVN3YXBMaW1pdCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4ubWV0cmljc0VtaXNzaW9uSW50ZXJ2YWwgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX01FVFJJQ1NfRU1JU1NJT05fSU5URVJWQUwKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5tZXRyaWNzRW1pc3Npb25JbnRlcnZhbCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uZHJvcHNvbmRlT3JpZ2luIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9EUk9QU09OREVfT1JJR0lOCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uZHJvcHNvbmRlT3JpZ2luIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmdhcmRlbi5kcm9wc29uZGVEZXN0aW5hdGlvbiB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fRFJPUFNPTkRFX0RFU1RJTkFUSU9OCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uZHJvcHNvbmRlRGVzdGluYXRpb24gfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmNvbnRhaW5lcmRTb2NrZXQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX0NPTlRBSU5FUkRfU09DS0VUCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uY29udGFpbmVyZFNvY2tldCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4udXNlQ29udGFpbmVyZEZvclByb2Nlc3NlcyB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fVVNFX0NPTlRBSU5FUkRfRk9SX1BST0NFU1NFUwogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLnVzZUNvbnRhaW5lcmRGb3JQcm9jZXNzZXMgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuZ2FyZGVuLmRuc1Byb3h5RW5hYmxlIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9ETlNfUFJPWFlfRU5BQkxFCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5nYXJkZW4uZG5zUHJveHlFbmFibGUgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CgogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmJhZ2dhZ2VjbGFpbS5sb2dMZXZlbCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9CQUdHQUdFQ0xBSU1fTE9HX0xFVkVMCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5iYWdnYWdlY2xhaW0ubG9nTGV2ZWwgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuYmFnZ2FnZWNsYWltLmJpbmRJcCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9CQUdHQUdFQ0xBSU1fQklORF9JUAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuYmFnZ2FnZWNsYWltLmJpbmRJcCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5iYWdnYWdlY2xhaW0uYmluZFBvcnQgfX0KICAgICAgICAgICAgLSBuYW1lOiBDT05DT1VSU0VfQkFHR0FHRUNMQUlNX0JJTkRfUE9SVAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuYmFnZ2FnZWNsYWltLmJpbmRQb3J0IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmJhZ2dhZ2VjbGFpbS5iaW5kRGVidWdQb3J0IH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0JBR0dBR0VDTEFJTV9CSU5EX0RFQlVHX1BPUlQKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmJhZ2dhZ2VjbGFpbS5iaW5kRGVidWdQb3J0IHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmJhZ2dhZ2VjbGFpbS52b2x1bWVzIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0JBR0dBR0VDTEFJTV9WT0xVTUVTCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5iYWdnYWdlY2xhaW0udm9sdW1lcyB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5iYWdnYWdlY2xhaW0uZHJpdmVyIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0JBR0dBR0VDTEFJTV9EUklWRVIKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmJhZ2dhZ2VjbGFpbS5kcml2ZXIgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuYmFnZ2FnZWNsYWltLmJ0cmZzQmluIH19CiAgICAgICAgICAgIC0gbmFtZTogQ09OQ09VUlNFX0JBR0dBR0VDTEFJTV9CVFJGU19CSU4KICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmJhZ2dhZ2VjbGFpbS5idHJmc0JpbiB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAge3stIGlmIC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5iYWdnYWdlY2xhaW0ubWtmc0JpbiB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9CQUdHQUdFQ0xBSU1fTUtGU19CSU4KICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmJhZ2dhZ2VjbGFpbS5ta2ZzQmluIHwgcXVvdGUgfX0KICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgICB7ey0gaWYgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2VyLmJhZ2dhZ2VjbGFpbS5vdmVybGF5c0RpciB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9CQUdHQUdFQ0xBSU1fT1ZFUkxBWVNfRElSCiAgICAgICAgICAgICAgdmFsdWU6IHt7IC5WYWx1ZXMuY29uY291cnNlLndvcmtlci5iYWdnYWdlY2xhaW0ub3ZlcmxheXNEaXIgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuYmFnZ2FnZWNsYWltLnJlYXBJbnRlcnZhbCB9fQogICAgICAgICAgICAtIG5hbWU6IENPTkNPVVJTRV9CQUdHQUdFQ0xBSU1fUkVBUF9JTlRFUlZBTAogICAgICAgICAgICAgIHZhbHVlOiB7eyAuVmFsdWVzLmNvbmNvdXJzZS53b3JrZXIuYmFnZ2FnZWNsYWltLnJlYXBJbnRlcnZhbCB8IHF1b3RlIH19CiAgICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgICAgLSBuYW1lOiBMSVZFTkVTU19QUk9CRV9GQVRBTF9FUlJPUlMKICAgICAgICAgICAgICB2YWx1ZToge3sgLlZhbHVlcy53b3JrZXIuZmF0YWxFcnJvcnMgfCBxdW90ZSB9fQoKe3stIGlmIC5WYWx1ZXMud29ya2VyLmVudiB9fQp7eyB0b1lhbWwgLlZhbHVlcy53b3JrZXIuZW52IHwgaW5kZW50IDEyIH19Cnt7LSBlbmQgfX0KICAgICAgICAgIHJlc291cmNlczoKe3sgdG9ZYW1sIC5WYWx1ZXMud29ya2VyLnJlc291cmNlcyB8IGluZGVudCAxMiB9fQogICAgICAgICAgc2VjdXJpdHlDb250ZXh0OgogICAgICAgICAgICBwcml2aWxlZ2VkOiB0cnVlCiAgICAgICAgICB2b2x1bWVNb3VudHM6CiAgICAgICAgICAgIC0gbmFtZTogY29uY291cnNlLWtleXMKICAgICAgICAgICAgICBtb3VudFBhdGg6IHt7IC5WYWx1ZXMud29ya2VyLmtleVNlY3JldHNQYXRoIHwgcXVvdGUgfX0KICAgICAgICAgICAgICByZWFkT25seTogdHJ1ZQogICAgICAgICAgICAtIG5hbWU6IGNvbmNvdXJzZS13b3JrLWRpcgogICAgICAgICAgICAgIG1vdW50UGF0aDoge3sgLlZhbHVlcy5jb25jb3Vyc2Uud29ya2luZ0RpcmVjdG9yeSB8IGRlZmF1bHQgIi9jb25jb3Vyc2Utd29yay1kaXIiIHwgcXVvdGUgfX0Ke3stIGlmIC5WYWx1ZXMud29ya2VyLmFkZGl0aW9uYWxWb2x1bWVNb3VudHMgfX0Ke3sgdG9ZYW1sIC5WYWx1ZXMud29ya2VyLmFkZGl0aW9uYWxWb2x1bWVNb3VudHMgfCBpbmRlbnQgMTIgfX0Ke3stIGVuZCB9fQogICAgICBhZmZpbml0eToKe3stIGlmIC5WYWx1ZXMud29ya2VyLmFkZGl0aW9uYWxBZmZpbml0aWVzIH19Cnt7IHRvWWFtbCAuVmFsdWVzLndvcmtlci5hZGRpdGlvbmFsQWZmaW5pdGllcyB8IGluZGVudCA4IH19Cnt7LSBlbmQgfX0KICAgICAgICBwb2RBbnRpQWZmaW5pdHk6CiAgICAgICAgICB7ey0gaWYgLlZhbHVlcy53b3JrZXIuaGFyZEFudGlBZmZpbml0eSB9fQogICAgICAgICAgcmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbjoKICAgICAgICAgIC0gbGFiZWxTZWxlY3RvcjoKICAgICAgICAgICAgICBtYXRjaExhYmVsczoKICAgICAgICAgICAgICAgIGFwcDoge3sgdGVtcGxhdGUgImNvbmNvdXJzZS53b3JrZXIuZnVsbG5hbWUiIC4gfX0KICAgICAgICAgICAgICAgIHJlbGVhc2U6IHt7IC5SZWxlYXNlLk5hbWUgfCBxdW90ZSB9fQogICAgICAgICAgICB0b3BvbG9neUtleToga3ViZXJuZXRlcy5pby9ob3N0bmFtZQogICAgICAgICAge3stIGVsc2UgfX0KICAgICAgICAgIHByZWZlcnJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uOgogICAgICAgICAgLSB3ZWlnaHQ6IDEwMAogICAgICAgICAgICBwb2RBZmZpbml0eVRlcm06CiAgICAgICAgICAgICAgdG9wb2xvZ3lLZXk6IGt1YmVybmV0ZXMuaW8vaG9zdG5hbWUKICAgICAgICAgICAgICBsYWJlbFNlbGVjdG9yOgogICAgICAgICAgICAgICAgbWF0Y2hMYWJlbHM6CiAgICAgICAgICAgICAgICAgIGFwcDoge3sgdGVtcGxhdGUgImNvbmNvdXJzZS53b3JrZXIuZnVsbG5hbWUiIC4gfX0KICAgICAgICAgICAgICAgICAgcmVsZWFzZToge3sgLlJlbGVhc2UuTmFtZSB8IHF1b3RlIH19CiAgICAgICAgICB7ey0gZW5kIH19CiAgICAgIHZvbHVtZXM6Cnt7LSBpZiAuVmFsdWVzLndvcmtlci5hZGRpdGlvbmFsVm9sdW1lcyB9fQp7eyB0b1lhbWwgLlZhbHVlcy53b3JrZXIuYWRkaXRpb25hbFZvbHVtZXMgfCBpbmRlbnQgOCB9fQp7ey0gZW5kIH19CiAgICAgICAgLSBuYW1lOiBjb25jb3Vyc2Uta2V5cwogICAgICAgICAgc2VjcmV0OgogICAgICAgICAgICBzZWNyZXROYW1lOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLmNvbmNvdXJzZS5mdWxsbmFtZSIgLiB9fQogICAgICAgICAgICBkZWZhdWx0TW9kZTogMDQwMAogICAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgICAtIGtleTogaG9zdC1rZXktcHViCiAgICAgICAgICAgICAgICBwYXRoOiBob3N0X2tleS5wdWIKICAgICAgICAgICAgICAtIGtleTogd29ya2VyLWtleQogICAgICAgICAgICAgICAgcGF0aDogd29ya2VyX2tleQogICAgICAgICAgICAgIC0ga2V5OiB3b3JrZXIta2V5LXB1YgogICAgICAgICAgICAgICAgcGF0aDogd29ya2VyX2tleS5wdWIKe3stIGRlZmluZSAiY29uY291cnNlLmFyZS10aGVyZS1hZGRpdGlvbmFsLXZvbHVtZXMud2l0aC10aGUtbmFtZS5jb25jb3Vyc2Utd29yay1kaXIiIH19CiAge3stIHJhbmdlIC5WYWx1ZXMud29ya2VyLmFkZGl0aW9uYWxWb2x1bWVzIH19CiAgICB7ey0gaWYgLm5hbWUgfCBlcSAiY29uY291cnNlLXdvcmstZGlyIiB9fQogICAgICB7ey0gLm5hbWUgfX0KICAgIHt7LSBlbmQgfX0KICB7ey0gZW5kIH19Cnt7LSBlbmQgfX0KICB7ey0gaWYgLlZhbHVlcy5wZXJzaXN0ZW5jZS5lbmFibGVkIH19CiAgdm9sdW1lQ2xhaW1UZW1wbGF0ZXM6CiAgICAtIG1ldGFkYXRhOgogICAgICAgIG5hbWU6IGNvbmNvdXJzZS13b3JrLWRpcgogICAgICBzcGVjOgogICAgICAgIGFjY2Vzc01vZGVzOgogICAgICAgICAgLSB7eyAuVmFsdWVzLnBlcnNpc3RlbmNlLndvcmtlci5hY2Nlc3NNb2RlIHwgcXVvdGUgfX0KICAgICAgICByZXNvdXJjZXM6CiAgICAgICAgICByZXF1ZXN0czoKICAgICAgICAgICAgc3RvcmFnZToge3sgLlZhbHVlcy5wZXJzaXN0ZW5jZS53b3JrZXIuc2l6ZSB8IHF1b3RlIH19CiAgICAgIHt7LSBpZiAuVmFsdWVzLnBlcnNpc3RlbmNlLndvcmtlci5zdG9yYWdlQ2xhc3MgfX0KICAgICAge3stIGlmIChlcSAiLSIgLlZhbHVlcy5wZXJzaXN0ZW5jZS53b3JrZXIuc3RvcmFnZUNsYXNzKSB9fQogICAgICAgIHN0b3JhZ2VDbGFzc05hbWU6ICIiCiAgICAgIHt7LSBlbHNlIH19CiAgICAgICAgc3RvcmFnZUNsYXNzTmFtZTogInt7IC5WYWx1ZXMucGVyc2lzdGVuY2Uud29ya2VyLnN0b3JhZ2VDbGFzcyB9fSIKICAgICAge3stIGVuZCB9fQogICAgICB7ey0gZW5kIH19CiAge3stIGVsc2UgfX0KICAgICAge3sgaWYgaW5jbHVkZSAiY29uY291cnNlLmFyZS10aGVyZS1hZGRpdGlvbmFsLXZvbHVtZXMud2l0aC10aGUtbmFtZS5jb25jb3Vyc2Utd29yay1kaXIiIC4gfCBub3QgfX0KICAgICAgICAtIG5hbWU6IGNvbmNvdXJzZS13b3JrLWRpcgogICAgICAgICAgZW1wdHlEaXI6CiAgICAgICAgICAgIHt7LSBpZiAuVmFsdWVzLndvcmtlci5lbXB0eURpclNpemUgfX0KICAgICAgICAgICAgc2l6ZUxpbWl0OiB7eyAuVmFsdWVzLndvcmtlci5lbXB0eURpclNpemUgfCBxdW90ZSB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgIHt7LSBlbmQgfX0KICB7ey0gZW5kIH19Cnt7LSBpZiBzZW12ZXJDb21wYXJlICJeMS43LTAiIC5DYXBhYmlsaXRpZXMuS3ViZVZlcnNpb24uR2l0VmVyc2lvbiB9fQogIHVwZGF0ZVN0cmF0ZWd5OgogICAgdHlwZToge3sgLlZhbHVlcy53b3JrZXIudXBkYXRlU3RyYXRlZ3kgfX0Ke3stIGVuZCB9fQogIHBvZE1hbmFnZW1lbnRQb2xpY3k6IHt7IC5WYWx1ZXMud29ya2VyLnBvZE1hbmFnZW1lbnRQb2xpY3kgfX0K" 111 }, 112 { 113 "filePath": "templates/worker-svc.yaml", 114 "fileContents": "IyMgQSBIZWFkbGVzcyBTZXJ2aWNlIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgYSBTdGF0ZWZ1bFNldAojIyByZWY6IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3R1dG9yaWFscy9zdGF0ZWZ1bC1hcHBsaWNhdGlvbi9iYXNpYy1zdGF0ZWZ1bC1zZXQvCiMjCmFwaVZlcnNpb246IHYxCmtpbmQ6IFNlcnZpY2UKbWV0YWRhdGE6CiAgbmFtZToge3sgdGVtcGxhdGUgImNvbmNvdXJzZS53b3JrZXIuZnVsbG5hbWUiIC4gfX0KICBsYWJlbHM6CiAgICBhcHA6IHt7IHRlbXBsYXRlICJjb25jb3Vyc2Uud29ya2VyLmZ1bGxuYW1lIiAuIH19CiAgICBjaGFydDogInt7IC5DaGFydC5OYW1lIH19LXt7IC5DaGFydC5WZXJzaW9uIH19IgogICAgcmVsZWFzZTogInt7IC5SZWxlYXNlLk5hbWUgfX0iCiAgICBoZXJpdGFnZTogInt7IC5SZWxlYXNlLlNlcnZpY2UgfX0iCnNwZWM6CiAgdHlwZTogQ2x1c3RlcklQCiAgY2x1c3RlcklQOiBOb25lCiAgIyMgV2UgZG8gTk9UIGV4cG9zZSBhbnkgcG9ydCBhcyB3b3JrZXJzIHdpbGwgZm9yd2FyZCBjb25uZWN0aW9ucyB3aXRoIHRoZSBBVEMgdGhyb3VnaCBhIFRTQSByZXZlcnNlLXR1bm5lbAogICMjIHJlZjogaHR0cHM6Ly9jb25jb3Vyc2UtY2kub3JnL2FyY2hpdGVjdHVyZS5odG1sI2FyY2hpdGVjdHVyZS13b3JrZXIKICAjIwogIHBvcnRzOiBbXQogIHNlbGVjdG9yOgogICAgYXBwOiB7eyB0ZW1wbGF0ZSAiY29uY291cnNlLndvcmtlci5mdWxsbmFtZSIgLiB9fQo=" 115 }, 116 { 117 "filePath": "values.yaml", 118 "fileContents": "IyMgRGVmYXVsdCB2YWx1ZXMgZm9yIENvbmNvdXJzZSBIZWxtIENoYXJ0LgojIyBUaGlzIGlzIGEgWUFNTC1mb3JtYXR0ZWQgZmlsZS4KIyMgRGVjbGFyZSB2YXJpYWJsZXMgdG8gYmUgcGFzc2VkIGludG8geW91ciB0ZW1wbGF0ZXMuCgojIyBPdmVycmlkZSB0aGUgbmFtZSBvZiB0aGUgQ2hhcnQuCiMjCiMgbmFtZU92ZXJyaWRlOgoKIyMgQ29uY291cnNlIGltYWdlLgojIwppbWFnZTogY29uY291cnNlL2NvbmNvdXJzZQoKIyMgQ29uY291cnNlIGltYWdlIHZlcnNpb24uCiMjIHJlZjogaHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9yL2NvbmNvdXJzZS9jb25jb3Vyc2UvdGFncy8KIyMKaW1hZ2VUYWc6ICI0LjIuMiIKCiMjIFNwZWNpZmljIGltYWdlIGRpZ2VzdCB0byB1c2UgaW4gcGxhY2Ugb2YgYSB0YWcuCiMjIHJlZjogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9vdmVydmlldy8jY29udGFpbmVyLWltYWdlcwojIwojIGltYWdlRGlnZXN0OiBzaGEyNTY6NTRlYTM1MTgwOGI1NWVjYzE0YWY2NTkwNzMyOTMyZTJhNmEwZWQ4ZjZkMTBmNDVlOGJlM2I1MTE2NWQ1NTI2YQoKIyMgU3BlY2lmeSBhIGltYWdlUHVsbFBvbGljeTogJ0Fsd2F5cycgaWYgaW1hZ2VUYWcgaXMgJ2xhdGVzdCcsIGVsc2Ugc2V0IHRvICdJZk5vdFByZXNlbnQnLgojIyByZWY6IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3VzZXItZ3VpZGUvaW1hZ2VzLyNwcmUtcHVsbGluZy1pbWFnZXMKIyMKaW1hZ2VQdWxsUG9saWN5OiBJZk5vdFByZXNlbnQKCiMjIE9wdGlvbmFsbHkgc3BlY2lmeSBhbiBhcnJheSBvZiBpbWFnZVB1bGxTZWNyZXRzLgojIyBTZWNyZXRzIG11c3QgYmUgbWFudWFsbHkgY3JlYXRlZCBpbiB0aGUgbmFtZXNwYWNlLgojIyByZWY6IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3Rhc2tzL2NvbmZpZ3VyZS1wb2QtY29udGFpbmVyL3B1bGwtaW1hZ2UtcHJpdmF0ZS1yZWdpc3RyeS8KIyMKIyBpbWFnZVB1bGxTZWNyZXRzOgojICAgLSBteVJlZ2lzdHJLZXlTZWNyZXROYW1lCgojIyBDb25maWd1cmF0aW9uIHZhbHVlcyBmb3IgQ29uY291cnNlLgojIyByZWY6IGh0dHBzOi8vY29uY291cnNlLWNpLm9yZy9zZXR0aW5nLXVwLmh0bWwKIyMKY29uY291cnNlOgogIHdlYjoKICAgICMjIE1pbmltdW0gbGV2ZWwgb2YgbG9ncyB0byBzZWUuCiAgICAjIGxvZ0xldmVsOiBpbmZvCiAgICAjIyBJUCBhZGRyZXNzIG9uIHdoaWNoIHRvIGxpc3RlbiBmb3Igd2ViIHRyYWZmaWMuCiAgICAjIGJpbmRJcDogMC4wLjAuMAogICAgIyMgUG9ydCBvbiB3aGljaCB0byBsaXN0ZW4gZm9yIEhUVFAgdHJhZmZpYy4KICAgIGJpbmRQb3J0OiA4MDgwCiAgICAjIyBUTFMgY29uZmlndXJhdGlvbnMgZm9yIHRoZSB3ZWIgY29tcG9uZW50IHRvIGJlIGFibGUgdG8gc2VydmUgSFRUUFMgdHJhZmZpYy4KICAgICMjIE9uY2UgZW5hYmxlZCwgY29uc3VtZXMgdGhlIGNlcnRpZmljYXRlcyBzZXQgdmlhIHNlY3JldHMuCiAgICAjCiAgICB0bHM6CiAgICAgIGVuYWJsZWQ6IGZhbHNlCiAgICAgICMjIFBvcnQgb24gd2hpY2ggdG8gbGlzdGVuIGZvciBIVFRQUyB0cmFmZmljLgogICAgICAjIGJpbmRQb3J0OgogICAgIyMgVVJMIHVzZWQgdG8gcmVhY2ggYW55IEFUQyBmcm9tIHRoZSBvdXRzaWRlIHdvcmxkLgogICAgIyBleHRlcm5hbFVybDogaHR0cDovLzEyNy4wLjAuMTo4MDgwCiAgICAjIyBVUkwgdXNlZCB0byByZWFjaCB0aGlzIEFUQyBmcm9tIG90aGVyIEFUQ3MgaW4gdGhlIGNsdXN0ZXIuCiAgICAjIHBlZXJVcmw6IGh0dHA6Ly8xMjcuMC4wLjE6ODA4MAogICAgIyMgRW5hYmxlIGVuY3J5cHRpb24gb2YgcGlwZWxpbmUgY29uZmlndXJhdGlvbi4gRW5jcnlwdGlvbiBrZXlzIGNhbiBiZSBzZXQgdmlhIHNlY3JldHMuCiAgICAjIyBTZWUgaHR0cHM6Ly9jb25jb3Vyc2UtY2kub3JnL2VuY3J5cHRpb24uaHRtbAogICAgIyMKICAgIGVuY3J5cHRpb246CiAgICAgIGVuYWJsZWQ6IGZhbHNlCiAgICBsb2NhbEF1dGg6CiAgICAgIGVuYWJsZWQ6IHRydWUKICAgICMjIElQIGFkZHJlc3Mgb24gd2hpY2ggdG8gbGlzdGVuIGZvciB0aGUgcHByb2YgZGVidWdnZXIgZW5kcG9pbnRzLgogICAgIyBkZWJ1Z0JpbmRJcDogMTI3LjAuMC4xCiAgICAjIyBQb3J0IG9uIHdoaWNoIHRvIGxpc3RlbiBmb3IgdGhlIHBwcm9mIGRlYnVnZ2VyIGVuZHBvaW50cy4KICAgICMgZGVidWdCaW5kUG9ydDogODA3OQogICAgIyMgTGVuZ3RoIG9mIHRpbWUgZm9yIGEgaW50ZXJjZXB0ZWQgc2Vzc2lvbiB0byBiZSBpZGxlIGJlZm9yZSB0ZXJtaW5hdGluZy4KICAgICMgaW50ZXJjZXB0SWRsZVRpbWVvdXQ6IDBtCiAgICAjIyBUaW1lIGxpbWl0IG9uIGNoZWNraW5nIGZvciBuZXcgdmVyc2lvbnMgb2YgcmVzb3VyY2VzLgogICAgIyBnbG9iYWxSZXNvdXJjZUNoZWNrVGltZW91dDogMWgKICAgICMjIEludGVydmFsIG9uIHdoaWNoIHRvIGNoZWNrIGZvciBuZXcgdmVyc2lvbnMgb2YgcmVzb3VyY2VzLgogICAgIyByZXNvdXJjZUNoZWNraW5nSW50ZXJ2YWw6IDFtCiAgICAjIyBJbnRlcnZhbCBvbiB3aGljaCB0byBjaGVjayBmb3IgbmV3IHZlcnNpb25zIG9mIHJlc291cmNlIHR5cGVzLgogICAgIyByZXNvdXJjZVR5cGVDaGVja2luZ0ludGVydmFsOiAxbQogICAgIyMgTWV0aG9kIGJ5IHdoaWNoIGEgd29ya2VyIGlzIHNlbGVjdGVkIGR1cmluZyBjb250YWluZXIgcGxhY2VtZW50LgogICAgIyBjb250YWluZXJQbGFjZW1lbnRTdHJhdGVneTogdm9sdW1lLWxvY2FsaXR5CiAgICAjIyBIb3cgbG9uZyB0byB3YWl0IGZvciBCYWdnYWdlY2xhaW0gdG8gc2VuZCB0aGUgcmVzcG9uc2UgaGVhZGVyLgogICAgIyBiYWdnYWdlY2xhaW1SZXNwb25zZUhlYWRlclRpbWVvdXQ6IDFtCiAgICAjIyBEaXJlY3RvcnkgY29udGFpbmluZyBkb3dubG9hZGFibGUgQ0xJIGJpbmFyaWVzLgogICAgIyBjbGlBcnRpZmFjdHNEaXI6CiAgICAjIyBMb2cgZGF0YWJhc2UgcXVlcmllcy4KICAgICMgbG9nRGJRdWVyaWVzOgogICAgIyMgSW50ZXJ2YWwgb24gd2hpY2ggdG8gcnVuIGJ1aWxkIHRyYWNraW5nLgogICAgIyBidWlsZFRyYWNrZXJJbnRlcnZhbDogMTBzCiAgICAjIyBEZWZhdWx0IGJ1aWxkIGxvZ3MgdG8gcmV0YWluLCAwIG1lYW5zIGFsbAogICAgIyBkZWZhdWx0QnVpbGRMb2dzVG9SZXRhaW46CiAgICAjIyBNYXhpbXVtIGJ1aWxkIGxvZ3MgdG8gcmV0YWluLCAwIG1lYW5zIG5vdCBzcGVjaWZpZWQuIFdpbGwgb3ZlcnJpZGUgdmFsdWVzIGNvbmZpZ3VyZWQgaW4gam9icwogICAgIyBtYXhCdWlsZExvZ3NUb1JldGFpbjoKICAgICMjIERlZmF1bHQgbWF4IG51bWJlciBvZiBjcHUgc2hhcmVzIHBlciB0YXNrLCAwIG1lYW5zIHVubGltaXRlZAogICAgIyBkZWZhdWx0VGFza0NwdUxpbWl0OgogICAgIyMgRGVmYXVsdCBtYXhpbXVtIG1lbW9yeSBwZXIgdGFzaywgMCBtZWFucyB1bmxpbWl0ZWQKICAgICMgZGVmYXVsdFRhc2tNZW1vcnlMaW1pdDoKICAgIHBvc3RncmVzOgogICAgICAjIyBUaGUgaG9zdCB0byBjb25uZWN0IHRvLgogICAgICBob3N0OiAxMjcuMC4wLjEKICAgICAgIyMgVGhlIHBvcnQgdG8gY29ubmVjdCB0by4KICAgICAgcG9ydDogNTQzMgogICAgICAjIyBQYXRoIHRvIGEgVU5JWCBkb21haW4gc29ja2V0IHRvIGNvbm5lY3QgdG8uCiAgICAgICMgc29ja2V0OgogICAgICAjIyBXaGV0aGVyIG9yIG5vdCB0byB1c2UgU1NMLgogICAgICBzc2xtb2RlOiBkaXNhYmxlCiAgICAgICMjIERpYWxpbmcgdGltZW91dC4gKDAgbWVhbnMgd2FpdCBpbmRlZmluaXRlbHkpCiAgICAgIGNvbm5lY3RUaW1lb3V0OiA1bQogICAgICAjIyBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgdG8gdXNlLgogICAgICBkYXRhYmFzZTogYXRjCgogICAga3ViZXJuZXRlczoKCiAgICAgICMjIEVuYWJsZSB0aGUgdXNlIG9mIGluLWNsdXN0ZXIgS3ViZXJuZXRlcyBTZWNyZXRzLgogICAgICAjIwogICAgICBlbmFibGVkOiB0cnVlCgogICAgICAjIyBQcmVmaXggdG8gdXNlIGZvciBLdWJlcm5ldGVzIG5hbWVzcGFjZXMgdW5kZXIgd2hpY2ggc2VjcmV0cyB3aWxsIGJlIGxvb2tlZCB1cC4gRGVmYXVsdHMgdG8KICAgICAgIyMgdGhlIFJlbGVhc2UgbmFtZSBoeXBoZW4sIGUuZy4gIm15LXJlbGVhc2UtIiBwcm9kdWNlcyBuYW1lc3BhY2UgIm15LXJlbGVhc2UtbWFpbiIgZm9yIHRoZQogICAgICAjIyAibWFpbiIgQ29uY291cnNlIHRlYW0uCiAgICAgICMjCiAgICAgICMjIG5hbWVzcGFjZVByZWZpeDoKCiAgICAgICMjIFRlYW1zIHRvIGNyZWF0ZSBuYW1lc3BhY2VzIGZvciB0byBob2xkIHNlY3JldHMuCiAgICAgIHRlYW1zOgogICAgICAgIC0gbWFpbgoKICAgICAgIyMgQ3JlYXRlIHRoZSBLdWJlcm5ldGVzIG5hbWVzcGFjZSBmb3IgZWFjaCB0ZWFtIGxpc3RlZCBhYm92ZS4KICAgICAgY3JlYXRlVGVhbU5hbWVzcGFjZXM6IHRydWUKCiAgICAgICMjIFdoZW4gdHJ1ZSwgbmFtZXNwYWNlcyBhcmUgbm90IGRlbGV0ZWQgd2hlbiB0aGUgcmVsZWFzZSBpcyBkZWxldGVkLgogICAgICAjIyBJcnJlbGV2YW50IGlmIHRoZSBuYW1lc3BhY2VzIGFyZSBub3QgY3JlYXRlZCBieSB0aGlzIGNoYXJ0LgogICAgICBrZWVwTmFtZXNwYWNlczogdHJ1ZQoKICAgICAgIyMgUGF0aCB0byBLdWJlcm5ldGVzIGNvbmZpZyB3aGVuIHJ1bm5pbmcgQVRDIG91dHNpZGUgS3ViZXJuZXRlcy4KICAgICAgIyBjb25maWdQYXRoOgoKICAgIGF3c1NlY3JldHNNYW5hZ2VyOgogICAgICAjIyBFbmFibGUgdGhlIHVzZSBvZiBBV1MgU2VjcmV0cyBNYW5hZ2VyLgogICAgICAjIwogICAgICBlbmFibGVkOiBmYWxzZQoKICAgICAgIyMgQVdTIHJlZ2lvbiB0byB1c2Ugd2hlbiByZWFkaW5nIGZyb20gU2VjcmV0cyBNYW5hZ2VyCiAgICAgICMjCiAgICAgICMgcmVnaW9uOgoKICAgICAgIyMgcGlwZWxpbmUtc3BlY2lmaWMgdGVtcGxhdGUgZm9yIFNlY3JldHMgTWFuYWdlciBwYXJhbWV0ZXJzLCBkZWZhdWx0cyB0bzogL2NvbmNvdXJzZS97dGVhbX0ve3BpcGVsaW5lfS97c2VjcmV0fQogICAgICAjIwogICAgICAjIHBpcGVsaW5lU2VjcmV0VGVtcGxhdGU6CgogICAgICAjIyB0ZWFtLXNwZWNpZmljIHRlbXBsYXRlIGZvciBTZWNyZXRzIE1hbmFnZXIgcGFyYW1ldGVycywgZGVmYXVsdHMgdG86IC9jb25jb3Vyc2Uve3RlYW19L3tzZWNyZXR9CiAgICAgICMjCiAgICAgICMgdGVhbVNlY3JldFRlbXBsYXRlOiAnJwoKICAgIGF3c1NzbToKICAgICAgIyMgRW5hYmxlIHRoZSB1c2Ugb2YgQVdTIFNTTS4KICAgICAgIyMKICAgICAgZW5hYmxlZDogZmFsc2UKCiAgICAgICMjIEFXUyByZWdpb24gdG8gdXNlIHdoZW4gcmVhZGluZyBmcm9tIFNTTQogICAgICAjIwogICAgICAjIHJlZ2lvbjoKCiAgICAgICMjIHBpcGVsaW5lLXNwZWNpZmljIHRlbXBsYXRlIGZvciBTU00gcGFyYW1ldGVycywgZGVmYXVsdHMgdG86IC9jb25jb3Vyc2Uve3RlYW19L3twaXBlbGluZX0ve3NlY3JldH0KICAgICAgIyMKICAgICAgIyBwaXBlbGluZVNlY3JldFRlbXBsYXRlOgoKICAgICAgIyMgdGVhbS1zcGVjaWZpYyB0ZW1wbGF0ZSBmb3IgU1NNIHBhcmFtZXRlcnMsIGRlZmF1bHRzIHRvOiAvY29uY291cnNlL3t0ZWFtfS97c2VjcmV0fQogICAgICAjIwogICAgICAjIHRlYW1TZWNyZXRUZW1wbGF0ZTogJycKCgogICAgdmF1bHQ6CiAgICAgIGVuYWJsZWQ6IGZhbHNlCgogICAgICAjIyBVUkwgcG9pbnRpbmcgdG8gdmF1bHQgYWRkciAoaS5lLiBodHRwOi8vdmF1bHQ6ODIwMCkuCiAgICAgICMjCiAgICAgICMgdXJsOgoKICAgICAgIyMgdmF1bHQgcGF0aCB1bmRlciB3aGljaCB0byBuYW1lc3BhY2UgY3JlZGVudGlhbCBsb29rdXAsIGRlZmF1bHRzIHRvIC9jb25jb3Vyc2UuCiAgICAgICMjCiAgICAgIHBhdGhQcmVmaXg6IC9jb25jb3Vyc2UKCiAgICAgICMjIGlmIHRoZSBWYXVsdCBzZXJ2ZXIgaXMgdXNpbmcgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSwgc2V0IHRoaXMgdG8gdHJ1ZSwKICAgICAgIyMgYW5kIHByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlIGNlcnQgaW4gc2VjcmV0cy4KICAgICAgIyMKICAgICAgIyB1c2VDYUNlcnQ6CgogICAgICAjIyB2YXVsdCBhdXRoZW50aWNhdGlvbiBiYWNrZW5kLCBsZWF2ZSB0aGlzIGJsYW5rIGlmIHVzaW5nIGFuIGluaXRpYWwgcGVyaW9kaWMgdG9rZW4KICAgICAgIyMgY3VycmVudGx5IHN1cHBvcnRlZCBiYWNrZW5kczogdG9rZW4sIGFwcHJvbGUsIGNlcnQuCiAgICAgICMjCiAgICAgICMgYXV0aEJhY2tlbmQ6CgogICAgICAjIyBDYWNoZSByZXR1cm5lZCBzZWNyZXRzIGZvciB0aGVpciBsZWFzZSBkdXJhdGlvbiBpbiBtZW1vcnkKICAgICAgIyBjYWNoZToKICAgICAgIyMgSWYgdGhlIGNhY2hlIGlzIGVuYWJsZWQsIGFuZCB0aGlzIGlzIHNldCwgb3ZlcnJpZGUgc2VjcmV0cyBsZWFzZSBkdXJhdGlvbiB3aXRoIGEgbWF4aW11bSB2YWx1ZQogICAgICAjIG1heExlYXNlOgogICAgICAjIyBQYXRoIHRvIGEgZGlyZWN0b3J5IG9mIFBFTUVuY29kZWQgQ0EgY2VydCBmaWxlcyB0byB2ZXJpZnkgdGhlIHZhdWx0IHNlcnZlciBTU0wgY2VydC4KICAgICAgIyBjYVBhdGg6CiAgICAgICMjIElmIHNldCwgaXMgdXNlZCB0byBzZXQgdGhlIFNOSSBob3N0IHdoZW4gY29ubmVjdGluZyB2aWEgVExTLgogICAgICAjIHNlcnZlck5hbWU6CiAgICAgICMjIEVuYWJsZSBpbnNlY3VyZSBTU0wgdmVyaWZpY2F0aW9uLgogICAgICAjIGluc2VjdXJlU2tpcFZlcmlmeToKICAgICAgICAjIyBDbGllbnQgdG9rZW4gZm9yIGFjY2Vzc2luZyBzZWNyZXRzIHdpdGhpbiB0aGUgVmF1bHQgc2VydmVyLgogICAgICAgICMgY2xpZW50VG9rZW46CiAgICAgICMjIEF1dGggYmFja2VuZCB0byB1c2UgZm9yIGxvZ2dpbmcgaW4gdG8gVmF1bHQuCiAgICAgICMgYXV0aEJhY2tlbmQ6CiAgICAgICMjIFRpbWUgYWZ0ZXIgd2hpY2ggdG8gZm9yY2UgYSByZUxvZ2luLiBJZiBub3Qgc2V0LCB0aGUgdG9rZW4gd2lsbCBqdXN0IGJlIGNvbnRpbnVvdXNseSByZW5ld2VkLgogICAgICAjIGF1dGhCYWNrZW5kTWF4VHRsOgogICAgICAjIyBUaGUgbWF4aW11bSB0aW1lIGJldHdlZW4gcmV0cmllcyB3aGVuIGxvZ2dpbmcgaW4gb3IgcmVBdXRoaW5nIGEgc2VjcmV0LgogICAgICByZXRyeU1heDogNW0KICAgICAgIyMgVGhlIGluaXRpYWwgdGltZSBiZXR3ZWVuIHJldHJpZXMgd2hlbiBsb2dnaW5nIGluIG9yIHJlQXV0aGluZyBhIHNlY3JldC4KICAgICAgcmV0cnlJbml0aWFsOiAxcwogICAgIyMgRG9uJ3QgYWN0dWFsbHkgZG8gYW55IGF1dG9tYXRpYyBzY2hlZHVsaW5nIG9yIGNoZWNraW5nLgogICAgIyBub29wOgogICAgc3RhdGljV29ya2VyOgogICAgICBlbmFibGVkOiBmYWxzZQogICAgICAjIyBBIEdhcmRlbiBBUEkgZW5kcG9pbnQgdG8gcmVnaXN0ZXIgYXMgYSB3b3JrZXIuCiAgICAgIGdhcmRlblVybDoKICAgICAgIyMgQSBCYWdnYWdlY2xhaW0gQVBJIGVuZHBvaW50IHRvIHJlZ2lzdGVyIHdpdGggdGhlIHdvcmtlci4KICAgICAgYmFnZ2FnZWNsYWltVXJsOgogICAgICAjIyBBIHJlc291cmNlIHR5cGUgdG8gYWR2ZXJ0aXNlIGZvciB0aGUgd29ya2VyLiBDYW4gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgogICAgICByZXNvdXJjZToKICAgIG1ldHJpY3M6CiAgICAgICMjIEhvc3Qgc3RyaW5nIHRvIGF0dGFjaCB0byBlbWl0dGVkIG1ldHJpY3MuCiAgICAgIGhvc3ROYW1lOgogICAgICAjIyBBIGtleVZhbHVlIGF0dHJpYnV0ZSB0byBhdHRhY2ggdG8gZW1pdHRlZCBtZXRyaWNzLiBDYW4gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgogICAgICBhdHRyaWJ1dGU6CiAgICBkYXRhZG9nOgogICAgICBlbmFibGVkOiBmYWxzZQogICAgICAjIyBVc2UgSVAgb2Ygbm9kZSB0aGUgcG9kIGlzIHNjaGVkdWxlZCBvbiwgb3ZlcnJpZGVzIGBhZ2VudEhvc3RgCiAgICAgIGFnZW50SG9zdFVzZUhvc3RJUDogZmFsc2UKICAgICAgIyMgRGF0YWRvZyBhZ2VudCBob3N0IHRvIGV4cG9zZSBkb2dzdGF0c2QgbWV0cmljcwogICAgICBhZ2VudEhvc3Q6IDEyNy4wLjAuMQogICAgICAjIyBEYXRhZG9nIGFnZW50IHBvcnQgdG8gZXhwb3NlIGRvZ3N0YXRzZCBtZXRyaWNzCiAgICAgIGFnZW50UG9ydDogODEyNQogICAgICAjIyBQcmVmaXggZm9yIGFsbCBtZXRyaWNzIHRvIGVhc2lseSBmaW5kIHRoZW0gaW4gRGF0YWRvZwogICAgICAjIHByZWZpeDogY29uY291cnNlZGV2CiAgICBpbmZsdXhkYjoKICAgICAgZW5hYmxlZDogZmFsc2UKICAgICAgIyMgSW5mbHV4REIgc2VydmVyIGFkZHJlc3MgdG8gZW1pdCBwb2ludHMgdG8uCiAgICAgIHVybDogaHR0cDovLzEyNy4wLjAuMTo4MDg2CiAgICAgICMjIEluZmx1eERCIGRhdGFiYXNlIHRvIHdyaXRlIHBvaW50cyB0by4KICAgICAgZGF0YWJhc2U6IGNvbmNvdXJzZQogICAgICAjIyBJbmZsdXhEQiBzZXJ2ZXIgdXNlcm5hbWUuCiAgICAgICMgdXNlcm5hbWU6CiAgICAgICMjIFNraXAgU1NMIHZlcmlmaWNhdGlvbiB3aGVuIGVtaXR0aW5nIHRvIEluZmx1eERCLgogICAgICBpbnNlY3VyZVNraXBWZXJpZnk6IGZhbHNlCiAgICAjIyBFbWl0IG1ldHJpY3MgdG8gbG9ncy4KICAgICMgZW1pdFRvTG9nczoKICAgIG5ld3JlbGljOgogICAgICBlbmFibGVkOiBmYWxzZQogICAgICAjIyBOZXcgUmVsaWMgQWNjb3VudCBJRAogICAgICAjIGFjY291bnRJZDoKICAgICAgIyMgTmV3IFJlbGljIEluc2lnaHRzIEFQSSBLZXkKICAgICAgIyBhcGlLZXk6CiAgICAgICMjIEFuIG9wdGlvbmFsIHByZWZpeCBmb3IgZW1pdHRlZCBOZXcgUmVsaWMgZXZlbnRzCiAgICAgICMgc2VydmljZVByZWZpeDoKICAgIHByb21ldGhldXM6CiAgICAgIGVuYWJsZWQ6IGZhbHNlCiAgICAgICMjIElQIHRvIGxpc3RlbiBvbiB0byBleHBvc2UgUHJvbWV0aGV1cyBtZXRyaWNzLgogICAgICBiaW5kSXA6ICIwLjAuMC4wIgogICAgICAjIyBQb3J0IHRvIGxpc3RlbiBvbiB0byBleHBvc2UgUHJvbWV0aGV1cyBtZXRyaWNzLgogICAgICBiaW5kUG9ydDogOTM5MQogICAgcmllbWFubjoKICAgICAgZW5hYmxlZDogZmFsc2UKICAgICAgIyMgUmllbWFubiBzZXJ2ZXIgYWRkcmVzcyB0byBlbWl0IG1ldHJpY3MgdG8uCiAgICAgICMgaG9zdDoKICAgICAgIyMgUG9ydCBvZiB0aGUgUmllbWFubiBzZXJ2ZXIgdG8gZW1pdCBtZXRyaWNzIHRvLgogICAgICBwb3J0OiA1NTU1CiAgICAgICMjIEFuIG9wdGlvbmFsIHByZWZpeCBmb3IgZW1pdHRlZCBSaWVtYW5uIHNlcnZpY2VzCiAgICAgICMgc2VydmljZVByZWZpeDoKICAgICAgIyMgVGFnIHRvIGF0dGFjaCB0byBlbWl0dGVkIG1ldHJpY3MuIENhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuCiAgICAgICMgdGFnOgogICAgIyMgVGhlIHZhbHVlIHRvIHNldCBmb3IgWEZyYW1lLU9wdGlvbnMuIElmIG9taXR0ZWQsIHRoZSBoZWFkZXIgaXMgbm90IHNldC4KICAgICMgeEZyYW1lT3B0aW9uczoKICAgIGdjOgogICAgICBvdmVycmlkZURlZmF1bHRzOiBmYWxzZQogICAgICAjIyBJbnRlcnZhbCBvbiB3aGljaCB0byBwZXJmb3JtIGdhcmJhZ2UgY29sbGVjdGlvbi4KICAgICAgaW50ZXJ2YWw6IDMwcwogICAgICAjIyBHcmFjZSBwZXJpb2QgYmVmb3JlIHJlYXBpbmcgb25lT2ZmIHRhc2sgY29udGFpbmVycwogICAgICBvbmVPZmZHcmFjZVBlcmlvZDogNW0KICAgIHN5c2xvZzoKICAgICAgZW5hYmxlZDogZmFsc2UKICAgICAgIyMgQ2xpZW50IGhvc3RuYW1lIHdpdGggd2hpY2ggdGhlIGJ1aWxkIGxvZ3Mgd2lsbCBiZSBzZW50IHRvIHRoZSBzeXNsb2cgc2VydmVyLgogICAgICBob3N0TmFtZTogYXRjLXN5c2xvZy1kcmFpbmVyCiAgICAgICMjIFJlbW90ZSBzeXNsb2cgc2VydmVyIGFkZHJlc3Mgd2l0aCBwb3J0IChFeGFtcGxlOiAwLjAuMC4wOjUxNCkuCiAgICAgICMgYWRkcmVzczoKICAgICAgIyMgVHJhbnNwb3J0IHByb3RvY29sIGZvciBzeXNsb2cgbWVzc2FnZXMgKEN1cnJlbnRseSBzdXBwb3J0aW5nIHRjcCwgdWRwICYgdGxzKS4KICAgICAgIyB0cmFuc3BvcnQ6CiAgICAgICMjIEludGVydmFsIG92ZXIgd2hpY2ggY2hlY2tpbmcgaXMgZG9uZSBmb3IgbmV3IGJ1aWxkIGxvZ3MgdG8gc2VuZCB0byBzeXNsb2cgc2VydmVyIChkdXJhdGlvbiBtZWFzdXJlbWVudCB1bml0cyBhcmUgcy9tL2g7IGVnLiAzMHMvMzBtLzFoKQogICAgICBkcmFpbkludGVydmFsOiAzMHMKICAgICAgIyMgaWYgdGhlIHN5c2xvZyBzZXJ2ZXIgaXMgdXNpbmcgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSwgc2V0IHRoaXMgdG8gdHJ1ZSwKICAgICAgIyMgYW5kIHByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlIGNlcnQgaW4gc2VjcmV0cy4KICAgICAgdXNlQ2FDZXJ0OiBmYWxzZQogICAgYXV0aDoKICAgICAgIyMgRm9yY2Ugc2VuZGluZyBzZWN1cmUgZmxhZyBvbiBodHRwIGNvb2tpZXMKICAgICAgIyBjb29raWVTZWN1cmU6CiAgICAgICMjIExlbmd0aCBvZiB0aW1lIGZvciB3aGljaCB0b2tlbnMgYXJlIHZhbGlkLiBBZnRlcndhcmRzLCB1c2VycyB3aWxsIGhhdmUgdG8gbG9nIGJhY2sgaW4uCiAgICAgICMgZHVyYXRpb246IDI0aAogICAgICBtYWluVGVhbToKICAgICAgICAjIyBMaXN0IG9mIHdoaXRlbGlzdGVkIGxvY2FsIGNvbmNvdXJzZSB1c2Vycy4gVGhlc2UgYXJlIHRoZSB1c2VycyB5b3UndmUgYWRkZWQgYXQgYXRjIHN0YXJ0dXAgd2l0aCB0aGUgYWRkTG9jYWxVc2VyIHNldHRpbmcuCiAgICAgICAgbG9jYWxVc2VyOiAidGVzdCIKICAgICAgICAjIyBTZXR0aW5nIHRoaXMgZmxhZyB3aWxsIHdoaXRlbGlzdCBhbGwgbG9nZ2VkIGluIHVzZXJzIGluIHRoZSBzeXN0ZW0uIEFMTCBPRiBUSEVNLiBJZiwgZm9yIGV4YW1wbGUsIHlvdSd2ZSBjb25maWd1cmVkIEdpdEh1YiwgYW55IHVzZXIgd2l0aCBhIEdpdEh1YiBhY2NvdW50IHdpbGwgaGF2ZSBhY2Nlc3MgdG8geW91ciB0ZWFtLgogICAgICAgICMgYWxsb3dBbGxVc2VyczoKICAgICAgICAjIyBBdXRoZW50aWNhdGlvbiAoTWFpbiBUZWFtKSAoQ2xvdWRGb3VuZHJ5KQogICAgICAgIGNmOgogICAgICAgICAgIyMgTGlzdCBvZiB3aGl0ZWxpc3RlZCBDbG91ZEZvdW5kcnkgdXNlcnMuCiAgICAgICAgICB1c2VyOgogICAgICAgICAgIyMgTGlzdCBvZiB3aGl0ZWxpc3RlZCBDbG91ZEZvdW5kcnkgb3JncwogICAgICAgICAgb3JnOgogICAgICAgICAgIyMgTGlzdCBvZiB3aGl0ZWxpc3RlZCBDbG91ZEZvdW5kcnkgc3BhY2VzCiAgICAgICAgICBzcGFjZToKICAgICAgICAgICMjIChEZXByZWNhdGVkKSBMaXN0IG9mIHdoaXRlbGlzdGVkIENsb3VkRm91bmRyeSBzcGFjZSBndWlkcwogICAgICAgICAgc3BhY2VHdWlkOgogICAgICAgICMjIEF1dGhlbnRpY2F0aW9uIChNYWluIFRlYW0pIChHaXRIdWIpCiAgICAgICAgZ2l0aHViOgogICAgICAgICAgIyMgTGlzdCBvZiB3aGl0ZWxpc3RlZCBHaXRIdWIgdXNlcnMKICAgICAgICAgIHVzZXI6CiAgICAgICAgICAjIyBMaXN0IG9mIHdoaXRlbGlzdGVkIEdpdEh1YiBvcmdzCiAgICAgICAgICBvcmc6CiAgICAgICAgICAjIyBMaXN0IG9mIHdoaXRlbGlzdGVkIEdpdEh1YiB0ZWFtcwogICAgICAgICAgdGVhbToKICAgICAgICAjIyBBdXRoZW50aWNhdGlvbiAoTWFpbiBUZWFtKSAoR2l0TGFiKQogICAgICAgIGdpdGxhYjoKICAgICAgICAgICMjIExpc3Qgb2Ygd2hpdGVsaXN0ZWQgR2l0TGFiIHVzZXJzCiAgICAgICAgICB1c2VyOgogICAgICAgICAgIyMgTGlzdCBvZiB3aGl0ZWxpc3RlZCBHaXRMYWIgZ3JvdXBzCiAgICAgICAgICBncm91cDoKICAgICAgICAjIyBBdXRoZW50aWNhdGlvbiAoTWFpbiBUZWFtKSAoTERBUCkKICAgICAgICBsZGFwOgogICAgICAgICAgIyMgTGlzdCBvZiB3aGl0ZWxpc3RlZCBMREFQIHVzZXJzCiAgICAgICAgICB1c2VyOgogICAgICAgICAgIyMgTGlzdCBvZiB3aGl0ZWxpc3RlZCBMREFQIGdyb3VwcwogICAgICAgICAgZ3JvdXA6CiAgICAgICAgIyMgQXV0aGVudGljYXRpb24gKE1haW4gVGVhbSkgKE9BdXRoMikKICAgICAgICBvYXV0aDoKICAgICAgICAgICMjIExpc3Qgb2Ygd2hpdGVsaXN0ZWQgT0F1dGgyIHVzZXJzCiAgICAgICAgICB1c2VyOgogICAgICAgICAgIyMgTGlzdCBvZiB3aGl0ZWxpc3RlZCBPQXV0aDIgZ3JvdXBzCiAgICAgICAgICBncm91cDoKICAgICAgICAjIyBBdXRoZW50aWNhdGlvbiAoTWFpbiBUZWFtKSAoT0lEQykKICAgICAgICBvaWRjOgogICAgICAgICAgIyMgTGlzdCBvZiB3aGl0ZWxpc3RlZCBPSURDIHVzZXJzCiAgICAgICAgICB1c2VyOgogICAgICAgICAgIyMgTGlzdCBvZiB3aGl0ZWxpc3RlZCBPSURDIGdyb3VwcwogICAgICAgICAgZ3JvdXA6CiAgICAgICMjIEF1dGhlbnRpY2F0aW9uIChDbG91ZEZvdW5kcnkpCiAgICAgIGNmOgogICAgICAgIGVuYWJsZWQ6IGZhbHNlCiAgICAgICAgIyMgKFJlcXVpcmVkKSBUaGUgYmFzZSBBUEkgVVJMIG9mIHlvdXIgQ0YgZGVwbG95bWVudC4gSXQgd2lsbCB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXV0aGVudGljYXRpb24gcHJvdmlkZXIuCiAgICAgICAgIyBhcGlVcmw6IGh0dHBzOi8vYXBpLnJ1bi5waXZvdGFsLmlvCiAgICAgICAgIyMgQ0EgQ2VydGlmaWNhdGUKICAgICAgICAjIHVzZUNhQ2VydDoKICAgICAgICAjIyBTa2lwIFNTTCB2YWxpZGF0aW9uCiAgICAgICAgIyBza2lwU3NsVmFsaWRhdGlvbjoKICAgICAgIyMgQXV0aGVudGljYXRpb24gKEdpdEh1YikKICAgICAgZ2l0aHViOgogICAgICAgIGVuYWJsZWQ6IGZhbHNlCiAgICAgICAgIyMgSG9zdG5hbWUgb2YgR2l0SHViIEVudGVycHJpc2UgZGVwbG95bWVudCAoTm8gc2NoZW1lLCBObyB0cmFpbGluZyBzbGFzaCkKICAgICAgICAjIGhvc3Q6CiAgICAgICAgIyMgQ0EgY2VydGlmaWNhdGUgb2YgR2l0SHViIEVudGVycHJpc2UgZGVwbG95bWVudAogICAgICAgICMgdXNlQ2FDZXJ0OgogICAgICAjIyBBdXRoZW50aWNhdGlvbiAoR2l0TGFiKQogICAgICBnaXRsYWI6CiAgICAgICAgZW5hYmxlZDogZmFsc2UKICAgICAgICAjIyBIb3N0bmFtZSBvZiBHaXRsYWIgRW50ZXJwcmlzZSBkZXBsb3ltZW50IChJbmNsdWRlIHNjaGVtZSwgTm8gdHJhaWxpbmcgc2xhc2gpCiAgICAgICAgIyBob3N0OgogICAgICAjIyBBdXRoZW50aWNhdGlvbiAoTERBUCkKICAgICAgbGRhcDoKICAgICAgICBlbmFibGVkOiBmYWxzZQogICAgICAgICMjIFRoZSBhdXRoIHByb3ZpZGVyIG5hbWUgZGlzcGxheWVkIHRvIHVzZXJzIG9uIHRoZSBsb2dpbiBwYWdlCiAgICAgICAgIyBkaXNwbGF5TmFtZToKICAgICAgICAjIyAoUmVxdWlyZWQpIFRoZSBob3N0IGFuZCBvcHRpb25hbCBwb3J0IG9mIHRoZSBMREFQIHNlcnZlci4gSWYgcG9ydCBpc24ndCBzdXBwbGllZCwgaXQgd2lsbCBiZSBndWVzc2VkIGJhc2VkIG9uIHRoZSBUTFMgY29uZmlndXJhdGlvbi4gMzg5IG9yIDYzNi4KICAgICAgICAjIGhvc3Q6CiAgICAgICAgIyMgKFJlcXVpcmVkKSBCaW5kIEROIGZvciBzZWFyY2hpbmcgTERBUCB1c2VycyBhbmQgZ3JvdXBzLiBUeXBpY2FsbHkgdGhpcyBpcyBhIHJlYWRPbmx5IHVzZXIuCiAgICAgICAgIyBiaW5kRG46CiAgICAgICAgIyMgKFJlcXVpcmVkKSBCaW5kIFBhc3N3b3JkIGZvciB0aGUgdXNlciBzcGVjaWZpZWQgYnkgJ2JpbmREbicKICAgICAgICAjIGJpbmRQdzoKICAgICAgICAjIyBSZXF1aXJlZCBpZiBMREFQIGhvc3QgZG9lcyBub3QgdXNlIFRMUy4KICAgICAgICAjIGluc2VjdXJlTm9Tc2w6CiAgICAgICAgIyMgU2tpcCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24KICAgICAgICAjIGluc2VjdXJlU2tpcFZlcmlmeToKICAgICAgICAjIyBTdGFydCBvbiBpbnNlY3VyZSBwb3J0LCB0aGVuIG5lZ290aWF0ZSBUTFMKICAgICAgICAjIHN0YXJ0VGxzOgogICAgICAgICMjIENBIGNlcnRpZmljYXRlCiAgICAgICAgIyB1c2VDYUNlcnQ6CiAgICAgICAgIyMgQmFzZUROIHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS4gRm9yIGV4YW1wbGUgJ2NuPXVzZXJzLGRjPWV4YW1wbGUsZGM9Y29tJwogICAgICAgICMgdXNlclNlYXJjaEJhc2VEbjoKICAgICAgICAjIyBPcHRpb25hbCBmaWx0ZXIgdG8gYXBwbHkgd2hlbiBzZWFyY2hpbmcgdGhlIGRpcmVjdG9yeS4gRm9yIGV4YW1wbGUgJyhvYmplY3RDbGFzcz1wZXJzb24pJwogICAgICAgICMgdXNlclNlYXJjaEZpbHRlcjoKICAgICAgICAjIyBBdHRyaWJ1dGUgdG8gbWF0Y2ggYWdhaW5zdCB0aGUgaW5wdXR0ZWQgdXNlcm5hbWUuIFRoaXMgd2lsbCBiZSB0cmFuc2xhdGVkIGFuZCBjb21iaW5lZCB3aXRoIHRoZSBvdGhlciBmaWx0ZXIgYXMgJyg8YXR0cj49PHVzZXJuYW1lPiknLgogICAgICAgICMgdXNlclNlYXJjaFVzZXJuYW1lOgogICAgICAgICMjIENhbiBlaXRoZXIgYmU6ICdzdWInICBzZWFyY2ggdGhlIHdob2xlIHN1YiB0cmVlIG9yICdvbmUnIC0gb25seSBzZWFyY2ggb25lIGxldmVsLiBEZWZhdWx0cyB0byAnc3ViJy4KICAgICAgICAjIHVzZXJTZWFyY2hTY29wZToKICAgICAgICAjIyBBIG1hcHBpbmcgb2YgYXR0cmlidXRlcyBvbiB0aGUgdXNlciBlbnRyeSB0byBjbGFpbXMuIERlZmF1bHRzIHRvICd1aWQnLgogICAgICAgICMgdXNlclNlYXJjaElkQXR0cjoKICAgICAgICAjIyBBIG1hcHBpbmcgb2YgYXR0cmlidXRlcyBvbiB0aGUgdXNlciBlbnRyeSB0byBjbGFpbXMuIERlZmF1bHRzIHRvICdtYWlsJy4KICAgICAgICAjIHVzZXJTZWFyY2hFbWFpbEF0dHI6CiAgICAgICAgIyMgQSBtYXBwaW5nIG9mIGF0dHJpYnV0ZXMgb24gdGhlIHVzZXIgZW50cnkgdG8gY2xhaW1zLgogICAgICAgICMgdXNlclNlYXJjaE5hbWVBdHRyOgogICAgICAgICMjIEJhc2VETiB0byBzdGFydCB0aGUgc2VhcmNoIGZyb20uIEZvciBleGFtcGxlICdjbj1ncm91cHMsZGM9ZXhhbXBsZSxkYz1jb20nCiAgICAgICAgIyBncm91cFNlYXJjaEJhc2VEbjoKICAgICAgICAjIyBPcHRpb25hbCBmaWx0ZXIgdG8gYXBwbHkgd2hlbiBzZWFyY2hpbmcgdGhlIGRpcmVjdG9yeS4gRm9yIGV4YW1wbGUgJyhvYmplY3RDbGFzcz1wb3NpeEdyb3VwKScKICAgICAgICAjIGdyb3VwU2VhcmNoRmlsdGVyOgogICAgICAgICMjIENhbiBlaXRoZXIgYmU6ICdzdWInICBzZWFyY2ggdGhlIHdob2xlIHN1YiB0cmVlIG9yICdvbmUnIC0gb25seSBzZWFyY2ggb25lIGxldmVsLiBEZWZhdWx0cyB0byAnc3ViJy4KICAgICAgICAjIGdyb3VwU2VhcmNoU2NvcGU6CiAgICAgICAgIyMgQWRkcyBhbiBhZGRpdGlvbmFsIHJlcXVpcmVtZW50IHRvIHRoZSBmaWx0ZXIgdGhhdCBhbiBhdHRyaWJ1dGUgaW4gdGhlIGdyb3VwIG1hdGNoIHRoZSB1c2VyJ3MgYXR0cmlidXRlIHZhbHVlLiBUaGUgZXhhY3QgZmlsdGVyIGJlaW5nIGFkZGVkIGlzOiAoPGdyb3VwQXR0cj49PHVzZXJBdHRyIHZhbHVlPikKICAgICAgICAjIGdyb3VwU2VhcmNoVXNlckF0dHI6CiAgICAgICAgIyMgQWRkcyBhbiBhZGRpdGlvbmFsIHJlcXVpcmVtZW50IHRvIHRoZSBmaWx0ZXIgdGhhdCBhbiBhdHRyaWJ1dGUgaW4gdGhlIGdyb3VwIG1hdGNoIHRoZSB1c2VyJ3MgYXR0cmlidXRlIHZhbHVlLiBUaGUgZXhhY3QgZmlsdGVyIGJlaW5nIGFkZGVkIGlzOiAoPGdyb3VwQXR0cj49PHVzZXJBdHRyIHZhbHVlPikKICAgICAgICAjIGdyb3VwU2VhcmNoR3JvdXBBdHRyOgogICAgICAgICMjIFRoZSBhdHRyaWJ1dGUgb2YgdGhlIGdyb3VwIHRoYXQgcmVwcmVzZW50cyBpdHMgbmFtZS4KICAgICAgICAjIGdyb3VwU2VhcmNoTmFtZUF0dHI6CiAgICAgICMjIEF1dGhlbnRpY2F0aW9uIChPQXV0aDIpCiAgICAgIG9hdXRoOgogICAgICAgIGVuYWJsZWQ6IGZhbHNlCiAgICAgICAgIyMgVGhlIGF1dGggcHJvdmlkZXIgbmFtZSBkaXNwbGF5ZWQgdG8gdXNlcnMgb24gdGhlIGxvZ2luIHBhZ2UKICAgICAgICAjIGRpc3BsYXlOYW1lOgogICAgICAgICMjIChSZXF1aXJlZCkgQXV0aG9yaXphdGlvbiBVUkwKICAgICAgICAjIGF1dGhVcmw6CiAgICAgICAgIyMgKFJlcXVpcmVkKSBUb2tlbiBVUkwKICAgICAgICAjIHRva2VuVXJsOgogICAgICAgICMjIFVzZXJJbmZvIFVSTAogICAgICAgICMgdXNlcmluZm9Vcmw6CiAgICAgICAgIyMgQW55IGFkZGl0aW9uYWwgc2NvcGVzIHRoYXQgbmVlZCB0byBiZSByZXF1ZXN0ZWQgZHVyaW5nIGF1dGhvcml6YXRpb24KICAgICAgICAjIHNjb3BlOgogICAgICAgICMjIFRoZSBncm91cHMga2V5IGluZGljYXRlcyB3aGljaCBjbGFpbSB0byB1c2UgdG8gbWFwIGV4dGVybmFsIGdyb3VwcyB0byBDb25jb3Vyc2UgdGVhbXMuCiAgICAgICAgIyBncm91cHNLZXk6CiAgICAgICAgIyMgQ0EgQ2VydGlmaWNhdGUKICAgICAgICAjIHVzZUNhQ2VydDoKICAgICAgICAjIyBTa2lwIFNTTCB2YWxpZGF0aW9uCiAgICAgICAgIyBza2lwU3NsVmFsaWRhdGlvbjoKICAgICAgIyMgQXV0aGVudGljYXRpb24gKE9JREMpCiAgICAgIG9pZGM6CiAgICAgICAgZW5hYmxlZDogZmFsc2UKICAgICAgICAjIyBUaGUgYXV0aCBwcm92aWRlciBuYW1lIGRpc3BsYXllZCB0byB1c2VycyBvbiB0aGUgbG9naW4gcGFnZQogICAgICAgICMgZGlzcGxheU5hbWU6CiAgICAgICAgIyMgKFJlcXVpcmVkKSBBbiBPSURDIGlzc3VlciBVUkwgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZGlzY292ZXIgcHJvdmlkZXIgY29uZmlndXJhdGlvbiB1c2luZyB0aGUgLndlbGxLbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbgogICAgICAgICMgaXNzdWVyOgogICAgICAgICMjIEFueSBhZGRpdGlvbmFsIHNjb3BlcyB0aGF0IG5lZWQgdG8gYmUgcmVxdWVzdGVkIGR1cmluZyBhdXRob3JpemF0aW9uCiAgICAgICAgIyBzY29wZToKICAgICAgICAjIyBUaGUgZ3JvdXBzIGtleSBpbmRpY2F0ZXMgd2hpY2ggY2xhaW0gdG8gdXNlIHRvIG1hcCBleHRlcm5hbCBncm91cHMgdG8gQ29uY291cnNlIHRlYW1zLgogICAgICAgICMgZ3JvdXBzS2V5OgogICAgICAgICMjIENBIENlcnRpZmljYXRlCiAgICAgICAgIyB1c2VDYUNlcnQ6CiAgICAgICAgIyMgU2tpcCBTU0wgdmFsaWRhdGlvbgogICAgICAgICMgc2tpcFNzbFZhbGlkYXRpb246CiAgICB0c2E6CiAgICAgICMjIE1pbmltdW0gbGV2ZWwgb2YgbG9ncyB0byBzZWUuCiAgICAgICMgbG9nTGV2ZWw6IGluZm8KICAgICAgIyMgSVAgYWRkcmVzcyBvbiB3aGljaCB0byBsaXN0ZW4gZm9yIFNTSC4KICAgICAgIyBiaW5kSXA6IDAuMC4wLjAKICAgICAgIyMgUG9ydCBvbiB3aGljaCB0byBsaXN0ZW4gZm9yIFNTSC4KICAgICAgYmluZFBvcnQ6IDIyMjIKICAgICAgIyMgUG9ydCBvbiB3aGljaCB0byBsaXN0ZW4gZm9yIFRTQSBwcHJvZiBzZXJ2ZXIuCiAgICAgICMgYmluZERlYnVnUG9ydDogODA4OQogICAgICAjIyBJUCBhZGRyZXNzIG9mIHRoaXMgVFNBLCByZWFjaGFibGUgYnkgdGhlIEFUQ3MuIFVzZWQgZm9yIGZvcndhcmRlZCB3b3JrZXIgYWRkcmVzc2VzLgogICAgICAjIHBlZXJJcDoKICAgICAgIyMgUGF0aCB0byBwcml2YXRlIGtleSB0byB1c2UgZm9yIHRoZSBTU0ggc2VydmVyLgogICAgICAjIGhvc3RLZXk6CiAgICAgICMjIFBhdGggdG8gZmlsZSBjb250YWluaW5nIGtleXMgdG8gYXV0aG9yaXplLCBpbiBTU0ggYXV0aG9yaXplZF9rZXlzIGZvcm1hdCAob25lIHB1YmxpYyBrZXkgcGVyIGxpbmUpLgogICAgICAjIGF1dGhvcml6ZWRLZXlzOgogICAgICAjIyBQYXRoIHRvIGZpbGUgY29udGFpbmluZyBrZXlzIHRvIGF1dGhvcml6ZSwgaW4gU1NIIGF1dGhvcml6ZWRfa2V5cyBmb3JtYXQgKG9uZSBwdWJsaWMga2V5IHBlciBsaW5lKS4KICAgICAgIyB0ZWFtQXV0aG9yaXplZEtleXM6CiAgICAgICMjIEFUQyBBUEkgZW5kcG9pbnRzIHRvIHdoaWNoIHdvcmtlcnMgd2lsbCBiZSByZWdpc3RlcmVkLgogICAgICAjIGF0Y1VybDoKICAgICAgIyMgUGF0aCB0byBwcml2YXRlIGtleSB0byB1c2Ugd2hlbiBzaWduaW5nIHRva2VucyBpbiByZXFlc3RzIHRvIHRoZSBBVEMgZHVyaW5nIHJlZ2lzdHJhdGlvbi4KICAgICAgIyBzZXNzaW9uU2lnbmluZ0tleToKICAgICAgIyMgaW50ZXJ2YWwgb24gd2hpY2ggdG8gaGVhcnRiZWF0IHdvcmtlcnMgdG8gdGhlIEFUQwogICAgICAjIGhlYXJ0YmVhdEludGVydmFsOiAzMHMKICB3b3JrZXI6CiAgICAjIyBUaGUgbmFtZSB0byBzZXQgZm9yIHRoZSB3b3JrZXIgZHVyaW5nIHJlZ2lzdHJhdGlvbi4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGhvc3RuYW1lIHdpbGwgYmUgdXNlZC4KICAgICMgbmFtZToKICAgICMjIEEgdGFnIHRvIHNldCBkdXJpbmcgcmVnaXN0cmF0aW9uLiBDYW4gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgogICAgIyB0YWc6CiAgICAjIyBUaGUgbmFtZSBvZiB0aGUgdGVhbSB0aGF0IHRoaXMgd29ya2VyIHdpbGwgYmUgYXNzaWduZWQgdG8uCiAgICAjIHRlYW06CiAgICAjIyBIVFRQIHByb3h5IGVuZHBvaW50IHRvIHVzZSBmb3IgY29udGFpbmVycy4KICAgICMgaHR0cF9wcm94eToKICAgICMjIEhUVFBTIHByb3h5IGVuZHBvaW50IHRvIHVzZSBmb3IgY29udGFpbmVycy4KICAgICMgaHR0cHNfcHJveHk6CiAgICAjIyBCbGFja2xpc3Qgb2YgYWRkcmVzc2VzIHRvIHNraXAgdGhlIHByb3h5IHdoZW4gcmVhY2hpbmcuCiAgICAjIG5vX3Byb3h5OgogICAgIyMgSWYgc2V0LCB0aGUgd29ya2VyIHdpbGwgYmUgaW1tZWRpYXRlbHkgcmVtb3ZlZCB1cG9uIHN0YWxsaW5nLgogICAgIyBlcGhlbWVyYWw6CiAgICAjIyBQb3J0IG9uIHdoaWNoIHRvIGxpc3RlbiBmb3IgYmVhY29uIHBwcm9mIHNlcnZlci4KICAgICMgYmluZERlYnVnUG9ydDogOTA5OQogICAgIyMgVmVyc2lvbiBvZiB0aGUgd29ya2VyLiBUaGlzIGlzIG5vcm1hbGx5IGJha2VkIGluIHRvIHRoZSBiaW5hcnksIHNvIHRoaXMgZmxhZyBpcyBoaWRkZW4uCiAgICAjIHZlcnNpb246CiAgICAjIyBEaXJlY3RvcnkgaW4gd2hpY2ggdG8gcGxhY2UgY29udGFpbmVyIGRhdGEuCiAgICB3b3JrRGlyOiAvY29uY291cnNlLXdvcmstZGlyCiAgICAjIyBJUCBhZGRyZXNzIG9uIHdoaWNoIHRvIGxpc3RlbiBmb3IgdGhlIEdhcmRlbiBzZXJ2ZXIuCiAgICAjIGJpbmRJcDogMTI3LjAuMC4xCiAgICAjIyBQb3J0IG9uIHdoaWNoIHRvIGxpc3RlbiBmb3IgdGhlIEdhcmRlbiBzZXJ2ZXIuCiAgICAjIGJpbmRQb3J0OiA3Nzc3CiAgICAjIyBJUCB1c2VkIHRvIHJlYWNoIHRoaXMgd29ya2VyIGZyb20gdGhlIEFUQyBub2Rlcy4KICAgICMgcGVlcklwOgogICAgIyMgTWluaW11bSBsZXZlbCBvZiBsb2dzIHRvIHNlZS4KICAgICMgbG9nTGV2ZWw6IGluZm8KICAgIHRzYToKICAgICAgIyMgVFNBIGhvc3QgdG8gZm9yd2FyZCB0aGUgd29ya2VyIHRocm91Z2guIENhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuCiAgICAgIGhvc3Q6IDEyNy4wLjAuMToyMjIyCiAgICAgICMjIEZpbGUgY29udGFpbmluZyBhIHB1YmxpYyBrZXkgdG8gZXhwZWN0IGZyb20gdGhlIFRTQS4KICAgICAgIyBwdWJsaWNLZXk6CiAgICAgICMjIEZpbGUgY29udGFpbmluZyB0aGUgcHJpdmF0ZSBrZXkgdG8gdXNlIHdoZW4gYXV0aGVudGljYXRpbmcgdG8gdGhlIFRTQS4KICAgICAgIyB3b3JrZXJQcml2YXRlS2V5OgogICAgZ2FyZGVuOgogICAgICAjIyBNaW5pbXVtIGxldmVsIG9mIGxvZ3MgdG8gc2VlLgogICAgICAjIGxvZ0xldmVsOiBpbmZvCiAgICAgICMjIGZvcm1hdCBvZiBsb2cgdGltZXN0YW1wcwogICAgICAjIHRpbWVGb3JtYXQ6IHVuaXgtZXBvY2gKICAgICAgIyMgQmluZCB3aXRoIFRDUCBvbiB0aGUgZ2l2ZW4gSVAuCiAgICAgICMgYmluZElwOgogICAgICAjIyBCaW5kIHdpdGggVENQIG9uIHRoZSBnaXZlbiBwb3J0LgogICAgICBiaW5kUG9ydDogNzc3NwogICAgICAjIyBCaW5kIHdpdGggVW5peCBvbiB0aGUgZ2l2ZW4gc29ja2V0IHBhdGguCiAgICAgICMgYmluZFNvY2tldDogL3RtcC9nYXJkZW4uc29jawogICAgICAjIyBCaW5kIHRoZSBkZWJ1ZyBzZXJ2ZXIgb24gdGhlIGdpdmVuIElQLgogICAgICAjIGRlYnVnQmluZElwOgogICAgICAjIyBCaW5kIHRoZSBkZWJ1ZyBzZXJ2ZXIgdG8gdGhlIGdpdmVuIHBvcnQuCiAgICAgICMgZGVidWdCaW5kUG9ydDogMTcwMTMKICAgICAgIyMgU2tpcCB0aGUgcHJlcGFyYXRpb24gcGFydCBvZiB0aGUgaG9zdCB0aGF0IHJlcXVpcmVzIHJvb3QgcHJpdmlsZWdlcwogICAgICAjIHNraXBTZXR1cDoKICAgICAgIyMgRGlyZWN0b3J5IGluIHdoaWNoIHRvIHN0b3JlIGNvbnRhaW5lciBkYXRhLgogICAgICAjIGRlcG90OiAvdmFyL3J1bi9nZG4vZGVwb3QKICAgICAgIyMgUGF0aCBpbiB3aGljaCB0byBzdG9yZSBwcm9wZXJ0aWVzLgogICAgICAjIHByb3BlcnRpZXNQYXRoOgogICAgICAjIyBQYXRoIGluIHdoaWNoIHRvIHN0b3JlIHRlbXBvcmFyeSBzb2NrZXRzCiAgICAgICMgY29uc29sZVNvY2tldHNQYXRoOgogICAgICAjIyBDbGVhbiB1cCBwcm9jY2VzcyBkaXJzIG9uIGZpcnN0IGludm9jYXRpb24gb2Ygd2FpdAogICAgICAjIGNsZWFudXBQcm9jZXNzRGlyc09uV2FpdDoKICAgICAgIyMgRGlzYWJsZSBjcmVhdGlvbiBvZiBwcml2aWxlZ2VkIGNvbnRhaW5lcnMKICAgICAgIyBkaXNhYmxlUHJpdmlsZWdlZENvbnRhaW5lcnM6CiAgICAgICMjIFRoZSBsb3dlc3QgbnVtZXJpY2FsIHN1Ym9yZGluYXRlIHVzZXIgSUQgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBtYXAKICAgICAgIyB1aWRNYXBTdGFydDogMQogICAgICAjIyBUaGUgbnVtYmVyIG9mIG51bWVyaWNhbCBzdWJvcmRpbmF0ZSB1c2VyIElEcyB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIG1hcAogICAgICAjIHVpZE1hcExlbmd0aDoKICAgICAgIyMgVGhlIGxvd2VzdCBudW1lcmljYWwgc3Vib3JkaW5hdGUgZ3JvdXAgSUQgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBtYXAKICAgICAgIyBnaWRNYXBTdGFydDogMQogICAgICAjIyBUaGUgbnVtYmVyIG9mIG51bWVyaWNhbCBzdWJvcmRpbmF0ZSBncm91cCBJRHMgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBtYXAKICAgICAgIyBnaWRNYXBMZW5ndGg6CiAgICAgICMjIERlZmF1bHQgcm9vdGZzIHRvIHVzZSB3aGVuIG5vdCBzcGVjaWZpZWQgb24gY29udGFpbmVyIGNyZWF0aW9uLgogICAgICAjIGRlZmF1bHRSb290ZnM6CiAgICAgICMjIERlZmF1bHQgdGltZSBhZnRlciB3aGljaCBpZGxlIGNvbnRhaW5lcnMgc2hvdWxkIGV4cGlyZS4KICAgICAgIyBkZWZhdWx0R3JhY2VUaW1lOgogICAgICAjIyBDbGVhbiB1cCBhbGwgdGhlIGV4aXN0aW5nIGNvbnRhaW5lcnMgb24gc3RhcnR1cC4KICAgICAgIyBkZXN0cm95Q29udGFpbmVyc09uU3RhcnR1cDoKICAgICAgIyMgQXBwYXJtb3IgcHJvZmlsZSB0byB1c2UgZm9yIHVucHJpdmlsZWdlZCBjb250YWluZXIgcHJvY2Vzc2VzCiAgICAgICMgYXBwYXJtb3I6CiAgICAgICMjIERpcmVjdG9yeSBpbiB3aGljaCB0byBleHRyYWN0IHBhY2thZ2VkIGFzc2V0cwogICAgICAjIGFzc2V0c0RpcjogL3Zhci9nZG4vYXNzZXRzCiAgICAgICMjIFBhdGggdG8gdGhlICdkYWRvbycgYmluYXJ5LgogICAgICAjIGRhZG9vQmluOgogICAgICAjIyBQYXRoIHRvIHRoZSAnbnN0YXInIGJpbmFyeS4KICAgICAgIyBuc3RhckJpbjoKICAgICAgIyMgUGF0aCB0byB0aGUgJ3RhcicgYmluYXJ5LgogICAgICAjIHRhckJpbjoKICAgICAgIyMgcGF0aCB0byB0aGUgaXB0YWJsZXMgYmluYXJ5CiAgICAgICMgaXB0YWJsZXNCaW46IC9zYmluL2lwdGFibGVzCiAgICAgICMjIHBhdGggdG8gdGhlIGlwdGFibGVzLXJlc3RvcmUgYmluYXJ5CiAgICAgICMgaXB0YWJsZXNSZXN0b3JlQmluOiAvc2Jpbi9pcHRhYmxlcy1yZXN0b3JlCiAgICAgICMjIFBhdGggZXhlY3V0ZSBhcyBwaWQgMSBpbnNpZGUgZWFjaCBjb250YWluZXIuCiAgICAgICMgaW5pdEJpbjoKICAgICAgIyMgUGF0aCB0byB0aGUgcnVudGltZSBwbHVnaW4gYmluYXJ5LgogICAgICAjIHJ1bnRpbWVQbHVnaW46IHJ1bmMKICAgICAgIyMgRXh0cmEgYXJndW1lbnQgdG8gcGFzcyB0byB0aGUgcnVudGltZSBwbHVnaW4uIENhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuCiAgICAgICMgcnVudGltZVBsdWdpbkV4dHJhQXJnOgogICAgICAjIyBEaXJlY3Rvcnkgb24gd2hpY2ggdG8gc3RvcmUgaW1wb3J0ZWQgcm9vdGZzIGdyYXBoIGRhdGEuCiAgICAgICMgZ3JhcGg6CiAgICAgICMjIERpc2sgdXNhZ2Ugb2YgdGhlIGdyYXBoIGRpciBhdCB3aGljaCBjbGVhbnVwIHNob3VsZCB0cmlnZ2VyLCBvciAtMSB0byBkaXNhYmxlIGdyYXBoIGNsZWFudXAuCiAgICAgICMgZ3JhcGhDbGVhbnVwVGhyZXNob2xkSW5NZWdhYnl0ZXM6IC0xCiAgICAgICMjIEltYWdlIHRoYXQgc2hvdWxkIG5ldmVyIGJlIGdhcmJhZ2UgY29sbGVjdGVkLiBDYW4gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgogICAgICAjIHBlcnNpc3RlbnRJbWFnZToKICAgICAgIyMgUGF0aCB0byBpbWFnZSBwbHVnaW4gYmluYXJ5LgogICAgICAjIGltYWdlUGx1Z2luOgogICAgICAjIyBFeHRyYSBhcmd1bWVudCB0byBwYXNzIHRvIHRoZSBpbWFnZSBwbHVnaW4gdG8gY3JlYXRlIHVucHJpdmlsZWdlZCBpbWFnZXMuIENhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuCiAgICAgICMgaW1hZ2VQbHVnaW5FeHRyYUFyZzoKICAgICAgIyMgUGF0aCB0byBwcml2aWxlZ2VkIGltYWdlIHBsdWdpbiBiaW5hcnkuCiAgICAgICMgcHJpdmlsZWdlZEltYWdlUGx1Z2luOgogICAgICAjIyBFeHRyYSBhcmd1bWVudCB0byBwYXNzIHRvIHRoZSBpbWFnZSBwbHVnaW4gdG8gY3JlYXRlIHByaXZpbGVnZWQgaW1hZ2VzLiBDYW4gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgogICAgICAjIHByaXZpbGVnZWRJbWFnZVBsdWdpbkV4dHJhQXJnOgogICAgICAjIyBEb2NrZXIgcmVnaXN0cnkgQVBJIGVuZHBvaW50LgogICAgICAjIGRvY2tlclJlZ2lzdHJ5OiByZWdpc3RyeS0xLmRvY2tlci5pbwogICAgICAjIyBEb2NrZXIgcmVnaXN0cnkgdG8gYWxsb3cgY29ubmVjdGluZyB0byBldmVuIGlmIG5vdCBzZWN1cmUuIENhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuCiAgICAgICMgaW5zZWN1cmVEb2NrZXJSZWdpc3RyeToKICAgICAgIyMgTmV0d29yayByYW5nZSB0byB1c2UgZm9yIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBjb250YWluZXIgc3VibmV0cy4KICAgICAgIyBuZXR3b3JrUG9vbDogMTAuMjU0LjAuMC8yMgogICAgICAjIyBBbGxvdyBuZXR3b3JrIGFjY2VzcyB0byB0aGUgaG9zdCBtYWNoaW5lLgogICAgICAjIGFsbG93SG9zdEFjY2VzczoKICAgICAgIyMgTmV0d29yayByYW5nZXMgdG8gd2hpY2ggdHJhZmZpYyBmcm9tIGNvbnRhaW5lcnMgd2lsbCBiZSBkZW5pZWQuIENhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuCiAgICAgICMgZGVueU5ldHdvcms6CiAgICAgICMjIEROUyBzZXJ2ZXIgSVAgYWRkcmVzcyB0byB1c2UgaW5zdGVhZCBvZiBhdXRvbWF0aWNhbGx5IGRldGVybWluZWQgc2VydmVycy4gQ2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4KICAgICAgIyBkbnNTZXJ2ZXI6CiAgICAgICMjIEROUyBzZXJ2ZXIgSVAgYWRkcmVzcyB0byBhcHBlbmQgdG8gdGhlIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lZCBzZXJ2ZXJzLiBDYW4gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgogICAgICAjIGFkZGl0aW9uYWxEbnNTZXJ2ZXI6CiAgICAgICMjIFBlciBsaW5lIGhvc3RzIGVudHJpZXMuIENhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgYW5kIHdpbGwgYmUgYXBwZW5kZWQgdmVyYmF0aW0gaW4gb3JkZXIgdG8gL2V0Yy9ob3N0cwogICAgICAjIGFkZGl0aW9uYWxIb3N0RW50cnk6CiAgICAgICMjIElQIGFkZHJlc3MgdG8gdXNlIHRvIHJlYWNoIGNvbnRhaW5lcidzIG1hcHBlZCBwb3J0cy4gQXV0b2RldGVjdGVkIGlmIG5vdCBzcGVjaWZpZWQuCiAgICAgICMgZXh0ZXJuYWxJcDoKICAgICAgIyMgU3RhcnQgb2YgdGhlIGVwaGVtZXJhbCBwb3J0IHJhbmdlIHVzZWQgZm9yIG1hcHBlZCBjb250YWluZXIgcG9ydHMuCiAgICAgICMgcG9ydFBvb2xTdGFydDogNjEwMDEKICAgICAgIyMgU2l6ZSBvZiB0aGUgcG9ydCBwb29sIHVzZWQgZm9yIG1hcHBlZCBjb250YWluZXIgcG9ydHMuCiAgICAgICMgcG9ydFBvb2xTaXplOiA0NTM0CiAgICAgICMjIFBhdGggaW4gd2hpY2ggdG8gc3RvcmUgcG9ydCBwb29sIHByb3BlcnRpZXMuCiAgICAgICMgcG9ydFBvb2xQcm9wZXJ0aWVzUGF0aDoKICAgICAgIyMgTVRVIHNpemUgZm9yIGNvbnRhaW5lciBuZXR3b3JrIGludGVyZmFjZXMuIERlZmF1bHRzIHRvIHRoZSBNVFUgb2YgdGhlIGludGVyZmFjZSB1c2VkIGZvciBvdXRib3VuZCBhY2Nlc3MgYnkgdGhlIGhvc3QuIE1heCBhbGxvd2VkIHZhbHVlIGlzIDE1MDAuCiAgICAgICMgbXR1OgogICAgICAjIyBQYXRoIHRvIG5ldHdvcmsgcGx1Z2luIGJpbmFyeS4KICAgICAgIyBuZXR3b3JrUGx1Z2luOgogICAgICAjIyBFeHRyYSBhcmd1bWVudCB0byBwYXNzIHRvIHRoZSBuZXR3b3JrIHBsdWdpbi4gQ2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4KICAgICAgIyBuZXR3b3JrUGx1Z2luRXh0cmFBcmc6CiAgICAgICMjIE1heGltdW0gbnVtYmVyIG9mIG1pY3Jvc2Vjb25kcyBlYWNoIGNwdSBzaGFyZSBhc3NpZ25lZCB0byBhIGNvbnRhaW5lciBhbGxvd3MgcGVyIHF1b3RhIHBlcmlvZAogICAgICAjIGNwdVF1b3RhUGVyU2hhcmU6IDAKICAgICAgIyMgU2V0IGhhcmQgbGltaXQgZm9yIHRoZSB0Y3AgYnVmIG1lbW9yeSwgdmFsdWUgaW4gYnl0ZXMKICAgICAgIyB0Y3BNZW1vcnlMaW1pdDogMAogICAgICAjIyBEZWZhdWx0IGJsb2NrIElPIHdlaWdodCBhc3NpZ25lZCB0byBhIGNvbnRhaW5lcgogICAgICAjIGRlZmF1bHRDb250YWluZXJCbG9ja2lvV2VpZ2h0OiAwCiAgICAgICMjIE1heGltdW0gbnVtYmVyIG9mIGNvbnRhaW5lcnMgdGhhdCBjYW4gYmUgY3JlYXRlZC4KICAgICAgIyBtYXhDb250YWluZXJzOiAwCiAgICAgICMjIERpc2FibGUgc3dhcCBtZW1vcnkgbGltaXQKICAgICAgIyBkaXNhYmxlU3dhcExpbWl0OgogICAgICAjIyBJbnRlcnZhbCBvbiB3aGljaCB0byBlbWl0IG1ldHJpY3MuCiAgICAgICMgbWV0cmljc0VtaXNzaW9uSW50ZXJ2YWw6IDFtCiAgICAgICMjIE9yaWdpbiBpZGVudGlmaWVyIGZvciBEcm9wc29uZGUtZW1pdHRlZCBtZXRyaWNzLgogICAgICAjIGRyb3Bzb25kZU9yaWdpbjogZ2FyZGVuLWxpbnV4CiAgICAgICMjIERlc3RpbmF0aW9uIGZvciBEcm9wc29uZGUtZW1pdHRlZCBtZXRyaWNzLgogICAgICAjIGRyb3Bzb25kZURlc3RpbmF0aW9uOiAxMjcuMC4wLjE6MzQ1NwogICAgICAjIyBQYXRoIHRvIGEgY29udGFpbmVyZCBzb2NrZXQuCiAgICAgICMgY29udGFpbmVyZFNvY2tldDoKICAgICAgIyMgVXNlIGNvbnRhaW5lcmQgdG8gcnVuIHByb2Nlc3NlcyBpbiBjb250YWluZXJzLgogICAgICAjIHVzZUNvbnRhaW5lcmRGb3JQcm9jZXNzZXM6CiAgICAgICMjIEVuYWJsZSBwcm94eSBETlMgc2VydmVyLgogICAgICAjIGRuc1Byb3h5RW5hYmxlOgogICAgYmFnZ2FnZWNsYWltOgogICAgICAjIyBNaW5pbXVtIGxldmVsIG9mIGxvZ3MgdG8gc2VlLgogICAgICAjIGxvZ0xldmVsOiBpbmZvCiAgICAgICMjIElQIGFkZHJlc3Mgb24gd2hpY2ggdG8gbGlzdGVuIGZvciBBUEkgdHJhZmZpYy4KICAgICAgIyBiaW5kSXA6IDEyNy4wLjAuMQogICAgICAjIyBQb3J0IG9uIHdoaWNoIHRvIGxpc3RlbiBmb3IgQVBJIHRyYWZmaWMuCiAgICAgICMgYmluZFBvcnQ6IDc3ODgKICAgICAgIyMgUG9ydCBvbiB3aGljaCB0byBsaXN0ZW4gZm9yIGJhZ2dhZ2VjbGFpbSBwcHJvZiBzZXJ2ZXIuCiAgICAgICMgYmluZERlYnVnUG9ydDogODA5OQogICAgICAjIyBEaXJlY3RvcnkgaW4gd2hpY2ggdG8gcGxhY2Ugdm9sdW1lIGRhdGEuCiAgICAgICMgdm9sdW1lczoKICAgICAgIyMgRHJpdmVyIHRvIHVzZSBmb3IgbWFuYWdpbmcgdm9sdW1lcy4KICAgICAgZHJpdmVyOiBuYWl2ZQogICAgICAjIyBQYXRoIHRvIGJ0cmZzIGJpbmFyeQogICAgICAjIGJ0cmZzQmluOiBidHJmcwogICAgICAjIyBQYXRoIHRvIG1rZnMuYnRyZnMgYmluYXJ5CiAgICAgICMgbWtmc0JpbjogbWtmcy5idHJmcwogICAgICAjIyBQYXRoIHRvIGRpcmVjdG9yeSBpbiB3aGljaCB0byBzdG9yZSBvdmVybGF5IGRhdGEKICAgICAgIyBvdmVybGF5c0RpcjoKICAgICAgIyMgSW50ZXJ2YWwgb24gd2hpY2ggdG8gcmVhcCBleHBpcmVkIHZvbHVtZXMuCiAgICAgICMgcmVhcEludGVydmFsOiAxMHMKCiMjIENvbmZpZ3VyYXRpb24gdmFsdWVzIGZvciBDb25jb3Vyc2UgV2ViIGNvbXBvbmVudHMuCiMjCndlYjoKICAjIyBPdmVycmlkZSB0aGUgY29tcG9uZW50cyBuYW1lIChkZWZhdWx0cyB0byB3ZWIpLgogICMjCiAgIyBuYW1lT3ZlcnJpZGU6CgogICMjIE51bWJlciBvZiByZXBsaWNhcy4KICAjIwogIHJlcGxpY2FzOiAxCgogICMjIENvbmZpZ3VyZXMgdGhlIGxpdmVuZXNzIHByb2JlIHVzZWQgdG8gZGV0ZXJtaW5lCiAgIyMgaWYgdGhlIFdlYiBjb21wb25lbnQgaXMgdXAuCiAgIyMgTm90ZS46IGlmIHlvdSdyZSB1cGdyYWRpbmcgQ29uY291cnNlIGZyb20gb25lIHZlcnNpb24KICAjIyB0byBhbm90aGVyLCB0aGUgcHJvYmUgd2lsbCBwcm9iYWJseSBmYWlsIGZvciBzb21lIHRpbWUKICAjIyBiZWZvcmUgbWlncmF0aW9ucyBhcmUgZmluaXNoZWQgLSBpbiBzdWNoIHNpdHVhdGlvbnMsCiAgIyMgZWl0aGVyIGNvbnNpZGVyIGJ1bXBpbmcgdGhlIHZhbHVlcyBzZXQgaGVyZS4KICBsaXZlbmVzc1Byb2JlOgogICAgZmFpbHVyZVRocmVzaG9sZDogNQogICAgaHR0cEdldDoKICAgICAgcGF0aDogL2FwaS92MS9pbmZvCiAgICAgIHBvcnQ6IGF0YwogICAgaW5pdGlhbERlbGF5U2Vjb25kczogMTAKICAgIHBlcmlvZFNlY29uZHM6IDE1CiAgICB0aW1lb3V0U2Vjb25kczogMwoKICAjIyBDb25maWd1cmVzIHRoZSByZWFkaW5lc3MgcHJvYmVzLgogIHJlYWRpbmVzc1Byb2JlOgogICAgaHR0cEdldDoKICAgICAgcGF0aDogL2FwaS92MS9pbmZvCiAgICAgIHBvcnQ6IGF0YwoKICAjIyBDb25maWd1cmUgcmVzb3VyY2UgcmVxdWVzdHMgYW5kIGxpbWl0cy4KICAjIyByZWY6IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3VzZXItZ3VpZGUvY29tcHV0ZS1yZXNvdXJjZXMvCiAgIyMKICByZXNvdXJjZXM6CiAgICByZXF1ZXN0czoKICAgICAgY3B1OiAiMTAwbSIKICAgICAgbWVtb3J5OiAiMTI4TWkiCgogICMjIENvbmZpZ3VyZSBhZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlCiAgIyMgd2ViIGNvbnRhaW5lcnMuCiAgIyBlbnY6CiAgIyAgIC0gbmFtZTogQ09OQ09VUlNFX0xPR19MRVZFTAogICMgICAgIHZhbHVlOiAiZGVidWciCiAgIyAgIC0gbmFtZTogQ09OQ09VUlNFX1RTQV9MT0dfTEVWRUwKICAjICAgICB2YWx1ZTogImRlYnVnIgoKICAjIyBGb3IgbWFuYWdpbmcgd2hlcmUgc2VjcmV0cyBzaG91bGQgYmUgbW91bnRlZCBmb3IgdGhlIHdlYiBhZ2VudHMKICBrZXlTZWNyZXRzUGF0aDogIi9jb25jb3Vyc2Uta2V5cyIKICBhdXRoU2VjcmV0c1BhdGg6ICIvY29uY291cnNlLWF1dGgiCiAgdmF1bHRTZWNyZXRzUGF0aDogIi9jb25jb3Vyc2UtdmF1bHQiCiAgcG9zdGdyZXNxbFNlY3JldHNQYXRoOiAiL2NvbmNvdXJzZS1wb3N0Z3Jlc3FsIgogIHN5c2xvZ1NlY3JldHNQYXRoOiAiL2NvbmNvdXJzZS1zeXNsb2ciCiAgdGxzU2VjcmV0c1BhdGg6ICIvY29uY291cnNlLXdlYi10bHMiCgogICMjIENvbmZpZ3VyZSBhZGRpdGlvbmFsIHZvbHVtZXMgZm9yIHRoZQogICMjIHdlYiBjb250YWluZXIocykKICAjIwogICMgYWRkaXRpb25hbFZvbHVtZXM6CiAgIyAgIC0gbmFtZTogbXktdGVhbS1hdXRob3JpemVkLWtleXMKICAjICAgICBjb25maWdNYXA6CiAgIyAgICAgICBuYW1lOiBteS10ZWFtLWF1dGhvcml6ZWQta2V5cy1jb25maWcKCiAgIyMgQ29uZmlndXJlIGFkZGl0aW9uYWwgdm9sdW1lTW91bnRzIGZvciB0aGUKICAjIyB3ZWIgY29udGFpbmVyKHMpCiAgIyMKICAjIGFkZGl0aW9uYWxWb2x1bWVNb3VudHM6CiAgIyAgIC0gbmFtZTogbXktdGVhbS1hdXRob3JpemVkLWtleXMKICAjICAgICBtb3VudFBhdGg6IC9teS10ZWFtLWF1dGhvcml6ZWQta2V5cwoKICAjIyBBZGRpdGlvbmFsIGFmZmluaXRpZXMgdG8gYWRkIHRvIHRoZSB3ZWIgcG9kcy4KICAjIwogICMgYWRkaXRpb25hbEFmZmluaXRpZXM6CiAgIyAgIG5vZGVBZmZpbml0eToKICAjICAgICBwcmVmZXJyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbjoKICAjICAgICAgIC0gd2VpZ2h0OiA1MAogICMgICAgICAgICBwcmVmZXJlbmNlOgogICMgICAgICAgICAgIG1hdGNoRXhwcmVzc2lvbnM6CiAgIyAgICAgICAgICAgICAtIGtleTogc3BvdAogICMgICAgICAgICAgICAgICBvcGVyYXRvcjogTm90SW4KICAjICAgICAgICAgICAgICAgdmFsdWVzOgogICMgICAgICAgICAgICAgICAgIC0gInRydWUiCgogICMjIEFubm90YXRpb25zIGZvciB0aGUgd2ViIG5vZGVzLgogICMjIFJlZjogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvb3ZlcnZpZXcvd29ya2luZy13aXRoLW9iamVjdHMvYW5ub3RhdGlvbnMvCiAgYW5ub3RhdGlvbnM6IHt9CiAgIyBhbm5vdGF0aW9uczoKICAjICAga2V5MTogInZhbHVlMSIKICAjICAga2V5MjogInZhbHVlMiIKCiAgIyMgTm9kZSBzZWxlY3RvciBmb3Igd2ViIG5vZGVzLgogIG5vZGVTZWxlY3Rvcjoge30KCiAgIyMgVG9sZXJhdGlvbnMgZm9yIHRoZSB3ZWIgbm9kZXMuCiAgIyMgUmVmOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL3RhaW50LWFuZC10b2xlcmF0aW9uLwogIHRvbGVyYXRpb25zOiBbXQogICMgdG9sZXJhdGlvbnM6CiAgIyAgLSBrZXk6ICJ0b2xlcmF0aW9uPWtleSIKICAjICAgIG9wZXJhdG9yOiAiRXF1YWwiCiAgIyAgICB2YWx1ZTogInZhbHVlIgogICMgICAgZWZmZWN0OiAiTm9TY2hlZHVsZSIKCiAgIyMgU2VydmljZSBjb25maWd1cmF0aW9uLgogICMjIHJlZjogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvdXNlci1ndWlkZS9zZXJ2aWNlcy8KICAjIwogIHNlcnZpY2U6CiAgICAjIyBGb3IgbWluaWt1YmUsIHNldCB0aGlzIHRvIENsdXN0ZXJJUCwgZWxzZXdoZXJlIHVzZSBMb2FkQmFsYW5jZXIgb3IgTm9kZVBvcnQKICAgICMjIHJlZjogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvdXNlci1ndWlkZS9zZXJ2aWNlcy8jcHVibGlzaGluZy1zZXJ2aWNlcy0tLXNlcnZpY2UtdHlwZXMKICAgICMjCiAgICB0eXBlOiBDbHVzdGVySVAKCiAgICAjIyBXaGVuIHVzaW5nIHdlYi5zZXJ2aWNlLnR5cGU6IExvYWRCYWxhbmNlciwgc2V0cyB0aGUgdXNlci1zcGVjaWZpZWQgbG9hZCBiYWxhbmNlciBJUAogICAgIyBsb2FkQmFsYW5jZXJJUDogMTcyLjIxNy4xLjE3NAoKICAgICMgIyBBZGRpdGlvbmFsIExhYmVscyB0byBiZSBhZGRlZCB0byB0aGUgd2ViIHNlcnZpY2UuCiAgICAjIGxhYmVsczoKCiAgICAjIyBBbm5vdGF0aW9ucyB0byBiZSBhZGRlZCB0byB0aGUgd2ViIHNlcnZpY2UuCiAgICAjIwogICAgIyBhbm5vdGF0aW9uczoKICAgICMgICBwcm9tZXRoZXVzLmlvL3Byb2JlOiAidHJ1ZSIKICAgICMgICBwcm9tZXRoZXVzLmlvL3Byb2JlX3BhdGg6ICIvIgogICAgIwogICAgIyAgICMjIFdoZW4gdXNpbmcgd2ViLnNlcnZpY2UudHlwZTogTG9hZEJhbGFuY2VyLCBlbmFibGUgSFRUUFMgd2l0aCBhbiBBQ00gY2VydAogICAgIyAgIHNlcnZpY2UuYmV0YS5rdWJlcm5ldGVzLmlvL2F3cy1sb2FkLWJhbGFuY2VyLXNzbC1jZXJ0OiAiYXJuOmF3czphY206ZXUtd2VzdC0xOjEyMzQ1Njc4OTpjZXJ0aWZpY2F0ZS9hYmMxMjMtYWJjMTIzLWFiYzEyMy1hYmMxMjMiCiAgICAjICAgc2VydmljZS5iZXRhLmt1YmVybmV0ZXMuaW8vYXdzLWxvYWQtYmFsYW5jZXItYmFja2VuZC1wcm90b2NvbDogImh0dHAiCiAgICAjICAgc2VydmljZS5iZXRhLmt1YmVybmV0ZXMuaW8vYXdzLWxvYWQtYmFsYW5jZXItYmFja2VuZC1wb3J0OiAiYXRjIgogICAgIyAgIHNlcnZpY2UuYmV0YS5rdWJlcm5ldGVzLmlvL2F3cy1sb2FkLWJhbGFuY2VyLXNzbC1wb3J0czogIjQ0MyIKICAgICMKICAgICMgIyMgV2hlbiB1c2luZyB3ZWIuc2VydmljZS50eXBlOiBMb2FkQmFsYW5jZXIsIHdoaXRlbGlzdCB0aGUgbG9hZCBiYWxhbmNlciB0byBwYXJ0aWN1bGFyIElQcwogICAgIyBsb2FkQmFsYW5jZXJTb3VyY2VSYW5nZXM6CiAgICAjICAgLSAxOTIuMTY4LjEuMTAvMzIKCiAgIyBXaGVuIHVzaW5nIHdlYi5zZXJ2aWNlLnR5cGU6IE5vZGVQb3J0LCBzZXRzIHRoZSBub2RlUG9ydCBmb3IgYXRjCiAgIyAgYXRjTm9kZVBvcnQ6IDMwMTUwCiAgIwogICMgV2hlbiB1c2luZyB3ZWIuc2VydmljZS50eXBlOiBOb2RlUG9ydCwgc2V0cyB0aGUgbm9kZVBvcnQgZm9yIGF0YyB0bHMKICAjICBhdGNUbHNOb2RlUG9ydDogMzAxNTEKICAjCiAgIyBXaGVuIHVzaW5nIHdlYi5zZXJ2aWNlLnR5cGU6IE5vZGVQb3J0LCBzZXRzIHRoZSBub2RlUG9ydCBmb3IgdHNhCiAgIyAgdHNhTm9kZVBvcnQ6IDMwMTUyCgogICMjIEluZ3Jlc3MgY29uZmlndXJhdGlvbi4KICAjIyByZWY6IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3VzZXItZ3VpZGUvaW5ncmVzcy8KICAjIwogIGluZ3Jlc3M6CiAgICAjIyBFbmFibGUgSW5ncmVzcy4KICAgICMjCiAgICBlbmFibGVkOiBmYWxzZQoKICAgICMjIEFubm90YXRpb25zIHRvIGJlIGFkZGVkIHRvIHRoZSB3ZWIgaW5ncmVzcy4KICAgICMjCiAgICAjIGFubm90YXRpb25zOgogICAgIyAgIGt1YmVybmV0ZXMuaW8vaW5ncmVzcy5jbGFzczogbmdpbngKICAgICMgICBrdWJlcm5ldGVzLmlvL3Rscy1hY21lOiAndHJ1ZScKCiAgICAjIyBIb3N0bmFtZXMuCiAgICAjIyBNdXN0IGJlIHByb3ZpZGVkIGlmIEluZ3Jlc3MgaXMgZW5hYmxlZC4KICAgICMjCiAgICAjIGhvc3RzOgogICAgIyAgIC0gY29uY291cnNlLmRvbWFpbi5jb20KCiAgICAjIyBUTFMgY29uZmlndXJhdGlvbi4KICAgICMjIFNlY3JldHMgbXVzdCBiZSBtYW51YWxseSBjcmVhdGVkIGluIHRoZSBuYW1lc3BhY2UuCiAgICAjIwogICAgIyB0bHM6CiAgICAjICAgLSBzZWNyZXROYW1lOiBjb25jb3Vyc2Utd2ViLXRscwogICAgIyAgICAgaG9zdHM6CiAgICAjICAgICAgIC0gY29uY291cnNlLmRvbWFpbi5jb20KICAgICMKICAgICMKCiMjIENvbmZpZ3VyYXRpb24gdmFsdWVzIGZvciBDb25jb3Vyc2UgV29ya2VyIGNvbXBvbmVudHMuCiMjCndvcmtlcjoKICAjIyBPdmVycmlkZSB0aGUgY29tcG9uZW50cyBuYW1lIChkZWZhdWx0cyB0byB3b3JrZXIpLgogICMjCiAgIyBuYW1lT3ZlcnJpZGU6CgogICMjIE51bWJlciBvZiByZXBsaWNhcy4KICAjIwogIHJlcGxpY2FzOiAyCgogICMjIE1pbmltdW0gbnVtYmVyIG9mIHdvcmtlcnMgYXZhaWxhYmxlIGFmdGVyIGFuIGV2aWN0aW9uCiAgIyMgcmVmOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9hZG1pbi9kaXNydXB0aW9ucy8KICAjIwogIG1pbkF2YWlsYWJsZTogMQoKICAjIyBDb25maWd1cmUgcmVzb3VyY2UgcmVxdWVzdHMgYW5kIGxpbWl0cy4KICAjIyByZWY6IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3VzZXItZ3VpZGUvY29tcHV0ZS1yZXNvdXJjZXMvCiAgIyMKICByZXNvdXJjZXM6CiAgICByZXF1ZXN0czoKICAgICAgY3B1OiAiMTAwbSIKICAgICAgbWVtb3J5OiAiNTEyTWkiCgogICMjIENvbmZpZ3VyZSBhZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlCiAgIyMgd29ya2VyIGNvbnRhaW5lcihzKQogICMgZW52OgogICMgICAtIG5hbWU6IGh0dHBfcHJveHkKICAjICAgICB2YWx1ZTogImh0dHA6Ly9wcm94eS55b3VyLWRvbWFpbi5jb206MzEyOCIKICAjICAgLSBuYW1lOiBodHRwc19wcm94eQogICMgICAgIHZhbHVlOiAiaHR0cDovL3Byb3h5LnlvdXItZG9tYWluLmNvbTozMTI4IgogICMgICAtIG5hbWU6IG5vX3Byb3h5CiAgIyAgICAgdmFsdWU6ICJ5b3VyLWRvbWFpbi5jb20iCiAgIyAgIC0gbmFtZTogQ09OQ09VUlNFX0dBUkRFTl9ETlNfU0VSVkVSCiAgIyAgICAgdmFsdWU6ICI4LjguOC44IgogICMgICAtIG5hbWU6IENPTkNPVVJTRV9HQVJERU5fRE5TX1BST1hZX0VOQUJMRQogICMgICAgIHZhbHVlOiAidHJ1ZSIKICAjICAgLSBuYW1lOiBDT05DT1VSU0VfR0FSREVOX0FMTE9XX0hPU1RfQUNDRVNTCiAgIyAgICAgdmFsdWU6ICJ0cnVlIgoKCiAgIyMgRm9yIG1hbmFnaW5nIHdoZXJlIHNlY3JldHMgc2hvdWxkIGJlIG1vdW50ZWQgZm9yIHdvcmtlciBhZ2VudHMKICBrZXlTZWNyZXRzUGF0aDogIi9jb25jb3Vyc2Uta2V5cyIKCiAgIyMgQ29uZmlndXJlIGFkZGl0aW9uYWwgdm9sdW1lTW91bnRzIGZvciB0aGUKICAjIyB3b3JrZXIgY29udGFpbmVyKHMpCiAgIyBhZGRpdGlvbmFsVm9sdW1lTW91bnRzOgogICMgICAtIG5hbWU6IGNvbmNvdXJzZS1iYWdnYWdlY2xhaW0KICAjICAgICBtb3VudFBhdGg6IC9iYWdnYWdlY2xhaW0KCiAgIyMgQW5ub3RhdGlvbnMgdG8gYmUgYWRkZWQgdG8gdGhlIHdvcmtlciBwb2RzLgogICMjCiAgIyBhbm5vdGF0aW9uczoKICAjICAgaWFtLmFtYXpvbmF3cy5jb20vcm9sZTogYXJuOmF3czppYW06OjEyMzQ1Njc4OTAxMjpyb2xlL2NvbmNvdXJzZQogICMKCiAgIyMgTm9kZSBzZWxlY3RvciBmb3IgdGhlIHdvcmtlciBub2Rlcy4KICAjIyBSZWY6IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vYXNzaWduLXBvZC1ub2RlLyNub2Rlc2VsZWN0b3IKICBub2RlU2VsZWN0b3I6IHt9CiAgIyBub2RlU2VsZWN0b3I6IHt0eXBlOiBjb25jb3Vyc2V9CgogICMjIEFkZGl0aW9uYWwgYWZmaW5pdGllcyB0byBhZGQgdG8gdGhlIHdvcmtlciBwb2RzLgogICMjIFVzZWZ1bCBpZiB5b3UgcHJlZmVyIHRvIHJ1biB3b3JrZXJzIG9uIG5vbi1zcG90IGluc3RhbmNlcywgZm9yIGV4YW1wbGUKICAjIwogICMgYWRkaXRpb25hbEFmZmluaXRpZXM6CiAgIyAgIG5vZGVBZmZpbml0eToKICAjICAgICBwcmVmZXJyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbjoKICAjICAgICAgIC0gd2VpZ2h0OiA1MAogICMgICAgICAgICBwcmVmZXJlbmNlOgogICMgICAgICAgICAgIG1hdGNoRXhwcmVzc2lvbnM6CiAgIyAgICAgICAgICAgICAtIGtleTogc3BvdAogICMgICAgICAgICAgICAgICBvcGVyYXRvcjogTm90SW4KICAjICAgICAgICAgICAgICAgdmFsdWVzOgogICMgICAgICAgICAgICAgICAgIC0gInRydWUiCgogICMjIENvbmZpZ3VyZSBhZGRpdGlvbmFsIHZvbHVtZXMgZm9yIHRoZQogICMjIHdvcmtlciBjb250YWluZXIocykKICAjIGFkZGl0aW9uYWxWb2x1bWVzOgogICMgICAtIG5hbWU6IGNvbmNvdXJzZS1iYWdnYWdlY2xhaW0KICAjICAgICBob3N0UGF0aDoKICAjICAgICAgIHBhdGg6IC9kZXYvbnZtZTBuMQogICMgICAgICAgdHlwZTogQmxvY2tEZXZpY2UKICAjCiAgIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGlzIGFsbG93cyB0YWtpbmcgb3ZlciB0aGUgYGNvbmNvdXJzZS13b3JrLWRpcmAKICAjIHZvbHVtZSAoZnJvbSB0aGUgZGVmYXVsdCBlbXB0eURpcikgaWYgYHBlcnNpc3RlbmNlLmVuYWJsZWRgIGlzIGZhbHNlOgogICMKICAjIGFkZGl0aW9uYWxWb2x1bWVzOgogICMgICAtIG5hbWU6IGNvbmNvdXJzZS13b3JrLWRpcgogICMgICAgIGhvc3RQYXRoOgogICMgICAgICAgcGF0aDogL21udC9sb2NhbGx5LW1vdW50ZWQtZmFzdC1kaXNrL2NvbmNvdXJzZQogICMgICAgICAgdHlwZTogRGlyZWN0b3J5T3JDcmVhdGUKCiAgIyMgV2hldGhlciB0aGUgd29ya2VycyBzaG91bGQgYmUgZm9yY2VkIHRvIHJ1biBvbiBzZXBhcmF0ZSBub2Rlcy4KICAjIyBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSBzZXR0aW5nIHRoZWlyIEFudGlBZmZpbml0eSB3aXRoIHJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24gYXMgb3Bwb3NlZCB0byBwcmVmZXJyZWQKICAjIyBSZWY6IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vYXNzaWduLXBvZC1ub2RlLyNpbnRlci1wb2QtYWZmaW5pdHktYW5kLWFudGktYWZmaW5pdHktYmV0YS1mZWF0dXJlCiAgaGFyZEFudGlBZmZpbml0eTogZmFsc2UKCiAgIyMgVG9sZXJhdGlvbnMgZm9yIHRoZSB3b3JrZXIgbm9kZXMuCiAgIyMgUmVmOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL3RhaW50LWFuZC10b2xlcmF0aW9uLwogIHRvbGVyYXRpb25zOiBbXQogICMgdG9sZXJhdGlvbnM6CiAgIyAgLSBrZXk6ICJ0b2xlcmF0aW9uPWtleSIKICAjICAgIG9wZXJhdG9yOiAiRXF1YWwiCiAgIyAgICB2YWx1ZTogInZhbHVlIgogICMgICAgZWZmZWN0OiAiTm9TY2hlZHVsZSIKCiAgIyMgVGltZSB0byBhbGxvdyB0aGUgcG9kIHRvIHRlcm1pbmF0ZSBiZWZvcmUgYmVpbmcgZm9yY2VmdWxseSB0ZXJtaW5hdGVkLiBUaGlzIHNob3VsZCBwcm92aWRlIHRpbWUgZm9yCiAgIyMgdGhlIHdvcmtlciB0byByZXRpcmUsIGkuZS4gZHJhaW4gaXRzIHRhc2tzLiBTZWUgaHR0cHM6Ly9jb25jb3Vyc2UtY2kub3JnL3dvcmtlci1pbnRlcm5hbHMuaHRtbCBmb3Igd29ya2VyCiAgIyMgbGlmZWN5Y2xlIHNlbWFudGljcy4KICB0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kczogNjAKCiAgIyMgSWYgYW55IG9mIHRoZSBzdHJpbmdzIGFyZSBmb3VuZCBpbiBsb2dzLCB0aGUgd29ya2VyJ3MgbGl2ZW5lc3NQcm9iZSB3aWxsIGZhaWwgYW5kIHRyaWdnZXIgYSBwb2QgcmVzdGFydC4KICAjIyBTcGVjaWZ5IG9uZSBzdHJpbmcgcGVyIGxpbmUsIGV4YWN0IG1hdGNoaW5nIGlzIHVzZWQuCiAgIyMKICBmYXRhbEVycm9yczogfC0KICAgIGd1YXJkaWFuLmFwaS5nYXJkZW4tc2VydmVyLmNyZWF0ZS5mYWlsZWQKICAgIGJhZ2dhZ2VjbGFpbS5hcGkudm9sdW1lLXNlcnZlci5jcmVhdGUtdm9sdW1lLWFzeW5jLmZhaWxlZC10by1jcmVhdGUKCiAgIyMgU3RyYXRlZ3kgZm9yIFN0YXRlZnVsU2V0IHVwZGF0ZXMgKHJlcXVpcmVzIEt1YmVybmV0ZXMgMS42KykKICAjIyBSZWY6IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3dvcmtsb2Fkcy9jb250cm9sbGVycy9zdGF0ZWZ1bHNldAogICMjCiAgdXBkYXRlU3RyYXRlZ3k6IFJvbGxpbmdVcGRhdGUKCiAgIyMgUG9kIE1hbmFnZW1lbnQgc3RyYXRlZ3kgKHJlcXVpcmVzIEt1YmVybmV0ZXMgMS43KykKICAjIyBSZWY6IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3dvcmtsb2Fkcy9jb250cm9sbGVycy9zdGF0ZWZ1bHNldC8jcG9kLW1hbmFnZW1lbnQtcG9saWNpZXMKICAjIwogICMjICJPcmRlcmVkUmVhZHkiIGlzIGRlZmF1bHQuICJQYXJhbGxlbCIgbWVhbnMgd29ya2VyIHBvZHMgd2lsbCBsYXVuY2ggb3IgdGVybWluYXRlCiAgIyMgaW4gcGFyYWxsZWwuCiAgcG9kTWFuYWdlbWVudFBvbGljeTogUGFyYWxsZWwKCiAgIyMgV2hlbiBwZXJzaXN0YW5jZSBpcyBkaXNhYmxlZCB0aGlzIHZhbHVlIHdpbGwgYmUgdXNlZCB0byBsaW1pdCB0aGUgZW1wdHlEaXIgdm9sdW1lIHNpemUKICAjIyBSZWY6IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lcy8jZW1wdHlkaXIKICAjIGVtcHR5RGlyU2l6ZTogMjBHaQoKIyMgUGVyc2lzdGVudCBWb2x1bWUgU3RvcmFnZSBjb25maWd1cmF0aW9uLgojIyByZWY6IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzCiMjCnBlcnNpc3RlbmNlOgogICMjIEVuYWJsZSBwZXJzaXN0ZW5jZSB1c2luZyBQZXJzaXN0ZW50IFZvbHVtZSBDbGFpbXMuCiAgIyMKICBlbmFibGVkOiB0cnVlCgogICMjIFdvcmtlciBQZXJzaXN0ZW5jZSBjb25maWd1cmF0aW9uLgogICMjCiAgd29ya2VyOgogICAgIyMgY29uY291cnNlIGRhdGEgUGVyc2lzdGVudCBWb2x1bWUgU3RvcmFnZSBDbGFzcwogICAgIyMgSWYgZGVmaW5lZCwgc3RvcmFnZUNsYXNzTmFtZTogPHN0b3JhZ2VDbGFzcz4KICAgICMjIElmIHNldCB0byAiLSIsIHN0b3JhZ2VDbGFzc05hbWU6ICIiLCB3aGljaCBkaXNhYmxlcyBkeW5hbWljIHByb3Zpc2lvbmluZwogICAgIyMgSWYgdW5kZWZpbmVkICh0aGUgZGVmYXVsdCkgb3Igc2V0IHRvIG51bGwsIG5vIHN0b3JhZ2VDbGFzc05hbWUgc3BlYyBpcwogICAgIyMgICBzZXQsIGNob29zaW5nIHRoZSBkZWZhdWx0IHByb3Zpc2lvbmVyLiAgKGdwMiBvbiBBV1MsIHN0YW5kYXJkIG9uCiAgICAjIyAgIEdLRSwgQVdTICYgT3BlblN0YWNrKQogICAgIyMKICAgICMgc3RvcmFnZUNsYXNzOiAiLSIKCiAgICAjIyBQZXJzaXN0ZW50IFZvbHVtZSBBY2Nlc3MgTW9kZS4KICAgICMjCiAgICBhY2Nlc3NNb2RlOiBSZWFkV3JpdGVPbmNlCgogICAgIyMgUGVyc2lzdGVudCBWb2x1bWUgU3RvcmFnZSBTaXplLgogICAgIyMKICAgIHNpemU6IDIwR2kKCiMjIENvbmZpZ3VyYXRpb24gdmFsdWVzIGZvciB0aGUgcG9zdGdyZXNxbCBkZXBlbmRlbmN5LgojIyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9rdWJlcm5ldGVzL2NoYXJ0cy9ibG9iL21hc3Rlci9zdGFibGUvcG9zdGdyZXNxbC9SRUFETUUubWQKIyMKcG9zdGdyZXNxbDoKCiAgIyMgVXNlIHRoZSBQb3N0Z3JlU1FMIGNoYXJ0IGRlcGVuZGVuY3kuCiAgIyMgU2V0IHRvIGZhbHNlIGlmIGJyaW5naW5nIHlvdXIgb3duIFBvc3RncmVTUUwsIGFuZCBzZXQgc2VjcmV0IHZhbHVlIHBvc3RncmVzcWwtdXJpLgogICMjCiAgZW5hYmxlZDogdHJ1ZQoKICAjIyMgUG9zdGdyZVNRTCBVc2VyIHRvIGNyZWF0ZS4KICAjIwogIHBvc3RncmVzVXNlcjogY29uY291cnNlCgogICMjIFBvc3RncmVTUUwgUGFzc3dvcmQgZm9yIHRoZSBuZXcgdXNlci4KICAjIyBJZiBub3Qgc2V0LCBhIHJhbmRvbSAxMCBjaGFyYWN0ZXJzIHBhc3N3b3JkIHdpbGwgYmUgdXNlZC4KICAjIwogIHBvc3RncmVzUGFzc3dvcmQ6IGNvbmNvdXJzZQoKICAjIyBQb3N0Z3JlU1FMIERhdGFiYXNlIHRvIGNyZWF0ZS4KICAjIwogIHBvc3RncmVzRGF0YWJhc2U6IGNvbmNvdXJzZQoKICAjIyBQZXJzaXN0ZW50IFZvbHVtZSBTdG9yYWdlIGNvbmZpZ3VyYXRpb24uCiAgIyMgcmVmOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcwogICMjCiAgcGVyc2lzdGVuY2U6CiAgICAjIyBFbmFibGUgUG9zdGdyZVNRTCBwZXJzaXN0ZW5jZSB1c2luZyBQZXJzaXN0ZW50IFZvbHVtZSBDbGFpbXMuCiAgICAjIwogICAgZW5hYmxlZDogdHJ1ZQogICAgIyMgY29uY291cnNlIGRhdGEgUGVyc2lzdGVudCBWb2x1bWUgU3RvcmFnZSBDbGFzcwogICAgIyMgSWYgZGVmaW5lZCwgc3RvcmFnZUNsYXNzTmFtZTogPHN0b3JhZ2VDbGFzcz4KICAgICMjIElmIHNldCB0byAiLSIsIHN0b3JhZ2VDbGFzc05hbWU6ICIiLCB3aGljaCBkaXNhYmxlcyBkeW5hbWljIHByb3Zpc2lvbmluZwogICAgIyMgSWYgdW5kZWZpbmVkICh0aGUgZGVmYXVsdCkgb3Igc2V0IHRvIG51bGwsIG5vIHN0b3JhZ2VDbGFzc05hbWUgc3BlYyBpcwogICAgIyMgICBzZXQsIGNob29zaW5nIHRoZSBkZWZhdWx0IHByb3Zpc2lvbmVyLiAgKGdwMiBvbiBBV1MsIHN0YW5kYXJkIG9uCiAgICAjIyAgIEdLRSwgQVdTICYgT3BlblN0YWNrKQogICAgIyMKICAgICMgc3RvcmFnZUNsYXNzOiAiLSIKICAgICMjIFBlcnNpc3RlbnQgVm9sdW1lIEFjY2VzcyBNb2RlLgogICAgIyMKICAgIGFjY2Vzc01vZGU6IFJlYWRXcml0ZU9uY2UKICAgICMjIFBlcnNpc3RlbnQgVm9sdW1lIFN0b3JhZ2UgU2l6ZS4KICAgICMjCiAgICBzaXplOiA4R2kKCiMjIEZvciBSQkFDIHN1cHBvcnQ6CnJiYWM6CiAgIyB0cnVlIGhlcmUgZW5hYmxlcyBjcmVhdGlvbiBvZiByYmFjIHJlc291cmNlcwogIGNyZWF0ZTogdHJ1ZQoKICAjIHJiYWMgdmVyc2lvbgogIGFwaVZlcnNpb246IHYxYmV0YTEKCiAgIyMgVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgYWNjb3VudCB0byB1c2UgZm9yIHdlYiBwb2RzIGlmIHJiYWMuY3JlYXRlIGlzIGZhbHNlCiAgIyMKICB3ZWJTZXJ2aWNlQWNjb3VudE5hbWU6IGRlZmF1bHQKCiAgIyMgVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgYWNjb3VudCB0byB1c2UgZm9yIHdvcmtlciBwb2RzIGlmIHJiYWMuY3JlYXRlIGlzIGZhbHNlCiAgIyMKICB3b3JrZXJTZXJ2aWNlQWNjb3VudE5hbWU6IGRlZmF1bHQKCiMjIEZvciBtYW5hZ2luZyBzZWNyZXRzIHVzaW5nIEhlbG0KIyMKc2VjcmV0czoKCiAgIyMgTGlzdCBvZiB1c2VybmFtZTpwYXNzd29yZCBvciB1c2VybmFtZTpiY3J5cHRlZF9wYXNzd29yZCBjb21iaW5hdGlvbnMgZm9yIGFsbCB5b3VyIGxvY2FsIGNvbmNvdXJzZSB1c2Vycy4KICBsb2NhbFVzZXJzOiAidGVzdDp0ZXN0IgogICMjIENyZWF0ZSB0aGUgc2VjcmV0IHJlc291cmNlIGZyb20gdGhlIGZvbGxvd2luZyB2YWx1ZXMuIFNldCB0aGlzIHRvCiAgIyMgZmFsc2UgdG8gbWFuYWdlIHRoZXNlIHNlY3JldHMgb3V0c2lkZSBIZWxtLgogICMjCiAgY3JlYXRlOiB0cnVlCgogICMjIFRoZSBUTFMgY2VydGlmaWNhdGUgYW5kIHByaXZhdGUga2V5IGZvciB0aGUgd2ViIGNvbXBvbmVudCB0byBiZSBhYmxlIHRvIHRlcm1pbmF0ZQogICMjIFRMUyBjb25uZWN0aW9ucy4KICAjIHdlYlRsc0NlcnQ6CiAgIyB3ZWJUbHNLZXk6CgogICMjIENvbmNvdXJzZSBIb3N0IEtleXMuCiAgIyMgcmVmOiBodHRwczovL2NvbmNvdXJzZS1jaS5vcmcvaW5zdGFsbC5odG1sI2dlbmVyYXRpbmcta2V5cwogICMjCiAgaG9zdEtleTogfC0KICAgIC0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KICAgIE1JSUVvZ0lCQUFLQ0FRRUEyQVVQWHh1aURDL3FyQldqSWRUNWZ2TmNNbE1FWXBSM1g0U0xRSWdMQzFVTERzQ08KICAgIGZsZUtaK1dpNFJ6d2JrVUtpS21KbTVHZXlOVlZDRGRmdmREMVNkMSs1ZmFxbXAyL09RQnpMUzdvOE5ZL2J0TXcKICAgIDhoOWx4NEtWSmFKSjFFTTFFaXlHWTQxTng1OTFLUDE0cEJmcjAvTmRPSXJEdTJKdkY2ZTdDSEVicnprTjU3a2IKICAgIEJWUWthSU1hUzAxUncvNU9lNjhHRmFsbGkyaWk4TDhkTldWVnpxdUJoNVB3VldpbXZUZ3d2M1RZRzJUSDhMMVYKICAgIFY3bisvelJScGtqTWwyK1BVb3VHcUQrQnArNHdGK2hwNEFXNXYyNENxanRMSkVNdjRJRUp2MkZSZnJPYXVCSVoKICAgIFhqQVMxU1NnOVZhVE9TM2l3eGFZcnY4dUcxWGZNRkhJQ3ZrRVBRSURBUUFCQW9JQkFHODdXOGpyWDZ2SzJKbTMKICAgIG9vSi9PZUZteW1pWFdzQ3dGaSsyL2tWQ1IvMlQwdGZMeXhPL1crTlgyV0QxRjlDUCtIYWFaZU1YUHAzSFM3dXAKICAgIFY4RlQ0Wm9oVllCd1hUUzBXWXl1Y0tBcGNZVGhyVlFScHpobGRuRWZDbEdRbVZlVks3U3AvS0V5VjRTYzFTVkEKICAgIEwyaS9jSTE0Mk4yT2htN3NwcXVWa0xjdUZzVklOelowZlhDdjI1ZFRxYmtFZ2pUSnpOZEJ6eUZYdmM0ejBNdDkKICAgIGdXMTRNN216K1lLWU9mc0N4SUVtNDM4ZkM5YjE2Qzk2eUlGQmROKy9qYVA4cG1iMlJvSUUyRDBGOGJqNUsxaFIKICAgIFl5R0ZLTU9VNGU2Y1lxNTlpV2Z1Ykt1dTJXTkpFQmsvNWFPN3g3WHUyUzBrOHdJWWx3eEZ1dTRMZlIyS3ZpenUKICAgICttRlZmM2tDZ1lFQTllMCs0MHRKR3BPUE04aEFCM0R3WGpZYzhsQ3V5WWYzejMwVDNScVZOQ1VWU1dubGFqL3MKICAgIDNFTmk2K05nM3UrWnM4Y1IyQ0ZvdStqQUNsVHlXTHVTbkk5eUFDRDBleVc5bjRiellNVWJnZEM2dm5lTGpwengKICAgIHdXUjlYdjVSbVpWbHk3eFd1cWNnRWVFZjhSTmNZSTNvWGJ5MGxhRjNFT2J2dUF4LzRFVElrRmNDZ1lFQTRONDIKICAgIHcxVUVXR29wV0JJSVhZSGtFUEhRdUYwU3hSMkNaeWg5RXhUZVN4RnBoeWlia2NIUmpEVyt0OTFaTG5TbTVrMU4KICAgIFRPZFl1YzBBcEJWM1UrVGV4ZUZ2REk5NEwvT3plNkh0NU1hdFJRejhrUndNRkdKTDNUcnBiZ1RtV2RmRzA1QWQKICAgIG9pU2NKendZMTZvSlhuS3VzeGlrN1YrZ0NDTk5FMC8yVXVNblk0c0NnWUFFZjgycHZPUGVmNXFjR09ySytBNzkKICAgIHVrRzNVVENSY1ZKZ1VtcDluaEhpdlZieFcrV2Rsd1BQVjlCRWZvbDBLckFHTVBzcm1CamhieldzT3JlZ1ZmWXQKICAgIHRSWWgySGlBbEVVdTJQbzA2QVpEenJ6TDVVWUJXdSsxV1JCT0g1c0FrMUlrY3hLbklZMmRwaCsrZWxzelRRVlcKICAgIFNiQ0lHRWNrWVFVN3VjYlJKSkVDeXdLQmdCYjR2SEZ4OHZLeFRhM3drYWd6eDcrdlpGb2hML1N4RWd4Rng1azIKICAgIGJZc1BxVThrWjlnWkM3WWVHM0NmRFNoQXhIZ01kNVFlb2lMQS9ZckZvcDRRYUcyZ25QNlVmWHV3a3FwVG5ZRGMKICAgIGh3RGgxYjloTlI2ejkvb090YUFHb2gyVmZIdEtZcXlZdnRjSFBhWnllV2lMb0tzdEhsUWRpN1NwSG91VmhKMXQKICAgIEZTNEhBb0dBR3krNTYrenZkUk9qSnk5QTJNbi80QnZXcnN1NFJTUUlMQko2SGI0VHBGNDZwMmZuMHJ3cXloT2oKICAgIE9jY3MreGtkRXNJOXc1cGhYeklFZU9xMkxxdldIRFB4dGRMcHhPcnJteDRBZnRBV2RNOFMxK09xVHB6SGloSzEKICAgIHkxWk9yV2Z2T04rWGpXRkZBRWVqL0NwUVprTlVrVHpqVHRTQzBkbmZBdmVabGFzUUhkST0KICAgIC0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCgogIGhvc3RLZXlQdWI6IHwtCiAgICBzc2gtcnNhIEFBQUFCM056YUMxeWMyRUFBQUFEQVFBQkFBQUJBUURZQlE5Zkc2SU1MK3FzRmFNaDFQbCs4MXd5VXdSaWxIZGZoSXRBaUFzTFZRc093STUrVjRwbjVhTGhIUEJ1UlFxSXFZbWJrWjdJMVZVSU4xKzkwUFZKM1g3bDlxcWFuYjg1QUhNdEx1ancxajl1MHpEeUgyWEhncFVsb2tuVVF6VVNMSVpqalUzSG4zVW8vWGlrRit2VDgxMDRpc083WW04WHA3c0ljUnV2T1EzbnVSc0ZWQ1JvZ3hwTFRWSEQvazU3cndZVnFXV0xhS0x3dngwMVpWWE9xNEdIay9CVmFLYTlPREMvZE5nYlpNZnd2VlZYdWY3L05GR21TTXlYYjQ5U2k0YW9QNEduN2pBWDZHbmdCYm0vYmdLcU8wc2tReS9nZ1FtL1lWRitzNXE0RWhsZU1CTFZKS0QxVnBNNUxlTERGcGl1L3k0YlZkOHdVY2dLK1FROSBDb25jb3Vyc2UKCiAgIyMgQ29uY291cnNlIFNlc3Npb24gU2lnbmluZyBLZXlzLgogICMjIHJlZjogaHR0cHM6Ly9jb25jb3Vyc2UtY2kub3JnL2luc3RhbGwuaHRtbCNnZW5lcmF0aW5nLWtleXMKICAjIwogIHNlc3Npb25TaWduaW5nS2V5OiB8LQogICAgLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQogICAgTUlJRW93SUJBQUtDQVFFQXdMcWwvclVJYUkrUFg3VGwzRldjVGVlNHNRZjgvZGFha0FMWHg5NTV0UHdraHFsWQogICAgZTRUMlY4NHAveWxGdk5XcE00dmZjTVlLZk1ZMEpMS2dBZ0J2SmhDeXRTa0RCaFRCb1dtTjZ5RTBBQjExUDlFbgogICAgbElaUkJXTllxYUMyY1NnZTJaRDhxT1Nud2ZGaG5RQVc4KzdwRStFbEpBVmg3ZHRkRjNBNDc4SDUwbElpZ3E4SQogICAgek1XcDJFR0pwRkM3L1V1MzZvSUwvMDNNTkdDbXJIMWp2dFR1SmlBTVFVWll5TDFSZUJrdnZIT3p3OWk0SFhQeQogICAgU01WdGNsbG00TkJzMmFWUHR3aHIya3dTa0x0OHQxYlBkUm42T0l5RUF3NVdrdHpBS2FpWm5rVHZqNmczeHpkcAogICAgektjcmRsQnI5YXpubE52b1NpbkJVZnZ0d3lGbXZGTjFISGJBOXdJREFRQUJBb0lCQUU3Ry9EclVmSTlndnRYNwogICAgOTBqTXBZc2lnRmU4VUNqaG8yUGlCWmxvMG82cjBiSkpYaVYrLzhKOFBxWlJsSFBQVWM0RUNsenFWamNTUFJZUwogICAgL1Z4VUdScVNFTG9EL1h4cTE0ckd2bit4bnJPOVZzT3pGbDZiV0ZxL2RPcEJDdEhOK0c0dDJWaWZ2Z0tFUzhZRQogICAgMTF6MTlzZHRhK1VCWGpuL1JGbmtRU0dmUkNJM1FxVGFZdmp4ZXZ0MHVXbHlQbXFrRlBRUXc4YnZISVh6b0IrQgogICAgcnplaU1hKytuTXZiWDVwQUg5WEEwQnZoeXVIM2ZIaWRUVXdpVkJwa01jcExXdGpQMEEwSlRzZWNEZGJpbkREcQogICAgdW4yRUlvOHpNV1J3S1FOL0puVXhzaThBVUVpZ0JUQ1VxZURnUkVYdFc2MnV2RmtTcGNWTVh3bVZpdHlMWUlWeQogICAgcW5WTFVDRUNnWUVBNkl3WGtQMXFuU2ZjTmVvVkkveXBEdXoxL2tkcWNqU1BoTFllK2pkaUxMb0ZrTVc5QWxEbQogICAgbHp3TmFXbFRGRDl5Z28rTmpKQ282My9BOEhDbTU1c2Fqd3M1aFo2cjIwdmRaY0tGTWs5aDBxRjVvVkE3bGtRMgogICAgZ3ZHMldhem51VTdLa3FoZlArcFhoaUxnWktvSmtzdC8rZzdyNnVIcHJlZHdEWTZoeGVCSzR2c0NnWUVBMUNxSAogICAgOHl3QzVxVW8vMzZrUWcvVFUyYWROL1lFSGRKQUFiVTIzRVZyR1FTVm1uWFcwOEgyTkxGazB0c3hyd29ObmJncAogICAgUElrMko3QmltYkp2Yk5EMTdpYnI0R0FrbERUc1I4YUprRGwrMEpnTkNBSzlOMDdxVnQxczdGWHpoZzk1alVMOQogICAgRVFXNTV6NjBHQUpwZWNxTndBNEpzYThQODUyTjAzNTVPYnA5MlRVQ2dZQmtPQnZmN0pjSjY2Zkh4SDRmNkQragogICAgb3hQUTVrNUZzY2s0VkpTOUdTbENSVmtvcjA5cHRCdnNpWUR1TU9vUkM5YjUxWXdYVEREQWJXcGxOT2Q1WVNydAogICAgQXRWamRLSnovQm9LUk83S1k5T3d4czU0YXUrREx4cWZERFNlS1Jva2pvUlcrQ0UwbG5YcDVSWDN6Q0FjRjMrcgogICAgOE1wVGk5RDlsWVNCRXpzODRCRG1DUUtCZ1FDTWNINi9LM0hjSkpWbjBmZCt0eVVHZnRVdzlzc3d4anlTSk5iawogICAgcFpySDI2My9xV01EbHMrWGY1a2lyZTlNVTFaQ0FXWmlhTjBORm9lZC8yd2NWcEdFREFWMDU0OHUvMzByNGJLcgogICAgWWpPY2RobWlKTllGSjFxZEYwTURpYjJDRHZwQjFJYlpYclg0NlJ1akRPMnVyYko0MzVIeEtOVmhSL2hhZDh4YwogICAgdHlLWXhRS0JnQ1ZEaE4wTWhubFVRSlZaZlg0MkFQbUY0Z1FnMHIzc2ZML05HWGpFak1JS0tGZTVhODhlWlZIcgogICAgTDh4MStkcDBxN2N6QzhhL2wxRFV1aXdES2w4T0VweExzR0NxL0ovd0FmclNNUGlmdTZFVWxiVXdsSk9QZGdoYQogICAgK3AvS0ZBZWxIWEoydy84eWFja0FjYXJoMzVWUDdpeGh1dnhzd0hOZGd2ZnNCVEZjam4zMAogICAgLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KCiAgIyMgQ29uY291cnNlIFdvcmtlciBLZXlzLgogICMjIHJlZjogaHR0cHM6Ly9jb25jb3Vyc2UtY2kub3JnL2luc3RhbGwuaHRtbCNnZW5lcmF0aW5nLWtleXMKICAjIwogIHdvcmtlcktleTogfC0KICAgIC0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KICAgIE1JSUVwQUlCQUFLQ0FRRUF1UGVoVW1CWEFRQ29BN1RMQVFDWWhmK3Z6Y1pWeWorVkdYbk1oTEhuV0xrN2RSam8KICAgIENVOEdnTmFtZFM1aDdHM3l3eE92S0EzWWpPTHI4WHlPTUxTNGMrZThON3RJemxNV2RpWGhlMGxjQkg5WjFhaTUKICAgICtCb2YzL0JsRFVCa3NpS2RjMUErUWNmWDZ0RHdNa09PNXJlMUg0dk9LM0gvQ3lwZTU4d0NCMDNIWU5nYjA1RUQKICAgIGZXMUJqMnF2ejI5VnRteWp3RU11RHMxMDBpTXF3Q2ZQVXg5b3hYbW1YOHNVQlJtdy9ZMVJ4LzhwZEtJakt3M20KICAgIGtXSUhIQk9TQ1BpbU8xcUM0N0FhOHYvVUg5aEVSQ3lreXVGSGlCaUtsbkl2WldtOWJZdmhzUlR6NGd0NUt6UlkKICAgIDZPSTBvVmVIbExPSERTSzQ4RGE4VldpajE1bE9xTzJOeDZXc3NRSURBUUFCQW9JQkFERVQyMlVORk9pNk1OcFMKICAgIDVTNU41eXBlemxuT0QwTkxuWmNWM3pNeU5RMHdrTnNnRWFrdW82NFp4aTcvY0pJWUZqcTJoVm9lV2wvL2NkVXcKICAgIFZGWU9EWWNMYk1CbzNBZUt1a0g5Q1JmNlBnVWZlVW1jckVOdFF4bmJJaVRpK2hUZDVHTU5Yb2Q3ckFtdENKNTkKICAgIG1IUVZPR1MzWnF2V1luS20rbW1Na3RrM1JQaW55blgvQTR5M1dIUGFjdUFTNThITTA5Q2s0M1djSE14Ykdwc0wKICAgIC9nWnBJQ3lGWVoyRHZpTStBSHlXR2NtdzdMSnJwQzBRSG82K0JBRk1zNHhsVWVjTmdWSUZVcGZPb0FjZnNkdEcKICAgIEs5ajRBYnVaNDdpRmlzYmF5KzFweWcvN081ZVJUZEdWUVJ0YzdQQk1PamVhNWpHc2ZtbERtZG4xWlM1MHlrdW4KICAgIEFOZm9RNVVDZ1lFQTlBazczUFJ5OW5MbFJrdDRPQkNGLzRmd1RoVUNNZWRzbldhVmpRQk1KWWltNEZCMml2RjUKICAgIGNLZFd0M3kvUlpJODVLS1l1MEVYaExFb1NJRUFmejA1N1I4dDNRZFZLNHRaeDZCNDdVRmpCakNZZVZNdHdIRFEKICAgIHByeFFpT1BISUhDcGxCTkZ1R3pBNVZYTDlnUUxSRCtlazB1T3kyR0pKMFd1MXh5ZW91SStTVzhDZ1lFQXdna08KICAgIFRPdE9vZ3FtY0FBTGpXZ2VlUWlaZXRmbFNLYkpscFFOaG1DUEFNbTBTRkk4ZUY0U3BSWEx6ZDQxVkMybUxJd1QKICAgIEwzdGpjNy84b2NYb0VsRk00TDBmbzlMeC9TSEZINEpFbjVGVDBQWFBtdnNGMkpSaHNYSkZMSlNpaHhGLzkxWHMKICAgIDJhQmNRSUxQRnpMY3JJNk9GVWFrTndHVFUvQ0l4cGt6UnZRckc5OENnWUVBek5WblV1bzRDTmFkemFnUkszWHIKICAgIEUzWWw1VlJLK0ZwWTE3RkFmQTZ3MjV4Yy9kRnIvdW42MWUwUG80bm8vbHRtRXo3TFZmbW41Ty9TY1RFZW1xNW8KICAgIGpianJCU2hmZStKR3BJSDBucWlRbHFSNWh2U2paWEVNSWJmVkhXR2JSWVpyUUdnQTBIRXdaQTdrMlFYQjh6STMKICAgIFIwbFhmU3pNTTVPUTB1d3AxMnh4ZmE4Q2dZQkhJTHExUjZ6VGljUHBXcHJoZzBGb2JOYVdTWDRyVzdpYUVqdkMKICAgIC9ySnRQNE51MzNaN1NVRGNjMWo2Wm5KMklTWEJQcmZwdC9tRS9PUEhDWjFBMmJ5c3hhZExqcEJXa29LSVFtQ1YKICAgIGZkaVR5UWdKYit0OHNTZit2RHpQVXMwaFpqRGFvZ3pvMmZmM1RmeE1MTURvSUhuRkl0Z2ZzZHduOFF5eWdJWmoKICAgIGhDNHBVUUtCZ1FEcXN4bmtJNnlYRkU1Z3Noblc3SDh6cUtObHpLZC9kWkVMNmUrbFJ6NFIzVVkvS2NFa1JBZnEKICAgIFlpM2N3bzlmRTNVM2tTbXBsNU1Rd1VqV20vQlo3Snl1ZW9ZLzRuZHdhRlBnYzM0SUtzZ0owd2F1OXBaaVFBQjEKICAgIER4cE9TRitCUjcxSngzc3h2SWRDT0ROVHRtNjQ1ajV5clpWbkpBdU1Qb2ZvNVhGbXVuRG9KQT09CiAgICAtLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQoKICB3b3JrZXJLZXlQdWI6IHwtCiAgICBzc2gtcnNhIEFBQUFCM056YUMxeWMyRUFBQUFEQVFBQkFBQUJBUUM0OTZGU1lGY0JBS2dEdE1zQkFKaUYvNi9OeGxYS1A1VVplY3lFc2VkWXVUdDFHT2dKVHdhQTFxWjFMbUhzYmZMREU2OG9EZGlNNHV2eGZJNHd0TGh6NTd3M3Uwak9VeFoySmVGN1NWd0VmMW5WcUxuNEdoL2Y4R1VOUUdTeUlwMXpVRDVCeDlmcTBQQXlRNDdtdDdVZmk4NHJjZjhMS2w3bnpBSUhUY2RnMkJ2VGtRTjliVUdQYXEvUGIxVzJiS1BBUXk0T3pYVFNJeXJBSjg5VEgyakZlYVpmeXhRRkdiRDlqVkhIL3lsMG9pTXJEZWFSWWdjY0U1SUkrS1k3V29ManNCcnkvOVFmMkVSRUxLVEs0VWVJR0lxV2NpOWxhYjF0aStHeEZQUGlDM2tyTkZqbzRqU2hWNGVVczRjTklyandOcnhWYUtQWG1VNm83WTNIcGF5eCBDb25jb3Vyc2UKCiAgIyMgU2VjcmV0cyBmb3IgREIgYWNjZXNzCiAgIyBwb3N0Z3Jlc1VzZXI6CiAgIyBwb3N0Z3Jlc1Bhc3N3b3JkOgogICMgcG9zdGdyZXNDYUNlcnQ6CiAgIyBwb3N0Z3Jlc0NsaWVudENlcnQ6CiAgIyBwb3N0Z3Jlc0NsaWVudEtleToKCiAgIyMgU2VjcmV0cyBmb3IgREIgZW5jcnlwdGlvbgogICMjCiAgIyBlbmNyeXB0aW9uS2V5OgogICMgb2xkRW5jcnlwdGlvbktleToKCiAgIyMgU2VjcmV0cyBmb3IgU1NNIEFXUyBhY2Nlc3MKICAjIGF3c1NzbUFjY2Vzc0tleToKICAjIGF3c1NzbVNlY3JldEtleToKICAjIGF3c1NzbVNlc3Npb25Ub2tlbjoKCiAgIyMgU2VjcmV0cyBmb3IgU2VjcmV0cyBNYW5hZ2VyIEFXUyBhY2Nlc3MKICAjIGF3c1NlY3JldHNtYW5hZ2VyQWNjZXNzS2V5OgogICMgYXdzU2VjcmV0c21hbmFnZXJTZWNyZXRLZXk6CiAgIyBhd3NTZWNyZXRzbWFuYWdlclNlc3Npb25Ub2tlbjoKCiAgIyMgU2VjcmV0cyBmb3IgQ0YgT0F1dGgKICAjIGNmQ2xpZW50SWQ6CiAgIyBjZkNsaWVudFNlY3JldDoKICAjIGNmQ2FDZXJ0OiB8LQoKICAjIyBTZWNyZXRzIGZvciBHaXRIdWIgT0F1dGguCiAgIyMKICAjIGdpdGh1YkNsaWVudElkOgogICMgZ2l0aHViQ2xpZW50U2VjcmV0OgogICMgZ2l0aHViQ2FDZXJ0OiB8LQoKICAjIyBTZWNyZXRzIGZvciBHaXRMYWIgT0F1dGguCiAgIyMKICAjIGdpdGxhYkNsaWVudElkOgogICMgZ2l0bGFiQ2xpZW50U2VjcmV0OgoKICAjIyBTZWNyZXRzIGZvciBMREFQIEF1dGguCiAgIyMKICAjIGxkYXBDYUNlcnQ6IHwtCgogICMjIFNlY3JldHMgZm9yIGdlbmVyaWMgT0F1dGguCiAgIyMKICAjIG9hdXRoQ2xpZW50SWQ6CiAgIyBvYXV0aENsaWVudFNlY3JldDoKICAjIG9hdXRoQ2FDZXJ0OiB8LQoKICAjIyBTZWNyZXRzIGZvciBvaWRjIE9BdXRoLgogICMjCiAgIyBvaWRjQ2xpZW50SWQ6CiAgIyBvaWRjQ2xpZW50U2VjcmV0OgogICMgb2lkY0NhQ2VydDogfC0KCiAgIyMgU2VjcmV0cyBmb3IgdXNpbmcgSGFzaGNvcnAgVmF1bHQgYXMgYSBjcmVkZW50aWFsIG1hbmFnZXIuCiAgIyMKICAjIyBpZiB0aGUgVmF1bHQgc2VydmVyIGlzIHVzaW5nIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUsIHByb3ZpZGUgdGhlIENBIHB1YmxpYyBrZXkuCiAgIyMgdGhlIHZhbHVlIHdpbGwgYmUgd3JpdHRlbiB0byAvY29uY291cnNlLXZhdWx0L2NhLmNlcnQKICAjIwogICMgdmF1bHRDYUNlcnQ6IHwtCgogICMjIGluaXRpYWwgcGVyaW9kaWMgdG9rZW4gaXNzdWVkIGZvciBjb25jb3Vyc2UKICAjIyByZWY6IGh0dHBzOi8vd3d3LnZhdWx0cHJvamVjdC5pby9kb2NzL2NvbmNlcHRzL3Rva2Vucy5odG1sI3BlcmlvZGljLXRva2VucwogICMjCiAgIyB2YXVsdENsaWVudFRva2VuOgoKICAjIyB2YXVsdCBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzCiAgIyMgUGFyYW10ZXIgdG8gcGFzcyB3aGVuIGxvZ2dpbmcgaW4gdmlhIHRoZSBiYWNrZW5kCiAgIyMgUmVxdWlyZWQgZm9yICJhcHByb2xlIiBhdXRoZW5pY2F0aW9uIG1ldGhvZAogICMjIGUuZy4gInJvbGVfaWQ9eCxzZWNyZXRfaWQ9eCIKICAjIyByZWY6IGh0dHBzOi8vY29uY291cnNlLWNpLm9yZy9jcmVkcy5odG1sI3ZhdWx0LWF1dGgtcGFyYW09TkFNRT1WQUxVRQogICMjCiAgIyB2YXVsdEF1dGhQYXJhbToKCiAgIyMgcHJvdmlkZSB0aGUgY2xpZW50IGNlcnRpZmljYXRlIGZvciBhdXRoZW50aWNhdGluZyB3aXRoIHRoZSBbVExTXShodHRwczovL3d3dy52YXVsdHByb2plY3QuaW8vZG9jcy9hdXRoL2NlcnQuaHRtbCkgYmFja2VuZAogICMjIHRoZSB2YWx1ZSB3aWxsIGJlIHdyaXR0ZW4gdG8gL2NvbmNvdXJzZS12YXVsdC9jbGllbnQuY2VydAogICMjIG1ha2Ugc3VyZSB0byBhbHNvIHNldCBjcmVkZW50aWFsTWFuYWdlci52YXVsdC5hdXRoQmFja2VuZCB0byBgY2VydGAKICAjIwogICMgdmF1bHRDbGllbnRDZXJ0OiB8LQoKICAjIyBwcm92aWRlIHRoZSBjbGllbnQga2V5IGZvciBhdXRoZW50aWNhdGluZyB3aXRoIHRoZSBbVExTXShodHRwczovL3d3dy52YXVsdHByb2plY3QuaW8vZG9jcy9hdXRoL2NlcnQuaHRtbCkgYmFja2VuZAogICMjIHRoZSB2YWx1ZSB3aWxsIGJlIHdyaXR0ZW4gdG8gL2NvbmNvdXJzZS12YXVsdC9jbGllbnQua2V5CiAgIyMgbWFrZSBzdXJlIHRvIGFsc28gc2V0IGNyZWRlbnRpYWxNYW5hZ2VyLnZhdWx0LmF1dGhCYWNrZW5kIHRvIGBjZXJ0YAogICMjCiAgIyB2YXVsdENsaWVudEtleTogfC0KCiAgIyMgSWYgaW5mbHV4ZGIgbWV0cmljcyBhcmUgZW5hYmxlZCBhbmQgYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQsCiAgIyMgcHJvdmlkZSBhIHBhc3N3b3JkIGhlcmUgdG8gYXV0aGVudGljYXRlIHdpdGggdGhlIGluZmx1eGRiIHNlcnZlciBjb25maWd1cmVkLgogICMjCiAgIyBpbmZsdXhkYlBhc3N3b3JkOgoKICAjIyBTU0wgY2VydGlmaWNhdGUgdXNlZCB0byB2ZXJpZnkgdGhlIFN5c2xvZyBzZXJ2ZXIgZm9yIGRyYWluaW5nIGJ1aWxkIGxvZ3MuCiAgIyBzeXNsb2dDYUNlcnQ6IHwtCg==" 119 } 120 ] 121 }, 122 "contentSHA": "99183db72b179080361aae192a23e926cf0fca14d098c2ce4227d01c843fcec6" 123 } 124 }