Repository: elastic/go-libaudit
Pull request #70 (2020-07-08 04:33:31)

Add some basic IDS mappings for anomaly events
Some useful pdfs about how anomaly events map to IDS:

https://people.redhat.com/sgrubb/audit/audit_ids_2011.pdf

and https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/pdf/security_guide/Red_Hat_Enterprise_Linux-6-Security_Guide-en-US.pdf which states:

> All Audit event types prepended with ANOM are intended to be processed by an intrusion detection program.

Many of the `ANOM` events were used by an `auditd` IDS plugin that got dropped called [`prelude`](https://github.com/linux-audit/audit-userspace/commit/b754dd1f462862f6faa62fadd74203f94fcdce9b), but nonetheless these can be implemented by potentially any userspace program that generates events for the audit framework. A current user of many of the `ANOM_LOGIN_*` events is PAM.

For more details, see: https://github.com/elastic/beats/issues/19629

elasticmachine: 
## :broken_heart: Build Failed


<!-- BUILD BADGES-->
> _the below badges are clickable and redirect to their specific view in the CI or DOCS_
[![Pipeline View](https://img.shields.io/badge/pipeline-pipeline%20-green)](https://beats-ci.elastic.co/blue/organizations/jenkins/Library%2Fgo-libaudit-mbp%2FPR-70/detail/PR-70/2//pipeline) [![Test View](https://img.shields.io/badge/test-test-green)](https://beats-ci.elastic.co/blue/organizations/jenkins/Library%2Fgo-libaudit-mbp%2FPR-70/detail/PR-70/2//tests) [![Changes](https://img.shields.io/badge/changes-changes-green)](https://beats-ci.elastic.co/blue/organizations/jenkins/Library%2Fgo-libaudit-mbp%2FPR-70/detail/PR-70/2//changes) [![Artifacts](https://img.shields.io/badge/artifacts-artifacts-yellow)](https://beats-ci.elastic.co/blue/organizations/jenkins/Library%2Fgo-libaudit-mbp%2FPR-70/detail/PR-70/2//artifacts) [![preview](https://img.shields.io/badge/docs-preview-yellowgreen)](http://null_70.docs-preview.app.elstc.co/diff)  [![preview](https://img.shields.io/badge/elastic-observability-blue)](https://ci-stats.elastic.co/app/apm/services/beats-ci/transactions/view?rangeFrom=2022-02-04T16:44:39.312Z&rangeTo=2022-02-04T17:04:39.312Z&transactionName=Library/go-libaudit-mbp/PR-{number}&transactionType=job&latencyAggregationType=avg&traceId=5149b291e704dcfa23099f541e136d5b&transactionId=bb605b5a12094452)

<!-- BUILD SUMMARY-->
<details><summary>Expand to view the summary</summary>
<p>

#### Build stats




* Start Time: 2022-02-04T16:54:39.312+0000


* Duration: 6 min 21 sec





</p>
</details>

<!-- TEST RESULTS IF ANY-->


<!-- STEPS ERRORS IF ANY -->











### Steps errors [![3](https://img.shields.io/badge/3%20-red)](https://beats-ci.elastic.co/blue/organizations/jenkins/Library%2Fgo-libaudit-mbp%2FPR-70/detail/PR-70/2//pipeline)
  <details><summary>Expand to view the steps failures</summary>
  <p>


  
  
  
  
##### `Check out from version control`
<ul>
<li>Took 0 min 9 sec . View more details <a href="https://beats-ci.elastic.co//blue/rest/organizations/jenkins/pipelines/Library/pipelines/go-libaudit-mbp/pipelines/PR-70/runs/2/steps/11/log/?start=0">here</a></li>
<li>Description: <code>[2022-02-04T16:59:57.761Z] The recommended git tool is: NONE
[2022-02-04T17:00:04.359Z] using crede</code></l1>
</ul>
  
  
  
  
##### `Check out from version control`
<ul>
<li>Took 0 min 1 sec . View more details <a href="https://beats-ci.elastic.co//blue/rest/organizations/jenkins/pipelines/Library/pipelines/go-libaudit-mbp/pipelines/PR-70/runs/2/steps/15/log/?start=0">here</a></li>
<li>Description: <code>[2022-02-04T17:00:26.601Z] The recommended git tool is: NONE
[2022-02-04T17:00:26.611Z] using crede</code></l1>
</ul>
  
  
  
  
##### `Check out from version control`
<ul>
<li>Took 0 min 1 sec . View more details <a href="https://beats-ci.elastic.co//blue/rest/organizations/jenkins/pipelines/Library/pipelines/go-libaudit-mbp/pipelines/PR-70/runs/2/steps/19/log/?start=0">here</a></li>
<li>Description: <code>[2022-02-04T17:00:57.640Z] The recommended git tool is: NONE
[2022-02-04T17:00:57.652Z] using crede</code></l1>
</ul>
  
  </p>
  </details>



<!--COMMENT_GENERATED_WITH_ID_comment.id-->
elasticmachine: 
## :green_heart: Build Succeeded


<!-- BUILD BADGES-->
> _the below badges are clickable and redirect to their specific view in the CI or DOCS_
[![Pipeline View](https://img.shields.io/badge/pipeline-pipeline%20-green)](https://beats-ci.elastic.co/blue/organizations/jenkins/Library%2Fgo-libaudit-mbp%2FPR-70/detail/PR-70/5//pipeline) [![Test View](https://img.shields.io/badge/test-test-green)](https://beats-ci.elastic.co/blue/organizations/jenkins/Library%2Fgo-libaudit-mbp%2FPR-70/detail/PR-70/5//tests) [![Changes](https://img.shields.io/badge/changes-changes-green)](https://beats-ci.elastic.co/blue/organizations/jenkins/Library%2Fgo-libaudit-mbp%2FPR-70/detail/PR-70/5//changes) [![Artifacts](https://img.shields.io/badge/artifacts-artifacts-yellow)](https://beats-ci.elastic.co/blue/organizations/jenkins/Library%2Fgo-libaudit-mbp%2FPR-70/detail/PR-70/5//artifacts) [![preview](https://img.shields.io/badge/docs-preview-yellowgreen)](http://go-libaudit_70.docs-preview.app.elstc.co/diff)  [![preview](https://img.shields.io/badge/elastic-observability-blue)](https://ci-stats.elastic.co/app/apm/services/beats-ci/transactions/view?rangeFrom=2022-02-04T16:58:24.411Z&rangeTo=2022-02-04T17:18:24.411Z&transactionName=Library/go-libaudit-mbp/PR-{number}&transactionType=job&latencyAggregationType=avg&traceId=a7487165736f35edd757e6ad83567072&transactionId=2891dcbac9004de5)

<!-- BUILD SUMMARY-->
<details><summary>Expand to view the summary</summary>
<p>

#### Build stats




* Start Time: 2022-02-04T17:08:24.411+0000


* Duration: 7 min 30 sec




#### Test stats :test_tube:

| Test         | Results                         |
| ------------ | :-----------------------------: |
| Failed       | 0  |
| Passed       | 377  |
| Skipped      | 40 |
| Total        | 417   |


</p>
</details>

<!-- TEST RESULTS IF ANY-->


<!-- STEPS ERRORS IF ANY -->













<!--COMMENT_GENERATED_WITH_ID_comment.id-->

Patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 11bdad5..5e8b578 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
 
 ### Added
 
+- Add ECS mappings for more audit anomaly events. [#70](https://github.com/elastic/go-libaudit/pull/70)
 - Add `BacklogWaitTimeActual` status field, which is available since Linux 5.9 [#93](https://github.com/elastic/go-libaudit/pull/93/files)
 - Add ECS normalizations for `TIME_ADJNTPVAL` and `TIME_INJOFFSET`. [#98](https://github.com/elastic/go-libaudit/pull/98)
 
@@ -45,7 +46,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
 ### Changed
 
 - Use ECS recommended values for network direction. [#75](https://github.com/elastic/go-libaudit/issues/75)[#76](https://github.com/elastic/go-libaudit/pull/76)
-  
+
 ### Removed
 
 - Remove github.com/Sirupsen/logrus dependency from examples. [#73](https://github.com/elastic/go-libaudit/issues/73)
diff --git a/aucoalesce/coalesce.go b/aucoalesce/coalesce.go
index d43c337..c38ecd1 100644
--- a/aucoalesce/coalesce.go
+++ b/aucoalesce/coalesce.go
@@ -36,6 +36,7 @@ const modeBlockDevice = 0o60000
 
 // ECSEvent contains ECS-specific categorization fields
 type ECSEvent struct {
+	Kind     string   `json:"kind,omitempty" yaml:"kind,omitempty"`
 	Category []string `json:"category,omitempty" yaml:"category,omitempty"`
 	Type     []string `json:"type,omitempty" yaml:"type,omitempty"`
 	Outcome  string   `json:"outcome,omitempty" yaml:"outcome,omitempty"`
@@ -488,6 +489,7 @@ func applyNormalization(event *Event) {
 		return
 	}
 
+	event.ECS.Event.Kind = norm.ECS.Kind
 	event.ECS.Event.Category = norm.ECS.Category.Values
 	event.ECS.Event.Type = norm.ECS.Type.Values
 
diff --git a/aucoalesce/normalizations.yaml b/aucoalesce/normalizations.yaml
index a77da68..563e343 100644
--- a/aucoalesce/normalizations.yaml
+++ b/aucoalesce/normalizations.yaml
@@ -1537,7 +1537,7 @@ normalizations:
   - action: access-result
     record_types: DAC_CHECK
 
-  # Anomalies
+  # Anomalies - Related to IDS
 
   # AUDIT_ANOM_ABEND - Process ended abnormally
   - record_types: ANOM_ABEND
@@ -1548,10 +1548,13 @@ normalizations:
       what: process
     how: sig
     ecs:
-      # consider adding an anomaly category when we introduce
-      # to ECS
-      <<: *ecs-process
-      type: end
+      kind: alert
+      category:
+        - process
+        - intrusion_detection
+      type:
+        - end
+        - info
   # AUDIT_ANOM_EXEC - Execution of file
   - record_types: ANOM_EXEC
     action: attempted-execution-of-forbidden-program
@@ -1560,56 +1563,236 @@ normalizations:
       what: process
     how: terminal
     ecs:
-      # consider adding an anomaly category when we introduce
-      # to ECS
-      <<: *ecs-process
-      type: start
+      kind: alert
+      category:
+        - process
+        - intrusion_detection
+      type:
+        - start
+        - info
   # AUDIT_ANOM_LINK - Suspicious use of file links
   - record_types: ANOM_LINK
     action: used-suspicious-link
+    ecs:
+      kind: alert
+      category:
+        - file
+        - intrusion_detection
+      type:
+        - access
+        - info
   # AUDIT_ANOM_LOGIN_FAILURES - Failed login limit reached
   - <<: *macro-user-session
     record_types: ANOM_LOGIN_FAILURES
     action: failed-log-in-too-many-times-to
-  # AUDIT_ANOM_LOGIN_LOCATION - Login from forbidden location
+    ecs:
+      kind: alert
+      category:
+        - authentication
+        - intrusion_detection
+      type:
+        - start
+        - denied
+    # AUDIT_ANOM_LOGIN_LOCATION - Login from forbidden location
   - <<: *macro-user-session
     record_types: ANOM_LOGIN_LOCATION
     action: attempted-log-in-from-unusual-place-to
+    ecs:
+      kind: alert
+      category:
+        - authentication
+        - intrusion_detection
+      type:
+        - start
+        - denied
   # AUDIT_ANOM_LOGIN_SESSIONS - Max concurrent sessions reached
   - <<: *macro-user-session
     record_types: ANOM_LOGIN_SESSIONS
     action: opened-too-many-sessions-to
+    ecs:
+      kind: alert
+      category:
+        - authentication
+        - intrusion_detection
+      type:
+        - start
+        - denied
   # AUDIT_ANOM_LOGIN_TIME - Login attempted at bad time
   - <<: *macro-user-session
     record_types: ANOM_LOGIN_TIME
     action: attempted-log-in-during-unusual-hour-to
+    ecs:
+      kind: alert
+      category:
+        - authentication
+        - intrusion_detection
+      type:
+        - start
+        - denied
   # AUDIT_ANOM_PROMISCUOUS - Device changed promiscuous mode
   - record_types: ANOM_PROMISCUOUS
     action: changed-promiscuous-mode-on-device # Could be entered or exited based on prom field.
     object:
       primary: dev
       what: network-device
+    ecs:
+      kind: alert
+      # add device once in ECS
+      category:
+        - intrusion_detection
+      type:
+        - info
+        - change
   # AUDIT_ANOM_RBAC_INTEGRITY_FAIL - RBAC file integrity failure
   - record_types: ANOM_RBAC_INTEGRITY_FAIL
     action: tested-file-system-integrity-of
     object:
       primary: hostname
       what: filesystem
+    ecs:
+      kind: alert
+      category:
+        - intrusion_detection
+      type:
+        - info
   # AUDIT_ANOM_LOGIN_ACCT - Login attempted to watched acct
+  - record_types: AUDIT_ANOM_LOGIN_ACCT
+    action: attempted-log-in-to-watched-account
+    ecs:
+      kind: alert
+      category:
+        - authentication
+        - intrusion_detection
+      type:
+        - start
+        - denied
   # AUDIT_ANOM_MAX_DAC - Max DAC failures reached
+  - record_types: ANOM_MAX_DAC
+    action: max-discretionary-access-control-failures-reached
+    ecs:
+      kind: alert
+      category:
+        - intrusion_detection
+      type:
+        - info
   # AUDIT_ANOM_MAX_MAC - Max MAC failures reached
+  - record_types: ANOM_MAX_MAC
+    action: max-mandatory-access-control-failures-reached
+    ecs:
+      kind: alert
+      category:
+        - intrusion_detection
+      type:
+        - info
   # AUDIT_ANOM_AMTU_FAIL - AMTU failure
+  - record_types: ANOM_AMTU_FAIL
+    action: abstract-machine-test-utility-failure
+    ecs:
+      kind: alert
+      category:
+        - intrusion_detection
+      type:
+        - info
   # AUDIT_ANOM_RBAC_FAIL - RBAC self test failure
+  - record_types: ANOM_RBAC_FAIL
+    action: rbac-self-test-failure
+    ecs:
+      kind: alert
+      category:
+        - intrusion_detection
+      type:
+        - info
   # AUDIT_ANOM_CRYPTO_FAIL - Crypto system test failure
+  - record_types: ANOM_CRYPTO_FAIL
+    action: crypto-system-test-failure
+    ecs:
+      kind: alert
+      category:
+        - intrusion_detection
+      type:
+        - info
   # AUDIT_ANOM_MK_EXE - Make an executable
+  - record_types: ANOM_MK_EXE
+    action: made-an-executable
+    ecs:
+      kind: alert
+      category:
+        - file
+        - intrusion_detection
+      type:
+        - change
+        - info
   # AUDIT_ANOM_ACCESS_FS - Access of file or dir
+  - record_types: ANOM_ACCESS_FS
+    action: accessed-watched-file-or-directory
+    ecs:
+      kind: alert
+      category:
+        - file
+        - intrusion_detection
+      type:
+        - access
+        - info
   # AUDIT_ANOM_ADD_ACCT - Adding an acct
+  - record_types: ANOM_ADD_ACCT
+    action: added-user-account
+    ecs:
+      kind: alert
+      category:
+        - iam
+        - intrusion_detection
+      type:
+        - user
+        - creation
+        - info
   # AUDIT_ANOM_DEL_ACCT - Deleting an acct
+  - record_types: ANOM_DEL_ACCT
+    action: deleted-user-account
+    ecs:
+      kind: alert
+      category:
+        - iam
+        - intrusion_detection
+      type:
+        - user
+        - deletion
+        - info
   # AUDIT_ANOM_MOD_ACCT - Changing an acct
+  - record_types: ANOM_MOD_ACCT
+    action: modified-user-account
+    ecs:
+      kind: alert
+      category:
+        - iam
+        - intrusion_detection
+      type:
+        - user
+        - change
+        - info
   # AUDIT_ANOM_ROOT_TRANS - User became root
+  - record_types: ANOM_ROOT_TRANS
+    action: user-became-root
+    ecs:
+      kind: alert
+      category:
+        - authentication
+        - intrusion_detection
+      type:
+        - start
+        - info
   # AUDIT_ANOM_LOGIN_SERVICE - Service acct attempted login
+  - record_types: ANOM_LOGIN_SERVICE
+    action: service-account-attempted-login
+    ecs:
+      kind: alert
+      category:
+        - authentication
+        - intrusion_detection
+      type:
+        - start
+        - denied
 
-  # Anomaly responses
+  # Anomaly responses - Related to IPS
 
   # AUDIT_RESP_ANOMALY - Anomaly not reacted to
   # AUDIT_RESP_ALERT - Alert email was sent
diff --git a/aucoalesce/normalize.go b/aucoalesce/normalize.go
index af1a3d5..268295e 100644
--- a/aucoalesce/normalize.go
+++ b/aucoalesce/normalize.go
@@ -82,6 +82,7 @@ type ECSFieldMapping struct {
 }
 
 type ECSMapping struct {
+	Kind     string            `yaml:"kind"`
 	Category Strings           `yaml:"category"`
 	Type     Strings           `yaml:"type"`
 	Mappings []ECSFieldMapping `yaml:"mappings"`
diff --git a/aucoalesce/znormalize_data.go b/aucoalesce/znormalize_data.go
index d1daf1c..2bb6377 100644
--- a/aucoalesce/znormalize_data.go
+++ b/aucoalesce/znormalize_data.go
@@ -31,7 +31,7 @@ func asset(key string) ([]byte, error) {
 		assets = map[string][]byte{}
 
 		var value []byte
-		value, _ = base64.StdEncoding.DecodeString("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCgogIC0gJmVjcy1zZXNzaW9uCiAgICBjYXRlZ29yeTogc2Vzc2lvbgogICAgdHlwZTogaW5mbwogICAgbWFwcGluZ3M6CiAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQoKICAtICZlY3MtaG9zdAogICAgY2F0ZWdvcnk6IGhvc3QKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLXByb2Nlc3MKICAgIGNhdGVnb3J5OiBwcm9jZXNzCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1maWxlCiAgICBjYXRlZ29yeTogZmlsZQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtZHJpdmVyCiAgICBjYXRlZ29yeTogZHJpdmVyCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1uZXR3b3JrCiAgICBjYXRlZ29yeTogbmV0d29yawogICAgdHlwZToKICAgICAgLSBjb25uZWN0aW9uCiAgICAgIC0gaW5mbwoKICAtICZlY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgIG1hcHBpbmdzOgogICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyCiAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyLnRhcmdldAoKICAtICZlY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgICAgIC0gZnJvbTogb2JqZWN0LnByaW1hcnkKICAgICAgICB0bzogZ3JvdXAKCiMgTm9ybWFsaXphdGlvbnMgaXMgYSBsaXN0IG9mIGRlY2xhcmF0aW9ucyBzcGVjaWZ5aW5nIGhvdyB0byBub3JtYWxpemUgdGhlIGRhdGEKIyBjb250YWluZWQgaW4gYW4gZXZlbnQuIFRoZSBub3JtYWxpemF0aW9uIGNhbiBiZSBhcHBsaWVkIGJhc2VkIG9uIHRoZSBzeXNjYWxsCiMgbmFtZSAoZS5nLiBjb25uZWN0LCBvcGVuKSBvciBiYXNlZCBvbiB0aGUgcmVjb3JkIHR5cGUgKGUuZy4gVVNFUl9MT0dJTikuCiMgTm8gdHdvIG5vcm1hbGl6YXRpb25zIGNhbiBhcHBseSB0byB0aGUgc2FtZSBzeXNjYWxsIG9yIHJlY29yZCB0eXBlLiBUaGlzCiMgd2lsbCByZXN1bHQgaW4gYSBmYWlsdXJlIGF0IGxvYWQgdGltZS4KIwojIEVhY2ggbm9ybWFsaXphdGlvbiBzaG91bGQgc3BlY2lmeToKIyAgIGFjdGlvbiAtIHdoYXQgaGFwcGVuZWQKIyAgIGFjdG9yICAtIHdobyBkaWQgdGhpcyBvciB3aG8gdHJpZ2dlcmVkIHRoZSBldmVudAojICAgb2JqZWN0IC0gd2hhdCB3YXMgdGhlICJ0aGluZyIgaW52b2x2ZWQgaW4gdGhlIGFjdGlvbiAoZS5nLiBwcm9jZXNzLCBzb2NrZXQpCiMgICBob3cgICAgLSBob3cgd2FzIHRoZSBhY3Rpb24gcGVyZm9ybWVkIChlLmcuIGV4ZSBvciB0ZXJtaW5hbCkKbm9ybWFsaXphdGlvbnM6CiAgLSBlY3M6ICplY3MtcHJvY2VzcwogICAgc3lzY2FsbHM6CiAgICAgIC0gJyonICMgdGhpcyBpcyBhIGNhdGNoIGFsbAogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjcmVhdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBjcmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGZhbGxvY2F0ZSAtIG1hbmlwdWxhdGUgZmlsZSBzcGFjZQogICAgICAtIGZhbGxvY2F0ZQogICAgICAjIHRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIHRydW5jYXRlCiAgICAgICMgZnRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIGZ0cnVuY2F0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgdGVjaG5pY2FsbHkgeW91IGNhbiB0cnVuY2F0ZSBhIGZpbGUgdG8gdGhlIHNhbWUgbGVuZ3RoCiAgICAgICMgYnV0IHJlZ2FyZGxlc3MsIHdlIGNvbnNpZGVyIHRoaXMgYSBjaGFuZ2UKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIG9wZW4gLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbgogICAgICAjIG9wZW5hdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBvcGVuYXQKICAgICAgIyByZWFkbGluayAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmsKICAgICAgIyByZWFkbGlua2F0IC0gcmVhZCB2YWx1ZSBvZiBhIHN5bWJvbGljIGxpbmsKICAgICAgLSByZWFkbGlua2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiByZWFkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcmVhZCAtIHJlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHJlYWQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHdyb3RlLXRvLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgd3JpdGUgLSB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHdyaXRlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1hdHRyaWJ1dGVzLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIHNldHhhdHRyCiAgICAgICMgZnNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZzZXR4YXR0cgogICAgICAjIGxzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsc2V0eGF0dHIKICAgICAgIyByZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSByZW1vdmV4YXR0cgogICAgICAjIGZyZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSBmcmVtb3ZleGF0dHIKICAgICAgIyBscmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gbHJlbW92ZXhhdHRyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1wZXJtaXNzaW9ucy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBjaG1vZAogICAgICAjIGZjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2QKICAgICAgIyBmY2htb2RhdCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2RhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtb3duZXJzaGlwLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBjaG93bgogICAgICAjIGZjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gZmNob3duCiAgICAgICMgZmNob3duYXQgLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bmF0CiAgICAgICMgbGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBsY2hvd24KICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbG9hZGVkLWtlcm5lbC1tb2R1bGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwcmltYXJ5OiBuYW1lCiAgICByZWNvcmRfdHlwZXM6CiAgICAgIC0gS0VSTl9NT0RVTEUKICAgIHN5c2NhbGxzOgogICAgICAjIGZpbml0X21vZHVsZSAtIGxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZmluaXRfbW9kdWxlCiAgICAgICMgaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGluaXRfbW9kdWxlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWRyaXZlcgogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiB1bmxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGRlbGV0ZV9tb2R1bGUgLSB1bmxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZGVsZXRlX21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNyZWF0ZWQtZGlyZWN0b3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtkaXIgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcgogICAgICAjIG1rZGlyYXQgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcmF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogbW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1vdW50IC0gbW91bnQgZmlsZXN5c3RlbQogICAgICAtIG1vdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyBzaW5jZSBhIG5ldyBtb3VudCBhcHBlYXJzIG9uIHRoZSBzeXN0ZW0KICAgICAgIyB3ZSBjb25zaWRlciB0aGlzIGEgaGlnaC1sZXZlbCAiY3JlYXRpb24iIGV2ZW50CiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHJlbmFtZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwYXRoX2luZGV4OiAyCiAgICBzeXNjYWxsczoKICAgICAgIyByZW5hbWUgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lCiAgICAgICMgcmVuYW1lYXQgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQKICAgICAgIyByZW5hbWVhdDIgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoZWNrZWQtbWV0YWRhdGEtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgYWNjZXNzIC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBhY2Nlc3MKICAgICAgIyBmYWNjZXNzYXQgLSBjaGVjayB1c2VyJ3MgcGVybWlzc2lvbnMgZm9yIGEgZmlsZQogICAgICAtIGZhY2Nlc3NhdAogICAgICAjIGZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBmc3RhdGF0CiAgICAgICMgbmV3ZnN0YXRhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIG5ld2ZzdGF0YXQKICAgICAgIyBzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gc3RhdAogICAgICAjIHN0YXQ2NCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQ2NAogICAgICAjIGZzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXQKICAgICAgIyBsc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGxzdGF0CiAgICAgICMgZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBnZXR4YXR0cgogICAgICAjIGxnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGxnZXR4YXR0cgogICAgICAjIGZnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZnZXR4YXR0cgogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogY2hlY2tlZC1maWxlc3lzdGVtLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBzdGF0ZnMKICAgICAgIyBmc3RhdGZzIC0gZ2V0IGZpbGVzeXN0ZW0gc3RhdGlzdGljcwogICAgICAtIGZzdGF0ZnMKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHN5bWxpbmtlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzeW1saW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rCiAgICAgICMgc3ltbGlua2F0IC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjICJjcmVhdGlvbiIgc2luY2Ugd2UncmUgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0KICAgICAgIyBlbnRyeSBmb3IgdGhlIHN5bWxpbmsKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogdW5tb3VudGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHVtb3VudCAtIHVubW91bnQgZmlsZXN5c3RlbQogICAgICAtIHVtb3VudAogICAgICAjIHVtb3VudDIgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiZGVsZXRpb24iIHRvIG1pcnJvciB0aGUgImNyZWF0aW9uIiBvZiB0aGUgbW91bnQKICAgICAgdHlwZTogZGVsZXRpb24KICAtIGFjdGlvbjogZGVsZXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBybWRpciAtIGRlbGV0ZSBhIGRpcmVjdG9yeQogICAgICAtIHJtZGlyCiAgICAgICMgdW5saW5rIC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rCiAgICAgICMgdW5saW5rYXQgLSBkZWxldGUgYSBuYW1lIGFuZCBwb3NzaWJseSB0aGUgZmlsZSBpdCByZWZlcnMgdG8KICAgICAgLSB1bmxpbmthdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGNoYW5nZWQtdGltZXN0YW1wLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHV0aW1lIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lCiAgICAgICMgdXRpbWVzIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lcwogICAgICAjIGZ1dGltZXNhdCAtIGNoYW5nZSB0aW1lc3RhbXBzIG9mIGEgZmlsZSByZWxhdGl2ZSB0byBhIFwgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGZ1dGltZXNhdAogICAgICAjIGZ1dGltZW5zIC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gZnV0aW1lbnMKICAgICAgIyB1dGltZW5zYXQgLSBjaGFuZ2UgZmlsZSB0aW1lc3RhbXBzIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24KICAgICAgLSB1dGltZW5zYXQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGV4ZWN1dGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGV4ZWN2ZSAtIGV4ZWN1dGUgcHJvZ3JhbQogICAgICAtIGV4ZWN2ZQogICAgICAjIGV4ZWN2ZWF0IC0gZXhlY3V0ZSBwcm9ncmFtIHJlbGF0aXZlIHRvIGEgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGV4ZWN2ZWF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogbGlzdGVuLWZvci1jb25uZWN0aW9ucwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGxpc3Rlbi0gbGlzdGVuIGZvciBjb25uZWN0aW9ucyBvbiBhIHNvY2tldAogICAgICAtIGxpc3RlbgogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGFjY2VwdGVkLWNvbm5lY3Rpb24tZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VwdCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQKICAgICAgIyBhY2NlcHQ0IC0gYWNjZXB0IGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICAgICAtIGFjY2VwdDQKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogYm91bmQtc29ja2V0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgYmluZCAtYmluZCBhIG5hbWUgdG8gYSBzb2NrZXQKICAgICAgLSBiaW5kCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogY29ubmVjdGVkLXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgIC0gY29ubmVjdAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogIC0gYWN0aW9uOiByZWNlaXZlZC1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgcmVjdiAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2CiAgICAgICMgcmVjdmZyb20gLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdmZyb20KICAgICAgIyByZWN2bXNnIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Ztc2cKICAgICAgIyByZWN2bW1zZyAtIHJlY2VpdmUgbXVsdGlwbGUgbWVzc2FnZXMgb24gYSBzb2NrZXQKICAgICAgLSByZWN2bW1zZwogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgLSBhY3Rpb246IHNlbnQtdG8KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBzZW5kIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kCiAgICAgICMgc2VuZHRvIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kdG8KICAgICAgIyBzZW5kbXNnIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kbXNnCiAgICAgICMgc2VuZG1tc2cgLSBzZW5kIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBraWxsZWQtcGlkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAjIGtpbGwgLSBzZW5kIHNpZ25hbCB0byBhIHByb2Nlc3MKICAgICAgLSBraWxsCiAgICAgICMgdGtpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGtpbGwKICAgICAgIyB0Z2tpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGdraWxsCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNoYW5nZWQtaWRlbnRpdHktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR1aWQgLSBzZXQgdXNlciBpZGVudGl0eQogICAgICAtIHNldHVpZAogICAgICAjIHNldGV1aWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRldWlkCiAgICAgICMgc2V0ZnN1aWQgLSBzZXQgdXNlciBpZGVudGl0eSB1c2VkIGZvciBmaWxlc3lzdGVtIGNoZWNrcwogICAgICAtIHNldGZzdWlkCiAgICAgICMgc2V0cmV1aWQgLSBzZXQgcmVhbCBhbmQvb3IgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXVpZAogICAgICAjIHNldGdpZCAtIHNldCBncm91cCBpZGVudGl0eQogICAgICAtIHNldGdpZAogICAgICAjIHNldGVnaWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRlZ2lkCiAgICAgICMgc2V0ZnNnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc2dpZAogICAgICAjIHNldHJlZ2lkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVnaWQKICAgICAgIyBzZXRyZXN1aWQgLSBzZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVzdWlkCiAgICAgICMgc2V0cmVzZ2lkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc2dpZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS10aW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgcmVjb3JkX3R5cGVzOgogICAgICAtIFRJTUVfQURKTlRQVkFMCiAgICAgIC0gVElNRV9JTkpPRkZTRVQKICAgIHN5c2NhbGxzOgogICAgICAjIHNldHRpbWVvZmRheSAtIGdldCAvIHNldCB0aW1lCiAgICAgIC0gc2V0dGltZW9mZGF5CiAgICAgICMgY2xvY2tfc2V0dGltZSAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICAgICAtIGNsb2NrX3NldHRpbWUKICAgICAgIyBzdGltZSAtIHNldCB0aW1lCiAgICAgIC0gc3RpbWUKICAgICAgIyBhZGp0aW1leCAtIHR1bmUga2VybmVsIGNsb2NrCiAgICAgIC0gYWRqdGltZXgKICAgICAgIyBjbG9ja19hZGp0aW1lIC0gc2ltaWxhciB0byBhZGp0aW1leCBidXQgc3BlY2lmaWVzIGEgc3BlY2lmaWMgY2xvY2sKICAgICAgLSBjbG9ja19hZGp0aW1lCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IG1ha2UtZGV2aWNlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIG1rbm9kIC0gY3JlYXRlIGEgc3BlY2lhbCBvciBvcmRpbmFyeSBmaWxlCiAgICAgIC0gbWtub2QKICAgICAgIyBta25vZGF0IC0gY3JlYXRlIGEgc3BlY2lhbCBvciBvcmRpbmFyeSBmaWxlCiAgICAgIC0gbWtub2RhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IGNoYW5nZWQtc3lzdGVtLW5hbWUKICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXRob3N0bmFtZSAtIGdldC9zZXQgaG9zdG5hbWUKICAgICAgLSBzZXRob3N0bmFtZQogICAgICAjIHNldGRvbWFpbm5hbWUgLSBnZXQvc2V0IE5JUyBkb21haW4gbmFtZQogICAgICAtIHNldGRvbWFpbm5hbWUKICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogYWxsb2NhdGVkLW1lbW9yeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtZW1vcnkKICAgIHN5c2NhbGxzOgogICAgICAjIG1tYXAgLSBtYXAgb3IgdW5tYXAgZmlsZXMgb3IgZGV2aWNlcyBpbnRvIG1lbW9yeQogICAgICAtIG1tYXAKICAgICAgIyBtbWFwMiAtIG1hcCBmaWxlcyBvciBkZXZpY2VzIGludG8gbWVtb3J5CiAgICAgIC0gbW1hcDIKICAgICAgIyBicmsgLSBjaGFuZ2UgZGF0YSBzZWdtZW50IHNpemUKICAgICAgLSBicmsKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSBhY3Rpb246IGFkanVzdGVkLXNjaGVkdWxpbmctcG9saWN5LW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogc3lzY2FsbAogICAgc3lzY2FsbHM6CiAgICAgICMgc2NoZWRfc2V0cGFyYW0gLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBhcmFtZXRlcnMKICAgICAgLSBzY2hlZF9zZXRwYXJhbQogICAgICAjIHNjaGVkX3NldHNjaGVkdWxlciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5L3BhcmFtZXRlcnMKICAgICAgLSBzY2hlZF9zZXRzY2hlZHVsZXIKICAgICAgIyBzY2hlZF9zZXRhdHRyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kgYW5kIGF0dHJpYnV0ZXMKICAgICAgLSBzY2hlZF9zZXRhdHRyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCgogICMgQ3VycmVudGx5IHVuaGFuZGxlZAogICMgdGhpcyBsaXN0IGNvbWVzIGZyb20gcGFyc2luZyBsaW51eCBtYW4gcGFnZXMgYXQgaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2RvY3MvbWFuLXBhZ2VzL21hbi1wYWdlcy5naXQKCiAgIyBzaWdhY3Rpb24gLSBleGFtaW5lIGFuZCBjaGFuZ2UgYSBzaWduYWwgYWN0aW9uCiAgIyBydF9zaWdhY3Rpb24gLSBleGFtaW5lIGFuZCBjaGFuZ2UgYSBzaWduYWwgYWN0aW9uCiAgIyBwcmVhZCAtIHJlYWQgZnJvbSBvciB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvciBhdCBhIGdpdmVuIG9mZnNldAogICMgcHdyaXRlIC0gcmVhZCBmcm9tIG9yIHdyaXRlIHRvIGEgZmlsZSBkZXNjcmlwdG9yIGF0IGEgZ2l2ZW4gb2Zmc2V0CiAgIyBzMzkwX2d1YXJkZWRfc3RvcmFnZSAtIG9wZXJhdGlvbnMgd2l0aCB6L0FyY2hpdGVjdHVyZSBndWFyZGVkIHN0b3JhZ2UgZmFjaWxpdHkKICAjIHNjaGVkX2dldGF0dHIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeSBhbmQgYXR0cmlidXRlcwogICMgZ2V0cnVzYWdlIC0gZ2V0IHJlc291cmNlIHVzYWdlCiAgIyBmbG9jayAtIGFwcGx5IG9yIHJlbW92ZSBhbiBhZHZpc29yeSBsb2NrIG9uIGFuIG9wZW4gZmlsZQogICMgcGlkZmRfZ2V0ZmQgLSBvYnRhaW4gYSBkdXBsaWNhdGUgb2YgYW5vdGhlciBwcm9jZXNzJ3MgZmlsZSBkZXNjcmlwdG9yCiAgIyBjbG9ja19uYW5vc2xlZXAgLSBoaWdoLXJlc29sdXRpb24gc2xlZXAgd2l0aCBzcGVjaWZpYWJsZSBjbG9jawogICMgZ2V0cGFnZXNpemUgLSBnZXQgbWVtb3J5IHBhZ2Ugc2l6ZQogICMgcGlkZmRfb3BlbiAtIG9idGFpbiBhIGZpbGUgZGVzY3JpcHRvciB0aGF0IHJlZmVycyB0byBhIHByb2Nlc3MKICAjIHNwbGljZSAtIHNwbGljZSBkYXRhIHRvL2Zyb20gYSBwaXBlCiAgIyBnZXRyZXN1aWQgLSBnZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyL2dyb3VwIElEcwogICMgZ2V0cmVzZ2lkIC0gZ2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlci9ncm91cCBJRHMKICAjIHJlbWFwX2ZpbGVfcGFnZXMgLSBjcmVhdGUgYSBub25saW5lYXIgZmlsZSBtYXBwaW5nCiAgIyBpb19jYW5jZWwgLSBjYW5jZWwgYW4gb3V0c3RhbmRpbmcgYXN5bmNocm9ub3VzIEkvTyBvcGVyYXRpb24KICAjIHByY3RsIC0gb3BlcmF0aW9ucyBvbiBhIHByb2Nlc3Mgb3IgdGhyZWFkCiAgIyBjbG9ja19nZXRyZXMgLSBjbG9jayBhbmQgdGltZSBmdW5jdGlvbnMKICAjIGNsb2NrX2dldHRpbWUgLSBjbG9jayBhbmQgdGltZSBmdW5jdGlvbnMKICAjIGdldGdyb3VwcyAtIGdldC9zZXQgbGlzdCBvZiBzdXBwbGVtZW50YXJ5IGdyb3VwIElEcwogICMgc2V0Z3JvdXBzIC0gZ2V0L3NldCBsaXN0IG9mIHN1cHBsZW1lbnRhcnkgZ3JvdXAgSURzCiAgIyB2bXNwbGljZSAtIHNwbGljZSB1c2VyIHBhZ2VzIHRvL2Zyb20gYSBwaXBlCiAgIyBlcG9sbF9jcmVhdGUgLSBvcGVuIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgZXBvbGxfY3JlYXRlMSAtIG9wZW4gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBwb3NpeF9mYWR2aXNlIC0gcHJlZGVjbGFyZSBhbiBhY2Nlc3MgcGF0dGVybiBmb3IgZmlsZSBkYXRhCiAgIyBzaWd3YWl0aW5mbyAtIHN5bmNocm9ub3VzbHkgd2FpdCBmb3IgcXVldWVkIHNpZ25hbHMKICAjIHNpZ3RpbWVkd2FpdCAtIHN5bmNocm9ub3VzbHkgd2FpdCBmb3IgcXVldWVkIHNpZ25hbHMKICAjIHJ0X3NpZ3RpbWVkd2FpdCAtIHN5bmNocm9ub3VzbHkgd2FpdCBmb3IgcXVldWVkIHNpZ25hbHMKICAjIHNpZ3JldHVybiAtIHJldHVybiBmcm9tIHNpZ25hbCBoYW5kbGVyIGFuZCBjbGVhbnVwIHN0YWNrIGZyYW1lCiAgIyBydF9zaWdyZXR1cm4gLSByZXR1cm4gZnJvbSBzaWduYWwgaGFuZGxlciBhbmQgY2xlYW51cCBzdGFjayBmcmFtZQogICMgZ2V0cmFuZG9tIC0gb2J0YWluIGEgc2VyaWVzIG9mIHJhbmRvbSBieXRlcwogICMga2V5Y3RsIC0gbWFuaXB1bGF0ZSB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHNjaGVkX2dldHNjaGVkdWxlciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5L3BhcmFtZXRlcnMKICAjIG1iaW5kIC0gc2V0IG1lbW9yeSBwb2xpY3kgZm9yIGEgbWVtb3J5IHJhbmdlCiAgIyBnZXRwcmlvcml0eSAtIGdldC9zZXQgcHJvZ3JhbSBzY2hlZHVsaW5nIHByaW9yaXR5CiAgIyBzZXRwcmlvcml0eSAtIGdldC9zZXQgcHJvZ3JhbSBzY2hlZHVsaW5nIHByaW9yaXR5CiAgIyBpbm90aWZ5X2luaXQgLSBpbml0aWFsaXplIGFuIGlub3RpZnkgaW5zdGFuY2UKICAjIGlub3RpZnlfaW5pdDEgLSBpbml0aWFsaXplIGFuIGlub3RpZnkgaW5zdGFuY2UKICAjIHNlbWN0bCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBjb250cm9sIG9wZXJhdGlvbnMKICAjIGdldGhvc3RuYW1lIC0gZ2V0L3NldCBob3N0bmFtZQogICMgcHRyYWNlIC0gcHJvY2VzcyB0cmFjZQogICMgc3lzY3RsIC0gcmVhZC93cml0ZSBzeXN0ZW0gcGFyYW1ldGVycwogICMgZ2V0cGVlcm5hbWUgLSBnZXQgbmFtZSBvZiBjb25uZWN0ZWQgcGVlciBzb2NrZXQKICAjIGZvcmsgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBxdWVyeV9tb2R1bGUgLSBxdWVyeSB0aGUga2VybmVsIGZvciB2YXJpb3VzIGJpdHMgcGVydGFpbmluZyB0byBtb2R1bGVzCiAgIyBpb2N0bF9saXN0IC0gbGlzdCBvZiBpb2N0bCBjYWxscyBpbiBMaW51eC9pMzg2IGtlcm5lbAogICMgbXNnZ2V0IC0gZ2V0IGEgU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBpZGVudGlmaWVyCiAgIyBzcHVfY3JlYXRlIC0gY3JlYXRlIGEgbmV3IHNwdSBjb250ZXh0CiAgIyBzdWJwYWdlX3Byb3QgLSBkZWZpbmUgYSBzdWJwYWdlIHByb3RlY3Rpb24gZm9yIGFuIGFkZHJlc3MgcmFuZ2UKICAjIHF1b3RhY3RsIC0gbWFuaXB1bGF0ZSBkaXNrIHF1b3RhcwogICMgbmZzc2VydmN0bCAtIHN5c2NhbGwgaW50ZXJmYWNlIHRvIGtlcm5lbCBuZnMgZGFlbW9uCiAgIyBvcGVuYXQyIC0gb3BlbiBhbmQgcG9zc2libHkgY3JlYXRlIGEgZmlsZSAoZXh0ZW5kZWQpCiAgIyBnZXRybGltaXQgLSBnZXQvc2V0IHJlc291cmNlIGxpbWl0cwogICMgc2V0cmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHBybGltaXQgLSBnZXQvc2V0IHJlc291cmNlIGxpbWl0cwogICMgdGVlIC0gZHVwbGljYXRpbmcgcGlwZSBjb250ZW50CiAgIyBzaG1nZXQgLSBhbGxvY2F0ZXMgYSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IHNlZ21lbnQKICAjIGNyZWF0ZV9tb2R1bGUgLSBjcmVhdGUgYSBsb2FkYWJsZSBtb2R1bGUgZW50cnkKICAjIGdldHRpbWVvZmRheSAtIGdldCAvIHNldCB0aW1lCiAgIyB0aW1lcl9jcmVhdGUgLSBjcmVhdGUgYSBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgZmFub3RpZnlfbWFyayAtIGFkZCwgcmVtb3ZlLCBvciBtb2RpZnkgYW4gZmFub3RpZnkgbWFyayBvbiBhIGZpbGVzeXN0ZW0gb2JqZWN0CiAgIyBwaXBlIC0gY3JlYXRlIHBpcGUKICAjIHBpcGUyIC0gY3JlYXRlIHBpcGUKICAjIGludHJvIC0gaW50cm9kdWN0aW9uIHRvIHN5c3RlbSBjYWxscwogICMgbG9va3VwX2Rjb29raWUgLSByZXR1cm4gYSBkaXJlY3RvcnkgZW50cnkncyBwYXRoCiAgIyBzeXNmcyAtIGdldCBmaWxlc3lzdGVtIHR5cGUgaW5mb3JtYXRpb24KICAjIHMzOTBfcnVudGltZV9pbnN0ciAtIGVuYWJsZS9kaXNhYmxlIHMzOTAgQ1BVIHJ1bi10aW1lIGluc3RydW1lbnRhdGlvbgogICMgc2V0bnMgLSByZWFzc29jaWF0ZSB0aHJlYWQgd2l0aCBhIG5hbWVzcGFjZQogICMgc2V0X21lbXBvbGljeSAtIHNldCBkZWZhdWx0IE5VTUEgbWVtb3J5IHBvbGljeSBmb3IgYSB0aHJlYWQgYW5kIGl0cyBjaGlsZHJlbgogICMgbmljZSAtIGNoYW5nZSBwcm9jZXNzIHByaW9yaXR5CiAgIyBpb19zZXR1cCAtIGNyZWF0ZSBhbiBhc3luY2hyb25vdXMgSS9PIGNvbnRleHQKICAjIG1pbmNvcmUgLSBkZXRlcm1pbmUgd2hldGhlciBwYWdlcyBhcmUgcmVzaWRlbnQgaW4gbWVtb3J5CiAgIyBpb2N0bF9jb25zb2xlIC0gaW9jdGxzIGZvciBjb25zb2xlIHRlcm1pbmFsIGFuZCB2aXJ0dWFsIGNvbnNvbGVzCiAgIyBwb2xsIC0gd2FpdCBmb3Igc29tZSBldmVudCBvbiBhIGZpbGUgZGVzY3JpcHRvcgogICMgcHBvbGwgLSB3YWl0IGZvciBzb21lIGV2ZW50IG9uIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBjYXBnZXQgLSBzZXQvZ2V0IGNhcGFiaWxpdGllcyBvZiB0aHJlYWQocykKICAjIGNhcHNldCAtIHNldC9nZXQgY2FwYWJpbGl0aWVzIG9mIHRocmVhZChzKQogICMgaW9jdGxfdHR5IC0gaW9jdGxzIGZvciB0ZXJtaW5hbHMgYW5kIHNlcmlhbCBsaW5lcwogICMgaW9wbCAtIGNoYW5nZSBJL08gcHJpdmlsZWdlIGxldmVsCiAgIyBpb19nZXRldmVudHMgLSByZWFkIGFzeW5jaHJvbm91cyBJL08gZXZlbnRzIGZyb20gdGhlIGNvbXBsZXRpb24gcXVldWUKICAjIHByb2Nlc3Nfdm1fcmVhZHYgLSB0cmFuc2ZlciBkYXRhIGJldHdlZW4gcHJvY2VzcyBhZGRyZXNzIHNwYWNlcwogICMgcHJvY2Vzc192bV93cml0ZXYgLSB0cmFuc2ZlciBkYXRhIGJldHdlZW4gcHJvY2VzcyBhZGRyZXNzIHNwYWNlcwogICMgcGNpY29uZmlnX3JlYWQgLSBwY2kgZGV2aWNlIGluZm9ybWF0aW9uIGhhbmRsaW5nCiAgIyBwY2ljb25maWdfd3JpdGUgLSBwY2kgZGV2aWNlIGluZm9ybWF0aW9uIGhhbmRsaW5nCiAgIyBwY2ljb25maWdfaW9iYXNlIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgc2JyayAtIGNoYW5nZSBkYXRhIHNlZ21lbnQgc2l6ZQogICMgc2V0X3RpZF9hZGRyZXNzIC0gc2V0IHBvaW50ZXIgdG8gdGhyZWFkIElECiAgIyBwa2V5X2FsbG9jIC0gYWxsb2NhdGUgb3IgZnJlZSBhIHByb3RlY3Rpb24ga2V5CiAgIyBwa2V5X2ZyZWUgLSBhbGxvY2F0ZSBvciBmcmVlIGEgcHJvdGVjdGlvbiBrZXkKICAjIHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIHBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBrZXhlY19sb2FkIC0gbG9hZCBhIG5ldyBrZXJuZWwgZm9yIGxhdGVyIGV4ZWN1dGlvbgogICMga2V4ZWNfZmlsZV9sb2FkIC0gbG9hZCBhIG5ldyBrZXJuZWwgZm9yIGxhdGVyIGV4ZWN1dGlvbgogICMgcGVyc29uYWxpdHkgLSBzZXQgdGhlIHByb2Nlc3MgZXhlY3V0aW9uIGRvbWFpbgogICMgaW9jdGxfZ2V0ZnNtYXAgLSByZXRyaWV2ZSB0aGUgcGh5c2ljYWwgbGF5b3V0IG9mIHRoZSBmaWxlc3lzdGVtCiAgIyBpbm90aWZ5X3JtX3dhdGNoIC0gcmVtb3ZlIGFuIGV4aXN0aW5nIHdhdGNoIGZyb20gYW4gaW5vdGlmeSBpbnN0YW5jZQogICMgcGVyZl9ldmVudF9vcGVuIC0gc2V0IHVwIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcKICAjIHRpbWVyX2dldG92ZXJydW4gLSBnZXQgb3ZlcnJ1biBjb3VudCBmb3IgYSBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgd2FpdDMgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZSwgQlNEIHN0eWxlCiAgIyB3YWl0NCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlLCBCU0Qgc3R5bGUKICAjIGxpbmsgLSBtYWtlIGEgbmV3IG5hbWUgZm9yIGEgZmlsZQogICMgbGlua2F0IC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAjIHNjaGVkX3JyX2dldF9pbnRlcnZhbCAtIGdldCB0aGUgU0NIRURfUlIgaW50ZXJ2YWwgZm9yIHRoZSBuYW1lZCBwcm9jZXNzCiAgIyBtdW5tYXAgLSBtYXAgb3IgdW5tYXAgZmlsZXMgb3IgZGV2aWNlcyBpbnRvIG1lbW9yeQogICMgc29ja2V0Y2FsbCAtIHNvY2tldCBzeXN0ZW0gY2FsbHMKICAjIG1yZW1hcCAtIHJlbWFwIGEgdmlydHVhbCBtZW1vcnkgYWRkcmVzcwogICMgdmZvcmsgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzIGFuZCBibG9jayBwYXJlbnQKICAjIHNlY2NvbXAgLSBvcGVyYXRlIG9uIFNlY3VyZSBDb21wdXRpbmcgc3RhdGUgb2YgdGhlIHByb2Nlc3MKICAjIHJlcXVlc3Rfa2V5IC0gcmVxdWVzdCBhIGtleSBmcm9tIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgc3lzY2FsbCAtIGluZGlyZWN0IHN5c3RlbSBjYWxsCiAgIyBrY21wIC0gY29tcGFyZSB0d28gcHJvY2Vzc2VzIHRvIGRldGVybWluZSBpZiB0aGV5IHNoYXJlIGEga2VybmVsIHJlc291cmNlCiAgIyByZWFkZGlyIC0gcmVhZCBkaXJlY3RvcnkgZW50cnkKICAjIGlvcGVybSAtIHNldCBwb3J0IGlucHV0L291dHB1dCBwZXJtaXNzaW9ucwogICMgc3B1X3J1biAtIGV4ZWN1dGUgYW4gU1BVIGNvbnRleHQKICAjIHJlYm9vdCAtIHJlYm9vdCBvciBlbmFibGUvZGlzYWJsZSBDdHJsLUFsdC1EZWwKICAjIHJlYWRhaGVhZCAtIGluaXRpYXRlIGZpbGUgcmVhZGFoZWFkIGludG8gcGFnZSBjYWNoZQogICMgc2NoZWRfZ2V0cGFyYW0gLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBhcmFtZXRlcnMKICAjIGFjY3QgLSBzd2l0Y2ggcHJvY2VzcyBhY2NvdW50aW5nIG9uIG9yIG9mZgogICMgc2lnc3VzcGVuZCAtIHdhaXQgZm9yIGEgc2lnbmFsCiAgIyBydF9zaWdzdXNwZW5kIC0gd2FpdCBmb3IgYSBzaWduYWwKICAjIGV4aXRfZ3JvdXAgLSBleGl0IGFsbCB0aHJlYWRzIGluIGEgcHJvY2VzcwogICMgc29ja2V0IC0gY3JlYXRlIGFuIGVuZHBvaW50IGZvciBjb21tdW5pY2F0aW9uCiAgIyBpb2N0bF91c2VyZmF1bHRmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgaGFuZGxpbmcgcGFnZSBmYXVsdHMgaW4gdXNlciBzcGFjZQogICMgc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAtIGdldCBzdGF0aWMgcHJpb3JpdHkgcmFuZ2UKICAjIHNjaGVkX2dldF9wcmlvcml0eV9taW4gIC0gZ2V0IHN0YXRpYyBwcmlvcml0eSByYW5nZQogICMgZ2V0ZGVudHMgLSBnZXQgZGlyZWN0b3J5IGVudHJpZXMKICAjIGdldGRlbnRzNjQgLSBnZXQgZGlyZWN0b3J5IGVudHJpZXMKICAjIHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIHBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBhbGxvY19odWdlcGFnZXMgLSBhbGxvY2F0ZSBvciBmcmVlIGh1Z2UgcGFnZXMKICAjIGZyZWVfaHVnZXBhZ2VzIC0gYWxsb2NhdGUgb3IgZnJlZSBodWdlIHBhZ2VzCiAgIyBmc3luYyAtIHN5bmNocm9uaXplIGEgZmlsZSdzIGluLWNvcmUgc3RhdGUgd2l0aCBzdG9yYWdlIGRldmljZQogICMgZmRhdGFzeW5jIC0gc3luY2hyb25pemUgYSBmaWxlJ3MgaW4tY29yZSBzdGF0ZSB3aXRoIHN0b3JhZ2UgZGV2aWNlCiAgIyBzeXNjYWxscyAtIExpbnV4IHN5c3RlbSBjYWxscwogICMgbWVtZmRfY3JlYXRlIC0gY3JlYXRlIGFuIGFub255bW91cyBmaWxlCiAgIyBtb2RpZnlfbGR0IC0gZ2V0IG9yIHNldCBhIHBlci1wcm9jZXNzIExEVCBlbnRyeQogICMgZ2V0X2tlcm5lbF9zeW1zIC0gcmV0cmlldmUgZXhwb3J0ZWQga2VybmVsIGFuZCBtb2R1bGUgc3ltYm9scwogICMgbHNlZWsgLSByZXBvc2l0aW9uIHJlYWQvd3JpdGUgZmlsZSBvZmZzZXQKICAjIHNobWF0IC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBvcGVyYXRpb25zCiAgIyBzaG1kdCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgb3BlcmF0aW9ucwogICMgdGltZXJfZGVsZXRlIC0gZGVsZXRlIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHBlcmZtb25jdGwgLSBpbnRlcmZhY2UgdG8gSUEtNjQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB1bml0CiAgIyBtb3ZlX3BhZ2VzIC0gbW92ZSBpbmRpdmlkdWFsIHBhZ2VzIG9mIGEgcHJvY2VzcyB0byBhbm90aGVyIG5vZGUKICAjIGNoZGlyIC0gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5CiAgIyBmY2hkaXIgLSBjaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkKICAjIHRpbWUgLSBnZXQgdGltZSBpbiBzZWNvbmRzCiAgIyBfZXhpdCAtIHRlcm1pbmF0ZSB0aGUgY2FsbGluZyBwcm9jZXNzCiAgIyBfRXhpdCAtIHRlcm1pbmF0ZSB0aGUgY2FsbGluZyBwcm9jZXNzCiAgIyBzMzkwX3N0aHlpIC0gZW11bGF0ZSBTVEhZSSBpbnN0cnVjdGlvbgogICMgaW9fc3VibWl0IC0gc3VibWl0IGFzeW5jaHJvbm91cyBJL08gYmxvY2tzIGZvciBwcm9jZXNzaW5nCiAgIyBtbG9jayAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIG1sb2NrMiAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIG11bmxvY2sgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtbG9ja2FsbCAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIG11bmxvY2thbGwgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyB1bWFzayAtIHNldCBmaWxlIG1vZGUgY3JlYXRpb24gbWFzawogICMgYXJjaF9wcmN0bCAtIHNldCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdGhyZWFkIHN0YXRlCiAgIyB1c2VsaWIgLSBsb2FkIHNoYXJlZCBsaWJyYXJ5CiAgIyBzZW5kZmlsZSAtIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBmaWxlIGRlc2NyaXB0b3JzCiAgIyBzaG1jdGwgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IGNvbnRyb2wKICAjIGVwb2xsX3dhaXQgLSB3YWl0IGZvciBhbiBJL08gZXZlbnQgb24gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBlcG9sbF9wd2FpdCAtIHdhaXQgZm9yIGFuIEkvTyBldmVudCBvbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIHNpZ2FsdHN0YWNrIC0gc2V0IGFuZC9vciBnZXQgc2lnbmFsIHN0YWNrIGNvbnRleHQKICAjIGlvY3RsIC0gY29udHJvbCBkZXZpY2UKICAjIHNpZ25hbGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBhY2NlcHRpbmcgc2lnbmFscwogICMgdW5zaGFyZSAtIGRpc2Fzc29jaWF0ZSBwYXJ0cyBvZiB0aGUgcHJvY2VzcyBleGVjdXRpb24gY29udGV4dAogICMgY2hyb290IC0gY2hhbmdlIHJvb3QgZGlyZWN0b3J5CiAgIyBtYWR2aXNlIC0gZ2l2ZSBhZHZpY2UgYWJvdXQgdXNlIG9mIG1lbW9yeQogICMgZ2V0dGlkIC0gZ2V0IHRocmVhZCBpZGVudGlmaWNhdGlvbgogICMgZ2V0c29ja25hbWUgLSBnZXQgc29ja2V0IG5hbWUKICAjIGlvX2Rlc3Ryb3kgLSBkZXN0cm95IGFuIGFzeW5jaHJvbm91cyBJL08gY29udGV4dAogICMgc2V0dXAgLSBzZXR1cCBkZXZpY2VzIGFuZCBmaWxlc3lzdGVtcywgbW91bnQgcm9vdCBmaWxlc3lzdGVtCiAgIyBudHBfYWRqdGltZSAtIHR1bmUga2VybmVsIGNsb2NrCiAgIyBzZW1nZXQgLSBnZXQgYSBTeXN0ZW0gViBzZW1hcGhvcmUgc2V0IGlkZW50aWZpZXIKICAjIGdldHVpZCAtIGdldCB1c2VyIGlkZW50aXR5CiAgIyBnZXRldWlkIC0gZ2V0IHVzZXIgaWRlbnRpdHkKICAjIF9zeXNjYWxsIC0gaW52b2tpbmcgYSBzeXN0ZW0gY2FsbCB3aXRob3V0IGxpYnJhcnkgc3VwcG9ydCAoT0JTT0xFVEUpCiAgIyBzY2hlZF9zZXRhZmZpbml0eSAtIFwgc2V0IGFuZCBnZXQgYSB0aHJlYWQncyBDUFUgYWZmaW5pdHkgbWFzawogICMgc2NoZWRfZ2V0YWZmaW5pdHkgLSBcIHNldCBhbmQgZ2V0IGEgdGhyZWFkJ3MgQ1BVIGFmZmluaXR5IG1hc2sKICAjIGNhY2hlZmx1c2ggLSBmbHVzaCBjb250ZW50cyBvZiBpbnN0cnVjdGlvbiBhbmQvb3IgZGF0YSBjYWNoZQogICMgcGl2b3Rfcm9vdCAtIGNoYW5nZSB0aGUgcm9vdCBtb3VudAogICMgbXNnY3RsIC0gU3lzdGVtIFYgbWVzc2FnZSBjb250cm9sIG9wZXJhdGlvbnMKICAjIGlvY3RsX2ZhdCAtIG1hbmlwdWxhdGluZyB0aGUgRkFUIGZpbGVzeXN0ZW0KICAjIHNldHBnaWQgLSBzZXQvZ2V0IHByb2Nlc3MgZ3JvdXAKICAjIGdldHBnaWQgLSBzZXQvZ2V0IHByb2Nlc3MgZ3JvdXAKICAjIHNldHBncnAgLSBzZXQvZ2V0IHByb2Nlc3MgZ3JvdXAKICAjIGdldHBncnAgLSBzZXQvZ2V0IHByb2Nlc3MgZ3JvdXAKICAjIHNvY2tldHBhaXIgLSBjcmVhdGUgYSBwYWlyIG9mIGNvbm5lY3RlZCBzb2NrZXRzCiAgIyBiZGZsdXNoIC0gc3RhcnQsIGZsdXNoLCBvciB0dW5lIGJ1ZmZlci1kaXJ0eS1mbHVzaCBkYWVtb24KICAjIGFsYXJtIC0gc2V0IGFuIGFsYXJtIGNsb2NrIGZvciBkZWxpdmVyeSBvZiBhIHNpZ25hbAogICMgdGltZXJfc2V0dGltZSAtIGFybS9kaXNhcm0gYW5kIGZldGNoIHN0YXRlIG9mIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyB0aW1lcl9nZXR0aW1lIC0gYXJtL2Rpc2FybSBhbmQgZmV0Y2ggc3RhdGUgb2YgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIGFkZF9rZXkgLSBhZGQgYSBrZXkgdG8gdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBydF9zaWdxdWV1ZWluZm8gLSBxdWV1ZSBhIHNpZ25hbCBhbmQgZGF0YQogICMgcnRfdGdzaWdxdWV1ZWluZm8gLSBxdWV1ZSBhIHNpZ25hbCBhbmQgZGF0YQogICMgdXNlcmZhdWx0ZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIGluIHVzZXIgc3BhY2UKICAjIHNlbW9wIC0gU3lzdGVtIFYgc2VtYXBob3JlIG9wZXJhdGlvbnMKICAjIHNlbXRpbWVkb3AgLSBTeXN0ZW0gViBzZW1hcGhvcmUgb3BlcmF0aW9ucwogICMgZ2V0Z2lkIC0gZ2V0IGdyb3VwIGlkZW50aXR5CiAgIyBnZXRlZ2lkIC0gZ2V0IGdyb3VwIGlkZW50aXR5CiAgIyBnZXRwaWQgLSBnZXQgcHJvY2VzcyBpZGVudGlmaWNhdGlvbgogICMgZ2V0cHBpZCAtIGdldCBwcm9jZXNzIGlkZW50aWZpY2F0aW9uCiAgIyBzaWdwcm9jbWFzayAtIGV4YW1pbmUgYW5kIGNoYW5nZSBibG9ja2VkIHNpZ25hbHMKICAjIHJ0X3NpZ3Byb2NtYXNrIC0gZXhhbWluZSBhbmQgY2hhbmdlIGJsb2NrZWQgc2lnbmFscwogICMgdW5hbWUgLSBnZXQgbmFtZSBhbmQgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBrZXJuZWwKICAjIHN0YXR4IC0gZ2V0IGZpbGUgc3RhdHVzIChleHRlbmRlZCkKICAjIGlvY3RsX2ZpY2xvbmVyYW5nZSAtIHNoYXJlIHNvbWUgdGhlIGRhdGEgb2Ygb25lIGZpbGUgd2l0aCBhbm90aGVyIGZpbGUKICAjIGlvY3RsX2ZpY2xvbmUgLSBzaGFyZSBzb21lIHRoZSBkYXRhIG9mIG9uZSBmaWxlIHdpdGggYW5vdGhlciBmaWxlCiAgIyBtcV9nZXRzZXRhdHRyIC0gZ2V0L3NldCBtZXNzYWdlIHF1ZXVlIGF0dHJpYnV0ZXMKICAjIGlvcHJpb19nZXQgLSBnZXQvc2V0IEkvTyBzY2hlZHVsaW5nIGNsYXNzIGFuZCBwcmlvcml0eQogICMgaW9wcmlvX3NldCAtIGdldC9zZXQgSS9PIHNjaGVkdWxpbmcgY2xhc3MgYW5kIHByaW9yaXR5CiAgIyBlcG9sbF9jdGwgLSBjb250cm9sIGludGVyZmFjZSBmb3IgYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBzeW5jIC0gY29tbWl0IGZpbGVzeXN0ZW0gY2FjaGVzIHRvIGRpc2sKICAjIHN5bmNmcyAtIGNvbW1pdCBmaWxlc3lzdGVtIGNhY2hlcyB0byBkaXNrCiAgIyBzZXRzaWQgLSBjcmVhdGVzIGEgc2Vzc2lvbiBhbmQgc2V0cyB0aGUgcHJvY2VzcyBncm91cCBJRAogICMgc2h1dGRvd24gLSBzaHV0IGRvd24gcGFydCBvZiBhIGZ1bGwtZHVwbGV4IGNvbm5lY3Rpb24KICAjIGdldHNpZCAtIGdldCBzZXNzaW9uIElECiAgIyBnZXRfdGhyZWFkX2FyZWEgLSBtYW5pcHVsYXRlIHRocmVhZC1sb2NhbCBzdG9yYWdlIGluZm9ybWF0aW9uCiAgIyBzZXRfdGhyZWFkX2FyZWEgLSBtYW5pcHVsYXRlIHRocmVhZC1sb2NhbCBzdG9yYWdlIGluZm9ybWF0aW9uCiAgIyB0aW1lcmZkX2NyZWF0ZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgdGltZXJmZF9zZXR0aW1lIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyB0aW1lcmZkX2dldHRpbWUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIGlvY3RsX2ZpZGVkdXBlcmFuZ2UgLSBzaGFyZSBzb21lIHRoZSBkYXRhIG9mIG9uZSBmaWxlIHdpdGggYW5vdGhlciBmaWxlCiAgIyBuYW1lX3RvX2hhbmRsZV9hdCAtIG9idGFpbiBoYW5kbGUgZm9yIGEgcGF0aG5hbWUgYW5kIG9wZW4gZmlsZSB2aWEgYSBoYW5kbGUKICAjIG9wZW5fYnlfaGFuZGxlX2F0IC0gb2J0YWluIGhhbmRsZSBmb3IgYSBwYXRobmFtZSBhbmQgb3BlbiBmaWxlIHZpYSBhIGhhbmRsZQogICMgZnV0ZXggLSBmYXN0IHVzZXItc3BhY2UgbG9ja2luZwogICMgaW9jdGxfbnMgLSBpb2N0bCgpIG9wZXJhdGlvbnMgZm9yIExpbnV4IG5hbWVzcGFjZXMKICAjIHBpZGZkX3NlbmRfc2lnbmFsIC0gc2VuZCBhIHNpZ25hbCB0byBhIHByb2Nlc3Mgc3BlY2lmaWVkIGJ5IGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBjbG9uZSAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIF9fY2xvbmUyIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgY2xvbmUzIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgdGltZXMgLSBnZXQgcHJvY2VzcyB0aW1lcwogICMgc3lzaW5mbyAtIHJldHVybiBzeXN0ZW0gaW5mb3JtYXRpb24KICAjIGlwYyAtIFN5c3RlbSBWIElQQyBzeXN0ZW0gY2FsbHMKICAjIGV2ZW50ZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGV2ZW50IG5vdGlmaWNhdGlvbgogICMgd2FpdCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlCiAgIyB3YWl0cGlkIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUKICAjIHdhaXRpZCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlCiAgIyBnZXRkb21haW5uYW1lIC0gZ2V0L3NldCBOSVMgZG9tYWluIG5hbWUKICAjIGlkbGUgLSBtYWtlIHByb2Nlc3MgMCBpZGxlCiAgIyBpbm90aWZ5X2FkZF93YXRjaCAtIGFkZCBhIHdhdGNoIHRvIGFuIGluaXRpYWxpemVkIGlub3RpZnkgaW5zdGFuY2UKICAjIGdldF9tZW1wb2xpY3kgLSByZXRyaWV2ZSBOVU1BIG1lbW9yeSBwb2xpY3kgZm9yIGEgdGhyZWFkCiAgIyBicGYgLSBwZXJmb3JtIGEgY29tbWFuZCBvbiBhbiBleHRlbmRlZCBCUEYgbWFwIG9yIHByb2dyYW0KICAjIGdldHNvY2tvcHQgLSBnZXQgYW5kIHNldCBvcHRpb25zIG9uIHNvY2tldHMKICAjIHNldHNvY2tvcHQgLSBnZXQgYW5kIHNldCBvcHRpb25zIG9uIHNvY2tldHMKICAjIGdldGl0aW1lciAtIGdldCBvciBzZXQgdmFsdWUgb2YgYW4gaW50ZXJ2YWwgdGltZXIKICAjIHNldGl0aW1lciAtIGdldCBvciBzZXQgdmFsdWUgb2YgYW4gaW50ZXJ2YWwgdGltZXIKICAjIG1lbWJhcnJpZXIgLSBpc3N1ZSBtZW1vcnkgYmFycmllcnMgb24gYSBzZXQgb2YgdGhyZWFkcwogICMgbXByb3RlY3QgLSBzZXQgcHJvdGVjdGlvbiBvbiBhIHJlZ2lvbiBvZiBtZW1vcnkKICAjIHBrZXlfbXByb3RlY3QgLSBzZXQgcHJvdGVjdGlvbiBvbiBhIHJlZ2lvbiBvZiBtZW1vcnkKICAjIGdldGNwdSAtIGRldGVybWluZSBDUFUgYW5kIE5VTUEgbm9kZSBvbiB3aGljaCB0aGUgY2FsbGluZyB0aHJlYWQgaXMgcnVubmluZwogICMgaW9jdGxfZnNsYWJlbCAtIGdldCBvciBzZXQgYSBmaWxlc3lzdGVtIGxhYmVsCiAgIyBsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgbGxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBmbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIF9sbHNlZWsgLSByZXBvc2l0aW9uIHJlYWQvd3JpdGUgZmlsZSBvZmZzZXQKICAjIGZjbnRsIC0gbWFuaXB1bGF0ZSBmaWxlIGRlc2NyaXB0b3IKICAjIHVzdGF0IC0gZ2V0IGZpbGVzeXN0ZW0gc3RhdGlzdGljcwogICMgc2lnbmFsIC0gQU5TSSBDIHNpZ25hbCBoYW5kbGluZwogICMgbmFub3NsZWVwIC0gaGlnaC1yZXNvbHV0aW9uIHNsZWVwCiAgIyBjb25uZWN0IC0gaW5pdGlhdGUgYSBjb25uZWN0aW9uIG9uIGEgc29ja2V0CiAgIyB2bTg2b2xkIC0gZW50ZXIgdmlydHVhbCA4MDg2IG1vZGUKICAjIHZtODYgLSBlbnRlciB2aXJ0dWFsIDgwODYgbW9kZQogICMgZmFub3RpZnlfaW5pdCAtIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBmYW5vdGlmeSBncm91cAogICMgbWlncmF0ZV9wYWdlcyAtIG1vdmUgYWxsIHBhZ2VzIGluIGEgcHJvY2VzcyB0byBhbm90aGVyIHNldCBvZiBub2RlcwogICMgcmVzdGFydF9zeXNjYWxsIC0gcmVzdGFydCBhIHN5c3RlbSBjYWxsIGFmdGVyIGludGVycnVwdGlvbiBieSBhIHN0b3Agc2lnbmFsCiAgIyBjbG9zZSAtIGNsb3NlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBtc2dyY3YgLSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIG9wZXJhdGlvbnMKICAjIG1zZ3NuZCAtIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgb3BlcmF0aW9ucwogICMgcmVhZHYgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyB3cml0ZXYgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwcmVhZHYgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwd3JpdGV2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHJlYWR2MiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHB3cml0ZXYyIC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgc3lzbG9nIC0gcmVhZCBhbmQvb3IgY2xlYXIga2VybmVsIG1lc3NhZ2UgcmluZyBidWZmZXI7IHNldCBjb25zb2xlX2xvZ2xldmVsCiAgIyBrbG9nY3RsIC0gcmVhZCBhbmQvb3IgY2xlYXIga2VybmVsIG1lc3NhZ2UgcmluZyBidWZmZXI7IHNldCBjb25zb2xlX2xvZ2xldmVsCiAgIyBzY2hlZF95aWVsZCAtIHlpZWxkIHRoZSBwcm9jZXNzb3IKICAjIHZoYW5ndXAgLSB2aXJ0dWFsbHkgaGFuZ3VwIHRoZSBjdXJyZW50IHRlcm1pbmFsCiAgIyBpb2N0bF9pZmxhZ3MgLSBpb2N0bCgpIG9wZXJhdGlvbnMgZm9yIGlub2RlIGZsYWdzCiAgIyBzZ2V0bWFzayAtIG1hbmlwdWxhdGlvbiBvZiBzaWduYWwgbWFzayAob2Jzb2xldGUpCiAgIyBzc2V0bWFzayAtIG1hbmlwdWxhdGlvbiBvZiBzaWduYWwgbWFzayAob2Jzb2xldGUpCiAgIyBzeW5jX2ZpbGVfcmFuZ2UgLSBzeW5jIGEgZmlsZSBzZWdtZW50IHdpdGggZGlzawogICMgY29weV9maWxlX3JhbmdlIC0gQ29weSBhIHJhbmdlIG9mIGRhdGEgZnJvbSBvbmUgZmlsZSB0byBhbm90aGVyCiAgIyBzaWdwZW5kaW5nIC0gZXhhbWluZSBwZW5kaW5nIHNpZ25hbHMKICAjIHJ0X3NpZ3BlbmRpbmcgLSBleGFtaW5lIHBlbmRpbmcgc2lnbmFscwogICMgZ2V0dW53aW5kIC0gY29weSB0aGUgdW53aW5kIGRhdGEgdG8gY2FsbGVyJ3MgYnVmZmVyCiAgIyBtc3luYyAtIHN5bmNocm9uaXplIGEgZmlsZSB3aXRoIGEgbWVtb3J5IG1hcAogICMgZ2V0X3JvYnVzdF9saXN0IC0gZ2V0L3NldCBsaXN0IG9mIHJvYnVzdCBmdXRleGVzCiAgIyBzZXRfcm9idXN0X2xpc3QgLSBnZXQvc2V0IGxpc3Qgb2Ygcm9idXN0IGZ1dGV4ZXMKICAjIGR1cCAtIGR1cGxpY2F0ZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgZHVwMiAtIGR1cGxpY2F0ZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgZHVwMyAtIGR1cGxpY2F0ZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgczM5MF9wY2lfbW1pb193cml0ZSAtIHRyYW5zZmVyIGRhdGEgdG8vZnJvbSBQQ0kgTU1JTyBtZW1vcnkgcGFnZQogICMgczM5MF9wY2lfbW1pb19yZWFkIC0gdHJhbnNmZXIgZGF0YSB0by9mcm9tIFBDSSBNTUlPIG1lbW9yeSBwYWdlCiAgIyBwYXVzZSAtIHdhaXQgZm9yIHNpZ25hbAogICMgc3dhcG9uIC0gc3RhcnQvc3RvcCBzd2FwcGluZyB0byBmaWxlL2RldmljZQogICMgc3dhcG9mZiAtIHN0YXJ0L3N0b3Agc3dhcHBpbmcgdG8gZmlsZS9kZXZpY2UKCiAgIyBSZWNvcmQgdHlwZSBub3JtYWxpemF0aW9ucwogICMgVXNlZnVsIGxpbmtzOgogICMgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3RvcnZhbGRzL2xpbnV4L3Y0LjE2L2luY2x1ZGUvdWFwaS9saW51eC9hdWRpdC5oCiAgIyBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbGludXgtYXVkaXQvYXVkaXQtdXNlcnNwYWNlLzRkOTMzMzAxYjE4MzVjYWZhMDhiOWU5ZWY3MDVjOGZiNmM5NmNiNjIvbGliL2xpYmF1ZGl0LmgKICAjIGh0dHBzOi8vd3d3LmVsYXN0aWMuY28vZ3VpZGUvZW4vZWNzL2N1cnJlbnQvZWNzLWFsbG93ZWQtdmFsdWVzLWV2ZW50LWNhdGVnb3J5Lmh0bWwKCiAgIyBJQU0gcmVsYXRlZCBldmVudHMKCiAgIyBBVURJVF9BQ0NUX0xPQ0sgLSBVc2VyJ3MgYWNjb3VudCBsb2NrZWQgYnkgYWRtaW4KICAtIHJlY29yZF90eXBlczogQUNDVF9MT0NLCiAgICBhY3Rpb246IGxvY2tlZC1hY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gaW5mbwogICMgQVVESVRfQUNDVF9VTkxPQ0sgLSBVc2VyJ3MgYWNjb3VudCB1bmxvY2tlZCBieSBhZG1pbgogIC0gcmVjb3JkX3R5cGVzOiBBQ0NUX1VOTE9DSwogICAgYWN0aW9uOiB1bmxvY2tlZC1hY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gaW5mbwogICMgQVVESVRfQUREX0dST1VQIC0gR3JvdXAgYWNjb3VudCBhZGRlZAogIC0gcmVjb3JkX3R5cGVzOiBBRERfR1JPVVAKICAgIGFjdGlvbjogYWRkZWQtZ3JvdXAtYWNjb3VudC10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6IFsqZWNzLWlhbSwgKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3NdCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY3JlYXRpb24KCiAgIyBBVURJVF9BRERfVVNFUiAtIFVzZXIgYWNjb3VudCBhZGRlZAogIC0gcmVjb3JkX3R5cGVzOiBBRERfVVNFUgogICAgYWN0aW9uOiBhZGRlZC11c2VyLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiBbKmVjcy1pYW0sICplY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3NdCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjcmVhdGlvbgogICMgQVVESVRfREVMX0dST1VQIC0gR3JvdXAgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9HUk9VUAogICAgYWN0aW9uOiBkZWxldGVkLWdyb3VwLWFjY291bnQtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6IFsqZWNzLWlhbSwgKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3NdCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gZGVsZXRpb24KICAjIEFVRElUX0RFTF9VU0VSIC0gVXNlciBhY2NvdW50IGRlbGV0ZWQKICAtIHJlY29yZF90eXBlczogREVMX1VTRVIKICAgIGFjdGlvbjogZGVsZXRlZC11c2VyLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiBbKmVjcy1pYW0sICplY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3NdCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBkZWxldGlvbgogICMgQVVESVRfR1JQX01HTVQgLSBHcm91cCBhY2NvdW50IGF0dHIgd2FzIG1vZGlmaWVkCiAgLSByZWNvcmRfdHlwZXM6IEdSUF9NR01UCiAgICBhY3Rpb246IG1vZGlmaWVkLWdyb3VwLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogZ3JvdXAKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICMgQVVESVRfUk9MRV9BU1NJR04gLSBBZG1pbiBhc3NpZ25lZCB1c2VyIHRvIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9BU1NJR04KICAgIGFjdGlvbjogYXNzaWduZWQtdXNlci1yb2xlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9NT0RJRlkgLSBBZG1pbiBtb2RpZmllZCBhIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9NT0RJRlkKICAgIGFjdGlvbjogbW9kaWZpZWQtcm9sZQogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9SRU1PVkUgLSBBZG1pbiByZW1vdmVkIHVzZXIgZnJvbSByb2xlCiAgLSByZWNvcmRfdHlwZXM6IFJPTEVfUkVNT1ZFCiAgICBhY3Rpb246IHJlbW92ZWQtdXNlci1yb2xlLWZyb20KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9VU0VSX01HTVQgLSBVc2VyIGFjY3QgYXR0cmlidXRlIGNoYW5nZQogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9NR01UCiAgICBhY3Rpb246IG1vZGlmaWVkLXVzZXItYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogdXNlci50YXJnZXQKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICMgQVVESVRfVVNFUl9DSEFVVEhUT0sgLSBVc2VyIGFjY3QgcGFzc3dvcmQgb3IgcGluIGNoYW5nZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQ0hBVVRIVE9LCiAgICBhY3Rpb246IGNoYW5nZWQtcGFzc3dvcmQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAgICAgbWFwcGluZ3M6CiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogdXNlci50YXJnZXQKCiAgIyBBVURJVF9HUlBfQ0hBVVRIVE9LIC0gR3JvdXAgYWNjdCBwYXNzd29yZCBvciBwaW4gY2hhbmdlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogR1JQX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLWdyb3VwLXBhc3N3b3JkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFjY3QKICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICAgIHRvOiBncm91cAoKICAjIEF1dGhlbnRpY2F0aW9uIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQ1JFRF9BQ1EgLSBVc2VyIGNyZWRlbnRpYWwgYWNxdWlyZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfQUNRCiAgICBhY3Rpb246IGFjcXVpcmVkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfQ1JFRF9ESVNQIC0gVXNlciBjcmVkZW50aWFsIGRpc3Bvc2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX0RJU1AKICAgIGFjdGlvbjogZGlzcG9zZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9DUkVEX1JFRlIgLSBVc2VyIGNyZWRlbnRpYWwgcmVmcmVzaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX1JFRlIKICAgIGFjdGlvbjogcmVmcmVzaGVkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfR1JQX0FVVEggLSBBdXRoZW50aWNhdGlvbiBmb3IgZ3JvdXAgcGFzc3dvcmQKICAtIHJlY29yZF90eXBlczogR1JQX0FVVEgKICAgIGFjdGlvbjogYXV0aGVudGljYXRlZC10by1ncm91cAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0xPR0lOIC0gRGVmaW5lIHRoZSBsb2dpbiBpZCBhbmQgaW5mb3JtYXRpb24KICAtIHJlY29yZF90eXBlczogTE9HSU4KICAgIGFjdGlvbjogY2hhbmdlZC1sb2dpbi1pZC10bwogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogW29sZF9hdWlkLCBvbGQtYXVpZF0KICAgICAgc2Vjb25kYXJ5OiB1aWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW25ldy1hdWlkLCBuZXdfYXVpZCwgYXVpZF0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogc3RhcnQKICAgICAgbWFwcGluZ3M6CiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgIyBBVURJVF9VU0VSX0FDQ1QgLSBVc2VyIHN5c3RlbSBhY2Nlc3MgYXV0aG9yaXphdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9BQ0NUCiAgICBhY3Rpb246IHdhcy1hdXRob3JpemVkCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9BVVRIIC0gVXNlciBzeXN0ZW0gYWNjZXNzIGF1dGhlbnRpY2F0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0FVVEgKICAgIGFjdGlvbjogYXV0aGVudGljYXRlZAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfRU5EIC0gVXNlciBzZXNzaW9uIGVuZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FTkQKICAgIGFjdGlvbjogZW5kZWQtc2Vzc2lvbgogICAgZWNzOgogICAgICA8PDogKmVjcy1zZXNzaW9uCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfVVNFUl9FUlIgLSBVc2VyIGFjY3Qgc3RhdGUgZXJyb3IKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfRVJSCiAgICBhY3Rpb246IGVycm9yCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfTE9HSU4gLSBVc2VyIGhhcyBsb2dnZWQgaW4KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfTE9HSU4KICAgIGFjdGlvbjogbG9nZ2VkLWluCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9VU0VSX0xPR09VVCAtIFVzZXIgaGFzIGxvZ2dlZCBvdXQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfTE9HT1VUCiAgICBhY3Rpb246IGxvZ2dlZC1vdXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtYXV0aAogICAgICB0eXBlOiBlbmQKICAjIEFVRElUX1VTRVJfUk9MRV9DSEFOR0UgLSBVc2VyIGNoYW5nZWQgdG8gYSBuZXcgcm9sZQogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9ST0xFX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLXJvbGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogc2VsZWN0ZWQtY29udGV4dAogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAjIEFVRElUX1VTRVJfU1RBUlQgLSBVc2VyIHNlc3Npb24gc3RhcnQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfU1RBUlQKICAgIGFjdGlvbjogc3RhcnRlZC1zZXNzaW9uCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOgogICAgICA8PDogKmVjcy1zZXNzaW9uCiAgICAgIHR5cGU6IHN0YXJ0CgogICMgSG9zdCB2aXJ0dWFsaXphdGlvbiBldmVudHMKCiAgIyBBVURJVF9WSVJUX0NPTlRST0wgLSBTdGFydCwgUGF1c2UsIFN0b3AgVk0KICAtIHJlY29yZF90eXBlczogVklSVF9DT05UUk9MCiAgICBhY3Rpb246IGlzc3VlZC12bS1jb250cm9sCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wCiAgICAgIHNlY29uZGFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9DUkVBVEUgLSBDcmVhdGlvbiBvZiBndWVzdCBpbWFnZQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0NSRUFURQogICAgYWN0aW9uOiBjcmVhdGVkLXZtLWltYWdlCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9ERVNUUk9ZIC0gRGVzdHJ1Y3Rpb24gb2YgZ3Vlc3QgaW1hZ2UKICAtIHJlY29yZF90eXBlczogVklSVF9ERVNUUk9ZCiAgICBhY3Rpb246IGRlbGV0ZWQtdm0taW1hZ2UKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0lOVEVHUklUWV9DSEVDSyAtIEd1ZXN0IGludGVncml0eSByZXN1bHRzCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfSU5URUdSSVRZX0NIRUNLCiAgICBhY3Rpb246IGNoZWNrZWQtaW50ZWdyaXR5LW9mCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NQUNISU5FX0lEIC0gQmluZGluZyBvZiBsYWJlbCB0byBWTQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01BQ0hJTkVfSUQKICAgIGFjdGlvbjogYXNzaWduZWQtdm0taWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NSUdSQVRFX0lOIC0gSW5ib3VuZCBndWVzdCBtaWdyYXRpb24gaW5mbwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01JR1JBVEVfSU4KICAgIGFjdGlvbjogbWlncmF0ZWQtdm0tZnJvbQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUlHUkFURV9PVVQgLSBPdXRib3VuZCBndWVzdCBtaWdyYXRpb24gaW5mbwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01JR1JBVEVfT1VUCiAgICBhY3Rpb246IG1pZ3JhdGVkLXZtLXRvCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9SRVNPVVJDRSAtIFJlc291cmNlIGFzc2lnbm1lbnQKICAtIHJlY29yZF90eXBlczogVklSVF9SRVNPVVJDRQogICAgYWN0aW9uOiBhc3NpZ25lZC12bS1yZXNvdXJjZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiByZXNyYwogICAgICBzZWNvbmRhcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKCiAgIyBVc2Vyc3BhY2UgcHJvY2VzcyBldmVudHMKCiAgIyBBVURJVF9DSEdSUF9JRCAtIFVzZXIgc3BhY2UgZ3JvdXAgSUQgY2hhbmdlZAogIC0gcmVjb3JkX3R5cGVzOiBDSEdSUF9JRAogICAgYWN0aW9uOiBjaGFuZ2VkLWdyb3VwCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9DSFVTRVJfSUQgLSBDaGFuZ2VkIHVzZXIgSUQgc3VwcGxlbWVudGFsIGRhdGEKICAtIHJlY29yZF90eXBlczogQ0hVU0VSX0lECiAgICBhY3Rpb246IGNoYW5nZWQtdXNlci1pZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVEVTVCAtIFVzZWQgZm9yIHRlc3Qgc3VjY2VzcyBtZXNzYWdlcwogIC0gcmVjb3JkX3R5cGVzOiBURVNUCiAgICBhY3Rpb246IHNlbnQtdGVzdAogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX1RSVVNURURfQVBQIC0gVHJ1c3RlZCBhcHAgbXNnIC0gZnJlZXN0eWxlIHRleHQKICAtIHJlY29yZF90eXBlczogVFJVU1RFRF9BUFAKICAgIGFjdGlvbjogdW5rbm93bgogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX1VTRVJfQ01EIC0gVXNlciBzaGVsbCBjb21tYW5kIGFuZCBhcmdzCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfQ01ECiAgICBhY3Rpb246IHJhbi1jb21tYW5kCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGNtZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBkZXNjcmlwdGlvbjogPgogICAgICBUaGVzZSBtZXNzYWdlcyBhcmUgZnJvbSB1c2VyLXNwYWNlIGFwcHMsIGxpa2Ugc3VkbywgdGhhdCBsb2cgY29tbWFuZHMKICAgICAgYmVpbmcgcnVuIGJ5IGEgdXNlci4gVGhlIHVpZCBjb250YWluZWQgaW4gdGhlc2UgbWVzc2FnZXMgaXMgdXNlcidzIFVJRCBhdAogICAgICB0aGUgdGltZSB0aGUgY29tbWFuZCB3YXMgcnVuLiBJdCBpcyBub3QgdGhlICJ0YXJnZXQiIFVJRCB1c2VkIHRvIHJ1biB0aGUKICAgICAgY29tbWFuZCwgd2hpY2ggaXMgbm9ybWFsbHkgcm9vdC4KICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAoKICAjIEhvc3QtbGV2ZWwgZXZlbnRzCgogICMgQVVESVRfU1lTVEVNX0JPT1QgLSBTeXN0ZW0gYm9vdAogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fQk9PVAogICAgYWN0aW9uOiBib290ZWQtc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9TWVNURU1fUlVOTEVWRUwgLSBTeXN0ZW0gcnVubGV2ZWwgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9SVU5MRVZFTAogICAgYWN0aW9uOiBjaGFuZ2VkLXRvLXJ1bmxldmVsCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG5ldy1sZXZlbAogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1NZU1RFTV9TSFVURE9XTiAtIFN5c3RlbSBzaHV0ZG93bgogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fU0hVVERPV04KICAgIGFjdGlvbjogc2h1dGRvd24tc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGVuZAoKICAjIFNlcnZpY2UtbGV2ZWwgZXZlbnRzCgogICMgQVVESVRfU0VSVklDRV9TVEFSVCAtIFNlcnZpY2UgKGRhZW1vbikgc3RhcnQKICAtIHJlY29yZF90eXBlczogU0VSVklDRV9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlcnZpY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdW5pdAogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1NFUlZJQ0VfU1RPUCAtIFNlcnZpY2UgKGRhZW1vbikgc3RvcAogIC0gcmVjb3JkX3R5cGVzOiBTRVJWSUNFX1NUT1AKICAgIGFjdGlvbjogc3RvcHBlZC1zZXJ2aWNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHVuaXQKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKCiAgIyBBdWRpdGQgaW50ZXJuYWwgZXZlbnRzCgogICMgQVVESVRfQ09ORklHX0NIQU5HRSAtIEF1ZGl0IHN5c3RlbSBjb25maWd1cmF0aW9uIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBDT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OgogICAgICAgIFtvcCwga2V5LCBhdWRpdF9lbmFibGVkLCBhdWRpdF9waWQsIGF1ZGl0X2JhY2tsb2dfbGltaXQsIGF1ZGl0X2ZhaWx1cmVdCiAgICAgIHdoYXQ6IGF1ZGl0LWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX0FCT1JUIC0gRGFlbW9uIGVycm9yIHN0b3AgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9BQk9SVAogICAgYWN0aW9uOiBhYm9ydGVkLWF1ZGl0ZC1zdGFydHVwCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCiAgIyBBVURJVF9EQUVNT05fQUNDRVBUIC0gQXVkaXRkIGFjY2VwdGVkIHJlbW90ZSBjb25uZWN0aW9uCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9BQ0NFUFQKICAgIGFjdGlvbjogcmVtb3RlLWF1ZGl0LWNvbm5lY3RlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgIyBBVURJVF9EQUVNT05fQ0xPU0UgLSBBdWRpdGQgY2xvc2VkIHJlbW90ZSBjb25uZWN0aW9uCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9DTE9TRQogICAgYWN0aW9uOiByZW1vdGUtYXVkaXQtZGlzY29ubmVjdGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAjIEFVRElUX0RBRU1PTl9DT05GSUcgLSBEYWVtb24gY29uZmlnIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQ09ORklHCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXRkLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX0VORCAtIERhZW1vbiBub3JtYWwgc3RvcCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX0VORAogICAgYWN0aW9uOiBzaHV0ZG93bi1hdWRpdAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAogICMgQVVESVRfREFFTU9OX0VSUiAtIEF1ZGl0ZCBpbnRlcm5hbCBlcnJvcgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fRVJSCiAgICBhY3Rpb246IGF1ZGl0LWVycm9yCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9EQUVNT05fUkVDT05GSUcgLSBBdWRpdGQgc2hvdWxkIHJlY29uZmlndXJlCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9SRUNPTkZJRwogICAgYWN0aW9uOiByZWNvbmZpZ3VyZWQtYXVkaXRkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBpbmZvCiAgIyBBVURJVF9EQUVNT05fUkVTVU1FIC0gQXVkaXRkIHNob3VsZCByZXN1bWUgbG9nZ2luZwogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUkVTVU1FCiAgICBhY3Rpb246IHJlc3VtZWQtYXVkaXQtbG9nZ2luZwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fUk9UQVRFIC0gQXVkaXRkIHNob3VsZCByb3RhdGUgbG9ncwogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUk9UQVRFCiAgICBhY3Rpb246IHJvdGF0ZWQtYXVkaXQtbG9ncwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fU1RBUlQgLSBEYWVtb24gc3RhcnR1cCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX1NUQVJUCiAgICBhY3Rpb246IHN0YXJ0ZWQtYXVkaXQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9LRVJORUwgLSBBc3luY2hyb25vdXMgYXVkaXQgcmVjb3JkLiBOT1QgQSBSRVFVRVNULgogIC0gcmVjb3JkX3R5cGVzOiBLRVJORUwKICAgIGFjdGlvbjogaW5pdGlhbGl6ZWQtYXVkaXQtc3Vic3lzdGVtCiAgICBlY3M6ICplY3MtcHJvY2VzcwoKICAjIENvbmZpZ3VyYXRpb24gY2hhbmdlIGV2ZW50cwoKICAjIEFVRElUX1VTWVNfQ09ORklHIC0gVXNlciBzcGFjZSBzeXN0ZW0gY29uZmlnIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBVU1lTX0NPTkZJRwogICAgYWN0aW9uOiBjaGFuZ2VkLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3AKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfTkVURklMVEVSX0NGRyAtIE5ldGZpbHRlciBjaGFpbiBtb2RpZmljYXRpb25zCiAgLSByZWNvcmRfdHlwZXM6IE5FVEZJTFRFUl9DRkcKICAgIGFjdGlvbjogbG9hZGVkLWZpcmV3YWxsLXJ1bGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdGFibGUKICAgICAgd2hhdDogZmlyZXdhbGwKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9GRUFUVVJFX0NIQU5HRSAtIGF1ZGl0IGxvZyBsaXN0aW5nIGZlYXR1cmUgY2hhbmdlcwogIC0gcmVjb3JkX3R5cGVzOiBGRUFUVVJFX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0LWZlYXR1cmUKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZmVhdHVyZQogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9SRVBMQUNFIC0gUmVwbGFjZSBhdWRpdGQgaWYgdGhpcyBwYWNrZXQgdW5hbnN3ZXJkCgogICMgVFRZIGV2ZW50cwoKICAtIHJlY29yZF90eXBlczoKICAgICAgIyBBVURJVF9UVFkgLSBJbnB1dCBvbiBhbiBhZG1pbmlzdHJhdGl2ZSBUVFkKICAgICAgLSBUVFkKICAgICAgIyBBVURJVF9VU0VSX1RUWSAtIE5vbi1JQ0FOT04gVFRZIGlucHV0IG1lYW5pbmcKICAgICAgLSBVU0VSX1RUWQogICAgYWN0aW9uOiB0eXBlZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBkYXRhCiAgICAgIHdoYXQ6IGtleXN0cm9rZXMKICAgIGhvdzogW2NvbW0sIGV4ZV0KCiAgIyBQb2xpY3kgZXZlbnRzCgogICMgQVVESVRfQVZDIC0gU0UgTGludXggYXZjIGRlbmlhbCBvciBncmFudCAoc2VsaW51eCkKICAtIHJlY29yZF90eXBlczogQVZDCiAgICBhY3Rpb246IHZpb2xhdGVkLXNlbGludXgtcG9saWN5CiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBzY29udGV4dAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0Y29udGV4dAogICAgICBzZWNvbmRhcnk6IHRjbGFzcwogICAgaGFzX2ZpZWxkczoKICAgICAgLSBzZXJlc3VsdAogICMgQVVESVRfQVZDIC0gU0UgTGludXggYXZjIGRlbmlhbCBvciBncmFudCAoYXBwYXJtb3IpCiAgLSByZWNvcmRfdHlwZXM6IEFWQwogICAgYWN0aW9uOiB2aW9sYXRlZC1hcHBhcm1vci1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3BlcmF0aW9uCiAgICAgIHNlY29uZGFyeTogW3JlcXVlc3RlZF9tYXNrLCBkZW5pZWRfbWFzaywgY2FwbmFtZV0KICAgICAgd2hhdDogcG9saWN5CiAgICBoYXNfZmllbGRzOgogICAgICAtIGFwcGFybW9yCiAgIyBBVURJVF9GU19SRUxBQkVMIC0gRmlsZXN5c3RlbSByZWxhYmVsZWQKICAtIHJlY29yZF90eXBlczogRlNfUkVMQUJFTAogICAgYWN0aW9uOiByZWxhYmVsZWQtZmlsZXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgIyBBVURJVF9MQUJFTF9MRVZFTF9DSEFOR0UgLSBPYmplY3QncyBsZXZlbCB3YXMgY2hhbmdlZAogIC0gcmVjb3JkX3R5cGVzOiBMQUJFTF9MRVZFTF9DSEFOR0UKICAgIGFjdGlvbjogbW9kaWZpZWQtbGV2ZWwtb2YKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogcHJpbnRlcgogICAgICB3aGF0OiBwcmludGVyCiAgIyBBVURJVF9MQUJFTF9PVkVSUklERSAtIEFkbWluIGlzIG92ZXJyaWRpbmcgYSBsYWJlbAogIC0gcmVjb3JkX3R5cGVzOiBMQUJFTF9PVkVSUklERQogICAgYWN0aW9uOiBvdmVycm9kZS1sYWJlbC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgIyBBVURJVF9NQUNfQ0hFQ0sgLSBVc2VyIHNwYWNlIE1BQyBkZWNpc2lvbiByZXN1bHRzCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19DSEVDSwogICAgYWN0aW9uOiBtYWMtcGVybWlzc2lvbgogICMgQVVESVRfTUFDX0NPTkZJR19DSEFOR0UgLSBDaGFuZ2VzIHRvIGJvb2xlYW5zCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19DT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtc2VsaW51eC1ib29sZWFuCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGJvb2wKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX01BQ19QT0xJQ1lfTE9BRCAtIFBvbGljeSBmaWxlIGxvYWQKICAtIHJlY29yZF90eXBlczogTUFDX1BPTElDWV9MT0FECiAgICBhY3Rpb246IGxvYWRlZC1zZWxpbnV4LXBvbGljeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGFjY2VzcwogICMgQVVESVRfTUFDX1NUQVRVUyAtIENoYW5nZWQgZW5mb3JjaW5nLHBlcm1pc3NpdmUsb2ZmCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19TVEFUVVMKICAgIGFjdGlvbjogY2hhbmdlZC1zZWxpbnV4LWVuZm9yY2VtZW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGVuZm9yY2luZwogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVVNFUl9BVkMgLSBVc2VyIHNwYWNlIGF2YyBtZXNzYWdlCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfQVZDCiAgICBhY3Rpb246IGFjY2Vzcy1wZXJtaXNzaW9uCiAgIyBBVURJVF9VU0VSX01BQ19DT05GSUdfQ0hBTkdFIC0gQ2hhbmdlIG1hZGUgdG8gTUFDIHBvbGljeQogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX01BQ19DT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtbWFjLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1VTRVJfTUFDX1BPTElDWV9MT0FEIC0gVXNlcnNwYyBkYWVtb24gbG9hZGVkIHBvbGljCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfTUFDX1BPTElDWV9MT0FECiAgICBhY3Rpb246IGxvYWRlZC1tYWMtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogYWNjZXNzCiAgIyBBVURJVF9VU0VSX1NFTElOVVhfRVJSIC0gU0UgTGludXggdXNlciBzcGFjZSBlcnJvcgogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX1NFTElOVVhfRVJSCiAgICBhY3Rpb246IGFjY2Vzcy1lcnJvcgogICMgQVVESVRfU0VDQ09NUCAtIFNlY3VyZSBDb21wdXRpbmcgZXZlbnQKICAtIHJlY29yZF90eXBlczogU0VDQ09NUAogICAgYWN0aW9uOiB2aW9sYXRlZC1zZWNjb21wLXBvbGljeQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzeXNjYWxsCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAjIEFVRElUX1NFTElOVVhfRVJSIC0gSW50ZXJuYWwgU0UgTGludXggRXJyb3JzCiAgLSBhY3Rpb246IGNhdXNlZC1tYWMtcG9saWN5LWVycm9yCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgcmVjb3JkX3R5cGVzOiBTRUxJTlVYX0VSUgogICMgQVVESVRfQVBQQVJNT1JfQUxMT1dFRAogICMgQVVESVRfQVBQQVJNT1JfREVOSUVECiAgIyBBVURJVF9BUFBBUk1PUl9FUlJPUgogICMgQVVESVRfQVZDX1BBVEggLSBkZW50cnksIHZmc21vdW50IHBhaXIgZnJvbSBhdmMKICAjIEFVRElUX0FQUEFSTU9SX0FVRElUCiAgIyBBVURJVF9BUFBBUk1PUl9ISU5UCiAgIyBBVURJVF9BUFBBUk1PUl9TVEFUVVMKICAjIEFVRElUX0FQUEFSTU9SX0VSUk9SCiAgIyBBVURJVF9ERVZfQUxMT0MgLSBEZXZpY2Ugd2FzIGFsbG9jYXRlZAogICMgQVVESVRfREVWX0RFQUxMT0MgLSBEZXZpY2Ugd2FzIGRlYWxsb2NhdGVkCiAgIyBBVURJVF9NQUNfVU5MQkxfQUxMT1cgLSBOZXRMYWJlbDogYWxsb3cgdW5sYWJlbGVkIHRyYWZmaWMKICAjIEFVRElUX01BQ19DSVBTT1Y0X0FERCAtIE5ldExhYmVsOiBhZGQgQ0lQU092NCBET0kgZW50cnkKICAjIEFVRElUX01BQ19DSVBTT1Y0X0RFTCAtIE5ldExhYmVsOiBkZWwgQ0lQU092NCBET0kgZW50cnkKICAjIEFVRElUX01BQ19NQVBfQUREIC0gTmV0TGFiZWw6IGFkZCBMU00gZG9tYWluIG1hcHBpbmcKICAjIEFVRElUX01BQ19NQVBfREVMIC0gTmV0TGFiZWw6IGRlbCBMU00gZG9tYWluIG1hcHBpbmcKICAjIEFVRElUX01BQ19JUFNFQ19FVkVOVCAtIEF1ZGl0IGFuIElQU2VjIGV2ZW50CiAgIyBBVURJVF9NQUNfVU5MQkxfU1RDQUREIC0gTmV0TGFiZWw6IGFkZCBhIHN0YXRpYyBsYWJlbAogICMgQVVESVRfTUFDX1VOTEJMX1NUQ0RFTCAtIE5ldExhYmVsOiBkZWwgYSBzdGF0aWMgbGFiZWwKICAjIEFVRElUX01BQ19DQUxJUFNPX0FERCAtIE5ldExhYmVsOiBhZGQgQ0FMSVBTTyBET0kgZW50cnkKICAjIEFVRElUX01BQ19DQUxJUFNPX0RFTCAtIE5ldExhYmVsOiBkZWwgQ0FMSVBTTyBET0kgZW50cnkKICAjIEFVRElUX1VTRVJfTEFCRUxFRF9FWFBPUlQgLSBPYmplY3QgZXhwb3J0ZWQgd2l0aCBsYWJlbAogICMgQVVESVRfVVNFUl9VTkxBQkVMRURfRVhQT1JUIC0gT2JqZWN0IGV4cG9ydGVkIHdpdGhvdXQgbGFiZWwKCiAgIyBDcnlwdG8gZXZlbnRzCgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIGFjdGlvbjogbmVnb3RpYXRlZC1jcnlwdG8ta2V5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGZwCiAgICAgIHNlY29uZGFyeTogW2FkZHIsIGhvc3RuYW1lXQogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0tFWV9VU0VSCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogY3J5cHRvLW9mZmljZXItbG9nZ2VkLWluCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19MT0dJTgogIC0gYWN0aW9uOiBjcnlwdG8tb2ZmaWNlci1sb2dnZWQtb3V0CiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19MT0dPVVQKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgYWN0aW9uOiBzdGFydGVkLWNyeXB0by1zZXNzaW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFkZHIKICAgICAgc2Vjb25kYXJ5OiBbcnBvcnRdCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19TRVNTSU9OCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogYWNjZXNzLXJlc3VsdAogICAgcmVjb3JkX3R5cGVzOiBEQUNfQ0hFQ0sKCiAgIyBBbm9tYWxpZXMKCiAgIyBBVURJVF9BTk9NX0FCRU5EIC0gUHJvY2VzcyBlbmRlZCBhYm5vcm1hbGx5CiAgLSByZWNvcmRfdHlwZXM6IEFOT01fQUJFTkQKICAgIGFjdGlvbjogY3Jhc2hlZC1wcm9ncmFtCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtjb21tLCBleGVdCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogc2lnCiAgICBlY3M6CiAgICAgICMgY29uc2lkZXIgYWRkaW5nIGFuIGFub21hbHkgY2F0ZWdvcnkgd2hlbiB3ZSBpbnRyb2R1Y2UKICAgICAgIyB0byBFQ1MKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBlbmQKICAjIEFVRElUX0FOT01fRVhFQyAtIEV4ZWN1dGlvbiBvZiBmaWxlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fRVhFQwogICAgYWN0aW9uOiBhdHRlbXB0ZWQtZXhlY3V0aW9uLW9mLWZvcmJpZGRlbi1wcm9ncmFtCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGNtZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHRlcm1pbmFsCiAgICBlY3M6CiAgICAgICMgY29uc2lkZXIgYWRkaW5nIGFuIGFub21hbHkgY2F0ZWdvcnkgd2hlbiB3ZSBpbnRyb2R1Y2UKICAgICAgIyB0byBFQ1MKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfQU5PTV9MSU5LIC0gU3VzcGljaW91cyB1c2Ugb2YgZmlsZSBsaW5rcwogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0xJTksKICAgIGFjdGlvbjogdXNlZC1zdXNwaWNpb3VzLWxpbmsKICAjIEFVRElUX0FOT01fTE9HSU5fRkFJTFVSRVMgLSBGYWlsZWQgbG9naW4gbGltaXQgcmVhY2hlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9GQUlMVVJFUwogICAgYWN0aW9uOiBmYWlsZWQtbG9nLWluLXRvby1tYW55LXRpbWVzLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX0xPQ0FUSU9OIC0gTG9naW4gZnJvbSBmb3JiaWRkZW4gbG9jYXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fTE9DQVRJT04KICAgIGFjdGlvbjogYXR0ZW1wdGVkLWxvZy1pbi1mcm9tLXVudXN1YWwtcGxhY2UtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fU0VTU0lPTlMgLSBNYXggY29uY3VycmVudCBzZXNzaW9ucyByZWFjaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX1NFU1NJT05TCiAgICBhY3Rpb246IG9wZW5lZC10b28tbWFueS1zZXNzaW9ucy10bwogICMgQVVESVRfQU5PTV9MT0dJTl9USU1FIC0gTG9naW4gYXR0ZW1wdGVkIGF0IGJhZCB0aW1lCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX1RJTUUKICAgIGFjdGlvbjogYXR0ZW1wdGVkLWxvZy1pbi1kdXJpbmctdW51c3VhbC1ob3VyLXRvCiAgIyBBVURJVF9BTk9NX1BST01JU0NVT1VTIC0gRGV2aWNlIGNoYW5nZWQgcHJvbWlzY3VvdXMgbW9kZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX1BST01JU0NVT1VTCiAgICBhY3Rpb246IGNoYW5nZWQtcHJvbWlzY3VvdXMtbW9kZS1vbi1kZXZpY2UgIyBDb3VsZCBiZSBlbnRlcmVkIG9yIGV4aXRlZCBiYXNlZCBvbiBwcm9tIGZpZWxkLgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBkZXYKICAgICAgd2hhdDogbmV0d29yay1kZXZpY2UKICAjIEFVRElUX0FOT01fUkJBQ19JTlRFR1JJVFlfRkFJTCAtIFJCQUMgZmlsZSBpbnRlZ3JpdHkgZmFpbHVyZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX1JCQUNfSU5URUdSSVRZX0ZBSUwKICAgIGFjdGlvbjogdGVzdGVkLWZpbGUtc3lzdGVtLWludGVncml0eS1vZgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBob3N0bmFtZQogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgIyBBVURJVF9BTk9NX0xPR0lOX0FDQ1QgLSBMb2dpbiBhdHRlbXB0ZWQgdG8gd2F0Y2hlZCBhY2N0CiAgIyBBVURJVF9BTk9NX01BWF9EQUMgLSBNYXggREFDIGZhaWx1cmVzIHJlYWNoZWQKICAjIEFVRElUX0FOT01fTUFYX01BQyAtIE1heCBNQUMgZmFpbHVyZXMgcmVhY2hlZAogICMgQVVESVRfQU5PTV9BTVRVX0ZBSUwgLSBBTVRVIGZhaWx1cmUKICAjIEFVRElUX0FOT01fUkJBQ19GQUlMIC0gUkJBQyBzZWxmIHRlc3QgZmFpbHVyZQogICMgQVVESVRfQU5PTV9DUllQVE9fRkFJTCAtIENyeXB0byBzeXN0ZW0gdGVzdCBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX01LX0VYRSAtIE1ha2UgYW4gZXhlY3V0YWJsZQogICMgQVVESVRfQU5PTV9BQ0NFU1NfRlMgLSBBY2Nlc3Mgb2YgZmlsZSBvciBkaXIKICAjIEFVRElUX0FOT01fQUREX0FDQ1QgLSBBZGRpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9ERUxfQUNDVCAtIERlbGV0aW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fTU9EX0FDQ1QgLSBDaGFuZ2luZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX1JPT1RfVFJBTlMgLSBVc2VyIGJlY2FtZSByb290CiAgIyBBVURJVF9BTk9NX0xPR0lOX1NFUlZJQ0UgLSBTZXJ2aWNlIGFjY3QgYXR0ZW1wdGVkIGxvZ2luCgogICMgQW5vbWFseSByZXNwb25zZXMKCiAgIyBBVURJVF9SRVNQX0FOT01BTFkgLSBBbm9tYWx5IG5vdCByZWFjdGVkIHRvCiAgIyBBVURJVF9SRVNQX0FMRVJUIC0gQWxlcnQgZW1haWwgd2FzIHNlbnQKICAjIEFVRElUX1JFU1BfS0lMTF9QUk9DIC0gS2lsbCBwcm9ncmFtCiAgIyBBVURJVF9SRVNQX1RFUk1fQUNDRVNTIC0gVGVybWluYXRlIHNlc3Npb24KICAjIEFVRElUX1JFU1BfQUNDVF9SRU1PVEUgLSBBY2N0IGxvY2tlZCBmcm9tIHJlbW90ZSBhY2Nlc3MKICAjIEFVRElUX1JFU1BfQUNDVF9MT0NLX1RJTUVEIC0gVXNlciBhY2N0IGxvY2tlZCBmb3IgdGltZQogICMgQVVESVRfUkVTUF9BQ0NUX1VOTE9DS19USU1FRCAtIFVzZXIgYWNjdCB1bmxvY2tlZCBmcm9tIHRpbWUKICAjIEFVRElUX1JFU1BfQUNDVF9MT0NLIC0gVXNlciBhY2N0IHdhcyBsb2NrZWQKICAjIEFVRElUX1JFU1BfVEVSTV9MT0NLIC0gVGVybWluYWwgd2FzIGxvY2tlZAogICMgQVVESVRfUkVTUF9TRUJPT0wgLSBTZXQgYW4gU0UgTGludXggYm9vbGVhbgogICMgQVVESVRfUkVTUF9FWEVDIC0gRXhlY3V0ZSBhIHNjcmlwdAogICMgQVVESVRfUkVTUF9TSU5HTEUgLSBHbyB0byBzaW5nbGUgdXNlciBtb2RlCiAgIyBBVURJVF9SRVNQX0hBTFQgLSB0YWtlIHRoZSBzeXN0ZW0gZG93bgogICMgQVVESVRfUkVTUF9PUklHSU5fQkxPQ0sgLSBBZGRyZXNzIGJsb2NrZWQgYnkgaXB0YWJsZXMKICAjIEFVRElUX1JFU1BfT1JJR0lOX0JMT0NLX1RJTUVEIC0gQWRkcmVzcyBibG9ja2VkIGZvciB0aW1lCgogICMgQXVkaXQgcnVsZSBldmVudHMKCiAgIyBBVURJVF9TWVNDQUxMIC0gU3lzY2FsbCBldmVudAogICMgQVVESVRfUEFUSCAtIEZpbGVuYW1lIHBhdGggaW5mb3JtYXRpb24KICAjIEFVRElUX0lQQyAtIElQQyByZWNvcmQKICAjIEFVRElUX1NPQ0tFVENBTEwgLSBzeXNfc29ja2V0Y2FsbCBhcmd1bWVudHMKICAjIEFVRElUX1NPQ0tBRERSIC0gc29ja2FkZHIgY29waWVkIGFzIHN5c2NhbGwgYXJnCiAgIyBBVURJVF9DV0QgLSBDdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CiAgIyBBVURJVF9FWEVDVkUgLSBleGVjdmUgYXJndW1lbnRzCiAgIyBBVURJVF9JUENfU0VUX1BFUk0gLSBJUEMgbmV3IHBlcm1pc3Npb25zIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9PUEVOIC0gUE9TSVggTVEgb3BlbiByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfU0VORFJFQ1YtIFBPU0lYIE1RIHNlbmQvcmVjZWl2ZSByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfTk9USUZZIC0gUE9TSVggTVEgbm90aWZ5IHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9HRVRTRVRBVFRSIC0gUE9TSVggTVEgZ2V0L3NldCBhdHRyaWJ1dGUgcmVjb3JkIHR5cGUKICAjIEFVRElUX0ZEX1BBSVIgLSBhdWRpdCByZWNvcmQgZm9yIHBpcGUvc29ja2V0cGFpcgogICMgQVVESVRfT0JKX1BJRCAtIHB0cmFjZSB0YXJnZXQKICAjIEFVRElUX0JQUk1fRkNBUFMgLSBJbmZvcm1hdGlvbiBhYm91dCBmY2FwcyBpbmNyZWFzaW5nIHBlcm1zCiAgIyBBVURJVF9DQVBTRVQgLSBSZWNvcmQgc2hvd2luZyBhcmd1bWVudCB0byBzeXNfY2Fwc2V0CiAgIyBBVURJVF9NTUFQIC0gUmVjb3JkIHNob3dpbmcgZGVzY3JpcHRvciBhbmQgZmxhZ3MgaW4gbW1hcAogICMgQVVESVRfTkVURklMVEVSX1BLVCAtIFBhY2tldHMgdHJhdmVyc2luZyBuZXRmaWx0ZXIgY2hhaW5zCgogICMgSW50ZWdyaXR5IGNoZWNrcwoKICAjIEFVRElUX0lOVEVHUklUWV9EQVRBIC0gRGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uCiAgIyBBVURJVF9JTlRFR1JJVFlfTUVUQURBVEEgLSBNZXRhZGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uCiAgIyBBVURJVF9JTlRFR1JJVFlfU1RBVFVTIC0gSW50ZWdyaXR5IGVuYWJsZSBzdGF0dXMKICAjIEFVRElUX0lOVEVHUklUWV9IQVNIIC0gSW50ZWdyaXR5IEhBU0ggdHlwZQogICMgQVVESVRfSU5URUdSSVRZX1BDUiAtIFBDUiBpbnZhbGlkYXRpb24gbXNncwogICMgQVVESVRfSU5URUdSSVRZX1JVTEUgLSBQb2xpY3kgcnVsZQoKICAjIFZhcmlvdXMKCiAgIyBBVURJVF9VU0VSIC0gTWVzc2FnZSBmcm9tIHVzZXJzcGFjZSAtLSBkZXByZWNhdGVkCiAgLSByZWNvcmRfdHlwZXM6IFVTRVIKICAgIGFjdGlvbjogc2VudC1tZXNzYWdlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFkZHIKCiAgIyBBVURJVF9TT0ZUV0FSRV9VUERBVEUgLSBQYWNrYWdlIG1hbmFnZW1lbnQKICAtIHJlY29yZF90eXBlczogU09GVFdBUkVfVVBEQVRFCiAgICBhY3Rpb246IHBhY2thZ2UtdXBkYXRlZAogICAgZWNzOgogICAgICBjYXRlZ29yeTogcGFja2FnZQogICAgICB0eXBlOiBpbmZvCg==")
+		value, _ = base64.StdEncoding.DecodeString("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCgogIC0gJmVjcy1zZXNzaW9uCiAgICBjYXRlZ29yeTogc2Vzc2lvbgogICAgdHlwZTogaW5mbwogICAgbWFwcGluZ3M6CiAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQoKICAtICZlY3MtaG9zdAogICAgY2F0ZWdvcnk6IGhvc3QKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLXByb2Nlc3MKICAgIGNhdGVnb3J5OiBwcm9jZXNzCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1maWxlCiAgICBjYXRlZ29yeTogZmlsZQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtZHJpdmVyCiAgICBjYXRlZ29yeTogZHJpdmVyCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1uZXR3b3JrCiAgICBjYXRlZ29yeTogbmV0d29yawogICAgdHlwZToKICAgICAgLSBjb25uZWN0aW9uCiAgICAgIC0gaW5mbwoKICAtICZlY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgIG1hcHBpbmdzOgogICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyCiAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyLnRhcmdldAoKICAtICZlY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgICAgIC0gZnJvbTogb2JqZWN0LnByaW1hcnkKICAgICAgICB0bzogZ3JvdXAKCiMgTm9ybWFsaXphdGlvbnMgaXMgYSBsaXN0IG9mIGRlY2xhcmF0aW9ucyBzcGVjaWZ5aW5nIGhvdyB0byBub3JtYWxpemUgdGhlIGRhdGEKIyBjb250YWluZWQgaW4gYW4gZXZlbnQuIFRoZSBub3JtYWxpemF0aW9uIGNhbiBiZSBhcHBsaWVkIGJhc2VkIG9uIHRoZSBzeXNjYWxsCiMgbmFtZSAoZS5nLiBjb25uZWN0LCBvcGVuKSBvciBiYXNlZCBvbiB0aGUgcmVjb3JkIHR5cGUgKGUuZy4gVVNFUl9MT0dJTikuCiMgTm8gdHdvIG5vcm1hbGl6YXRpb25zIGNhbiBhcHBseSB0byB0aGUgc2FtZSBzeXNjYWxsIG9yIHJlY29yZCB0eXBlLiBUaGlzCiMgd2lsbCByZXN1bHQgaW4gYSBmYWlsdXJlIGF0IGxvYWQgdGltZS4KIwojIEVhY2ggbm9ybWFsaXphdGlvbiBzaG91bGQgc3BlY2lmeToKIyAgIGFjdGlvbiAtIHdoYXQgaGFwcGVuZWQKIyAgIGFjdG9yICAtIHdobyBkaWQgdGhpcyBvciB3aG8gdHJpZ2dlcmVkIHRoZSBldmVudAojICAgb2JqZWN0IC0gd2hhdCB3YXMgdGhlICJ0aGluZyIgaW52b2x2ZWQgaW4gdGhlIGFjdGlvbiAoZS5nLiBwcm9jZXNzLCBzb2NrZXQpCiMgICBob3cgICAgLSBob3cgd2FzIHRoZSBhY3Rpb24gcGVyZm9ybWVkIChlLmcuIGV4ZSBvciB0ZXJtaW5hbCkKbm9ybWFsaXphdGlvbnM6CiAgLSBlY3M6ICplY3MtcHJvY2VzcwogICAgc3lzY2FsbHM6CiAgICAgIC0gJyonICMgdGhpcyBpcyBhIGNhdGNoIGFsbAogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjcmVhdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBjcmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGZhbGxvY2F0ZSAtIG1hbmlwdWxhdGUgZmlsZSBzcGFjZQogICAgICAtIGZhbGxvY2F0ZQogICAgICAjIHRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIHRydW5jYXRlCiAgICAgICMgZnRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIGZ0cnVuY2F0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgdGVjaG5pY2FsbHkgeW91IGNhbiB0cnVuY2F0ZSBhIGZpbGUgdG8gdGhlIHNhbWUgbGVuZ3RoCiAgICAgICMgYnV0IHJlZ2FyZGxlc3MsIHdlIGNvbnNpZGVyIHRoaXMgYSBjaGFuZ2UKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIG9wZW4gLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbgogICAgICAjIG9wZW5hdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBvcGVuYXQKICAgICAgIyByZWFkbGluayAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmsKICAgICAgIyByZWFkbGlua2F0IC0gcmVhZCB2YWx1ZSBvZiBhIHN5bWJvbGljIGxpbmsKICAgICAgLSByZWFkbGlua2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiByZWFkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcmVhZCAtIHJlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHJlYWQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHdyb3RlLXRvLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgd3JpdGUgLSB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHdyaXRlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1hdHRyaWJ1dGVzLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIHNldHhhdHRyCiAgICAgICMgZnNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZzZXR4YXR0cgogICAgICAjIGxzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsc2V0eGF0dHIKICAgICAgIyByZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSByZW1vdmV4YXR0cgogICAgICAjIGZyZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSBmcmVtb3ZleGF0dHIKICAgICAgIyBscmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gbHJlbW92ZXhhdHRyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1wZXJtaXNzaW9ucy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBjaG1vZAogICAgICAjIGZjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2QKICAgICAgIyBmY2htb2RhdCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2RhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtb3duZXJzaGlwLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBjaG93bgogICAgICAjIGZjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gZmNob3duCiAgICAgICMgZmNob3duYXQgLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bmF0CiAgICAgICMgbGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBsY2hvd24KICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbG9hZGVkLWtlcm5lbC1tb2R1bGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwcmltYXJ5OiBuYW1lCiAgICByZWNvcmRfdHlwZXM6CiAgICAgIC0gS0VSTl9NT0RVTEUKICAgIHN5c2NhbGxzOgogICAgICAjIGZpbml0X21vZHVsZSAtIGxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZmluaXRfbW9kdWxlCiAgICAgICMgaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGluaXRfbW9kdWxlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWRyaXZlcgogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiB1bmxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGRlbGV0ZV9tb2R1bGUgLSB1bmxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZGVsZXRlX21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNyZWF0ZWQtZGlyZWN0b3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtkaXIgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcgogICAgICAjIG1rZGlyYXQgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcmF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogbW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1vdW50IC0gbW91bnQgZmlsZXN5c3RlbQogICAgICAtIG1vdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyBzaW5jZSBhIG5ldyBtb3VudCBhcHBlYXJzIG9uIHRoZSBzeXN0ZW0KICAgICAgIyB3ZSBjb25zaWRlciB0aGlzIGEgaGlnaC1sZXZlbCAiY3JlYXRpb24iIGV2ZW50CiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHJlbmFtZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwYXRoX2luZGV4OiAyCiAgICBzeXNjYWxsczoKICAgICAgIyByZW5hbWUgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lCiAgICAgICMgcmVuYW1lYXQgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQKICAgICAgIyByZW5hbWVhdDIgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoZWNrZWQtbWV0YWRhdGEtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgYWNjZXNzIC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBhY2Nlc3MKICAgICAgIyBmYWNjZXNzYXQgLSBjaGVjayB1c2VyJ3MgcGVybWlzc2lvbnMgZm9yIGEgZmlsZQogICAgICAtIGZhY2Nlc3NhdAogICAgICAjIGZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBmc3RhdGF0CiAgICAgICMgbmV3ZnN0YXRhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIG5ld2ZzdGF0YXQKICAgICAgIyBzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gc3RhdAogICAgICAjIHN0YXQ2NCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQ2NAogICAgICAjIGZzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXQKICAgICAgIyBsc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGxzdGF0CiAgICAgICMgZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBnZXR4YXR0cgogICAgICAjIGxnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGxnZXR4YXR0cgogICAgICAjIGZnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZnZXR4YXR0cgogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogY2hlY2tlZC1maWxlc3lzdGVtLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBzdGF0ZnMKICAgICAgIyBmc3RhdGZzIC0gZ2V0IGZpbGVzeXN0ZW0gc3RhdGlzdGljcwogICAgICAtIGZzdGF0ZnMKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHN5bWxpbmtlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzeW1saW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rCiAgICAgICMgc3ltbGlua2F0IC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjICJjcmVhdGlvbiIgc2luY2Ugd2UncmUgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0KICAgICAgIyBlbnRyeSBmb3IgdGhlIHN5bWxpbmsKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogdW5tb3VudGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHVtb3VudCAtIHVubW91bnQgZmlsZXN5c3RlbQogICAgICAtIHVtb3VudAogICAgICAjIHVtb3VudDIgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiZGVsZXRpb24iIHRvIG1pcnJvciB0aGUgImNyZWF0aW9uIiBvZiB0aGUgbW91bnQKICAgICAgdHlwZTogZGVsZXRpb24KICAtIGFjdGlvbjogZGVsZXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBybWRpciAtIGRlbGV0ZSBhIGRpcmVjdG9yeQogICAgICAtIHJtZGlyCiAgICAgICMgdW5saW5rIC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rCiAgICAgICMgdW5saW5rYXQgLSBkZWxldGUgYSBuYW1lIGFuZCBwb3NzaWJseSB0aGUgZmlsZSBpdCByZWZlcnMgdG8KICAgICAgLSB1bmxpbmthdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGNoYW5nZWQtdGltZXN0YW1wLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHV0aW1lIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lCiAgICAgICMgdXRpbWVzIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lcwogICAgICAjIGZ1dGltZXNhdCAtIGNoYW5nZSB0aW1lc3RhbXBzIG9mIGEgZmlsZSByZWxhdGl2ZSB0byBhIFwgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGZ1dGltZXNhdAogICAgICAjIGZ1dGltZW5zIC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gZnV0aW1lbnMKICAgICAgIyB1dGltZW5zYXQgLSBjaGFuZ2UgZmlsZSB0aW1lc3RhbXBzIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24KICAgICAgLSB1dGltZW5zYXQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGV4ZWN1dGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGV4ZWN2ZSAtIGV4ZWN1dGUgcHJvZ3JhbQogICAgICAtIGV4ZWN2ZQogICAgICAjIGV4ZWN2ZWF0IC0gZXhlY3V0ZSBwcm9ncmFtIHJlbGF0aXZlIHRvIGEgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGV4ZWN2ZWF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogbGlzdGVuLWZvci1jb25uZWN0aW9ucwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGxpc3Rlbi0gbGlzdGVuIGZvciBjb25uZWN0aW9ucyBvbiBhIHNvY2tldAogICAgICAtIGxpc3RlbgogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGFjY2VwdGVkLWNvbm5lY3Rpb24tZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VwdCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQKICAgICAgIyBhY2NlcHQ0IC0gYWNjZXB0IGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICAgICAtIGFjY2VwdDQKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogYm91bmQtc29ja2V0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgYmluZCAtYmluZCBhIG5hbWUgdG8gYSBzb2NrZXQKICAgICAgLSBiaW5kCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogY29ubmVjdGVkLXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgIC0gY29ubmVjdAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogIC0gYWN0aW9uOiByZWNlaXZlZC1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgcmVjdiAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2CiAgICAgICMgcmVjdmZyb20gLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdmZyb20KICAgICAgIyByZWN2bXNnIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Ztc2cKICAgICAgIyByZWN2bW1zZyAtIHJlY2VpdmUgbXVsdGlwbGUgbWVzc2FnZXMgb24gYSBzb2NrZXQKICAgICAgLSByZWN2bW1zZwogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgLSBhY3Rpb246IHNlbnQtdG8KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBzZW5kIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kCiAgICAgICMgc2VuZHRvIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kdG8KICAgICAgIyBzZW5kbXNnIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kbXNnCiAgICAgICMgc2VuZG1tc2cgLSBzZW5kIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBraWxsZWQtcGlkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAjIGtpbGwgLSBzZW5kIHNpZ25hbCB0byBhIHByb2Nlc3MKICAgICAgLSBraWxsCiAgICAgICMgdGtpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGtpbGwKICAgICAgIyB0Z2tpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGdraWxsCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNoYW5nZWQtaWRlbnRpdHktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR1aWQgLSBzZXQgdXNlciBpZGVudGl0eQogICAgICAtIHNldHVpZAogICAgICAjIHNldGV1aWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRldWlkCiAgICAgICMgc2V0ZnN1aWQgLSBzZXQgdXNlciBpZGVudGl0eSB1c2VkIGZvciBmaWxlc3lzdGVtIGNoZWNrcwogICAgICAtIHNldGZzdWlkCiAgICAgICMgc2V0cmV1aWQgLSBzZXQgcmVhbCBhbmQvb3IgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXVpZAogICAgICAjIHNldGdpZCAtIHNldCBncm91cCBpZGVudGl0eQogICAgICAtIHNldGdpZAogICAgICAjIHNldGVnaWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRlZ2lkCiAgICAgICMgc2V0ZnNnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc2dpZAogICAgICAjIHNldHJlZ2lkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVnaWQKICAgICAgIyBzZXRyZXN1aWQgLSBzZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVzdWlkCiAgICAgICMgc2V0cmVzZ2lkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc2dpZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS10aW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgcmVjb3JkX3R5cGVzOgogICAgICAtIFRJTUVfQURKTlRQVkFMCiAgICAgIC0gVElNRV9JTkpPRkZTRVQKICAgIHN5c2NhbGxzOgogICAgICAjIHNldHRpbWVvZmRheSAtIGdldCAvIHNldCB0aW1lCiAgICAgIC0gc2V0dGltZW9mZGF5CiAgICAgICMgY2xvY2tfc2V0dGltZSAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICAgICAtIGNsb2NrX3NldHRpbWUKICAgICAgIyBzdGltZSAtIHNldCB0aW1lCiAgICAgIC0gc3RpbWUKICAgICAgIyBhZGp0aW1leCAtIHR1bmUga2VybmVsIGNsb2NrCiAgICAgIC0gYWRqdGltZXgKICAgICAgIyBjbG9ja19hZGp0aW1lIC0gc2ltaWxhciB0byBhZGp0aW1leCBidXQgc3BlY2lmaWVzIGEgc3BlY2lmaWMgY2xvY2sKICAgICAgLSBjbG9ja19hZGp0aW1lCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IG1ha2UtZGV2aWNlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIG1rbm9kIC0gY3JlYXRlIGEgc3BlY2lhbCBvciBvcmRpbmFyeSBmaWxlCiAgICAgIC0gbWtub2QKICAgICAgIyBta25vZGF0IC0gY3JlYXRlIGEgc3BlY2lhbCBvciBvcmRpbmFyeSBmaWxlCiAgICAgIC0gbWtub2RhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IGNoYW5nZWQtc3lzdGVtLW5hbWUKICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXRob3N0bmFtZSAtIGdldC9zZXQgaG9zdG5hbWUKICAgICAgLSBzZXRob3N0bmFtZQogICAgICAjIHNldGRvbWFpbm5hbWUgLSBnZXQvc2V0IE5JUyBkb21haW4gbmFtZQogICAgICAtIHNldGRvbWFpbm5hbWUKICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogYWxsb2NhdGVkLW1lbW9yeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtZW1vcnkKICAgIHN5c2NhbGxzOgogICAgICAjIG1tYXAgLSBtYXAgb3IgdW5tYXAgZmlsZXMgb3IgZGV2aWNlcyBpbnRvIG1lbW9yeQogICAgICAtIG1tYXAKICAgICAgIyBtbWFwMiAtIG1hcCBmaWxlcyBvciBkZXZpY2VzIGludG8gbWVtb3J5CiAgICAgIC0gbW1hcDIKICAgICAgIyBicmsgLSBjaGFuZ2UgZGF0YSBzZWdtZW50IHNpemUKICAgICAgLSBicmsKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSBhY3Rpb246IGFkanVzdGVkLXNjaGVkdWxpbmctcG9saWN5LW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogc3lzY2FsbAogICAgc3lzY2FsbHM6CiAgICAgICMgc2NoZWRfc2V0cGFyYW0gLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBhcmFtZXRlcnMKICAgICAgLSBzY2hlZF9zZXRwYXJhbQogICAgICAjIHNjaGVkX3NldHNjaGVkdWxlciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5L3BhcmFtZXRlcnMKICAgICAgLSBzY2hlZF9zZXRzY2hlZHVsZXIKICAgICAgIyBzY2hlZF9zZXRhdHRyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kgYW5kIGF0dHJpYnV0ZXMKICAgICAgLSBzY2hlZF9zZXRhdHRyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCgogICMgQ3VycmVudGx5IHVuaGFuZGxlZAogICMgdGhpcyBsaXN0IGNvbWVzIGZyb20gcGFyc2luZyBsaW51eCBtYW4gcGFnZXMgYXQgaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2RvY3MvbWFuLXBhZ2VzL21hbi1wYWdlcy5naXQKCiAgIyBzaWdhY3Rpb24gLSBleGFtaW5lIGFuZCBjaGFuZ2UgYSBzaWduYWwgYWN0aW9uCiAgIyBydF9zaWdhY3Rpb24gLSBleGFtaW5lIGFuZCBjaGFuZ2UgYSBzaWduYWwgYWN0aW9uCiAgIyBwcmVhZCAtIHJlYWQgZnJvbSBvciB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvciBhdCBhIGdpdmVuIG9mZnNldAogICMgcHdyaXRlIC0gcmVhZCBmcm9tIG9yIHdyaXRlIHRvIGEgZmlsZSBkZXNjcmlwdG9yIGF0IGEgZ2l2ZW4gb2Zmc2V0CiAgIyBzMzkwX2d1YXJkZWRfc3RvcmFnZSAtIG9wZXJhdGlvbnMgd2l0aCB6L0FyY2hpdGVjdHVyZSBndWFyZGVkIHN0b3JhZ2UgZmFjaWxpdHkKICAjIHNjaGVkX2dldGF0dHIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeSBhbmQgYXR0cmlidXRlcwogICMgZ2V0cnVzYWdlIC0gZ2V0IHJlc291cmNlIHVzYWdlCiAgIyBmbG9jayAtIGFwcGx5IG9yIHJlbW92ZSBhbiBhZHZpc29yeSBsb2NrIG9uIGFuIG9wZW4gZmlsZQogICMgcGlkZmRfZ2V0ZmQgLSBvYnRhaW4gYSBkdXBsaWNhdGUgb2YgYW5vdGhlciBwcm9jZXNzJ3MgZmlsZSBkZXNjcmlwdG9yCiAgIyBjbG9ja19uYW5vc2xlZXAgLSBoaWdoLXJlc29sdXRpb24gc2xlZXAgd2l0aCBzcGVjaWZpYWJsZSBjbG9jawogICMgZ2V0cGFnZXNpemUgLSBnZXQgbWVtb3J5IHBhZ2Ugc2l6ZQogICMgcGlkZmRfb3BlbiAtIG9idGFpbiBhIGZpbGUgZGVzY3JpcHRvciB0aGF0IHJlZmVycyB0byBhIHByb2Nlc3MKICAjIHNwbGljZSAtIHNwbGljZSBkYXRhIHRvL2Zyb20gYSBwaXBlCiAgIyBnZXRyZXN1aWQgLSBnZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyL2dyb3VwIElEcwogICMgZ2V0cmVzZ2lkIC0gZ2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlci9ncm91cCBJRHMKICAjIHJlbWFwX2ZpbGVfcGFnZXMgLSBjcmVhdGUgYSBub25saW5lYXIgZmlsZSBtYXBwaW5nCiAgIyBpb19jYW5jZWwgLSBjYW5jZWwgYW4gb3V0c3RhbmRpbmcgYXN5bmNocm9ub3VzIEkvTyBvcGVyYXRpb24KICAjIHByY3RsIC0gb3BlcmF0aW9ucyBvbiBhIHByb2Nlc3Mgb3IgdGhyZWFkCiAgIyBjbG9ja19nZXRyZXMgLSBjbG9jayBhbmQgdGltZSBmdW5jdGlvbnMKICAjIGNsb2NrX2dldHRpbWUgLSBjbG9jayBhbmQgdGltZSBmdW5jdGlvbnMKICAjIGdldGdyb3VwcyAtIGdldC9zZXQgbGlzdCBvZiBzdXBwbGVtZW50YXJ5IGdyb3VwIElEcwogICMgc2V0Z3JvdXBzIC0gZ2V0L3NldCBsaXN0IG9mIHN1cHBsZW1lbnRhcnkgZ3JvdXAgSURzCiAgIyB2bXNwbGljZSAtIHNwbGljZSB1c2VyIHBhZ2VzIHRvL2Zyb20gYSBwaXBlCiAgIyBlcG9sbF9jcmVhdGUgLSBvcGVuIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgZXBvbGxfY3JlYXRlMSAtIG9wZW4gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBwb3NpeF9mYWR2aXNlIC0gcHJlZGVjbGFyZSBhbiBhY2Nlc3MgcGF0dGVybiBmb3IgZmlsZSBkYXRhCiAgIyBzaWd3YWl0aW5mbyAtIHN5bmNocm9ub3VzbHkgd2FpdCBmb3IgcXVldWVkIHNpZ25hbHMKICAjIHNpZ3RpbWVkd2FpdCAtIHN5bmNocm9ub3VzbHkgd2FpdCBmb3IgcXVldWVkIHNpZ25hbHMKICAjIHJ0X3NpZ3RpbWVkd2FpdCAtIHN5bmNocm9ub3VzbHkgd2FpdCBmb3IgcXVldWVkIHNpZ25hbHMKICAjIHNpZ3JldHVybiAtIHJldHVybiBmcm9tIHNpZ25hbCBoYW5kbGVyIGFuZCBjbGVhbnVwIHN0YWNrIGZyYW1lCiAgIyBydF9zaWdyZXR1cm4gLSByZXR1cm4gZnJvbSBzaWduYWwgaGFuZGxlciBhbmQgY2xlYW51cCBzdGFjayBmcmFtZQogICMgZ2V0cmFuZG9tIC0gb2J0YWluIGEgc2VyaWVzIG9mIHJhbmRvbSBieXRlcwogICMga2V5Y3RsIC0gbWFuaXB1bGF0ZSB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHNjaGVkX2dldHNjaGVkdWxlciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5L3BhcmFtZXRlcnMKICAjIG1iaW5kIC0gc2V0IG1lbW9yeSBwb2xpY3kgZm9yIGEgbWVtb3J5IHJhbmdlCiAgIyBnZXRwcmlvcml0eSAtIGdldC9zZXQgcHJvZ3JhbSBzY2hlZHVsaW5nIHByaW9yaXR5CiAgIyBzZXRwcmlvcml0eSAtIGdldC9zZXQgcHJvZ3JhbSBzY2hlZHVsaW5nIHByaW9yaXR5CiAgIyBpbm90aWZ5X2luaXQgLSBpbml0aWFsaXplIGFuIGlub3RpZnkgaW5zdGFuY2UKICAjIGlub3RpZnlfaW5pdDEgLSBpbml0aWFsaXplIGFuIGlub3RpZnkgaW5zdGFuY2UKICAjIHNlbWN0bCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBjb250cm9sIG9wZXJhdGlvbnMKICAjIGdldGhvc3RuYW1lIC0gZ2V0L3NldCBob3N0bmFtZQogICMgcHRyYWNlIC0gcHJvY2VzcyB0cmFjZQogICMgc3lzY3RsIC0gcmVhZC93cml0ZSBzeXN0ZW0gcGFyYW1ldGVycwogICMgZ2V0cGVlcm5hbWUgLSBnZXQgbmFtZSBvZiBjb25uZWN0ZWQgcGVlciBzb2NrZXQKICAjIGZvcmsgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBxdWVyeV9tb2R1bGUgLSBxdWVyeSB0aGUga2VybmVsIGZvciB2YXJpb3VzIGJpdHMgcGVydGFpbmluZyB0byBtb2R1bGVzCiAgIyBpb2N0bF9saXN0IC0gbGlzdCBvZiBpb2N0bCBjYWxscyBpbiBMaW51eC9pMzg2IGtlcm5lbAogICMgbXNnZ2V0IC0gZ2V0IGEgU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBpZGVudGlmaWVyCiAgIyBzcHVfY3JlYXRlIC0gY3JlYXRlIGEgbmV3IHNwdSBjb250ZXh0CiAgIyBzdWJwYWdlX3Byb3QgLSBkZWZpbmUgYSBzdWJwYWdlIHByb3RlY3Rpb24gZm9yIGFuIGFkZHJlc3MgcmFuZ2UKICAjIHF1b3RhY3RsIC0gbWFuaXB1bGF0ZSBkaXNrIHF1b3RhcwogICMgbmZzc2VydmN0bCAtIHN5c2NhbGwgaW50ZXJmYWNlIHRvIGtlcm5lbCBuZnMgZGFlbW9uCiAgIyBvcGVuYXQyIC0gb3BlbiBhbmQgcG9zc2libHkgY3JlYXRlIGEgZmlsZSAoZXh0ZW5kZWQpCiAgIyBnZXRybGltaXQgLSBnZXQvc2V0IHJlc291cmNlIGxpbWl0cwogICMgc2V0cmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHBybGltaXQgLSBnZXQvc2V0IHJlc291cmNlIGxpbWl0cwogICMgdGVlIC0gZHVwbGljYXRpbmcgcGlwZSBjb250ZW50CiAgIyBzaG1nZXQgLSBhbGxvY2F0ZXMgYSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IHNlZ21lbnQKICAjIGNyZWF0ZV9tb2R1bGUgLSBjcmVhdGUgYSBsb2FkYWJsZSBtb2R1bGUgZW50cnkKICAjIGdldHRpbWVvZmRheSAtIGdldCAvIHNldCB0aW1lCiAgIyB0aW1lcl9jcmVhdGUgLSBjcmVhdGUgYSBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgZmFub3RpZnlfbWFyayAtIGFkZCwgcmVtb3ZlLCBvciBtb2RpZnkgYW4gZmFub3RpZnkgbWFyayBvbiBhIGZpbGVzeXN0ZW0gb2JqZWN0CiAgIyBwaXBlIC0gY3JlYXRlIHBpcGUKICAjIHBpcGUyIC0gY3JlYXRlIHBpcGUKICAjIGludHJvIC0gaW50cm9kdWN0aW9uIHRvIHN5c3RlbSBjYWxscwogICMgbG9va3VwX2Rjb29raWUgLSByZXR1cm4gYSBkaXJlY3RvcnkgZW50cnkncyBwYXRoCiAgIyBzeXNmcyAtIGdldCBmaWxlc3lzdGVtIHR5cGUgaW5mb3JtYXRpb24KICAjIHMzOTBfcnVudGltZV9pbnN0ciAtIGVuYWJsZS9kaXNhYmxlIHMzOTAgQ1BVIHJ1bi10aW1lIGluc3RydW1lbnRhdGlvbgogICMgc2V0bnMgLSByZWFzc29jaWF0ZSB0aHJlYWQgd2l0aCBhIG5hbWVzcGFjZQogICMgc2V0X21lbXBvbGljeSAtIHNldCBkZWZhdWx0IE5VTUEgbWVtb3J5IHBvbGljeSBmb3IgYSB0aHJlYWQgYW5kIGl0cyBjaGlsZHJlbgogICMgbmljZSAtIGNoYW5nZSBwcm9jZXNzIHByaW9yaXR5CiAgIyBpb19zZXR1cCAtIGNyZWF0ZSBhbiBhc3luY2hyb25vdXMgSS9PIGNvbnRleHQKICAjIG1pbmNvcmUgLSBkZXRlcm1pbmUgd2hldGhlciBwYWdlcyBhcmUgcmVzaWRlbnQgaW4gbWVtb3J5CiAgIyBpb2N0bF9jb25zb2xlIC0gaW9jdGxzIGZvciBjb25zb2xlIHRlcm1pbmFsIGFuZCB2aXJ0dWFsIGNvbnNvbGVzCiAgIyBwb2xsIC0gd2FpdCBmb3Igc29tZSBldmVudCBvbiBhIGZpbGUgZGVzY3JpcHRvcgogICMgcHBvbGwgLSB3YWl0IGZvciBzb21lIGV2ZW50IG9uIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBjYXBnZXQgLSBzZXQvZ2V0IGNhcGFiaWxpdGllcyBvZiB0aHJlYWQocykKICAjIGNhcHNldCAtIHNldC9nZXQgY2FwYWJpbGl0aWVzIG9mIHRocmVhZChzKQogICMgaW9jdGxfdHR5IC0gaW9jdGxzIGZvciB0ZXJtaW5hbHMgYW5kIHNlcmlhbCBsaW5lcwogICMgaW9wbCAtIGNoYW5nZSBJL08gcHJpdmlsZWdlIGxldmVsCiAgIyBpb19nZXRldmVudHMgLSByZWFkIGFzeW5jaHJvbm91cyBJL08gZXZlbnRzIGZyb20gdGhlIGNvbXBsZXRpb24gcXVldWUKICAjIHByb2Nlc3Nfdm1fcmVhZHYgLSB0cmFuc2ZlciBkYXRhIGJldHdlZW4gcHJvY2VzcyBhZGRyZXNzIHNwYWNlcwogICMgcHJvY2Vzc192bV93cml0ZXYgLSB0cmFuc2ZlciBkYXRhIGJldHdlZW4gcHJvY2VzcyBhZGRyZXNzIHNwYWNlcwogICMgcGNpY29uZmlnX3JlYWQgLSBwY2kgZGV2aWNlIGluZm9ybWF0aW9uIGhhbmRsaW5nCiAgIyBwY2ljb25maWdfd3JpdGUgLSBwY2kgZGV2aWNlIGluZm9ybWF0aW9uIGhhbmRsaW5nCiAgIyBwY2ljb25maWdfaW9iYXNlIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgc2JyayAtIGNoYW5nZSBkYXRhIHNlZ21lbnQgc2l6ZQogICMgc2V0X3RpZF9hZGRyZXNzIC0gc2V0IHBvaW50ZXIgdG8gdGhyZWFkIElECiAgIyBwa2V5X2FsbG9jIC0gYWxsb2NhdGUgb3IgZnJlZSBhIHByb3RlY3Rpb24ga2V5CiAgIyBwa2V5X2ZyZWUgLSBhbGxvY2F0ZSBvciBmcmVlIGEgcHJvdGVjdGlvbiBrZXkKICAjIHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIHBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBrZXhlY19sb2FkIC0gbG9hZCBhIG5ldyBrZXJuZWwgZm9yIGxhdGVyIGV4ZWN1dGlvbgogICMga2V4ZWNfZmlsZV9sb2FkIC0gbG9hZCBhIG5ldyBrZXJuZWwgZm9yIGxhdGVyIGV4ZWN1dGlvbgogICMgcGVyc29uYWxpdHkgLSBzZXQgdGhlIHByb2Nlc3MgZXhlY3V0aW9uIGRvbWFpbgogICMgaW9jdGxfZ2V0ZnNtYXAgLSByZXRyaWV2ZSB0aGUgcGh5c2ljYWwgbGF5b3V0IG9mIHRoZSBmaWxlc3lzdGVtCiAgIyBpbm90aWZ5X3JtX3dhdGNoIC0gcmVtb3ZlIGFuIGV4aXN0aW5nIHdhdGNoIGZyb20gYW4gaW5vdGlmeSBpbnN0YW5jZQogICMgcGVyZl9ldmVudF9vcGVuIC0gc2V0IHVwIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcKICAjIHRpbWVyX2dldG92ZXJydW4gLSBnZXQgb3ZlcnJ1biBjb3VudCBmb3IgYSBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgd2FpdDMgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZSwgQlNEIHN0eWxlCiAgIyB3YWl0NCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlLCBCU0Qgc3R5bGUKICAjIGxpbmsgLSBtYWtlIGEgbmV3IG5hbWUgZm9yIGEgZmlsZQogICMgbGlua2F0IC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAjIHNjaGVkX3JyX2dldF9pbnRlcnZhbCAtIGdldCB0aGUgU0NIRURfUlIgaW50ZXJ2YWwgZm9yIHRoZSBuYW1lZCBwcm9jZXNzCiAgIyBtdW5tYXAgLSBtYXAgb3IgdW5tYXAgZmlsZXMgb3IgZGV2aWNlcyBpbnRvIG1lbW9yeQogICMgc29ja2V0Y2FsbCAtIHNvY2tldCBzeXN0ZW0gY2FsbHMKICAjIG1yZW1hcCAtIHJlbWFwIGEgdmlydHVhbCBtZW1vcnkgYWRkcmVzcwogICMgdmZvcmsgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzIGFuZCBibG9jayBwYXJlbnQKICAjIHNlY2NvbXAgLSBvcGVyYXRlIG9uIFNlY3VyZSBDb21wdXRpbmcgc3RhdGUgb2YgdGhlIHByb2Nlc3MKICAjIHJlcXVlc3Rfa2V5IC0gcmVxdWVzdCBhIGtleSBmcm9tIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgc3lzY2FsbCAtIGluZGlyZWN0IHN5c3RlbSBjYWxsCiAgIyBrY21wIC0gY29tcGFyZSB0d28gcHJvY2Vzc2VzIHRvIGRldGVybWluZSBpZiB0aGV5IHNoYXJlIGEga2VybmVsIHJlc291cmNlCiAgIyByZWFkZGlyIC0gcmVhZCBkaXJlY3RvcnkgZW50cnkKICAjIGlvcGVybSAtIHNldCBwb3J0IGlucHV0L291dHB1dCBwZXJtaXNzaW9ucwogICMgc3B1X3J1biAtIGV4ZWN1dGUgYW4gU1BVIGNvbnRleHQKICAjIHJlYm9vdCAtIHJlYm9vdCBvciBlbmFibGUvZGlzYWJsZSBDdHJsLUFsdC1EZWwKICAjIHJlYWRhaGVhZCAtIGluaXRpYXRlIGZpbGUgcmVhZGFoZWFkIGludG8gcGFnZSBjYWNoZQogICMgc2NoZWRfZ2V0cGFyYW0gLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBhcmFtZXRlcnMKICAjIGFjY3QgLSBzd2l0Y2ggcHJvY2VzcyBhY2NvdW50aW5nIG9uIG9yIG9mZgogICMgc2lnc3VzcGVuZCAtIHdhaXQgZm9yIGEgc2lnbmFsCiAgIyBydF9zaWdzdXNwZW5kIC0gd2FpdCBmb3IgYSBzaWduYWwKICAjIGV4aXRfZ3JvdXAgLSBleGl0IGFsbCB0aHJlYWRzIGluIGEgcHJvY2VzcwogICMgc29ja2V0IC0gY3JlYXRlIGFuIGVuZHBvaW50IGZvciBjb21tdW5pY2F0aW9uCiAgIyBpb2N0bF91c2VyZmF1bHRmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgaGFuZGxpbmcgcGFnZSBmYXVsdHMgaW4gdXNlciBzcGFjZQogICMgc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAtIGdldCBzdGF0aWMgcHJpb3JpdHkgcmFuZ2UKICAjIHNjaGVkX2dldF9wcmlvcml0eV9taW4gIC0gZ2V0IHN0YXRpYyBwcmlvcml0eSByYW5nZQogICMgZ2V0ZGVudHMgLSBnZXQgZGlyZWN0b3J5IGVudHJpZXMKICAjIGdldGRlbnRzNjQgLSBnZXQgZGlyZWN0b3J5IGVudHJpZXMKICAjIHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIHBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBhbGxvY19odWdlcGFnZXMgLSBhbGxvY2F0ZSBvciBmcmVlIGh1Z2UgcGFnZXMKICAjIGZyZWVfaHVnZXBhZ2VzIC0gYWxsb2NhdGUgb3IgZnJlZSBodWdlIHBhZ2VzCiAgIyBmc3luYyAtIHN5bmNocm9uaXplIGEgZmlsZSdzIGluLWNvcmUgc3RhdGUgd2l0aCBzdG9yYWdlIGRldmljZQogICMgZmRhdGFzeW5jIC0gc3luY2hyb25pemUgYSBmaWxlJ3MgaW4tY29yZSBzdGF0ZSB3aXRoIHN0b3JhZ2UgZGV2aWNlCiAgIyBzeXNjYWxscyAtIExpbnV4IHN5c3RlbSBjYWxscwogICMgbWVtZmRfY3JlYXRlIC0gY3JlYXRlIGFuIGFub255bW91cyBmaWxlCiAgIyBtb2RpZnlfbGR0IC0gZ2V0IG9yIHNldCBhIHBlci1wcm9jZXNzIExEVCBlbnRyeQogICMgZ2V0X2tlcm5lbF9zeW1zIC0gcmV0cmlldmUgZXhwb3J0ZWQga2VybmVsIGFuZCBtb2R1bGUgc3ltYm9scwogICMgbHNlZWsgLSByZXBvc2l0aW9uIHJlYWQvd3JpdGUgZmlsZSBvZmZzZXQKICAjIHNobWF0IC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBvcGVyYXRpb25zCiAgIyBzaG1kdCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgb3BlcmF0aW9ucwogICMgdGltZXJfZGVsZXRlIC0gZGVsZXRlIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHBlcmZtb25jdGwgLSBpbnRlcmZhY2UgdG8gSUEtNjQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB1bml0CiAgIyBtb3ZlX3BhZ2VzIC0gbW92ZSBpbmRpdmlkdWFsIHBhZ2VzIG9mIGEgcHJvY2VzcyB0byBhbm90aGVyIG5vZGUKICAjIGNoZGlyIC0gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5CiAgIyBmY2hkaXIgLSBjaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkKICAjIHRpbWUgLSBnZXQgdGltZSBpbiBzZWNvbmRzCiAgIyBfZXhpdCAtIHRlcm1pbmF0ZSB0aGUgY2FsbGluZyBwcm9jZXNzCiAgIyBfRXhpdCAtIHRlcm1pbmF0ZSB0aGUgY2FsbGluZyBwcm9jZXNzCiAgIyBzMzkwX3N0aHlpIC0gZW11bGF0ZSBTVEhZSSBpbnN0cnVjdGlvbgogICMgaW9fc3VibWl0IC0gc3VibWl0IGFzeW5jaHJvbm91cyBJL08gYmxvY2tzIGZvciBwcm9jZXNzaW5nCiAgIyBtbG9jayAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIG1sb2NrMiAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIG11bmxvY2sgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtbG9ja2FsbCAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIG11bmxvY2thbGwgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyB1bWFzayAtIHNldCBmaWxlIG1vZGUgY3JlYXRpb24gbWFzawogICMgYXJjaF9wcmN0bCAtIHNldCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdGhyZWFkIHN0YXRlCiAgIyB1c2VsaWIgLSBsb2FkIHNoYXJlZCBsaWJyYXJ5CiAgIyBzZW5kZmlsZSAtIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBmaWxlIGRlc2NyaXB0b3JzCiAgIyBzaG1jdGwgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IGNvbnRyb2wKICAjIGVwb2xsX3dhaXQgLSB3YWl0IGZvciBhbiBJL08gZXZlbnQgb24gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBlcG9sbF9wd2FpdCAtIHdhaXQgZm9yIGFuIEkvTyBldmVudCBvbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIHNpZ2FsdHN0YWNrIC0gc2V0IGFuZC9vciBnZXQgc2lnbmFsIHN0YWNrIGNvbnRleHQKICAjIGlvY3RsIC0gY29udHJvbCBkZXZpY2UKICAjIHNpZ25hbGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBhY2NlcHRpbmcgc2lnbmFscwogICMgdW5zaGFyZSAtIGRpc2Fzc29jaWF0ZSBwYXJ0cyBvZiB0aGUgcHJvY2VzcyBleGVjdXRpb24gY29udGV4dAogICMgY2hyb290IC0gY2hhbmdlIHJvb3QgZGlyZWN0b3J5CiAgIyBtYWR2aXNlIC0gZ2l2ZSBhZHZpY2UgYWJvdXQgdXNlIG9mIG1lbW9yeQogICMgZ2V0dGlkIC0gZ2V0IHRocmVhZCBpZGVudGlmaWNhdGlvbgogICMgZ2V0c29ja25hbWUgLSBnZXQgc29ja2V0IG5hbWUKICAjIGlvX2Rlc3Ryb3kgLSBkZXN0cm95IGFuIGFzeW5jaHJvbm91cyBJL08gY29udGV4dAogICMgc2V0dXAgLSBzZXR1cCBkZXZpY2VzIGFuZCBmaWxlc3lzdGVtcywgbW91bnQgcm9vdCBmaWxlc3lzdGVtCiAgIyBudHBfYWRqdGltZSAtIHR1bmUga2VybmVsIGNsb2NrCiAgIyBzZW1nZXQgLSBnZXQgYSBTeXN0ZW0gViBzZW1hcGhvcmUgc2V0IGlkZW50aWZpZXIKICAjIGdldHVpZCAtIGdldCB1c2VyIGlkZW50aXR5CiAgIyBnZXRldWlkIC0gZ2V0IHVzZXIgaWRlbnRpdHkKICAjIF9zeXNjYWxsIC0gaW52b2tpbmcgYSBzeXN0ZW0gY2FsbCB3aXRob3V0IGxpYnJhcnkgc3VwcG9ydCAoT0JTT0xFVEUpCiAgIyBzY2hlZF9zZXRhZmZpbml0eSAtIFwgc2V0IGFuZCBnZXQgYSB0aHJlYWQncyBDUFUgYWZmaW5pdHkgbWFzawogICMgc2NoZWRfZ2V0YWZmaW5pdHkgLSBcIHNldCBhbmQgZ2V0IGEgdGhyZWFkJ3MgQ1BVIGFmZmluaXR5IG1hc2sKICAjIGNhY2hlZmx1c2ggLSBmbHVzaCBjb250ZW50cyBvZiBpbnN0cnVjdGlvbiBhbmQvb3IgZGF0YSBjYWNoZQogICMgcGl2b3Rfcm9vdCAtIGNoYW5nZSB0aGUgcm9vdCBtb3VudAogICMgbXNnY3RsIC0gU3lzdGVtIFYgbWVzc2FnZSBjb250cm9sIG9wZXJhdGlvbnMKICAjIGlvY3RsX2ZhdCAtIG1hbmlwdWxhdGluZyB0aGUgRkFUIGZpbGVzeXN0ZW0KICAjIHNldHBnaWQgLSBzZXQvZ2V0IHByb2Nlc3MgZ3JvdXAKICAjIGdldHBnaWQgLSBzZXQvZ2V0IHByb2Nlc3MgZ3JvdXAKICAjIHNldHBncnAgLSBzZXQvZ2V0IHByb2Nlc3MgZ3JvdXAKICAjIGdldHBncnAgLSBzZXQvZ2V0IHByb2Nlc3MgZ3JvdXAKICAjIHNvY2tldHBhaXIgLSBjcmVhdGUgYSBwYWlyIG9mIGNvbm5lY3RlZCBzb2NrZXRzCiAgIyBiZGZsdXNoIC0gc3RhcnQsIGZsdXNoLCBvciB0dW5lIGJ1ZmZlci1kaXJ0eS1mbHVzaCBkYWVtb24KICAjIGFsYXJtIC0gc2V0IGFuIGFsYXJtIGNsb2NrIGZvciBkZWxpdmVyeSBvZiBhIHNpZ25hbAogICMgdGltZXJfc2V0dGltZSAtIGFybS9kaXNhcm0gYW5kIGZldGNoIHN0YXRlIG9mIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyB0aW1lcl9nZXR0aW1lIC0gYXJtL2Rpc2FybSBhbmQgZmV0Y2ggc3RhdGUgb2YgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIGFkZF9rZXkgLSBhZGQgYSBrZXkgdG8gdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBydF9zaWdxdWV1ZWluZm8gLSBxdWV1ZSBhIHNpZ25hbCBhbmQgZGF0YQogICMgcnRfdGdzaWdxdWV1ZWluZm8gLSBxdWV1ZSBhIHNpZ25hbCBhbmQgZGF0YQogICMgdXNlcmZhdWx0ZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIGluIHVzZXIgc3BhY2UKICAjIHNlbW9wIC0gU3lzdGVtIFYgc2VtYXBob3JlIG9wZXJhdGlvbnMKICAjIHNlbXRpbWVkb3AgLSBTeXN0ZW0gViBzZW1hcGhvcmUgb3BlcmF0aW9ucwogICMgZ2V0Z2lkIC0gZ2V0IGdyb3VwIGlkZW50aXR5CiAgIyBnZXRlZ2lkIC0gZ2V0IGdyb3VwIGlkZW50aXR5CiAgIyBnZXRwaWQgLSBnZXQgcHJvY2VzcyBpZGVudGlmaWNhdGlvbgogICMgZ2V0cHBpZCAtIGdldCBwcm9jZXNzIGlkZW50aWZpY2F0aW9uCiAgIyBzaWdwcm9jbWFzayAtIGV4YW1pbmUgYW5kIGNoYW5nZSBibG9ja2VkIHNpZ25hbHMKICAjIHJ0X3NpZ3Byb2NtYXNrIC0gZXhhbWluZSBhbmQgY2hhbmdlIGJsb2NrZWQgc2lnbmFscwogICMgdW5hbWUgLSBnZXQgbmFtZSBhbmQgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBrZXJuZWwKICAjIHN0YXR4IC0gZ2V0IGZpbGUgc3RhdHVzIChleHRlbmRlZCkKICAjIGlvY3RsX2ZpY2xvbmVyYW5nZSAtIHNoYXJlIHNvbWUgdGhlIGRhdGEgb2Ygb25lIGZpbGUgd2l0aCBhbm90aGVyIGZpbGUKICAjIGlvY3RsX2ZpY2xvbmUgLSBzaGFyZSBzb21lIHRoZSBkYXRhIG9mIG9uZSBmaWxlIHdpdGggYW5vdGhlciBmaWxlCiAgIyBtcV9nZXRzZXRhdHRyIC0gZ2V0L3NldCBtZXNzYWdlIHF1ZXVlIGF0dHJpYnV0ZXMKICAjIGlvcHJpb19nZXQgLSBnZXQvc2V0IEkvTyBzY2hlZHVsaW5nIGNsYXNzIGFuZCBwcmlvcml0eQogICMgaW9wcmlvX3NldCAtIGdldC9zZXQgSS9PIHNjaGVkdWxpbmcgY2xhc3MgYW5kIHByaW9yaXR5CiAgIyBlcG9sbF9jdGwgLSBjb250cm9sIGludGVyZmFjZSBmb3IgYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBzeW5jIC0gY29tbWl0IGZpbGVzeXN0ZW0gY2FjaGVzIHRvIGRpc2sKICAjIHN5bmNmcyAtIGNvbW1pdCBmaWxlc3lzdGVtIGNhY2hlcyB0byBkaXNrCiAgIyBzZXRzaWQgLSBjcmVhdGVzIGEgc2Vzc2lvbiBhbmQgc2V0cyB0aGUgcHJvY2VzcyBncm91cCBJRAogICMgc2h1dGRvd24gLSBzaHV0IGRvd24gcGFydCBvZiBhIGZ1bGwtZHVwbGV4IGNvbm5lY3Rpb24KICAjIGdldHNpZCAtIGdldCBzZXNzaW9uIElECiAgIyBnZXRfdGhyZWFkX2FyZWEgLSBtYW5pcHVsYXRlIHRocmVhZC1sb2NhbCBzdG9yYWdlIGluZm9ybWF0aW9uCiAgIyBzZXRfdGhyZWFkX2FyZWEgLSBtYW5pcHVsYXRlIHRocmVhZC1sb2NhbCBzdG9yYWdlIGluZm9ybWF0aW9uCiAgIyB0aW1lcmZkX2NyZWF0ZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgdGltZXJmZF9zZXR0aW1lIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyB0aW1lcmZkX2dldHRpbWUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIGlvY3RsX2ZpZGVkdXBlcmFuZ2UgLSBzaGFyZSBzb21lIHRoZSBkYXRhIG9mIG9uZSBmaWxlIHdpdGggYW5vdGhlciBmaWxlCiAgIyBuYW1lX3RvX2hhbmRsZV9hdCAtIG9idGFpbiBoYW5kbGUgZm9yIGEgcGF0aG5hbWUgYW5kIG9wZW4gZmlsZSB2aWEgYSBoYW5kbGUKICAjIG9wZW5fYnlfaGFuZGxlX2F0IC0gb2J0YWluIGhhbmRsZSBmb3IgYSBwYXRobmFtZSBhbmQgb3BlbiBmaWxlIHZpYSBhIGhhbmRsZQogICMgZnV0ZXggLSBmYXN0IHVzZXItc3BhY2UgbG9ja2luZwogICMgaW9jdGxfbnMgLSBpb2N0bCgpIG9wZXJhdGlvbnMgZm9yIExpbnV4IG5hbWVzcGFjZXMKICAjIHBpZGZkX3NlbmRfc2lnbmFsIC0gc2VuZCBhIHNpZ25hbCB0byBhIHByb2Nlc3Mgc3BlY2lmaWVkIGJ5IGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBjbG9uZSAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIF9fY2xvbmUyIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgY2xvbmUzIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgdGltZXMgLSBnZXQgcHJvY2VzcyB0aW1lcwogICMgc3lzaW5mbyAtIHJldHVybiBzeXN0ZW0gaW5mb3JtYXRpb24KICAjIGlwYyAtIFN5c3RlbSBWIElQQyBzeXN0ZW0gY2FsbHMKICAjIGV2ZW50ZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGV2ZW50IG5vdGlmaWNhdGlvbgogICMgd2FpdCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlCiAgIyB3YWl0cGlkIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUKICAjIHdhaXRpZCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlCiAgIyBnZXRkb21haW5uYW1lIC0gZ2V0L3NldCBOSVMgZG9tYWluIG5hbWUKICAjIGlkbGUgLSBtYWtlIHByb2Nlc3MgMCBpZGxlCiAgIyBpbm90aWZ5X2FkZF93YXRjaCAtIGFkZCBhIHdhdGNoIHRvIGFuIGluaXRpYWxpemVkIGlub3RpZnkgaW5zdGFuY2UKICAjIGdldF9tZW1wb2xpY3kgLSByZXRyaWV2ZSBOVU1BIG1lbW9yeSBwb2xpY3kgZm9yIGEgdGhyZWFkCiAgIyBicGYgLSBwZXJmb3JtIGEgY29tbWFuZCBvbiBhbiBleHRlbmRlZCBCUEYgbWFwIG9yIHByb2dyYW0KICAjIGdldHNvY2tvcHQgLSBnZXQgYW5kIHNldCBvcHRpb25zIG9uIHNvY2tldHMKICAjIHNldHNvY2tvcHQgLSBnZXQgYW5kIHNldCBvcHRpb25zIG9uIHNvY2tldHMKICAjIGdldGl0aW1lciAtIGdldCBvciBzZXQgdmFsdWUgb2YgYW4gaW50ZXJ2YWwgdGltZXIKICAjIHNldGl0aW1lciAtIGdldCBvciBzZXQgdmFsdWUgb2YgYW4gaW50ZXJ2YWwgdGltZXIKICAjIG1lbWJhcnJpZXIgLSBpc3N1ZSBtZW1vcnkgYmFycmllcnMgb24gYSBzZXQgb2YgdGhyZWFkcwogICMgbXByb3RlY3QgLSBzZXQgcHJvdGVjdGlvbiBvbiBhIHJlZ2lvbiBvZiBtZW1vcnkKICAjIHBrZXlfbXByb3RlY3QgLSBzZXQgcHJvdGVjdGlvbiBvbiBhIHJlZ2lvbiBvZiBtZW1vcnkKICAjIGdldGNwdSAtIGRldGVybWluZSBDUFUgYW5kIE5VTUEgbm9kZSBvbiB3aGljaCB0aGUgY2FsbGluZyB0aHJlYWQgaXMgcnVubmluZwogICMgaW9jdGxfZnNsYWJlbCAtIGdldCBvciBzZXQgYSBmaWxlc3lzdGVtIGxhYmVsCiAgIyBsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgbGxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBmbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIF9sbHNlZWsgLSByZXBvc2l0aW9uIHJlYWQvd3JpdGUgZmlsZSBvZmZzZXQKICAjIGZjbnRsIC0gbWFuaXB1bGF0ZSBmaWxlIGRlc2NyaXB0b3IKICAjIHVzdGF0IC0gZ2V0IGZpbGVzeXN0ZW0gc3RhdGlzdGljcwogICMgc2lnbmFsIC0gQU5TSSBDIHNpZ25hbCBoYW5kbGluZwogICMgbmFub3NsZWVwIC0gaGlnaC1yZXNvbHV0aW9uIHNsZWVwCiAgIyBjb25uZWN0IC0gaW5pdGlhdGUgYSBjb25uZWN0aW9uIG9uIGEgc29ja2V0CiAgIyB2bTg2b2xkIC0gZW50ZXIgdmlydHVhbCA4MDg2IG1vZGUKICAjIHZtODYgLSBlbnRlciB2aXJ0dWFsIDgwODYgbW9kZQogICMgZmFub3RpZnlfaW5pdCAtIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBmYW5vdGlmeSBncm91cAogICMgbWlncmF0ZV9wYWdlcyAtIG1vdmUgYWxsIHBhZ2VzIGluIGEgcHJvY2VzcyB0byBhbm90aGVyIHNldCBvZiBub2RlcwogICMgcmVzdGFydF9zeXNjYWxsIC0gcmVzdGFydCBhIHN5c3RlbSBjYWxsIGFmdGVyIGludGVycnVwdGlvbiBieSBhIHN0b3Agc2lnbmFsCiAgIyBjbG9zZSAtIGNsb3NlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBtc2dyY3YgLSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIG9wZXJhdGlvbnMKICAjIG1zZ3NuZCAtIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgb3BlcmF0aW9ucwogICMgcmVhZHYgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyB3cml0ZXYgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwcmVhZHYgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwd3JpdGV2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHJlYWR2MiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHB3cml0ZXYyIC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgc3lzbG9nIC0gcmVhZCBhbmQvb3IgY2xlYXIga2VybmVsIG1lc3NhZ2UgcmluZyBidWZmZXI7IHNldCBjb25zb2xlX2xvZ2xldmVsCiAgIyBrbG9nY3RsIC0gcmVhZCBhbmQvb3IgY2xlYXIga2VybmVsIG1lc3NhZ2UgcmluZyBidWZmZXI7IHNldCBjb25zb2xlX2xvZ2xldmVsCiAgIyBzY2hlZF95aWVsZCAtIHlpZWxkIHRoZSBwcm9jZXNzb3IKICAjIHZoYW5ndXAgLSB2aXJ0dWFsbHkgaGFuZ3VwIHRoZSBjdXJyZW50IHRlcm1pbmFsCiAgIyBpb2N0bF9pZmxhZ3MgLSBpb2N0bCgpIG9wZXJhdGlvbnMgZm9yIGlub2RlIGZsYWdzCiAgIyBzZ2V0bWFzayAtIG1hbmlwdWxhdGlvbiBvZiBzaWduYWwgbWFzayAob2Jzb2xldGUpCiAgIyBzc2V0bWFzayAtIG1hbmlwdWxhdGlvbiBvZiBzaWduYWwgbWFzayAob2Jzb2xldGUpCiAgIyBzeW5jX2ZpbGVfcmFuZ2UgLSBzeW5jIGEgZmlsZSBzZWdtZW50IHdpdGggZGlzawogICMgY29weV9maWxlX3JhbmdlIC0gQ29weSBhIHJhbmdlIG9mIGRhdGEgZnJvbSBvbmUgZmlsZSB0byBhbm90aGVyCiAgIyBzaWdwZW5kaW5nIC0gZXhhbWluZSBwZW5kaW5nIHNpZ25hbHMKICAjIHJ0X3NpZ3BlbmRpbmcgLSBleGFtaW5lIHBlbmRpbmcgc2lnbmFscwogICMgZ2V0dW53aW5kIC0gY29weSB0aGUgdW53aW5kIGRhdGEgdG8gY2FsbGVyJ3MgYnVmZmVyCiAgIyBtc3luYyAtIHN5bmNocm9uaXplIGEgZmlsZSB3aXRoIGEgbWVtb3J5IG1hcAogICMgZ2V0X3JvYnVzdF9saXN0IC0gZ2V0L3NldCBsaXN0IG9mIHJvYnVzdCBmdXRleGVzCiAgIyBzZXRfcm9idXN0X2xpc3QgLSBnZXQvc2V0IGxpc3Qgb2Ygcm9idXN0IGZ1dGV4ZXMKICAjIGR1cCAtIGR1cGxpY2F0ZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgZHVwMiAtIGR1cGxpY2F0ZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgZHVwMyAtIGR1cGxpY2F0ZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgczM5MF9wY2lfbW1pb193cml0ZSAtIHRyYW5zZmVyIGRhdGEgdG8vZnJvbSBQQ0kgTU1JTyBtZW1vcnkgcGFnZQogICMgczM5MF9wY2lfbW1pb19yZWFkIC0gdHJhbnNmZXIgZGF0YSB0by9mcm9tIFBDSSBNTUlPIG1lbW9yeSBwYWdlCiAgIyBwYXVzZSAtIHdhaXQgZm9yIHNpZ25hbAogICMgc3dhcG9uIC0gc3RhcnQvc3RvcCBzd2FwcGluZyB0byBmaWxlL2RldmljZQogICMgc3dhcG9mZiAtIHN0YXJ0L3N0b3Agc3dhcHBpbmcgdG8gZmlsZS9kZXZpY2UKCiAgIyBSZWNvcmQgdHlwZSBub3JtYWxpemF0aW9ucwogICMgVXNlZnVsIGxpbmtzOgogICMgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3RvcnZhbGRzL2xpbnV4L3Y0LjE2L2luY2x1ZGUvdWFwaS9saW51eC9hdWRpdC5oCiAgIyBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbGludXgtYXVkaXQvYXVkaXQtdXNlcnNwYWNlLzRkOTMzMzAxYjE4MzVjYWZhMDhiOWU5ZWY3MDVjOGZiNmM5NmNiNjIvbGliL2xpYmF1ZGl0LmgKICAjIGh0dHBzOi8vd3d3LmVsYXN0aWMuY28vZ3VpZGUvZW4vZWNzL2N1cnJlbnQvZWNzLWFsbG93ZWQtdmFsdWVzLWV2ZW50LWNhdGVnb3J5Lmh0bWwKCiAgIyBJQU0gcmVsYXRlZCBldmVudHMKCiAgIyBBVURJVF9BQ0NUX0xPQ0sgLSBVc2VyJ3MgYWNjb3VudCBsb2NrZWQgYnkgYWRtaW4KICAtIHJlY29yZF90eXBlczogQUNDVF9MT0NLCiAgICBhY3Rpb246IGxvY2tlZC1hY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gaW5mbwogICMgQVVESVRfQUNDVF9VTkxPQ0sgLSBVc2VyJ3MgYWNjb3VudCB1bmxvY2tlZCBieSBhZG1pbgogIC0gcmVjb3JkX3R5cGVzOiBBQ0NUX1VOTE9DSwogICAgYWN0aW9uOiB1bmxvY2tlZC1hY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gaW5mbwogICMgQVVESVRfQUREX0dST1VQIC0gR3JvdXAgYWNjb3VudCBhZGRlZAogIC0gcmVjb3JkX3R5cGVzOiBBRERfR1JPVVAKICAgIGFjdGlvbjogYWRkZWQtZ3JvdXAtYWNjb3VudC10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6IFsqZWNzLWlhbSwgKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3NdCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY3JlYXRpb24KCiAgIyBBVURJVF9BRERfVVNFUiAtIFVzZXIgYWNjb3VudCBhZGRlZAogIC0gcmVjb3JkX3R5cGVzOiBBRERfVVNFUgogICAgYWN0aW9uOiBhZGRlZC11c2VyLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiBbKmVjcy1pYW0sICplY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3NdCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjcmVhdGlvbgogICMgQVVESVRfREVMX0dST1VQIC0gR3JvdXAgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9HUk9VUAogICAgYWN0aW9uOiBkZWxldGVkLWdyb3VwLWFjY291bnQtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6IFsqZWNzLWlhbSwgKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3NdCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gZGVsZXRpb24KICAjIEFVRElUX0RFTF9VU0VSIC0gVXNlciBhY2NvdW50IGRlbGV0ZWQKICAtIHJlY29yZF90eXBlczogREVMX1VTRVIKICAgIGFjdGlvbjogZGVsZXRlZC11c2VyLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiBbKmVjcy1pYW0sICplY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3NdCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBkZWxldGlvbgogICMgQVVESVRfR1JQX01HTVQgLSBHcm91cCBhY2NvdW50IGF0dHIgd2FzIG1vZGlmaWVkCiAgLSByZWNvcmRfdHlwZXM6IEdSUF9NR01UCiAgICBhY3Rpb246IG1vZGlmaWVkLWdyb3VwLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogZ3JvdXAKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICMgQVVESVRfUk9MRV9BU1NJR04gLSBBZG1pbiBhc3NpZ25lZCB1c2VyIHRvIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9BU1NJR04KICAgIGFjdGlvbjogYXNzaWduZWQtdXNlci1yb2xlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9NT0RJRlkgLSBBZG1pbiBtb2RpZmllZCBhIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9NT0RJRlkKICAgIGFjdGlvbjogbW9kaWZpZWQtcm9sZQogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9SRU1PVkUgLSBBZG1pbiByZW1vdmVkIHVzZXIgZnJvbSByb2xlCiAgLSByZWNvcmRfdHlwZXM6IFJPTEVfUkVNT1ZFCiAgICBhY3Rpb246IHJlbW92ZWQtdXNlci1yb2xlLWZyb20KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9VU0VSX01HTVQgLSBVc2VyIGFjY3QgYXR0cmlidXRlIGNoYW5nZQogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9NR01UCiAgICBhY3Rpb246IG1vZGlmaWVkLXVzZXItYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogdXNlci50YXJnZXQKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICMgQVVESVRfVVNFUl9DSEFVVEhUT0sgLSBVc2VyIGFjY3QgcGFzc3dvcmQgb3IgcGluIGNoYW5nZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQ0hBVVRIVE9LCiAgICBhY3Rpb246IGNoYW5nZWQtcGFzc3dvcmQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAgICAgbWFwcGluZ3M6CiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogdXNlci50YXJnZXQKCiAgIyBBVURJVF9HUlBfQ0hBVVRIVE9LIC0gR3JvdXAgYWNjdCBwYXNzd29yZCBvciBwaW4gY2hhbmdlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogR1JQX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLWdyb3VwLXBhc3N3b3JkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFjY3QKICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICAgIHRvOiBncm91cAoKICAjIEF1dGhlbnRpY2F0aW9uIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQ1JFRF9BQ1EgLSBVc2VyIGNyZWRlbnRpYWwgYWNxdWlyZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfQUNRCiAgICBhY3Rpb246IGFjcXVpcmVkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfQ1JFRF9ESVNQIC0gVXNlciBjcmVkZW50aWFsIGRpc3Bvc2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX0RJU1AKICAgIGFjdGlvbjogZGlzcG9zZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9DUkVEX1JFRlIgLSBVc2VyIGNyZWRlbnRpYWwgcmVmcmVzaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX1JFRlIKICAgIGFjdGlvbjogcmVmcmVzaGVkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfR1JQX0FVVEggLSBBdXRoZW50aWNhdGlvbiBmb3IgZ3JvdXAgcGFzc3dvcmQKICAtIHJlY29yZF90eXBlczogR1JQX0FVVEgKICAgIGFjdGlvbjogYXV0aGVudGljYXRlZC10by1ncm91cAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0xPR0lOIC0gRGVmaW5lIHRoZSBsb2dpbiBpZCBhbmQgaW5mb3JtYXRpb24KICAtIHJlY29yZF90eXBlczogTE9HSU4KICAgIGFjdGlvbjogY2hhbmdlZC1sb2dpbi1pZC10bwogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogW29sZF9hdWlkLCBvbGQtYXVpZF0KICAgICAgc2Vjb25kYXJ5OiB1aWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW25ldy1hdWlkLCBuZXdfYXVpZCwgYXVpZF0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogc3RhcnQKICAgICAgbWFwcGluZ3M6CiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgIyBBVURJVF9VU0VSX0FDQ1QgLSBVc2VyIHN5c3RlbSBhY2Nlc3MgYXV0aG9yaXphdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9BQ0NUCiAgICBhY3Rpb246IHdhcy1hdXRob3JpemVkCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9BVVRIIC0gVXNlciBzeXN0ZW0gYWNjZXNzIGF1dGhlbnRpY2F0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0FVVEgKICAgIGFjdGlvbjogYXV0aGVudGljYXRlZAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfRU5EIC0gVXNlciBzZXNzaW9uIGVuZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FTkQKICAgIGFjdGlvbjogZW5kZWQtc2Vzc2lvbgogICAgZWNzOgogICAgICA8PDogKmVjcy1zZXNzaW9uCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfVVNFUl9FUlIgLSBVc2VyIGFjY3Qgc3RhdGUgZXJyb3IKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfRVJSCiAgICBhY3Rpb246IGVycm9yCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfTE9HSU4gLSBVc2VyIGhhcyBsb2dnZWQgaW4KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfTE9HSU4KICAgIGFjdGlvbjogbG9nZ2VkLWluCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9VU0VSX0xPR09VVCAtIFVzZXIgaGFzIGxvZ2dlZCBvdXQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfTE9HT1VUCiAgICBhY3Rpb246IGxvZ2dlZC1vdXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtYXV0aAogICAgICB0eXBlOiBlbmQKICAjIEFVRElUX1VTRVJfUk9MRV9DSEFOR0UgLSBVc2VyIGNoYW5nZWQgdG8gYSBuZXcgcm9sZQogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9ST0xFX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLXJvbGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogc2VsZWN0ZWQtY29udGV4dAogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAjIEFVRElUX1VTRVJfU1RBUlQgLSBVc2VyIHNlc3Npb24gc3RhcnQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfU1RBUlQKICAgIGFjdGlvbjogc3RhcnRlZC1zZXNzaW9uCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOgogICAgICA8PDogKmVjcy1zZXNzaW9uCiAgICAgIHR5cGU6IHN0YXJ0CgogICMgSG9zdCB2aXJ0dWFsaXphdGlvbiBldmVudHMKCiAgIyBBVURJVF9WSVJUX0NPTlRST0wgLSBTdGFydCwgUGF1c2UsIFN0b3AgVk0KICAtIHJlY29yZF90eXBlczogVklSVF9DT05UUk9MCiAgICBhY3Rpb246IGlzc3VlZC12bS1jb250cm9sCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wCiAgICAgIHNlY29uZGFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9DUkVBVEUgLSBDcmVhdGlvbiBvZiBndWVzdCBpbWFnZQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0NSRUFURQogICAgYWN0aW9uOiBjcmVhdGVkLXZtLWltYWdlCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9ERVNUUk9ZIC0gRGVzdHJ1Y3Rpb24gb2YgZ3Vlc3QgaW1hZ2UKICAtIHJlY29yZF90eXBlczogVklSVF9ERVNUUk9ZCiAgICBhY3Rpb246IGRlbGV0ZWQtdm0taW1hZ2UKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0lOVEVHUklUWV9DSEVDSyAtIEd1ZXN0IGludGVncml0eSByZXN1bHRzCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfSU5URUdSSVRZX0NIRUNLCiAgICBhY3Rpb246IGNoZWNrZWQtaW50ZWdyaXR5LW9mCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NQUNISU5FX0lEIC0gQmluZGluZyBvZiBsYWJlbCB0byBWTQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01BQ0hJTkVfSUQKICAgIGFjdGlvbjogYXNzaWduZWQtdm0taWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NSUdSQVRFX0lOIC0gSW5ib3VuZCBndWVzdCBtaWdyYXRpb24gaW5mbwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01JR1JBVEVfSU4KICAgIGFjdGlvbjogbWlncmF0ZWQtdm0tZnJvbQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUlHUkFURV9PVVQgLSBPdXRib3VuZCBndWVzdCBtaWdyYXRpb24gaW5mbwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01JR1JBVEVfT1VUCiAgICBhY3Rpb246IG1pZ3JhdGVkLXZtLXRvCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9SRVNPVVJDRSAtIFJlc291cmNlIGFzc2lnbm1lbnQKICAtIHJlY29yZF90eXBlczogVklSVF9SRVNPVVJDRQogICAgYWN0aW9uOiBhc3NpZ25lZC12bS1yZXNvdXJjZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiByZXNyYwogICAgICBzZWNvbmRhcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKCiAgIyBVc2Vyc3BhY2UgcHJvY2VzcyBldmVudHMKCiAgIyBBVURJVF9DSEdSUF9JRCAtIFVzZXIgc3BhY2UgZ3JvdXAgSUQgY2hhbmdlZAogIC0gcmVjb3JkX3R5cGVzOiBDSEdSUF9JRAogICAgYWN0aW9uOiBjaGFuZ2VkLWdyb3VwCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9DSFVTRVJfSUQgLSBDaGFuZ2VkIHVzZXIgSUQgc3VwcGxlbWVudGFsIGRhdGEKICAtIHJlY29yZF90eXBlczogQ0hVU0VSX0lECiAgICBhY3Rpb246IGNoYW5nZWQtdXNlci1pZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVEVTVCAtIFVzZWQgZm9yIHRlc3Qgc3VjY2VzcyBtZXNzYWdlcwogIC0gcmVjb3JkX3R5cGVzOiBURVNUCiAgICBhY3Rpb246IHNlbnQtdGVzdAogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX1RSVVNURURfQVBQIC0gVHJ1c3RlZCBhcHAgbXNnIC0gZnJlZXN0eWxlIHRleHQKICAtIHJlY29yZF90eXBlczogVFJVU1RFRF9BUFAKICAgIGFjdGlvbjogdW5rbm93bgogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX1VTRVJfQ01EIC0gVXNlciBzaGVsbCBjb21tYW5kIGFuZCBhcmdzCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfQ01ECiAgICBhY3Rpb246IHJhbi1jb21tYW5kCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGNtZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBkZXNjcmlwdGlvbjogPgogICAgICBUaGVzZSBtZXNzYWdlcyBhcmUgZnJvbSB1c2VyLXNwYWNlIGFwcHMsIGxpa2Ugc3VkbywgdGhhdCBsb2cgY29tbWFuZHMKICAgICAgYmVpbmcgcnVuIGJ5IGEgdXNlci4gVGhlIHVpZCBjb250YWluZWQgaW4gdGhlc2UgbWVzc2FnZXMgaXMgdXNlcidzIFVJRCBhdAogICAgICB0aGUgdGltZSB0aGUgY29tbWFuZCB3YXMgcnVuLiBJdCBpcyBub3QgdGhlICJ0YXJnZXQiIFVJRCB1c2VkIHRvIHJ1biB0aGUKICAgICAgY29tbWFuZCwgd2hpY2ggaXMgbm9ybWFsbHkgcm9vdC4KICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAoKICAjIEhvc3QtbGV2ZWwgZXZlbnRzCgogICMgQVVESVRfU1lTVEVNX0JPT1QgLSBTeXN0ZW0gYm9vdAogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fQk9PVAogICAgYWN0aW9uOiBib290ZWQtc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9TWVNURU1fUlVOTEVWRUwgLSBTeXN0ZW0gcnVubGV2ZWwgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9SVU5MRVZFTAogICAgYWN0aW9uOiBjaGFuZ2VkLXRvLXJ1bmxldmVsCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG5ldy1sZXZlbAogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1NZU1RFTV9TSFVURE9XTiAtIFN5c3RlbSBzaHV0ZG93bgogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fU0hVVERPV04KICAgIGFjdGlvbjogc2h1dGRvd24tc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGVuZAoKICAjIFNlcnZpY2UtbGV2ZWwgZXZlbnRzCgogICMgQVVESVRfU0VSVklDRV9TVEFSVCAtIFNlcnZpY2UgKGRhZW1vbikgc3RhcnQKICAtIHJlY29yZF90eXBlczogU0VSVklDRV9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlcnZpY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdW5pdAogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1NFUlZJQ0VfU1RPUCAtIFNlcnZpY2UgKGRhZW1vbikgc3RvcAogIC0gcmVjb3JkX3R5cGVzOiBTRVJWSUNFX1NUT1AKICAgIGFjdGlvbjogc3RvcHBlZC1zZXJ2aWNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHVuaXQKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKCiAgIyBBdWRpdGQgaW50ZXJuYWwgZXZlbnRzCgogICMgQVVESVRfQ09ORklHX0NIQU5HRSAtIEF1ZGl0IHN5c3RlbSBjb25maWd1cmF0aW9uIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBDT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OgogICAgICAgIFtvcCwga2V5LCBhdWRpdF9lbmFibGVkLCBhdWRpdF9waWQsIGF1ZGl0X2JhY2tsb2dfbGltaXQsIGF1ZGl0X2ZhaWx1cmVdCiAgICAgIHdoYXQ6IGF1ZGl0LWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX0FCT1JUIC0gRGFlbW9uIGVycm9yIHN0b3AgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9BQk9SVAogICAgYWN0aW9uOiBhYm9ydGVkLWF1ZGl0ZC1zdGFydHVwCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCiAgIyBBVURJVF9EQUVNT05fQUNDRVBUIC0gQXVkaXRkIGFjY2VwdGVkIHJlbW90ZSBjb25uZWN0aW9uCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9BQ0NFUFQKICAgIGFjdGlvbjogcmVtb3RlLWF1ZGl0LWNvbm5lY3RlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgIyBBVURJVF9EQUVNT05fQ0xPU0UgLSBBdWRpdGQgY2xvc2VkIHJlbW90ZSBjb25uZWN0aW9uCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9DTE9TRQogICAgYWN0aW9uOiByZW1vdGUtYXVkaXQtZGlzY29ubmVjdGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAjIEFVRElUX0RBRU1PTl9DT05GSUcgLSBEYWVtb24gY29uZmlnIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQ09ORklHCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXRkLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX0VORCAtIERhZW1vbiBub3JtYWwgc3RvcCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX0VORAogICAgYWN0aW9uOiBzaHV0ZG93bi1hdWRpdAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAogICMgQVVESVRfREFFTU9OX0VSUiAtIEF1ZGl0ZCBpbnRlcm5hbCBlcnJvcgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fRVJSCiAgICBhY3Rpb246IGF1ZGl0LWVycm9yCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9EQUVNT05fUkVDT05GSUcgLSBBdWRpdGQgc2hvdWxkIHJlY29uZmlndXJlCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9SRUNPTkZJRwogICAgYWN0aW9uOiByZWNvbmZpZ3VyZWQtYXVkaXRkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBpbmZvCiAgIyBBVURJVF9EQUVNT05fUkVTVU1FIC0gQXVkaXRkIHNob3VsZCByZXN1bWUgbG9nZ2luZwogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUkVTVU1FCiAgICBhY3Rpb246IHJlc3VtZWQtYXVkaXQtbG9nZ2luZwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fUk9UQVRFIC0gQXVkaXRkIHNob3VsZCByb3RhdGUgbG9ncwogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUk9UQVRFCiAgICBhY3Rpb246IHJvdGF0ZWQtYXVkaXQtbG9ncwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fU1RBUlQgLSBEYWVtb24gc3RhcnR1cCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX1NUQVJUCiAgICBhY3Rpb246IHN0YXJ0ZWQtYXVkaXQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9LRVJORUwgLSBBc3luY2hyb25vdXMgYXVkaXQgcmVjb3JkLiBOT1QgQSBSRVFVRVNULgogIC0gcmVjb3JkX3R5cGVzOiBLRVJORUwKICAgIGFjdGlvbjogaW5pdGlhbGl6ZWQtYXVkaXQtc3Vic3lzdGVtCiAgICBlY3M6ICplY3MtcHJvY2VzcwoKICAjIENvbmZpZ3VyYXRpb24gY2hhbmdlIGV2ZW50cwoKICAjIEFVRElUX1VTWVNfQ09ORklHIC0gVXNlciBzcGFjZSBzeXN0ZW0gY29uZmlnIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBVU1lTX0NPTkZJRwogICAgYWN0aW9uOiBjaGFuZ2VkLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3AKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfTkVURklMVEVSX0NGRyAtIE5ldGZpbHRlciBjaGFpbiBtb2RpZmljYXRpb25zCiAgLSByZWNvcmRfdHlwZXM6IE5FVEZJTFRFUl9DRkcKICAgIGFjdGlvbjogbG9hZGVkLWZpcmV3YWxsLXJ1bGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdGFibGUKICAgICAgd2hhdDogZmlyZXdhbGwKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9GRUFUVVJFX0NIQU5HRSAtIGF1ZGl0IGxvZyBsaXN0aW5nIGZlYXR1cmUgY2hhbmdlcwogIC0gcmVjb3JkX3R5cGVzOiBGRUFUVVJFX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0LWZlYXR1cmUKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZmVhdHVyZQogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9SRVBMQUNFIC0gUmVwbGFjZSBhdWRpdGQgaWYgdGhpcyBwYWNrZXQgdW5hbnN3ZXJkCgogICMgVFRZIGV2ZW50cwoKICAtIHJlY29yZF90eXBlczoKICAgICAgIyBBVURJVF9UVFkgLSBJbnB1dCBvbiBhbiBhZG1pbmlzdHJhdGl2ZSBUVFkKICAgICAgLSBUVFkKICAgICAgIyBBVURJVF9VU0VSX1RUWSAtIE5vbi1JQ0FOT04gVFRZIGlucHV0IG1lYW5pbmcKICAgICAgLSBVU0VSX1RUWQogICAgYWN0aW9uOiB0eXBlZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBkYXRhCiAgICAgIHdoYXQ6IGtleXN0cm9rZXMKICAgIGhvdzogW2NvbW0sIGV4ZV0KCiAgIyBQb2xpY3kgZXZlbnRzCgogICMgQVVESVRfQVZDIC0gU0UgTGludXggYXZjIGRlbmlhbCBvciBncmFudCAoc2VsaW51eCkKICAtIHJlY29yZF90eXBlczogQVZDCiAgICBhY3Rpb246IHZpb2xhdGVkLXNlbGludXgtcG9saWN5CiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBzY29udGV4dAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0Y29udGV4dAogICAgICBzZWNvbmRhcnk6IHRjbGFzcwogICAgaGFzX2ZpZWxkczoKICAgICAgLSBzZXJlc3VsdAogICMgQVVESVRfQVZDIC0gU0UgTGludXggYXZjIGRlbmlhbCBvciBncmFudCAoYXBwYXJtb3IpCiAgLSByZWNvcmRfdHlwZXM6IEFWQwogICAgYWN0aW9uOiB2aW9sYXRlZC1hcHBhcm1vci1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3BlcmF0aW9uCiAgICAgIHNlY29uZGFyeTogW3JlcXVlc3RlZF9tYXNrLCBkZW5pZWRfbWFzaywgY2FwbmFtZV0KICAgICAgd2hhdDogcG9saWN5CiAgICBoYXNfZmllbGRzOgogICAgICAtIGFwcGFybW9yCiAgIyBBVURJVF9GU19SRUxBQkVMIC0gRmlsZXN5c3RlbSByZWxhYmVsZWQKICAtIHJlY29yZF90eXBlczogRlNfUkVMQUJFTAogICAgYWN0aW9uOiByZWxhYmVsZWQtZmlsZXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgIyBBVURJVF9MQUJFTF9MRVZFTF9DSEFOR0UgLSBPYmplY3QncyBsZXZlbCB3YXMgY2hhbmdlZAogIC0gcmVjb3JkX3R5cGVzOiBMQUJFTF9MRVZFTF9DSEFOR0UKICAgIGFjdGlvbjogbW9kaWZpZWQtbGV2ZWwtb2YKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogcHJpbnRlcgogICAgICB3aGF0OiBwcmludGVyCiAgIyBBVURJVF9MQUJFTF9PVkVSUklERSAtIEFkbWluIGlzIG92ZXJyaWRpbmcgYSBsYWJlbAogIC0gcmVjb3JkX3R5cGVzOiBMQUJFTF9PVkVSUklERQogICAgYWN0aW9uOiBvdmVycm9kZS1sYWJlbC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgIyBBVURJVF9NQUNfQ0hFQ0sgLSBVc2VyIHNwYWNlIE1BQyBkZWNpc2lvbiByZXN1bHRzCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19DSEVDSwogICAgYWN0aW9uOiBtYWMtcGVybWlzc2lvbgogICMgQVVESVRfTUFDX0NPTkZJR19DSEFOR0UgLSBDaGFuZ2VzIHRvIGJvb2xlYW5zCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19DT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtc2VsaW51eC1ib29sZWFuCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGJvb2wKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX01BQ19QT0xJQ1lfTE9BRCAtIFBvbGljeSBmaWxlIGxvYWQKICAtIHJlY29yZF90eXBlczogTUFDX1BPTElDWV9MT0FECiAgICBhY3Rpb246IGxvYWRlZC1zZWxpbnV4LXBvbGljeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGFjY2VzcwogICMgQVVESVRfTUFDX1NUQVRVUyAtIENoYW5nZWQgZW5mb3JjaW5nLHBlcm1pc3NpdmUsb2ZmCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19TVEFUVVMKICAgIGFjdGlvbjogY2hhbmdlZC1zZWxpbnV4LWVuZm9yY2VtZW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGVuZm9yY2luZwogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVVNFUl9BVkMgLSBVc2VyIHNwYWNlIGF2YyBtZXNzYWdlCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfQVZDCiAgICBhY3Rpb246IGFjY2Vzcy1wZXJtaXNzaW9uCiAgIyBBVURJVF9VU0VSX01BQ19DT05GSUdfQ0hBTkdFIC0gQ2hhbmdlIG1hZGUgdG8gTUFDIHBvbGljeQogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX01BQ19DT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtbWFjLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1VTRVJfTUFDX1BPTElDWV9MT0FEIC0gVXNlcnNwYyBkYWVtb24gbG9hZGVkIHBvbGljCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfTUFDX1BPTElDWV9MT0FECiAgICBhY3Rpb246IGxvYWRlZC1tYWMtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogYWNjZXNzCiAgIyBBVURJVF9VU0VSX1NFTElOVVhfRVJSIC0gU0UgTGludXggdXNlciBzcGFjZSBlcnJvcgogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX1NFTElOVVhfRVJSCiAgICBhY3Rpb246IGFjY2Vzcy1lcnJvcgogICMgQVVESVRfU0VDQ09NUCAtIFNlY3VyZSBDb21wdXRpbmcgZXZlbnQKICAtIHJlY29yZF90eXBlczogU0VDQ09NUAogICAgYWN0aW9uOiB2aW9sYXRlZC1zZWNjb21wLXBvbGljeQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzeXNjYWxsCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAjIEFVRElUX1NFTElOVVhfRVJSIC0gSW50ZXJuYWwgU0UgTGludXggRXJyb3JzCiAgLSBhY3Rpb246IGNhdXNlZC1tYWMtcG9saWN5LWVycm9yCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgcmVjb3JkX3R5cGVzOiBTRUxJTlVYX0VSUgogICMgQVVESVRfQVBQQVJNT1JfQUxMT1dFRAogICMgQVVESVRfQVBQQVJNT1JfREVOSUVECiAgIyBBVURJVF9BUFBBUk1PUl9FUlJPUgogICMgQVVESVRfQVZDX1BBVEggLSBkZW50cnksIHZmc21vdW50IHBhaXIgZnJvbSBhdmMKICAjIEFVRElUX0FQUEFSTU9SX0FVRElUCiAgIyBBVURJVF9BUFBBUk1PUl9ISU5UCiAgIyBBVURJVF9BUFBBUk1PUl9TVEFUVVMKICAjIEFVRElUX0FQUEFSTU9SX0VSUk9SCiAgIyBBVURJVF9ERVZfQUxMT0MgLSBEZXZpY2Ugd2FzIGFsbG9jYXRlZAogICMgQVVESVRfREVWX0RFQUxMT0MgLSBEZXZpY2Ugd2FzIGRlYWxsb2NhdGVkCiAgIyBBVURJVF9NQUNfVU5MQkxfQUxMT1cgLSBOZXRMYWJlbDogYWxsb3cgdW5sYWJlbGVkIHRyYWZmaWMKICAjIEFVRElUX01BQ19DSVBTT1Y0X0FERCAtIE5ldExhYmVsOiBhZGQgQ0lQU092NCBET0kgZW50cnkKICAjIEFVRElUX01BQ19DSVBTT1Y0X0RFTCAtIE5ldExhYmVsOiBkZWwgQ0lQU092NCBET0kgZW50cnkKICAjIEFVRElUX01BQ19NQVBfQUREIC0gTmV0TGFiZWw6IGFkZCBMU00gZG9tYWluIG1hcHBpbmcKICAjIEFVRElUX01BQ19NQVBfREVMIC0gTmV0TGFiZWw6IGRlbCBMU00gZG9tYWluIG1hcHBpbmcKICAjIEFVRElUX01BQ19JUFNFQ19FVkVOVCAtIEF1ZGl0IGFuIElQU2VjIGV2ZW50CiAgIyBBVURJVF9NQUNfVU5MQkxfU1RDQUREIC0gTmV0TGFiZWw6IGFkZCBhIHN0YXRpYyBsYWJlbAogICMgQVVESVRfTUFDX1VOTEJMX1NUQ0RFTCAtIE5ldExhYmVsOiBkZWwgYSBzdGF0aWMgbGFiZWwKICAjIEFVRElUX01BQ19DQUxJUFNPX0FERCAtIE5ldExhYmVsOiBhZGQgQ0FMSVBTTyBET0kgZW50cnkKICAjIEFVRElUX01BQ19DQUxJUFNPX0RFTCAtIE5ldExhYmVsOiBkZWwgQ0FMSVBTTyBET0kgZW50cnkKICAjIEFVRElUX1VTRVJfTEFCRUxFRF9FWFBPUlQgLSBPYmplY3QgZXhwb3J0ZWQgd2l0aCBsYWJlbAogICMgQVVESVRfVVNFUl9VTkxBQkVMRURfRVhQT1JUIC0gT2JqZWN0IGV4cG9ydGVkIHdpdGhvdXQgbGFiZWwKCiAgIyBDcnlwdG8gZXZlbnRzCgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIGFjdGlvbjogbmVnb3RpYXRlZC1jcnlwdG8ta2V5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGZwCiAgICAgIHNlY29uZGFyeTogW2FkZHIsIGhvc3RuYW1lXQogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0tFWV9VU0VSCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogY3J5cHRvLW9mZmljZXItbG9nZ2VkLWluCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19MT0dJTgogIC0gYWN0aW9uOiBjcnlwdG8tb2ZmaWNlci1sb2dnZWQtb3V0CiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19MT0dPVVQKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgYWN0aW9uOiBzdGFydGVkLWNyeXB0by1zZXNzaW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFkZHIKICAgICAgc2Vjb25kYXJ5OiBbcnBvcnRdCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19TRVNTSU9OCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogYWNjZXNzLXJlc3VsdAogICAgcmVjb3JkX3R5cGVzOiBEQUNfQ0hFQ0sKCiAgIyBBbm9tYWxpZXMgLSBSZWxhdGVkIHRvIElEUwoKICAjIEFVRElUX0FOT01fQUJFTkQgLSBQcm9jZXNzIGVuZGVkIGFibm9ybWFsbHkKICAtIHJlY29yZF90eXBlczogQU5PTV9BQkVORAogICAgYWN0aW9uOiBjcmFzaGVkLXByb2dyYW0KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2NvbW0sIGV4ZV0KICAgICAgc2Vjb25kYXJ5OiBwaWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzaWcKICAgIGVjczoKICAgICAga2luZDogYWxlcnQKICAgICAgY2F0ZWdvcnk6CiAgICAgICAgLSBwcm9jZXNzCiAgICAgICAgLSBpbnRydXNpb25fZGV0ZWN0aW9uCiAgICAgIHR5cGU6CiAgICAgICAgLSBlbmQKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FOT01fRVhFQyAtIEV4ZWN1dGlvbiBvZiBmaWxlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fRVhFQwogICAgYWN0aW9uOiBhdHRlbXB0ZWQtZXhlY3V0aW9uLW9mLWZvcmJpZGRlbi1wcm9ncmFtCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGNtZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHRlcm1pbmFsCiAgICBlY3M6CiAgICAgIGtpbmQ6IGFsZXJ0CiAgICAgIGNhdGVnb3J5OgogICAgICAgIC0gcHJvY2VzcwogICAgICAgIC0gaW50cnVzaW9uX2RldGVjdGlvbgogICAgICB0eXBlOgogICAgICAgIC0gc3RhcnQKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FOT01fTElOSyAtIFN1c3BpY2lvdXMgdXNlIG9mIGZpbGUgbGlua3MKICAtIHJlY29yZF90eXBlczogQU5PTV9MSU5LCiAgICBhY3Rpb246IHVzZWQtc3VzcGljaW91cy1saW5rCiAgICBlY3M6CiAgICAgIGtpbmQ6IGFsZXJ0CiAgICAgIGNhdGVnb3J5OgogICAgICAgIC0gZmlsZQogICAgICAgIC0gaW50cnVzaW9uX2RldGVjdGlvbgogICAgICB0eXBlOgogICAgICAgIC0gYWNjZXNzCiAgICAgICAgLSBpbmZvCiAgIyBBVURJVF9BTk9NX0xPR0lOX0ZBSUxVUkVTIC0gRmFpbGVkIGxvZ2luIGxpbWl0IHJlYWNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fRkFJTFVSRVMKICAgIGFjdGlvbjogZmFpbGVkLWxvZy1pbi10b28tbWFueS10aW1lcy10bwogICAgZWNzOgogICAgICBraW5kOiBhbGVydAogICAgICBjYXRlZ29yeToKICAgICAgICAtIGF1dGhlbnRpY2F0aW9uCiAgICAgICAgLSBpbnRydXNpb25fZGV0ZWN0aW9uCiAgICAgIHR5cGU6CiAgICAgICAgLSBzdGFydAogICAgICAgIC0gZGVuaWVkCiAgICAjIEFVRElUX0FOT01fTE9HSU5fTE9DQVRJT04gLSBMb2dpbiBmcm9tIGZvcmJpZGRlbiBsb2NhdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9MT0NBVElPTgogICAgYWN0aW9uOiBhdHRlbXB0ZWQtbG9nLWluLWZyb20tdW51c3VhbC1wbGFjZS10bwogICAgZWNzOgogICAgICBraW5kOiBhbGVydAogICAgICBjYXRlZ29yeToKICAgICAgICAtIGF1dGhlbnRpY2F0aW9uCiAgICAgICAgLSBpbnRydXNpb25fZGV0ZWN0aW9uCiAgICAgIHR5cGU6CiAgICAgICAgLSBzdGFydAogICAgICAgIC0gZGVuaWVkCiAgIyBBVURJVF9BTk9NX0xPR0lOX1NFU1NJT05TIC0gTWF4IGNvbmN1cnJlbnQgc2Vzc2lvbnMgcmVhY2hlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9TRVNTSU9OUwogICAgYWN0aW9uOiBvcGVuZWQtdG9vLW1hbnktc2Vzc2lvbnMtdG8KICAgIGVjczoKICAgICAga2luZDogYWxlcnQKICAgICAgY2F0ZWdvcnk6CiAgICAgICAgLSBhdXRoZW50aWNhdGlvbgogICAgICAgIC0gaW50cnVzaW9uX2RldGVjdGlvbgogICAgICB0eXBlOgogICAgICAgIC0gc3RhcnQKICAgICAgICAtIGRlbmllZAogICMgQVVESVRfQU5PTV9MT0dJTl9USU1FIC0gTG9naW4gYXR0ZW1wdGVkIGF0IGJhZCB0aW1lCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX1RJTUUKICAgIGFjdGlvbjogYXR0ZW1wdGVkLWxvZy1pbi1kdXJpbmctdW51c3VhbC1ob3VyLXRvCiAgICBlY3M6CiAgICAgIGtpbmQ6IGFsZXJ0CiAgICAgIGNhdGVnb3J5OgogICAgICAgIC0gYXV0aGVudGljYXRpb24KICAgICAgICAtIGludHJ1c2lvbl9kZXRlY3Rpb24KICAgICAgdHlwZToKICAgICAgICAtIHN0YXJ0CiAgICAgICAgLSBkZW5pZWQKICAjIEFVRElUX0FOT01fUFJPTUlTQ1VPVVMgLSBEZXZpY2UgY2hhbmdlZCBwcm9taXNjdW91cyBtb2RlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fUFJPTUlTQ1VPVVMKICAgIGFjdGlvbjogY2hhbmdlZC1wcm9taXNjdW91cy1tb2RlLW9uLWRldmljZSAjIENvdWxkIGJlIGVudGVyZWQgb3IgZXhpdGVkIGJhc2VkIG9uIHByb20gZmllbGQuCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGRldgogICAgICB3aGF0OiBuZXR3b3JrLWRldmljZQogICAgZWNzOgogICAgICBraW5kOiBhbGVydAogICAgICAjIGFkZCBkZXZpY2Ugb25jZSBpbiBFQ1MKICAgICAgY2F0ZWdvcnk6CiAgICAgICAgLSBpbnRydXNpb25fZGV0ZWN0aW9uCiAgICAgIHR5cGU6CiAgICAgICAgLSBpbmZvCiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX0FOT01fUkJBQ19JTlRFR1JJVFlfRkFJTCAtIFJCQUMgZmlsZSBpbnRlZ3JpdHkgZmFpbHVyZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX1JCQUNfSU5URUdSSVRZX0ZBSUwKICAgIGFjdGlvbjogdGVzdGVkLWZpbGUtc3lzdGVtLWludGVncml0eS1vZgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBob3N0bmFtZQogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICBlY3M6CiAgICAgIGtpbmQ6IGFsZXJ0CiAgICAgIGNhdGVnb3J5OgogICAgICAgIC0gaW50cnVzaW9uX2RldGVjdGlvbgogICAgICB0eXBlOgogICAgICAgIC0gaW5mbwogICMgQVVESVRfQU5PTV9MT0dJTl9BQ0NUIC0gTG9naW4gYXR0ZW1wdGVkIHRvIHdhdGNoZWQgYWNjdAogIC0gcmVjb3JkX3R5cGVzOiBBVURJVF9BTk9NX0xPR0lOX0FDQ1QKICAgIGFjdGlvbjogYXR0ZW1wdGVkLWxvZy1pbi10by13YXRjaGVkLWFjY291bnQKICAgIGVjczoKICAgICAga2luZDogYWxlcnQKICAgICAgY2F0ZWdvcnk6CiAgICAgICAgLSBhdXRoZW50aWNhdGlvbgogICAgICAgIC0gaW50cnVzaW9uX2RldGVjdGlvbgogICAgICB0eXBlOgogICAgICAgIC0gc3RhcnQKICAgICAgICAtIGRlbmllZAogICMgQVVESVRfQU5PTV9NQVhfREFDIC0gTWF4IERBQyBmYWlsdXJlcyByZWFjaGVkCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fTUFYX0RBQwogICAgYWN0aW9uOiBtYXgtZGlzY3JldGlvbmFyeS1hY2Nlc3MtY29udHJvbC1mYWlsdXJlcy1yZWFjaGVkCiAgICBlY3M6CiAgICAgIGtpbmQ6IGFsZXJ0CiAgICAgIGNhdGVnb3J5OgogICAgICAgIC0gaW50cnVzaW9uX2RldGVjdGlvbgogICAgICB0eXBlOgogICAgICAgIC0gaW5mbwogICMgQVVESVRfQU5PTV9NQVhfTUFDIC0gTWF4IE1BQyBmYWlsdXJlcyByZWFjaGVkCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fTUFYX01BQwogICAgYWN0aW9uOiBtYXgtbWFuZGF0b3J5LWFjY2Vzcy1jb250cm9sLWZhaWx1cmVzLXJlYWNoZWQKICAgIGVjczoKICAgICAga2luZDogYWxlcnQKICAgICAgY2F0ZWdvcnk6CiAgICAgICAgLSBpbnRydXNpb25fZGV0ZWN0aW9uCiAgICAgIHR5cGU6CiAgICAgICAgLSBpbmZvCiAgIyBBVURJVF9BTk9NX0FNVFVfRkFJTCAtIEFNVFUgZmFpbHVyZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0FNVFVfRkFJTAogICAgYWN0aW9uOiBhYnN0cmFjdC1tYWNoaW5lLXRlc3QtdXRpbGl0eS1mYWlsdXJlCiAgICBlY3M6CiAgICAgIGtpbmQ6IGFsZXJ0CiAgICAgIGNhdGVnb3J5OgogICAgICAgIC0gaW50cnVzaW9uX2RldGVjdGlvbgogICAgICB0eXBlOgogICAgICAgIC0gaW5mbwogICMgQVVESVRfQU5PTV9SQkFDX0ZBSUwgLSBSQkFDIHNlbGYgdGVzdCBmYWlsdXJlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fUkJBQ19GQUlMCiAgICBhY3Rpb246IHJiYWMtc2VsZi10ZXN0LWZhaWx1cmUKICAgIGVjczoKICAgICAga2luZDogYWxlcnQKICAgICAgY2F0ZWdvcnk6CiAgICAgICAgLSBpbnRydXNpb25fZGV0ZWN0aW9uCiAgICAgIHR5cGU6CiAgICAgICAgLSBpbmZvCiAgIyBBVURJVF9BTk9NX0NSWVBUT19GQUlMIC0gQ3J5cHRvIHN5c3RlbSB0ZXN0IGZhaWx1cmUKICAtIHJlY29yZF90eXBlczogQU5PTV9DUllQVE9fRkFJTAogICAgYWN0aW9uOiBjcnlwdG8tc3lzdGVtLXRlc3QtZmFpbHVyZQogICAgZWNzOgogICAgICBraW5kOiBhbGVydAogICAgICBjYXRlZ29yeToKICAgICAgICAtIGludHJ1c2lvbl9kZXRlY3Rpb24KICAgICAgdHlwZToKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FOT01fTUtfRVhFIC0gTWFrZSBhbiBleGVjdXRhYmxlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fTUtfRVhFCiAgICBhY3Rpb246IG1hZGUtYW4tZXhlY3V0YWJsZQogICAgZWNzOgogICAgICBraW5kOiBhbGVydAogICAgICBjYXRlZ29yeToKICAgICAgICAtIGZpbGUKICAgICAgICAtIGludHJ1c2lvbl9kZXRlY3Rpb24KICAgICAgdHlwZToKICAgICAgICAtIGNoYW5nZQogICAgICAgIC0gaW5mbwogICMgQVVESVRfQU5PTV9BQ0NFU1NfRlMgLSBBY2Nlc3Mgb2YgZmlsZSBvciBkaXIKICAtIHJlY29yZF90eXBlczogQU5PTV9BQ0NFU1NfRlMKICAgIGFjdGlvbjogYWNjZXNzZWQtd2F0Y2hlZC1maWxlLW9yLWRpcmVjdG9yeQogICAgZWNzOgogICAgICBraW5kOiBhbGVydAogICAgICBjYXRlZ29yeToKICAgICAgICAtIGZpbGUKICAgICAgICAtIGludHJ1c2lvbl9kZXRlY3Rpb24KICAgICAgdHlwZToKICAgICAgICAtIGFjY2VzcwogICAgICAgIC0gaW5mbwogICMgQVVESVRfQU5PTV9BRERfQUNDVCAtIEFkZGluZyBhbiBhY2N0CiAgLSByZWNvcmRfdHlwZXM6IEFOT01fQUREX0FDQ1QKICAgIGFjdGlvbjogYWRkZWQtdXNlci1hY2NvdW50CiAgICBlY3M6CiAgICAgIGtpbmQ6IGFsZXJ0CiAgICAgIGNhdGVnb3J5OgogICAgICAgIC0gaWFtCiAgICAgICAgLSBpbnRydXNpb25fZGV0ZWN0aW9uCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjcmVhdGlvbgogICAgICAgIC0gaW5mbwogICMgQVVESVRfQU5PTV9ERUxfQUNDVCAtIERlbGV0aW5nIGFuIGFjY3QKICAtIHJlY29yZF90eXBlczogQU5PTV9ERUxfQUNDVAogICAgYWN0aW9uOiBkZWxldGVkLXVzZXItYWNjb3VudAogICAgZWNzOgogICAgICBraW5kOiBhbGVydAogICAgICBjYXRlZ29yeToKICAgICAgICAtIGlhbQogICAgICAgIC0gaW50cnVzaW9uX2RldGVjdGlvbgogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gZGVsZXRpb24KICAgICAgICAtIGluZm8KICAjIEFVRElUX0FOT01fTU9EX0FDQ1QgLSBDaGFuZ2luZyBhbiBhY2N0CiAgLSByZWNvcmRfdHlwZXM6IEFOT01fTU9EX0FDQ1QKICAgIGFjdGlvbjogbW9kaWZpZWQtdXNlci1hY2NvdW50CiAgICBlY3M6CiAgICAgIGtpbmQ6IGFsZXJ0CiAgICAgIGNhdGVnb3J5OgogICAgICAgIC0gaWFtCiAgICAgICAgLSBpbnRydXNpb25fZGV0ZWN0aW9uCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FOT01fUk9PVF9UUkFOUyAtIFVzZXIgYmVjYW1lIHJvb3QKICAtIHJlY29yZF90eXBlczogQU5PTV9ST09UX1RSQU5TCiAgICBhY3Rpb246IHVzZXItYmVjYW1lLXJvb3QKICAgIGVjczoKICAgICAga2luZDogYWxlcnQKICAgICAgY2F0ZWdvcnk6CiAgICAgICAgLSBhdXRoZW50aWNhdGlvbgogICAgICAgIC0gaW50cnVzaW9uX2RldGVjdGlvbgogICAgICB0eXBlOgogICAgICAgIC0gc3RhcnQKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FOT01fTE9HSU5fU0VSVklDRSAtIFNlcnZpY2UgYWNjdCBhdHRlbXB0ZWQgbG9naW4KICAtIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9TRVJWSUNFCiAgICBhY3Rpb246IHNlcnZpY2UtYWNjb3VudC1hdHRlbXB0ZWQtbG9naW4KICAgIGVjczoKICAgICAga2luZDogYWxlcnQKICAgICAgY2F0ZWdvcnk6CiAgICAgICAgLSBhdXRoZW50aWNhdGlvbgogICAgICAgIC0gaW50cnVzaW9uX2RldGVjdGlvbgogICAgICB0eXBlOgogICAgICAgIC0gc3RhcnQKICAgICAgICAtIGRlbmllZAoKICAjIEFub21hbHkgcmVzcG9uc2VzIC0gUmVsYXRlZCB0byBJUFMKCiAgIyBBVURJVF9SRVNQX0FOT01BTFkgLSBBbm9tYWx5IG5vdCByZWFjdGVkIHRvCiAgIyBBVURJVF9SRVNQX0FMRVJUIC0gQWxlcnQgZW1haWwgd2FzIHNlbnQKICAjIEFVRElUX1JFU1BfS0lMTF9QUk9DIC0gS2lsbCBwcm9ncmFtCiAgIyBBVURJVF9SRVNQX1RFUk1fQUNDRVNTIC0gVGVybWluYXRlIHNlc3Npb24KICAjIEFVRElUX1JFU1BfQUNDVF9SRU1PVEUgLSBBY2N0IGxvY2tlZCBmcm9tIHJlbW90ZSBhY2Nlc3MKICAjIEFVRElUX1JFU1BfQUNDVF9MT0NLX1RJTUVEIC0gVXNlciBhY2N0IGxvY2tlZCBmb3IgdGltZQogICMgQVVESVRfUkVTUF9BQ0NUX1VOTE9DS19USU1FRCAtIFVzZXIgYWNjdCB1bmxvY2tlZCBmcm9tIHRpbWUKICAjIEFVRElUX1JFU1BfQUNDVF9MT0NLIC0gVXNlciBhY2N0IHdhcyBsb2NrZWQKICAjIEFVRElUX1JFU1BfVEVSTV9MT0NLIC0gVGVybWluYWwgd2FzIGxvY2tlZAogICMgQVVESVRfUkVTUF9TRUJPT0wgLSBTZXQgYW4gU0UgTGludXggYm9vbGVhbgogICMgQVVESVRfUkVTUF9FWEVDIC0gRXhlY3V0ZSBhIHNjcmlwdAogICMgQVVESVRfUkVTUF9TSU5HTEUgLSBHbyB0byBzaW5nbGUgdXNlciBtb2RlCiAgIyBBVURJVF9SRVNQX0hBTFQgLSB0YWtlIHRoZSBzeXN0ZW0gZG93bgogICMgQVVESVRfUkVTUF9PUklHSU5fQkxPQ0sgLSBBZGRyZXNzIGJsb2NrZWQgYnkgaXB0YWJsZXMKICAjIEFVRElUX1JFU1BfT1JJR0lOX0JMT0NLX1RJTUVEIC0gQWRkcmVzcyBibG9ja2VkIGZvciB0aW1lCgogICMgQXVkaXQgcnVsZSBldmVudHMKCiAgIyBBVURJVF9TWVNDQUxMIC0gU3lzY2FsbCBldmVudAogICMgQVVESVRfUEFUSCAtIEZpbGVuYW1lIHBhdGggaW5mb3JtYXRpb24KICAjIEFVRElUX0lQQyAtIElQQyByZWNvcmQKICAjIEFVRElUX1NPQ0tFVENBTEwgLSBzeXNfc29ja2V0Y2FsbCBhcmd1bWVudHMKICAjIEFVRElUX1NPQ0tBRERSIC0gc29ja2FkZHIgY29waWVkIGFzIHN5c2NhbGwgYXJnCiAgIyBBVURJVF9DV0QgLSBDdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CiAgIyBBVURJVF9FWEVDVkUgLSBleGVjdmUgYXJndW1lbnRzCiAgIyBBVURJVF9JUENfU0VUX1BFUk0gLSBJUEMgbmV3IHBlcm1pc3Npb25zIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9PUEVOIC0gUE9TSVggTVEgb3BlbiByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfU0VORFJFQ1YtIFBPU0lYIE1RIHNlbmQvcmVjZWl2ZSByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfTk9USUZZIC0gUE9TSVggTVEgbm90aWZ5IHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9HRVRTRVRBVFRSIC0gUE9TSVggTVEgZ2V0L3NldCBhdHRyaWJ1dGUgcmVjb3JkIHR5cGUKICAjIEFVRElUX0ZEX1BBSVIgLSBhdWRpdCByZWNvcmQgZm9yIHBpcGUvc29ja2V0cGFpcgogICMgQVVESVRfT0JKX1BJRCAtIHB0cmFjZSB0YXJnZXQKICAjIEFVRElUX0JQUk1fRkNBUFMgLSBJbmZvcm1hdGlvbiBhYm91dCBmY2FwcyBpbmNyZWFzaW5nIHBlcm1zCiAgIyBBVURJVF9DQVBTRVQgLSBSZWNvcmQgc2hvd2luZyBhcmd1bWVudCB0byBzeXNfY2Fwc2V0CiAgIyBBVURJVF9NTUFQIC0gUmVjb3JkIHNob3dpbmcgZGVzY3JpcHRvciBhbmQgZmxhZ3MgaW4gbW1hcAogICMgQVVESVRfTkVURklMVEVSX1BLVCAtIFBhY2tldHMgdHJhdmVyc2luZyBuZXRmaWx0ZXIgY2hhaW5zCgogICMgSW50ZWdyaXR5IGNoZWNrcwoKICAjIEFVRElUX0lOVEVHUklUWV9EQVRBIC0gRGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uCiAgIyBBVURJVF9JTlRFR1JJVFlfTUVUQURBVEEgLSBNZXRhZGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uCiAgIyBBVURJVF9JTlRFR1JJVFlfU1RBVFVTIC0gSW50ZWdyaXR5IGVuYWJsZSBzdGF0dXMKICAjIEFVRElUX0lOVEVHUklUWV9IQVNIIC0gSW50ZWdyaXR5IEhBU0ggdHlwZQogICMgQVVESVRfSU5URUdSSVRZX1BDUiAtIFBDUiBpbnZhbGlkYXRpb24gbXNncwogICMgQVVESVRfSU5URUdSSVRZX1JVTEUgLSBQb2xpY3kgcnVsZQoKICAjIFZhcmlvdXMKCiAgIyBBVURJVF9VU0VSIC0gTWVzc2FnZSBmcm9tIHVzZXJzcGFjZSAtLSBkZXByZWNhdGVkCiAgLSByZWNvcmRfdHlwZXM6IFVTRVIKICAgIGFjdGlvbjogc2VudC1tZXNzYWdlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFkZHIKCiAgIyBBVURJVF9TT0ZUV0FSRV9VUERBVEUgLSBQYWNrYWdlIG1hbmFnZW1lbnQKICAtIHJlY29yZF90eXBlczogU09GVFdBUkVfVVBEQVRFCiAgICBhY3Rpb246IHBhY2thZ2UtdXBkYXRlZAogICAgZWNzOgogICAgICBjYXRlZ29yeTogcGFja2FnZQogICAgICB0eXBlOiBpbmZvCg==")
 		assets["normalizationData"] = value
 	}
 


Test patch:
diff --git a/aucoalesce/testdata/random-internet.json.golden b/aucoalesce/testdata/random-internet.json.golden
index a99fd54..c882ebf 100644
--- a/aucoalesce/testdata/random-internet.json.golden
+++ b/aucoalesce/testdata/random-internet.json.golden
@@ -44,11 +44,14 @@
       },
       "ecs": {
         "event": {
+          "kind": "alert",
           "category": [
-            "process"
+            "process",
+            "intrusion_detection"
           ],
           "type": [
-            "end"
+            "end",
+            "info"
           ]
         },
         "user": {
diff --git a/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden b/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden
index ab85f38..f477958 100644
--- a/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden
+++ b/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden
@@ -59,10 +59,14 @@
       },
       "ecs": {
         "event": {
+          "kind": "alert",
           "category": [
+            "intrusion_detection",
             "process"
           ],
           "type": [
+            "info",
+            "change",
             "info"
           ]
         },