Repository: elastic/go-libaudit
Pull request #102 (2022-02-03 23:02:27)

auparse: update codegen to include new build constraint syntax
The script will already generate the new syntax because of the gofmt invocation,
but this as added to be explicit.

Please take a look.

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-102/detail/PR-102/1//pipeline) [![Test View](https://img.shields.io/badge/test-test-green)](https://beats-ci.elastic.co/blue/organizations/jenkins/Library%2Fgo-libaudit-mbp%2FPR-102/detail/PR-102/1//tests) [![Changes](https://img.shields.io/badge/changes-changes-green)](https://beats-ci.elastic.co/blue/organizations/jenkins/Library%2Fgo-libaudit-mbp%2FPR-102/detail/PR-102/1//changes) [![Artifacts](https://img.shields.io/badge/artifacts-artifacts-yellow)](https://beats-ci.elastic.co/blue/organizations/jenkins/Library%2Fgo-libaudit-mbp%2FPR-102/detail/PR-102/1//artifacts) [![preview](https://img.shields.io/badge/docs-preview-yellowgreen)](http://go-libaudit_102.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-03T22:52:39.857Z&rangeTo=2022-02-03T23:12:39.857Z&transactionName=Library/go-libaudit-mbp/PR-{number}&transactionType=job&latencyAggregationType=avg&traceId=4826ebbff7040610a1205010374830a5&transactionId=1adb210a4b26786c)

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

#### Build stats



* Reason: `null`


* Start Time: 2022-02-03T23:02:39.857+0000


* Duration: 3 min 20 sec


* Commit: 89512e2b2d549f36f3d52b97ee8dcf23c285f110



#### Test stats :test_tube:

| Test         | Results                         |
| ------------ | :-----------------------------: |
| Failed       | 0  |
| Passed       | 367  |
| Skipped      | 40 |
| Total        | 407   |


</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 d5be4d2..11bdad5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
 ### Added
 
 - 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)
 
 ### Changed
 
diff --git a/aucoalesce/normalizations.yaml b/aucoalesce/normalizations.yaml
index fcf05d3..a77da68 100644
--- a/aucoalesce/normalizations.yaml
+++ b/aucoalesce/normalizations.yaml
@@ -484,6 +484,9 @@ normalizations:
   - action: changed-system-time
     object:
       what: system
+    record_types:
+      - TIME_ADJNTPVAL
+      - TIME_INJOFFSET
     syscalls:
       # settimeofday - get / set time
       - settimeofday
@@ -493,6 +496,8 @@ normalizations:
       - stime
       # adjtimex - tune kernel clock
       - adjtimex
+      # clock_adjtime - similar to adjtimex but specifies a specific clock
+      - clock_adjtime
     ecs:
       <<: *ecs-host
       type: change
@@ -878,8 +883,7 @@ normalizations:
       primary: [id, acct]
       what: account
     ecs:
-      <<: *ecs-iam
-      <<: *ecs-group-modification-mappings
+      <<: [*ecs-iam, *ecs-group-modification-mappings]
       type:
         - group
         - creation
@@ -891,8 +895,7 @@ normalizations:
       primary: [id, acct]
       what: account
     ecs:
-      <<: *ecs-iam
-      <<: *ecs-user-modification-mappings
+      <<: [*ecs-iam, *ecs-user-modification-mappings]
       type:
         - user
         - creation
@@ -903,8 +906,7 @@ normalizations:
       primary: [id, acct]
       what: account
     ecs:
-      <<: *ecs-iam
-      <<: *ecs-group-modification-mappings
+      <<: [*ecs-iam, *ecs-group-modification-mappings]
       type:
         - group
         - deletion
@@ -915,8 +917,7 @@ normalizations:
       primary: [id, acct]
       what: account
     ecs:
-      <<: *ecs-iam
-      <<: *ecs-user-modification-mappings
+      <<: [*ecs-iam, *ecs-user-modification-mappings]
       type:
         - user
         - deletion
diff --git a/aucoalesce/znormalize_data.go b/aucoalesce/znormalize_data.go
index ca6e59c..d1daf1c 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("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCgogIC0gJmVjcy1zZXNzaW9uCiAgICBjYXRlZ29yeTogc2Vzc2lvbgogICAgdHlwZTogaW5mbwogICAgbWFwcGluZ3M6CiAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQoKICAtICZlY3MtaG9zdAogICAgY2F0ZWdvcnk6IGhvc3QKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLXByb2Nlc3MKICAgIGNhdGVnb3J5OiBwcm9jZXNzCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1maWxlCiAgICBjYXRlZ29yeTogZmlsZQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtZHJpdmVyCiAgICBjYXRlZ29yeTogZHJpdmVyCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1uZXR3b3JrCiAgICBjYXRlZ29yeTogbmV0d29yawogICAgdHlwZToKICAgICAgLSBjb25uZWN0aW9uCiAgICAgIC0gaW5mbwoKICAtICZlY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgIG1hcHBpbmdzOgogICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyCiAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyLnRhcmdldAoKICAtICZlY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgICAgIC0gZnJvbTogb2JqZWN0LnByaW1hcnkKICAgICAgICB0bzogZ3JvdXAKCiMgTm9ybWFsaXphdGlvbnMgaXMgYSBsaXN0IG9mIGRlY2xhcmF0aW9ucyBzcGVjaWZ5aW5nIGhvdyB0byBub3JtYWxpemUgdGhlIGRhdGEKIyBjb250YWluZWQgaW4gYW4gZXZlbnQuIFRoZSBub3JtYWxpemF0aW9uIGNhbiBiZSBhcHBsaWVkIGJhc2VkIG9uIHRoZSBzeXNjYWxsCiMgbmFtZSAoZS5nLiBjb25uZWN0LCBvcGVuKSBvciBiYXNlZCBvbiB0aGUgcmVjb3JkIHR5cGUgKGUuZy4gVVNFUl9MT0dJTikuCiMgTm8gdHdvIG5vcm1hbGl6YXRpb25zIGNhbiBhcHBseSB0byB0aGUgc2FtZSBzeXNjYWxsIG9yIHJlY29yZCB0eXBlLiBUaGlzCiMgd2lsbCByZXN1bHQgaW4gYSBmYWlsdXJlIGF0IGxvYWQgdGltZS4KIwojIEVhY2ggbm9ybWFsaXphdGlvbiBzaG91bGQgc3BlY2lmeToKIyAgIGFjdGlvbiAtIHdoYXQgaGFwcGVuZWQKIyAgIGFjdG9yICAtIHdobyBkaWQgdGhpcyBvciB3aG8gdHJpZ2dlcmVkIHRoZSBldmVudAojICAgb2JqZWN0IC0gd2hhdCB3YXMgdGhlICJ0aGluZyIgaW52b2x2ZWQgaW4gdGhlIGFjdGlvbiAoZS5nLiBwcm9jZXNzLCBzb2NrZXQpCiMgICBob3cgICAgLSBob3cgd2FzIHRoZSBhY3Rpb24gcGVyZm9ybWVkIChlLmcuIGV4ZSBvciB0ZXJtaW5hbCkKbm9ybWFsaXphdGlvbnM6CiAgLSBlY3M6ICplY3MtcHJvY2VzcwogICAgc3lzY2FsbHM6CiAgICAgIC0gJyonICMgdGhpcyBpcyBhIGNhdGNoIGFsbAogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjcmVhdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBjcmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGZhbGxvY2F0ZSAtIG1hbmlwdWxhdGUgZmlsZSBzcGFjZQogICAgICAtIGZhbGxvY2F0ZQogICAgICAjIHRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIHRydW5jYXRlCiAgICAgICMgZnRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIGZ0cnVuY2F0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgdGVjaG5pY2FsbHkgeW91IGNhbiB0cnVuY2F0ZSBhIGZpbGUgdG8gdGhlIHNhbWUgbGVuZ3RoCiAgICAgICMgYnV0IHJlZ2FyZGxlc3MsIHdlIGNvbnNpZGVyIHRoaXMgYSBjaGFuZ2UKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIG9wZW4gLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbgogICAgICAjIG9wZW5hdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBvcGVuYXQKICAgICAgIyByZWFkbGluayAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmsKICAgICAgIyByZWFkbGlua2F0IC0gcmVhZCB2YWx1ZSBvZiBhIHN5bWJvbGljIGxpbmsKICAgICAgLSByZWFkbGlua2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiByZWFkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcmVhZCAtIHJlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHJlYWQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHdyb3RlLXRvLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgd3JpdGUgLSB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHdyaXRlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1hdHRyaWJ1dGVzLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIHNldHhhdHRyCiAgICAgICMgZnNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZzZXR4YXR0cgogICAgICAjIGxzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsc2V0eGF0dHIKICAgICAgIyByZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSByZW1vdmV4YXR0cgogICAgICAjIGZyZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSBmcmVtb3ZleGF0dHIKICAgICAgIyBscmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gbHJlbW92ZXhhdHRyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1wZXJtaXNzaW9ucy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBjaG1vZAogICAgICAjIGZjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2QKICAgICAgIyBmY2htb2RhdCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2RhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtb3duZXJzaGlwLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBjaG93bgogICAgICAjIGZjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gZmNob3duCiAgICAgICMgZmNob3duYXQgLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bmF0CiAgICAgICMgbGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBsY2hvd24KICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbG9hZGVkLWtlcm5lbC1tb2R1bGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwcmltYXJ5OiBuYW1lCiAgICByZWNvcmRfdHlwZXM6CiAgICAgIC0gS0VSTl9NT0RVTEUKICAgIHN5c2NhbGxzOgogICAgICAjIGZpbml0X21vZHVsZSAtIGxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZmluaXRfbW9kdWxlCiAgICAgICMgaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGluaXRfbW9kdWxlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWRyaXZlcgogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiB1bmxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGRlbGV0ZV9tb2R1bGUgLSB1bmxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZGVsZXRlX21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNyZWF0ZWQtZGlyZWN0b3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtkaXIgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcgogICAgICAjIG1rZGlyYXQgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcmF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogbW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1vdW50IC0gbW91bnQgZmlsZXN5c3RlbQogICAgICAtIG1vdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyBzaW5jZSBhIG5ldyBtb3VudCBhcHBlYXJzIG9uIHRoZSBzeXN0ZW0KICAgICAgIyB3ZSBjb25zaWRlciB0aGlzIGEgaGlnaC1sZXZlbCAiY3JlYXRpb24iIGV2ZW50CiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHJlbmFtZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwYXRoX2luZGV4OiAyCiAgICBzeXNjYWxsczoKICAgICAgIyByZW5hbWUgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lCiAgICAgICMgcmVuYW1lYXQgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQKICAgICAgIyByZW5hbWVhdDIgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoZWNrZWQtbWV0YWRhdGEtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgYWNjZXNzIC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBhY2Nlc3MKICAgICAgIyBmYWNjZXNzYXQgLSBjaGVjayB1c2VyJ3MgcGVybWlzc2lvbnMgZm9yIGEgZmlsZQogICAgICAtIGZhY2Nlc3NhdAogICAgICAjIGZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBmc3RhdGF0CiAgICAgICMgbmV3ZnN0YXRhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIG5ld2ZzdGF0YXQKICAgICAgIyBzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gc3RhdAogICAgICAjIHN0YXQ2NCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQ2NAogICAgICAjIGZzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXQKICAgICAgIyBsc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGxzdGF0CiAgICAgICMgZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBnZXR4YXR0cgogICAgICAjIGxnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGxnZXR4YXR0cgogICAgICAjIGZnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZnZXR4YXR0cgogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogY2hlY2tlZC1maWxlc3lzdGVtLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBzdGF0ZnMKICAgICAgIyBmc3RhdGZzIC0gZ2V0IGZpbGVzeXN0ZW0gc3RhdGlzdGljcwogICAgICAtIGZzdGF0ZnMKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHN5bWxpbmtlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzeW1saW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rCiAgICAgICMgc3ltbGlua2F0IC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjICJjcmVhdGlvbiIgc2luY2Ugd2UncmUgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0KICAgICAgIyBlbnRyeSBmb3IgdGhlIHN5bWxpbmsKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogdW5tb3VudGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHVtb3VudCAtIHVubW91bnQgZmlsZXN5c3RlbQogICAgICAtIHVtb3VudAogICAgICAjIHVtb3VudDIgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiZGVsZXRpb24iIHRvIG1pcnJvciB0aGUgImNyZWF0aW9uIiBvZiB0aGUgbW91bnQKICAgICAgdHlwZTogZGVsZXRpb24KICAtIGFjdGlvbjogZGVsZXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBybWRpciAtIGRlbGV0ZSBhIGRpcmVjdG9yeQogICAgICAtIHJtZGlyCiAgICAgICMgdW5saW5rIC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rCiAgICAgICMgdW5saW5rYXQgLSBkZWxldGUgYSBuYW1lIGFuZCBwb3NzaWJseSB0aGUgZmlsZSBpdCByZWZlcnMgdG8KICAgICAgLSB1bmxpbmthdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGNoYW5nZWQtdGltZXN0YW1wLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHV0aW1lIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lCiAgICAgICMgdXRpbWVzIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lcwogICAgICAjIGZ1dGltZXNhdCAtIGNoYW5nZSB0aW1lc3RhbXBzIG9mIGEgZmlsZSByZWxhdGl2ZSB0byBhIFwgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGZ1dGltZXNhdAogICAgICAjIGZ1dGltZW5zIC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gZnV0aW1lbnMKICAgICAgIyB1dGltZW5zYXQgLSBjaGFuZ2UgZmlsZSB0aW1lc3RhbXBzIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24KICAgICAgLSB1dGltZW5zYXQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGV4ZWN1dGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGV4ZWN2ZSAtIGV4ZWN1dGUgcHJvZ3JhbQogICAgICAtIGV4ZWN2ZQogICAgICAjIGV4ZWN2ZWF0IC0gZXhlY3V0ZSBwcm9ncmFtIHJlbGF0aXZlIHRvIGEgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGV4ZWN2ZWF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogbGlzdGVuLWZvci1jb25uZWN0aW9ucwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGxpc3Rlbi0gbGlzdGVuIGZvciBjb25uZWN0aW9ucyBvbiBhIHNvY2tldAogICAgICAtIGxpc3RlbgogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGFjY2VwdGVkLWNvbm5lY3Rpb24tZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VwdCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQKICAgICAgIyBhY2NlcHQ0IC0gYWNjZXB0IGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICAgICAtIGFjY2VwdDQKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogYm91bmQtc29ja2V0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgYmluZCAtYmluZCBhIG5hbWUgdG8gYSBzb2NrZXQKICAgICAgLSBiaW5kCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogY29ubmVjdGVkLXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgIC0gY29ubmVjdAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogIC0gYWN0aW9uOiByZWNlaXZlZC1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgcmVjdiAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2CiAgICAgICMgcmVjdmZyb20gLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdmZyb20KICAgICAgIyByZWN2bXNnIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Ztc2cKICAgICAgIyByZWN2bW1zZyAtIHJlY2VpdmUgbXVsdGlwbGUgbWVzc2FnZXMgb24gYSBzb2NrZXQKICAgICAgLSByZWN2bW1zZwogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgLSBhY3Rpb246IHNlbnQtdG8KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBzZW5kIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kCiAgICAgICMgc2VuZHRvIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kdG8KICAgICAgIyBzZW5kbXNnIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kbXNnCiAgICAgICMgc2VuZG1tc2cgLSBzZW5kIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBraWxsZWQtcGlkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAjIGtpbGwgLSBzZW5kIHNpZ25hbCB0byBhIHByb2Nlc3MKICAgICAgLSBraWxsCiAgICAgICMgdGtpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGtpbGwKICAgICAgIyB0Z2tpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGdraWxsCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNoYW5nZWQtaWRlbnRpdHktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR1aWQgLSBzZXQgdXNlciBpZGVudGl0eQogICAgICAtIHNldHVpZAogICAgICAjIHNldGV1aWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRldWlkCiAgICAgICMgc2V0ZnN1aWQgLSBzZXQgdXNlciBpZGVudGl0eSB1c2VkIGZvciBmaWxlc3lzdGVtIGNoZWNrcwogICAgICAtIHNldGZzdWlkCiAgICAgICMgc2V0cmV1aWQgLSBzZXQgcmVhbCBhbmQvb3IgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXVpZAogICAgICAjIHNldGdpZCAtIHNldCBncm91cCBpZGVudGl0eQogICAgICAtIHNldGdpZAogICAgICAjIHNldGVnaWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRlZ2lkCiAgICAgICMgc2V0ZnNnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc2dpZAogICAgICAjIHNldHJlZ2lkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVnaWQKICAgICAgIyBzZXRyZXN1aWQgLSBzZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVzdWlkCiAgICAgICMgc2V0cmVzZ2lkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc2dpZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS10aW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0dGltZW9mZGF5IC0gZ2V0IC8gc2V0IHRpbWUKICAgICAgLSBzZXR0aW1lb2ZkYXkKICAgICAgIyBjbG9ja19zZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgICAgIC0gY2xvY2tfc2V0dGltZQogICAgICAjIHN0aW1lIC0gc2V0IHRpbWUKICAgICAgLSBzdGltZQogICAgICAjIGFkanRpbWV4IC0gdHVuZSBrZXJuZWwgY2xvY2sKICAgICAgLSBhZGp0aW1leAogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBtYWtlLWRldmljZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBta25vZCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kCiAgICAgICMgbWtub2RhdCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS1uYW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0aG9zdG5hbWUgLSBnZXQvc2V0IGhvc3RuYW1lCiAgICAgIC0gc2V0aG9zdG5hbWUKICAgICAgIyBzZXRkb21haW5uYW1lIC0gZ2V0L3NldCBOSVMgZG9tYWluIG5hbWUKICAgICAgLSBzZXRkb21haW5uYW1lCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGFsbG9jYXRlZC1tZW1vcnkKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWVtb3J5CiAgICBzeXNjYWxsczoKICAgICAgIyBtbWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAgICAgLSBtbWFwCiAgICAgICMgbW1hcDIgLSBtYXAgZmlsZXMgb3IgZGV2aWNlcyBpbnRvIG1lbW9yeQogICAgICAtIG1tYXAyCiAgICAgICMgYnJrIC0gY2hhbmdlIGRhdGEgc2VnbWVudCBzaXplCiAgICAgIC0gYnJrCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBhZGp1c3RlZC1zY2hlZHVsaW5nLXBvbGljeS1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHN5c2NhbGwKICAgIHN5c2NhbGxzOgogICAgICAjIHNjaGVkX3NldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0cGFyYW0KICAgICAgIyBzY2hlZF9zZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0c2NoZWR1bGVyCiAgICAgICMgc2NoZWRfc2V0YXR0ciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5IGFuZCBhdHRyaWJ1dGVzCiAgICAgIC0gc2NoZWRfc2V0YXR0cgogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQoKICAjIEN1cnJlbnRseSB1bmhhbmRsZWQKICAjIHRoaXMgbGlzdCBjb21lcyBmcm9tIHBhcnNpbmcgbGludXggbWFuIHBhZ2VzIGF0IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9kb2NzL21hbi1wYWdlcy9tYW4tcGFnZXMuZ2l0CgogICMgc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcnRfc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcHJlYWQgLSByZWFkIGZyb20gb3Igd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IgYXQgYSBnaXZlbiBvZmZzZXQKICAjIHB3cml0ZSAtIHJlYWQgZnJvbSBvciB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvciBhdCBhIGdpdmVuIG9mZnNldAogICMgczM5MF9ndWFyZGVkX3N0b3JhZ2UgLSBvcGVyYXRpb25zIHdpdGggei9BcmNoaXRlY3R1cmUgZ3VhcmRlZCBzdG9yYWdlIGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRhdHRyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kgYW5kIGF0dHJpYnV0ZXMKICAjIGdldHJ1c2FnZSAtIGdldCByZXNvdXJjZSB1c2FnZQogICMgZmxvY2sgLSBhcHBseSBvciByZW1vdmUgYW4gYWR2aXNvcnkgbG9jayBvbiBhbiBvcGVuIGZpbGUKICAjIHBpZGZkX2dldGZkIC0gb2J0YWluIGEgZHVwbGljYXRlIG9mIGFub3RoZXIgcHJvY2VzcydzIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvY2tfbmFub3NsZWVwIC0gaGlnaC1yZXNvbHV0aW9uIHNsZWVwIHdpdGggc3BlY2lmaWFibGUgY2xvY2sKICAjIGdldHBhZ2VzaXplIC0gZ2V0IG1lbW9yeSBwYWdlIHNpemUKICAjIHBpZGZkX29wZW4gLSBvYnRhaW4gYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCByZWZlcnMgdG8gYSBwcm9jZXNzCiAgIyBzcGxpY2UgLSBzcGxpY2UgZGF0YSB0by9mcm9tIGEgcGlwZQogICMgZ2V0cmVzdWlkIC0gZ2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlci9ncm91cCBJRHMKICAjIGdldHJlc2dpZCAtIGdldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIvZ3JvdXAgSURzCiAgIyByZW1hcF9maWxlX3BhZ2VzIC0gY3JlYXRlIGEgbm9ubGluZWFyIGZpbGUgbWFwcGluZwogICMgaW9fY2FuY2VsIC0gY2FuY2VsIGFuIG91dHN0YW5kaW5nIGFzeW5jaHJvbm91cyBJL08gb3BlcmF0aW9uCiAgIyBwcmN0bCAtIG9wZXJhdGlvbnMgb24gYSBwcm9jZXNzIG9yIHRocmVhZAogICMgY2xvY2tfZ2V0cmVzIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBjbG9ja19nZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBnZXRncm91cHMgLSBnZXQvc2V0IGxpc3Qgb2Ygc3VwcGxlbWVudGFyeSBncm91cCBJRHMKICAjIHNldGdyb3VwcyAtIGdldC9zZXQgbGlzdCBvZiBzdXBwbGVtZW50YXJ5IGdyb3VwIElEcwogICMgdm1zcGxpY2UgLSBzcGxpY2UgdXNlciBwYWdlcyB0by9mcm9tIGEgcGlwZQogICMgZXBvbGxfY3JlYXRlIC0gb3BlbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIGVwb2xsX2NyZWF0ZTEgLSBvcGVuIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgcG9zaXhfZmFkdmlzZSAtIHByZWRlY2xhcmUgYW4gYWNjZXNzIHBhdHRlcm4gZm9yIGZpbGUgZGF0YQogICMgc2lnd2FpdGluZm8gLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBydF9zaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWdyZXR1cm4gLSByZXR1cm4gZnJvbSBzaWduYWwgaGFuZGxlciBhbmQgY2xlYW51cCBzdGFjayBmcmFtZQogICMgcnRfc2lncmV0dXJuIC0gcmV0dXJuIGZyb20gc2lnbmFsIGhhbmRsZXIgYW5kIGNsZWFudXAgc3RhY2sgZnJhbWUKICAjIGdldHJhbmRvbSAtIG9idGFpbiBhIHNlcmllcyBvZiByYW5kb20gYnl0ZXMKICAjIGtleWN0bCAtIG1hbmlwdWxhdGUgdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgIyBtYmluZCAtIHNldCBtZW1vcnkgcG9saWN5IGZvciBhIG1lbW9yeSByYW5nZQogICMgZ2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgc2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgaW5vdGlmeV9pbml0IC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBpbm90aWZ5X2luaXQxIC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBzZW1jdGwgLSBTeXN0ZW0gViBzZW1hcGhvcmUgY29udHJvbCBvcGVyYXRpb25zCiAgIyBnZXRob3N0bmFtZSAtIGdldC9zZXQgaG9zdG5hbWUKICAjIHB0cmFjZSAtIHByb2Nlc3MgdHJhY2UKICAjIHN5c2N0bCAtIHJlYWQvd3JpdGUgc3lzdGVtIHBhcmFtZXRlcnMKICAjIGdldHBlZXJuYW1lIC0gZ2V0IG5hbWUgb2YgY29ubmVjdGVkIHBlZXIgc29ja2V0CiAgIyBmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgcXVlcnlfbW9kdWxlIC0gcXVlcnkgdGhlIGtlcm5lbCBmb3IgdmFyaW91cyBiaXRzIHBlcnRhaW5pbmcgdG8gbW9kdWxlcwogICMgaW9jdGxfbGlzdCAtIGxpc3Qgb2YgaW9jdGwgY2FsbHMgaW4gTGludXgvaTM4NiBrZXJuZWwKICAjIG1zZ2dldCAtIGdldCBhIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgaWRlbnRpZmllcgogICMgc3B1X2NyZWF0ZSAtIGNyZWF0ZSBhIG5ldyBzcHUgY29udGV4dAogICMgc3VicGFnZV9wcm90IC0gZGVmaW5lIGEgc3VicGFnZSBwcm90ZWN0aW9uIGZvciBhbiBhZGRyZXNzIHJhbmdlCiAgIyBxdW90YWN0bCAtIG1hbmlwdWxhdGUgZGlzayBxdW90YXMKICAjIG5mc3NlcnZjdGwgLSBzeXNjYWxsIGludGVyZmFjZSB0byBrZXJuZWwgbmZzIGRhZW1vbgogICMgb3BlbmF0MiAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUgKGV4dGVuZGVkKQogICMgZ2V0cmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHNldHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyBwcmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHRlZSAtIGR1cGxpY2F0aW5nIHBpcGUgY29udGVudAogICMgc2htZ2V0IC0gYWxsb2NhdGVzIGEgU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBzZWdtZW50CiAgIyBjcmVhdGVfbW9kdWxlIC0gY3JlYXRlIGEgbG9hZGFibGUgbW9kdWxlIGVudHJ5CiAgIyBnZXR0aW1lb2ZkYXkgLSBnZXQgLyBzZXQgdGltZQogICMgdGltZXJfY3JlYXRlIC0gY3JlYXRlIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIGZhbm90aWZ5X21hcmsgLSBhZGQsIHJlbW92ZSwgb3IgbW9kaWZ5IGFuIGZhbm90aWZ5IG1hcmsgb24gYSBmaWxlc3lzdGVtIG9iamVjdAogICMgcGlwZSAtIGNyZWF0ZSBwaXBlCiAgIyBwaXBlMiAtIGNyZWF0ZSBwaXBlCiAgIyBpbnRybyAtIGludHJvZHVjdGlvbiB0byBzeXN0ZW0gY2FsbHMKICAjIGxvb2t1cF9kY29va2llIC0gcmV0dXJuIGEgZGlyZWN0b3J5IGVudHJ5J3MgcGF0aAogICMgc3lzZnMgLSBnZXQgZmlsZXN5c3RlbSB0eXBlIGluZm9ybWF0aW9uCiAgIyBzMzkwX3J1bnRpbWVfaW5zdHIgLSBlbmFibGUvZGlzYWJsZSBzMzkwIENQVSBydW4tdGltZSBpbnN0cnVtZW50YXRpb24KICAjIHNldG5zIC0gcmVhc3NvY2lhdGUgdGhyZWFkIHdpdGggYSBuYW1lc3BhY2UKICAjIHNldF9tZW1wb2xpY3kgLSBzZXQgZGVmYXVsdCBOVU1BIG1lbW9yeSBwb2xpY3kgZm9yIGEgdGhyZWFkIGFuZCBpdHMgY2hpbGRyZW4KICAjIG5pY2UgLSBjaGFuZ2UgcHJvY2VzcyBwcmlvcml0eQogICMgaW9fc2V0dXAgLSBjcmVhdGUgYW4gYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0CiAgIyBtaW5jb3JlIC0gZGV0ZXJtaW5lIHdoZXRoZXIgcGFnZXMgYXJlIHJlc2lkZW50IGluIG1lbW9yeQogICMgaW9jdGxfY29uc29sZSAtIGlvY3RscyBmb3IgY29uc29sZSB0ZXJtaW5hbCBhbmQgdmlydHVhbCBjb25zb2xlcwogICMgcG9sbCAtIHdhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3IKICAjIHBwb2xsIC0gd2FpdCBmb3Igc29tZSBldmVudCBvbiBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2FwZ2V0IC0gc2V0L2dldCBjYXBhYmlsaXRpZXMgb2YgdGhyZWFkKHMpCiAgIyBjYXBzZXQgLSBzZXQvZ2V0IGNhcGFiaWxpdGllcyBvZiB0aHJlYWQocykKICAjIGlvY3RsX3R0eSAtIGlvY3RscyBmb3IgdGVybWluYWxzIGFuZCBzZXJpYWwgbGluZXMKICAjIGlvcGwgLSBjaGFuZ2UgSS9PIHByaXZpbGVnZSBsZXZlbAogICMgaW9fZ2V0ZXZlbnRzIC0gcmVhZCBhc3luY2hyb25vdXMgSS9PIGV2ZW50cyBmcm9tIHRoZSBjb21wbGV0aW9uIHF1ZXVlCiAgIyBwcm9jZXNzX3ZtX3JlYWR2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHByb2Nlc3Nfdm1fd3JpdGV2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHBjaWNvbmZpZ19yZWFkIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX3dyaXRlIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX2lvYmFzZSAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHNicmsgLSBjaGFuZ2UgZGF0YSBzZWdtZW50IHNpemUKICAjIHNldF90aWRfYWRkcmVzcyAtIHNldCBwb2ludGVyIHRvIHRocmVhZCBJRAogICMgcGtleV9hbGxvYyAtIGFsbG9jYXRlIG9yIGZyZWUgYSBwcm90ZWN0aW9uIGtleQogICMgcGtleV9mcmVlIC0gYWxsb2NhdGUgb3IgZnJlZSBhIHByb3RlY3Rpb24ga2V5CiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMga2V4ZWNfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIGtleGVjX2ZpbGVfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIHBlcnNvbmFsaXR5IC0gc2V0IHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBkb21haW4KICAjIGlvY3RsX2dldGZzbWFwIC0gcmV0cmlldmUgdGhlIHBoeXNpY2FsIGxheW91dCBvZiB0aGUgZmlsZXN5c3RlbQogICMgaW5vdGlmeV9ybV93YXRjaCAtIHJlbW92ZSBhbiBleGlzdGluZyB3YXRjaCBmcm9tIGFuIGlub3RpZnkgaW5zdGFuY2UKICAjIHBlcmZfZXZlbnRfb3BlbiAtIHNldCB1cCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nCiAgIyB0aW1lcl9nZXRvdmVycnVuIC0gZ2V0IG92ZXJydW4gY291bnQgZm9yIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHdhaXQzIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUsIEJTRCBzdHlsZQogICMgd2FpdDQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZSwgQlNEIHN0eWxlCiAgIyBsaW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAjIGxpbmthdCAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgIyBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgLSBnZXQgdGhlIFNDSEVEX1JSIGludGVydmFsIGZvciB0aGUgbmFtZWQgcHJvY2VzcwogICMgbXVubWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAjIHNvY2tldGNhbGwgLSBzb2NrZXQgc3lzdGVtIGNhbGxzCiAgIyBtcmVtYXAgLSByZW1hcCBhIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MKICAjIHZmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcyBhbmQgYmxvY2sgcGFyZW50CiAgIyBzZWNjb21wIC0gb3BlcmF0ZSBvbiBTZWN1cmUgQ29tcHV0aW5nIHN0YXRlIG9mIHRoZSBwcm9jZXNzCiAgIyByZXF1ZXN0X2tleSAtIHJlcXVlc3QgYSBrZXkgZnJvbSB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHN5c2NhbGwgLSBpbmRpcmVjdCBzeXN0ZW0gY2FsbAogICMga2NtcCAtIGNvbXBhcmUgdHdvIHByb2Nlc3NlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBzaGFyZSBhIGtlcm5lbCByZXNvdXJjZQogICMgcmVhZGRpciAtIHJlYWQgZGlyZWN0b3J5IGVudHJ5CiAgIyBpb3Blcm0gLSBzZXQgcG9ydCBpbnB1dC9vdXRwdXQgcGVybWlzc2lvbnMKICAjIHNwdV9ydW4gLSBleGVjdXRlIGFuIFNQVSBjb250ZXh0CiAgIyByZWJvb3QgLSByZWJvb3Qgb3IgZW5hYmxlL2Rpc2FibGUgQ3RybC1BbHQtRGVsCiAgIyByZWFkYWhlYWQgLSBpbml0aWF0ZSBmaWxlIHJlYWRhaGVhZCBpbnRvIHBhZ2UgY2FjaGUKICAjIHNjaGVkX2dldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgIyBhY2N0IC0gc3dpdGNoIHByb2Nlc3MgYWNjb3VudGluZyBvbiBvciBvZmYKICAjIHNpZ3N1c3BlbmQgLSB3YWl0IGZvciBhIHNpZ25hbAogICMgcnRfc2lnc3VzcGVuZCAtIHdhaXQgZm9yIGEgc2lnbmFsCiAgIyBleGl0X2dyb3VwIC0gZXhpdCBhbGwgdGhyZWFkcyBpbiBhIHByb2Nlc3MKICAjIHNvY2tldCAtIGNyZWF0ZSBhbiBlbmRwb2ludCBmb3IgY29tbXVuaWNhdGlvbgogICMgaW9jdGxfdXNlcmZhdWx0ZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIGluIHVzZXIgc3BhY2UKICAjIHNjaGVkX2dldF9wcmlvcml0eV9tYXggLSBnZXQgc3RhdGljIHByaW9yaXR5IHJhbmdlCiAgIyBzY2hlZF9nZXRfcHJpb3JpdHlfbWluICAtIGdldCBzdGF0aWMgcHJpb3JpdHkgcmFuZ2UKICAjIGdldGRlbnRzIC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBnZXRkZW50czY0IC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgYWxsb2NfaHVnZXBhZ2VzIC0gYWxsb2NhdGUgb3IgZnJlZSBodWdlIHBhZ2VzCiAgIyBmcmVlX2h1Z2VwYWdlcyAtIGFsbG9jYXRlIG9yIGZyZWUgaHVnZSBwYWdlcwogICMgZnN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUncyBpbi1jb3JlIHN0YXRlIHdpdGggc3RvcmFnZSBkZXZpY2UKICAjIGZkYXRhc3luYyAtIHN5bmNocm9uaXplIGEgZmlsZSdzIGluLWNvcmUgc3RhdGUgd2l0aCBzdG9yYWdlIGRldmljZQogICMgc3lzY2FsbHMgLSBMaW51eCBzeXN0ZW0gY2FsbHMKICAjIG1lbWZkX2NyZWF0ZSAtIGNyZWF0ZSBhbiBhbm9ueW1vdXMgZmlsZQogICMgbW9kaWZ5X2xkdCAtIGdldCBvciBzZXQgYSBwZXItcHJvY2VzcyBMRFQgZW50cnkKICAjIGdldF9rZXJuZWxfc3ltcyAtIHJldHJpZXZlIGV4cG9ydGVkIGtlcm5lbCBhbmQgbW9kdWxlIHN5bWJvbHMKICAjIGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBzaG1hdCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgb3BlcmF0aW9ucwogICMgc2htZHQgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKICAjIHRpbWVyX2RlbGV0ZSAtIGRlbGV0ZSBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBwZXJmbW9uY3RsIC0gaW50ZXJmYWNlIHRvIElBLTY0IHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdAogICMgbW92ZV9wYWdlcyAtIG1vdmUgaW5kaXZpZHVhbCBwYWdlcyBvZiBhIHByb2Nlc3MgdG8gYW5vdGhlciBub2RlCiAgIyBjaGRpciAtIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQogICMgZmNoZGlyIC0gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5CiAgIyB0aW1lIC0gZ2V0IHRpbWUgaW4gc2Vjb25kcwogICMgX2V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgX0V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgczM5MF9zdGh5aSAtIGVtdWxhdGUgU1RIWUkgaW5zdHJ1Y3Rpb24KICAjIGlvX3N1Ym1pdCAtIHN1Ym1pdCBhc3luY2hyb25vdXMgSS9PIGJsb2NrcyBmb3IgcHJvY2Vzc2luZwogICMgbWxvY2sgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtbG9jazIgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbWxvY2thbGwgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrYWxsIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgdW1hc2sgLSBzZXQgZmlsZSBtb2RlIGNyZWF0aW9uIG1hc2sKICAjIGFyY2hfcHJjdGwgLSBzZXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHRocmVhZCBzdGF0ZQogICMgdXNlbGliIC0gbG9hZCBzaGFyZWQgbGlicmFyeQogICMgc2VuZGZpbGUgLSB0cmFuc2ZlciBkYXRhIGJldHdlZW4gZmlsZSBkZXNjcmlwdG9ycwogICMgc2htY3RsIC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBjb250cm9sCiAgIyBlcG9sbF93YWl0IC0gd2FpdCBmb3IgYW4gSS9PIGV2ZW50IG9uIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgZXBvbGxfcHdhaXQgLSB3YWl0IGZvciBhbiBJL08gZXZlbnQgb24gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBzaWdhbHRzdGFjayAtIHNldCBhbmQvb3IgZ2V0IHNpZ25hbCBzdGFjayBjb250ZXh0CiAgIyBpb2N0bCAtIGNvbnRyb2wgZGV2aWNlCiAgIyBzaWduYWxmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgYWNjZXB0aW5nIHNpZ25hbHMKICAjIHVuc2hhcmUgLSBkaXNhc3NvY2lhdGUgcGFydHMgb2YgdGhlIHByb2Nlc3MgZXhlY3V0aW9uIGNvbnRleHQKICAjIGNocm9vdCAtIGNoYW5nZSByb290IGRpcmVjdG9yeQogICMgbWFkdmlzZSAtIGdpdmUgYWR2aWNlIGFib3V0IHVzZSBvZiBtZW1vcnkKICAjIGdldHRpZCAtIGdldCB0aHJlYWQgaWRlbnRpZmljYXRpb24KICAjIGdldHNvY2tuYW1lIC0gZ2V0IHNvY2tldCBuYW1lCiAgIyBpb19kZXN0cm95IC0gZGVzdHJveSBhbiBhc3luY2hyb25vdXMgSS9PIGNvbnRleHQKICAjIHNldHVwIC0gc2V0dXAgZGV2aWNlcyBhbmQgZmlsZXN5c3RlbXMsIG1vdW50IHJvb3QgZmlsZXN5c3RlbQogICMgbnRwX2FkanRpbWUgLSB0dW5lIGtlcm5lbCBjbG9jawogICMgc2VtZ2V0IC0gZ2V0IGEgU3lzdGVtIFYgc2VtYXBob3JlIHNldCBpZGVudGlmaWVyCiAgIyBnZXR1aWQgLSBnZXQgdXNlciBpZGVudGl0eQogICMgZ2V0ZXVpZCAtIGdldCB1c2VyIGlkZW50aXR5CiAgIyBfc3lzY2FsbCAtIGludm9raW5nIGEgc3lzdGVtIGNhbGwgd2l0aG91dCBsaWJyYXJ5IHN1cHBvcnQgKE9CU09MRVRFKQogICMgc2NoZWRfc2V0YWZmaW5pdHkgLSBcIHNldCBhbmQgZ2V0IGEgdGhyZWFkJ3MgQ1BVIGFmZmluaXR5IG1hc2sKICAjIHNjaGVkX2dldGFmZmluaXR5IC0gXCBzZXQgYW5kIGdldCBhIHRocmVhZCdzIENQVSBhZmZpbml0eSBtYXNrCiAgIyBjYWNoZWZsdXNoIC0gZmx1c2ggY29udGVudHMgb2YgaW5zdHJ1Y3Rpb24gYW5kL29yIGRhdGEgY2FjaGUKICAjIHBpdm90X3Jvb3QgLSBjaGFuZ2UgdGhlIHJvb3QgbW91bnQKICAjIG1zZ2N0bCAtIFN5c3RlbSBWIG1lc3NhZ2UgY29udHJvbCBvcGVyYXRpb25zCiAgIyBpb2N0bF9mYXQgLSBtYW5pcHVsYXRpbmcgdGhlIEZBVCBmaWxlc3lzdGVtCiAgIyBzZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzb2NrZXRwYWlyIC0gY3JlYXRlIGEgcGFpciBvZiBjb25uZWN0ZWQgc29ja2V0cwogICMgYmRmbHVzaCAtIHN0YXJ0LCBmbHVzaCwgb3IgdHVuZSBidWZmZXItZGlydHktZmx1c2ggZGFlbW9uCiAgIyBhbGFybSAtIHNldCBhbiBhbGFybSBjbG9jayBmb3IgZGVsaXZlcnkgb2YgYSBzaWduYWwKICAjIHRpbWVyX3NldHRpbWUgLSBhcm0vZGlzYXJtIGFuZCBmZXRjaCBzdGF0ZSBvZiBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgdGltZXJfZ2V0dGltZSAtIGFybS9kaXNhcm0gYW5kIGZldGNoIHN0YXRlIG9mIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBhZGRfa2V5IC0gYWRkIGEga2V5IHRvIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgcnRfc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHJ0X3Rnc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHVzZXJmYXVsdGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbiB1c2VyIHNwYWNlCiAgIyBzZW1vcCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBvcGVyYXRpb25zCiAgIyBzZW10aW1lZG9wIC0gU3lzdGVtIFYgc2VtYXBob3JlIG9wZXJhdGlvbnMKICAjIGdldGdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0ZWdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0cGlkIC0gZ2V0IHByb2Nlc3MgaWRlbnRpZmljYXRpb24KICAjIGdldHBwaWQgLSBnZXQgcHJvY2VzcyBpZGVudGlmaWNhdGlvbgogICMgc2lncHJvY21hc2sgLSBleGFtaW5lIGFuZCBjaGFuZ2UgYmxvY2tlZCBzaWduYWxzCiAgIyBydF9zaWdwcm9jbWFzayAtIGV4YW1pbmUgYW5kIGNoYW5nZSBibG9ja2VkIHNpZ25hbHMKICAjIHVuYW1lIC0gZ2V0IG5hbWUgYW5kIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQga2VybmVsCiAgIyBzdGF0eCAtIGdldCBmaWxlIHN0YXR1cyAoZXh0ZW5kZWQpCiAgIyBpb2N0bF9maWNsb25lcmFuZ2UgLSBzaGFyZSBzb21lIHRoZSBkYXRhIG9mIG9uZSBmaWxlIHdpdGggYW5vdGhlciBmaWxlCiAgIyBpb2N0bF9maWNsb25lIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbXFfZ2V0c2V0YXR0ciAtIGdldC9zZXQgbWVzc2FnZSBxdWV1ZSBhdHRyaWJ1dGVzCiAgIyBpb3ByaW9fZ2V0IC0gZ2V0L3NldCBJL08gc2NoZWR1bGluZyBjbGFzcyBhbmQgcHJpb3JpdHkKICAjIGlvcHJpb19zZXQgLSBnZXQvc2V0IEkvTyBzY2hlZHVsaW5nIGNsYXNzIGFuZCBwcmlvcml0eQogICMgZXBvbGxfY3RsIC0gY29udHJvbCBpbnRlcmZhY2UgZm9yIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgc3luYyAtIGNvbW1pdCBmaWxlc3lzdGVtIGNhY2hlcyB0byBkaXNrCiAgIyBzeW5jZnMgLSBjb21taXQgZmlsZXN5c3RlbSBjYWNoZXMgdG8gZGlzawogICMgc2V0c2lkIC0gY3JlYXRlcyBhIHNlc3Npb24gYW5kIHNldHMgdGhlIHByb2Nlc3MgZ3JvdXAgSUQKICAjIHNodXRkb3duIC0gc2h1dCBkb3duIHBhcnQgb2YgYSBmdWxsLWR1cGxleCBjb25uZWN0aW9uCiAgIyBnZXRzaWQgLSBnZXQgc2Vzc2lvbiBJRAogICMgZ2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgc2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgdGltZXJmZF9jcmVhdGUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIHRpbWVyZmRfc2V0dGltZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgdGltZXJmZF9nZXR0aW1lIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyBpb2N0bF9maWRlZHVwZXJhbmdlIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbmFtZV90b19oYW5kbGVfYXQgLSBvYnRhaW4gaGFuZGxlIGZvciBhIHBhdGhuYW1lIGFuZCBvcGVuIGZpbGUgdmlhIGEgaGFuZGxlCiAgIyBvcGVuX2J5X2hhbmRsZV9hdCAtIG9idGFpbiBoYW5kbGUgZm9yIGEgcGF0aG5hbWUgYW5kIG9wZW4gZmlsZSB2aWEgYSBoYW5kbGUKICAjIGZ1dGV4IC0gZmFzdCB1c2VyLXNwYWNlIGxvY2tpbmcKICAjIGlvY3RsX25zIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBMaW51eCBuYW1lc3BhY2VzCiAgIyBwaWRmZF9zZW5kX3NpZ25hbCAtIHNlbmQgYSBzaWduYWwgdG8gYSBwcm9jZXNzIHNwZWNpZmllZCBieSBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvbmUgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBfX2Nsb25lMiAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIGNsb25lMyAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIHRpbWVzIC0gZ2V0IHByb2Nlc3MgdGltZXMKICAjIHN5c2luZm8gLSByZXR1cm4gc3lzdGVtIGluZm9ybWF0aW9uCiAgIyBpcGMgLSBTeXN0ZW0gViBJUEMgc3lzdGVtIGNhbGxzCiAgIyBldmVudGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBldmVudCBub3RpZmljYXRpb24KICAjIHdhaXQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgd2FpdHBpZCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlCiAgIyB3YWl0aWQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgZ2V0ZG9tYWlubmFtZSAtIGdldC9zZXQgTklTIGRvbWFpbiBuYW1lCiAgIyBpZGxlIC0gbWFrZSBwcm9jZXNzIDAgaWRsZQogICMgaW5vdGlmeV9hZGRfd2F0Y2ggLSBhZGQgYSB3YXRjaCB0byBhbiBpbml0aWFsaXplZCBpbm90aWZ5IGluc3RhbmNlCiAgIyBnZXRfbWVtcG9saWN5IC0gcmV0cmlldmUgTlVNQSBtZW1vcnkgcG9saWN5IGZvciBhIHRocmVhZAogICMgYnBmIC0gcGVyZm9ybSBhIGNvbW1hbmQgb24gYW4gZXh0ZW5kZWQgQlBGIG1hcCBvciBwcm9ncmFtCiAgIyBnZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBzZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBnZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBzZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBtZW1iYXJyaWVyIC0gaXNzdWUgbWVtb3J5IGJhcnJpZXJzIG9uIGEgc2V0IG9mIHRocmVhZHMKICAjIG1wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBwa2V5X21wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBnZXRjcHUgLSBkZXRlcm1pbmUgQ1BVIGFuZCBOVU1BIG5vZGUgb24gd2hpY2ggdGhlIGNhbGxpbmcgdGhyZWFkIGlzIHJ1bm5pbmcKICAjIGlvY3RsX2ZzbGFiZWwgLSBnZXQgb3Igc2V0IGEgZmlsZXN5c3RlbSBsYWJlbAogICMgbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIGxsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgZmxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBfbGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBmY250bCAtIG1hbmlwdWxhdGUgZmlsZSBkZXNjcmlwdG9yCiAgIyB1c3RhdCAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAjIHNpZ25hbCAtIEFOU0kgQyBzaWduYWwgaGFuZGxpbmcKICAjIG5hbm9zbGVlcCAtIGhpZ2gtcmVzb2x1dGlvbiBzbGVlcAogICMgY29ubmVjdCAtIGluaXRpYXRlIGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICMgdm04Nm9sZCAtIGVudGVyIHZpcnR1YWwgODA4NiBtb2RlCiAgIyB2bTg2IC0gZW50ZXIgdmlydHVhbCA4MDg2IG1vZGUKICAjIGZhbm90aWZ5X2luaXQgLSBjcmVhdGUgYW5kIGluaXRpYWxpemUgZmFub3RpZnkgZ3JvdXAKICAjIG1pZ3JhdGVfcGFnZXMgLSBtb3ZlIGFsbCBwYWdlcyBpbiBhIHByb2Nlc3MgdG8gYW5vdGhlciBzZXQgb2Ygbm9kZXMKICAjIHJlc3RhcnRfc3lzY2FsbCAtIHJlc3RhcnQgYSBzeXN0ZW0gY2FsbCBhZnRlciBpbnRlcnJ1cHRpb24gYnkgYSBzdG9wIHNpZ25hbAogICMgY2xvc2UgLSBjbG9zZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgbXNncmN2IC0gU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zCiAgIyBtc2dzbmQgLSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIG9wZXJhdGlvbnMKICAjIHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgd3JpdGV2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHdyaXRldiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHByZWFkdjIgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwd3JpdGV2MiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHN5c2xvZyAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMga2xvZ2N0bCAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMgc2NoZWRfeWllbGQgLSB5aWVsZCB0aGUgcHJvY2Vzc29yCiAgIyB2aGFuZ3VwIC0gdmlydHVhbGx5IGhhbmd1cCB0aGUgY3VycmVudCB0ZXJtaW5hbAogICMgaW9jdGxfaWZsYWdzIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBpbm9kZSBmbGFncwogICMgc2dldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3NldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3luY19maWxlX3JhbmdlIC0gc3luYyBhIGZpbGUgc2VnbWVudCB3aXRoIGRpc2sKICAjIGNvcHlfZmlsZV9yYW5nZSAtIENvcHkgYSByYW5nZSBvZiBkYXRhIGZyb20gb25lIGZpbGUgdG8gYW5vdGhlcgogICMgc2lncGVuZGluZyAtIGV4YW1pbmUgcGVuZGluZyBzaWduYWxzCiAgIyBydF9zaWdwZW5kaW5nIC0gZXhhbWluZSBwZW5kaW5nIHNpZ25hbHMKICAjIGdldHVud2luZCAtIGNvcHkgdGhlIHVud2luZCBkYXRhIHRvIGNhbGxlcidzIGJ1ZmZlcgogICMgbXN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUgd2l0aCBhIG1lbW9yeSBtYXAKICAjIGdldF9yb2J1c3RfbGlzdCAtIGdldC9zZXQgbGlzdCBvZiByb2J1c3QgZnV0ZXhlcwogICMgc2V0X3JvYnVzdF9saXN0IC0gZ2V0L3NldCBsaXN0IG9mIHJvYnVzdCBmdXRleGVzCiAgIyBkdXAgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDIgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDMgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIHMzOTBfcGNpX21taW9fd3JpdGUgLSB0cmFuc2ZlciBkYXRhIHRvL2Zyb20gUENJIE1NSU8gbWVtb3J5IHBhZ2UKICAjIHMzOTBfcGNpX21taW9fcmVhZCAtIHRyYW5zZmVyIGRhdGEgdG8vZnJvbSBQQ0kgTU1JTyBtZW1vcnkgcGFnZQogICMgcGF1c2UgLSB3YWl0IGZvciBzaWduYWwKICAjIHN3YXBvbiAtIHN0YXJ0L3N0b3Agc3dhcHBpbmcgdG8gZmlsZS9kZXZpY2UKICAjIHN3YXBvZmYgLSBzdGFydC9zdG9wIHN3YXBwaW5nIHRvIGZpbGUvZGV2aWNlCgogICMgUmVjb3JkIHR5cGUgbm9ybWFsaXphdGlvbnMKICAjIFVzZWZ1bCBsaW5rczoKICAjIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90b3J2YWxkcy9saW51eC92NC4xNi9pbmNsdWRlL3VhcGkvbGludXgvYXVkaXQuaAogICMgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xpbnV4LWF1ZGl0L2F1ZGl0LXVzZXJzcGFjZS80ZDkzMzMwMWIxODM1Y2FmYTA4YjllOWVmNzA1YzhmYjZjOTZjYjYyL2xpYi9saWJhdWRpdC5oCiAgIyBodHRwczovL3d3dy5lbGFzdGljLmNvL2d1aWRlL2VuL2Vjcy9jdXJyZW50L2Vjcy1hbGxvd2VkLXZhbHVlcy1ldmVudC1jYXRlZ29yeS5odG1sCgogICMgSUFNIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQUNDVF9MT0NLIC0gVXNlcidzIGFjY291bnQgbG9ja2VkIGJ5IGFkbWluCiAgLSByZWNvcmRfdHlwZXM6IEFDQ1RfTE9DSwogICAgYWN0aW9uOiBsb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FDQ1RfVU5MT0NLIC0gVXNlcidzIGFjY291bnQgdW5sb2NrZWQgYnkgYWRtaW4KICAtIHJlY29yZF90eXBlczogQUNDVF9VTkxPQ0sKICAgIGFjdGlvbjogdW5sb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FERF9HUk9VUCAtIEdyb3VwIGFjY291bnQgYWRkZWQKICAtIHJlY29yZF90eXBlczogQUREX0dST1VQCiAgICBhY3Rpb246IGFkZGVkLWdyb3VwLWFjY291bnQtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICA8PDogKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBjcmVhdGlvbgoKICAjIEFVRElUX0FERF9VU0VSIC0gVXNlciBhY2NvdW50IGFkZGVkCiAgLSByZWNvcmRfdHlwZXM6IEFERF9VU0VSCiAgICBhY3Rpb246IGFkZGVkLXVzZXItYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjcmVhdGlvbgogICMgQVVESVRfREVMX0dST1VQIC0gR3JvdXAgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9HUk9VUAogICAgYWN0aW9uOiBkZWxldGVkLWdyb3VwLWFjY291bnQtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLWdyb3VwLW1vZGlmaWNhdGlvbi1tYXBwaW5ncwogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9ERUxfVVNFUiAtIFVzZXIgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9VU0VSCiAgICBhY3Rpb246IGRlbGV0ZWQtdXNlci1hY2NvdW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgPDw6ICplY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9HUlBfTUdNVCAtIEdyb3VwIGFjY291bnQgYXR0ciB3YXMgbW9kaWZpZWQKICAtIHJlY29yZF90eXBlczogR1JQX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtZ3JvdXAtYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlcgogICAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICAgIHRvOiBncm91cAogICAgICAgIC0gZnJvbTogdWlkLnVpZAogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgIyBBVURJVF9ST0xFX0FTU0lHTiAtIEFkbWluIGFzc2lnbmVkIHVzZXIgdG8gcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX0FTU0lHTgogICAgYWN0aW9uOiBhc3NpZ25lZC11c2VyLXJvbGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9ST0xFX01PRElGWSAtIEFkbWluIG1vZGlmaWVkIGEgcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX01PRElGWQogICAgYWN0aW9uOiBtb2RpZmllZC1yb2xlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9ST0xFX1JFTU9WRSAtIEFkbWluIHJlbW92ZWQgdXNlciBmcm9tIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9SRU1PVkUKICAgIGFjdGlvbjogcmVtb3ZlZC11c2VyLXJvbGUtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX1VTRVJfTUdNVCAtIFVzZXIgYWNjdCBhdHRyaWJ1dGUgY2hhbmdlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtdXNlci1hY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlcgogICAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICAgIHRvOiB1c2VyLnRhcmdldAogICAgICAgIC0gZnJvbTogdWlkLnVpZAogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgIyBBVURJVF9VU0VSX0NIQVVUSFRPSyAtIFVzZXIgYWNjdCBwYXNzd29yZCBvciBwaW4gY2hhbmdlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9DSEFVVEhUT0sKICAgIGFjdGlvbjogY2hhbmdlZC1wYXNzd29yZAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICAgIHRvOiB1c2VyLnRhcmdldAoKICAjIEFVRElUX0dSUF9DSEFVVEhUT0sgLSBHcm91cCBhY2N0IHBhc3N3b3JkIG9yIHBpbiBjaGFuZ2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBHUlBfQ0hBVVRIVE9LCiAgICBhY3Rpb246IGNoYW5nZWQtZ3JvdXAtcGFzc3dvcmQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYWNjdAogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlcgogICAgICAgIC0gZnJvbTogdWlkLnVpZAogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgICAgdG86IGdyb3VwCgogICMgQXV0aGVudGljYXRpb24gcmVsYXRlZCBldmVudHMKCiAgIyBBVURJVF9DUkVEX0FDUSAtIFVzZXIgY3JlZGVudGlhbCBhY3F1aXJlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JFRF9BQ1EKICAgIGFjdGlvbjogYWNxdWlyZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9DUkVEX0RJU1AgLSBVc2VyIGNyZWRlbnRpYWwgZGlzcG9zZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfRElTUAogICAgYWN0aW9uOiBkaXNwb3NlZC1jcmVkZW50aWFscwogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0NSRURfUkVGUiAtIFVzZXIgY3JlZGVudGlhbCByZWZyZXNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfUkVGUgogICAgYWN0aW9uOiByZWZyZXNoZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9HUlBfQVVUSCAtIEF1dGhlbnRpY2F0aW9uIGZvciBncm91cCBwYXNzd29yZAogIC0gcmVjb3JkX3R5cGVzOiBHUlBfQVVUSAogICAgYWN0aW9uOiBhdXRoZW50aWNhdGVkLXRvLWdyb3VwCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfTE9HSU4gLSBEZWZpbmUgdGhlIGxvZ2luIGlkIGFuZCBpbmZvcm1hdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBMT0dJTgogICAgYWN0aW9uOiBjaGFuZ2VkLWxvZ2luLWlkLXRvCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBbb2xkX2F1aWQsIG9sZC1hdWlkXQogICAgICBzZWNvbmRhcnk6IHVpZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbbmV3LWF1aWQsIG5ld19hdWlkLCBhdWlkXQogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIGVjczoKICAgICAgPDw6ICplY3MtYXV0aAogICAgICB0eXBlOiBzdGFydAogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IG9iamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1VTRVJfQUNDVCAtIFVzZXIgc3lzdGVtIGFjY2VzcyBhdXRob3JpemF0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0FDQ1QKICAgIGFjdGlvbjogd2FzLWF1dGhvcml6ZWQKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0FVVEggLSBVc2VyIHN5c3RlbSBhY2Nlc3MgYXV0aGVudGljYXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQVVUSAogICAgYWN0aW9uOiBhdXRoZW50aWNhdGVkCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9FTkQgLSBVc2VyIHNlc3Npb24gZW5kCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0VORAogICAgYWN0aW9uOiBlbmRlZC1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXNlc3Npb24KICAgICAgdHlwZTogZW5kCiAgIyBBVURJVF9VU0VSX0VSUiAtIFVzZXIgYWNjdCBzdGF0ZSBlcnJvcgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FUlIKICAgIGFjdGlvbjogZXJyb3IKICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9MT0dJTiAtIFVzZXIgaGFzIGxvZ2dlZCBpbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dJTgogICAgYWN0aW9uOiBsb2dnZWQtaW4KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1VTRVJfTE9HT1VUIC0gVXNlciBoYXMgbG9nZ2VkIG91dAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dPVVQKICAgIGFjdGlvbjogbG9nZ2VkLW91dAogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfVVNFUl9ST0xFX0NIQU5HRSAtIFVzZXIgY2hhbmdlZCB0byBhIG5ldyByb2xlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX1JPTEVfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtcm9sZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzZWxlY3RlZC1jb250ZXh0CiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICMgQVVESVRfVVNFUl9TVEFSVCAtIFVzZXIgc2Vzc2lvbiBzdGFydAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlc3Npb24KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXNlc3Npb24KICAgICAgdHlwZTogc3RhcnQKCiAgIyBIb3N0IHZpcnR1YWxpemF0aW9uIGV2ZW50cwoKICAjIEFVRElUX1ZJUlRfQ09OVFJPTCAtIFN0YXJ0LCBQYXVzZSwgU3RvcCBWTQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0NPTlRST0wKICAgIGFjdGlvbjogaXNzdWVkLXZtLWNvbnRyb2wKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3AKICAgICAgc2Vjb25kYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0NSRUFURSAtIENyZWF0aW9uIG9mIGd1ZXN0IGltYWdlCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfQ1JFQVRFCiAgICBhY3Rpb246IGNyZWF0ZWQtdm0taW1hZ2UKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0RFU1RST1kgLSBEZXN0cnVjdGlvbiBvZiBndWVzdCBpbWFnZQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0RFU1RST1kKICAgIGFjdGlvbjogZGVsZXRlZC12bS1pbWFnZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfSU5URUdSSVRZX0NIRUNLIC0gR3Vlc3QgaW50ZWdyaXR5IHJlc3VsdHMKICAtIHJlY29yZF90eXBlczogVklSVF9JTlRFR1JJVFlfQ0hFQ0sKICAgIGFjdGlvbjogY2hlY2tlZC1pbnRlZ3JpdHktb2YKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01BQ0hJTkVfSUQgLSBCaW5kaW5nIG9mIGxhYmVsIHRvIFZNCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUFDSElORV9JRAogICAgYWN0aW9uOiBhc3NpZ25lZC12bS1pZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01JR1JBVEVfSU4gLSBJbmJvdW5kIGd1ZXN0IG1pZ3JhdGlvbiBpbmZvCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUlHUkFURV9JTgogICAgYWN0aW9uOiBtaWdyYXRlZC12bS1mcm9tCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NSUdSQVRFX09VVCAtIE91dGJvdW5kIGd1ZXN0IG1pZ3JhdGlvbiBpbmZvCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUlHUkFURV9PVVQKICAgIGFjdGlvbjogbWlncmF0ZWQtdm0tdG8KICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX1JFU09VUkNFIC0gUmVzb3VyY2UgYXNzaWdubWVudAogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX1JFU09VUkNFCiAgICBhY3Rpb246IGFzc2lnbmVkLXZtLXJlc291cmNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHJlc3JjCiAgICAgIHNlY29uZGFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAoKICAjIFVzZXJzcGFjZSBwcm9jZXNzIGV2ZW50cwoKICAjIEFVRElUX0NIR1JQX0lEIC0gVXNlciBzcGFjZSBncm91cCBJRCBjaGFuZ2VkCiAgLSByZWNvcmRfdHlwZXM6IENIR1JQX0lECiAgICBhY3Rpb246IGNoYW5nZWQtZ3JvdXAKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0NIVVNFUl9JRCAtIENoYW5nZWQgdXNlciBJRCBzdXBwbGVtZW50YWwgZGF0YQogIC0gcmVjb3JkX3R5cGVzOiBDSFVTRVJfSUQKICAgIGFjdGlvbjogY2hhbmdlZC11c2VyLWlkCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9URVNUIC0gVXNlZCBmb3IgdGVzdCBzdWNjZXNzIG1lc3NhZ2VzCiAgLSByZWNvcmRfdHlwZXM6IFRFU1QKICAgIGFjdGlvbjogc2VudC10ZXN0CiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfVFJVU1RFRF9BUFAgLSBUcnVzdGVkIGFwcCBtc2cgLSBmcmVlc3R5bGUgdGV4dAogIC0gcmVjb3JkX3R5cGVzOiBUUlVTVEVEX0FQUAogICAgYWN0aW9uOiB1bmtub3duCiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfVVNFUl9DTUQgLSBVc2VyIHNoZWxsIGNvbW1hbmQgYW5kIGFyZ3MKICAtIHJlY29yZF90eXBlczogVVNFUl9DTUQKICAgIGFjdGlvbjogcmFuLWNvbW1hbmQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogY21kCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGRlc2NyaXB0aW9uOiA+CiAgICAgIFRoZXNlIG1lc3NhZ2VzIGFyZSBmcm9tIHVzZXItc3BhY2UgYXBwcywgbGlrZSBzdWRvLCB0aGF0IGxvZyBjb21tYW5kcwogICAgICBiZWluZyBydW4gYnkgYSB1c2VyLiBUaGUgdWlkIGNvbnRhaW5lZCBpbiB0aGVzZSBtZXNzYWdlcyBpcyB1c2VyJ3MgVUlEIGF0CiAgICAgIHRoZSB0aW1lIHRoZSBjb21tYW5kIHdhcyBydW4uIEl0IGlzIG5vdCB0aGUgInRhcmdldCIgVUlEIHVzZWQgdG8gcnVuIHRoZQogICAgICBjb21tYW5kLCB3aGljaCBpcyBub3JtYWxseSByb290LgogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CgogICMgSG9zdC1sZXZlbCBldmVudHMKCiAgIyBBVURJVF9TWVNURU1fQk9PVCAtIFN5c3RlbSBib290CiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9CT09UCiAgICBhY3Rpb246IGJvb3RlZC1zeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1NZU1RFTV9SVU5MRVZFTCAtIFN5c3RlbSBydW5sZXZlbCBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogU1lTVEVNX1JVTkxFVkVMCiAgICBhY3Rpb246IGNoYW5nZWQtdG8tcnVubGV2ZWwKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogbmV3LWxldmVsCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfU1lTVEVNX1NIVVRET1dOIC0gU3lzdGVtIHNodXRkb3duCiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9TSFVURE9XTgogICAgYWN0aW9uOiBzaHV0ZG93bi1zeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogZW5kCgogICMgU2VydmljZS1sZXZlbCBldmVudHMKCiAgIyBBVURJVF9TRVJWSUNFX1NUQVJUIC0gU2VydmljZSAoZGFlbW9uKSBzdGFydAogIC0gcmVjb3JkX3R5cGVzOiBTRVJWSUNFX1NUQVJUCiAgICBhY3Rpb246IHN0YXJ0ZWQtc2VydmljZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB1bml0CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfU0VSVklDRV9TVE9QIC0gU2VydmljZSAoZGFlbW9uKSBzdG9wCiAgLSByZWNvcmRfdHlwZXM6IFNFUlZJQ0VfU1RPUAogICAgYWN0aW9uOiBzdG9wcGVkLXNlcnZpY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdW5pdAogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAoKICAjIEF1ZGl0ZCBpbnRlcm5hbCBldmVudHMKCiAgIyBBVURJVF9DT05GSUdfQ0hBTkdFIC0gQXVkaXQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IENPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6CiAgICAgICAgW29wLCBrZXksIGF1ZGl0X2VuYWJsZWQsIGF1ZGl0X3BpZCwgYXVkaXRfYmFja2xvZ19saW1pdCwgYXVkaXRfZmFpbHVyZV0KICAgICAgd2hhdDogYXVkaXQtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBbcHJvY2VzcywgY29uZmlndXJhdGlvbl0KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fQUJPUlQgLSBEYWVtb24gZXJyb3Igc3RvcCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX0FCT1JUCiAgICBhY3Rpb246IGFib3J0ZWQtYXVkaXRkLXN0YXJ0dXAKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKICAjIEFVRElUX0RBRU1PTl9BQ0NFUFQgLSBBdWRpdGQgYWNjZXB0ZWQgcmVtb3RlIGNvbm5lY3Rpb24KICAtIHJlY29yZF90eXBlczogREFFTU9OX0FDQ0VQVAogICAgYWN0aW9uOiByZW1vdGUtYXVkaXQtY29ubmVjdGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAjIEFVRElUX0RBRU1PTl9DTE9TRSAtIEF1ZGl0ZCBjbG9zZWQgcmVtb3RlIGNvbm5lY3Rpb24KICAtIHJlY29yZF90eXBlczogREFFTU9OX0NMT1NFCiAgICBhY3Rpb246IHJlbW90ZS1hdWRpdC1kaXNjb25uZWN0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogICMgQVVESVRfREFFTU9OX0NPTkZJRyAtIERhZW1vbiBjb25maWcgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9DT05GSUcKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdGQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBbcHJvY2VzcywgY29uZmlndXJhdGlvbl0KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fRU5EIC0gRGFlbW9uIG5vcm1hbCBzdG9wIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fRU5ECiAgICBhY3Rpb246IHNodXRkb3duLWF1ZGl0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCiAgIyBBVURJVF9EQUVNT05fRVJSIC0gQXVkaXRkIGludGVybmFsIGVycm9yCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9FUlIKICAgIGFjdGlvbjogYXVkaXQtZXJyb3IKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX0RBRU1PTl9SRUNPTkZJRyAtIEF1ZGl0ZCBzaG91bGQgcmVjb25maWd1cmUKICAtIHJlY29yZF90eXBlczogREFFTU9OX1JFQ09ORklHCiAgICBhY3Rpb246IHJlY29uZmlndXJlZC1hdWRpdGQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGluZm8KICAjIEFVRElUX0RBRU1PTl9SRVNVTUUgLSBBdWRpdGQgc2hvdWxkIHJlc3VtZSBsb2dnaW5nCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9SRVNVTUUKICAgIGFjdGlvbjogcmVzdW1lZC1hdWRpdC1sb2dnaW5nCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9ST1RBVEUgLSBBdWRpdGQgc2hvdWxkIHJvdGF0ZSBsb2dzCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9ST1RBVEUKICAgIGFjdGlvbjogcm90YXRlZC1hdWRpdC1sb2dzCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9TVEFSVCAtIERhZW1vbiBzdGFydHVwIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fU1RBUlQKICAgIGFjdGlvbjogc3RhcnRlZC1hdWRpdAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX0tFUk5FTCAtIEFzeW5jaHJvbm91cyBhdWRpdCByZWNvcmQuIE5PVCBBIFJFUVVFU1QuCiAgLSByZWNvcmRfdHlwZXM6IEtFUk5FTAogICAgYWN0aW9uOiBpbml0aWFsaXplZC1hdWRpdC1zdWJzeXN0ZW0KICAgIGVjczogKmVjcy1wcm9jZXNzCgogICMgQ29uZmlndXJhdGlvbiBjaGFuZ2UgZXZlbnRzCgogICMgQVVESVRfVVNZU19DT05GSUcgLSBVc2VyIHNwYWNlIHN5c3RlbSBjb25maWcgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IFVTWVNfQ09ORklHCiAgICBhY3Rpb246IGNoYW5nZWQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcAogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9ORVRGSUxURVJfQ0ZHIC0gTmV0ZmlsdGVyIGNoYWluIG1vZGlmaWNhdGlvbnMKICAtIHJlY29yZF90eXBlczogTkVURklMVEVSX0NGRwogICAgYWN0aW9uOiBsb2FkZWQtZmlyZXdhbGwtcnVsZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0YWJsZQogICAgICB3aGF0OiBmaXJld2FsbAogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0ZFQVRVUkVfQ0hBTkdFIC0gYXVkaXQgbG9nIGxpc3RpbmcgZmVhdHVyZSBjaGFuZ2VzCiAgLSByZWNvcmRfdHlwZXM6IEZFQVRVUkVfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXQtZmVhdHVyZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBmZWF0dXJlCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1JFUExBQ0UgLSBSZXBsYWNlIGF1ZGl0ZCBpZiB0aGlzIHBhY2tldCB1bmFuc3dlcmQKCiAgIyBUVFkgZXZlbnRzCgogIC0gcmVjb3JkX3R5cGVzOgogICAgICAjIEFVRElUX1RUWSAtIElucHV0IG9uIGFuIGFkbWluaXN0cmF0aXZlIFRUWQogICAgICAtIFRUWQogICAgICAjIEFVRElUX1VTRVJfVFRZIC0gTm9uLUlDQU5PTiBUVFkgaW5wdXQgbWVhbmluZwogICAgICAtIFVTRVJfVFRZCiAgICBhY3Rpb246IHR5cGVkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGRhdGEKICAgICAgd2hhdDoga2V5c3Ryb2tlcwogICAgaG93OiBbY29tbSwgZXhlXQoKICAjIFBvbGljeSBldmVudHMKCiAgIyBBVURJVF9BVkMgLSBTRSBMaW51eCBhdmMgZGVuaWFsIG9yIGdyYW50IChzZWxpbnV4KQogIC0gcmVjb3JkX3R5cGVzOiBBVkMKICAgIGFjdGlvbjogdmlvbGF0ZWQtc2VsaW51eC1wb2xpY3kKICAgIHN1YmplY3Q6CiAgICAgIHByaW1hcnk6IHNjb250ZXh0CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHRjb250ZXh0CiAgICAgIHNlY29uZGFyeTogdGNsYXNzCiAgICBoYXNfZmllbGRzOgogICAgICAtIHNlcmVzdWx0CiAgIyBBVURJVF9BVkMgLSBTRSBMaW51eCBhdmMgZGVuaWFsIG9yIGdyYW50IChhcHBhcm1vcikKICAtIHJlY29yZF90eXBlczogQVZDCiAgICBhY3Rpb246IHZpb2xhdGVkLWFwcGFybW9yLXBvbGljeQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcGVyYXRpb24KICAgICAgc2Vjb25kYXJ5OiBbcmVxdWVzdGVkX21hc2ssIGRlbmllZF9tYXNrLCBjYXBuYW1lXQogICAgICB3aGF0OiBwb2xpY3kKICAgIGhhc19maWVsZHM6CiAgICAgIC0gYXBwYXJtb3IKICAjIEFVRElUX0ZTX1JFTEFCRUwgLSBGaWxlc3lzdGVtIHJlbGFiZWxlZAogIC0gcmVjb3JkX3R5cGVzOiBGU19SRUxBQkVMCiAgICBhY3Rpb246IHJlbGFiZWxlZC1maWxlc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAjIEFVRElUX0xBQkVMX0xFVkVMX0NIQU5HRSAtIE9iamVjdCdzIGxldmVsIHdhcyBjaGFuZ2VkCiAgLSByZWNvcmRfdHlwZXM6IExBQkVMX0xFVkVMX0NIQU5HRQogICAgYWN0aW9uOiBtb2RpZmllZC1sZXZlbC1vZgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBwcmludGVyCiAgICAgIHdoYXQ6IHByaW50ZXIKICAjIEFVRElUX0xBQkVMX09WRVJSSURFIC0gQWRtaW4gaXMgb3ZlcnJpZGluZyBhIGxhYmVsCiAgLSByZWNvcmRfdHlwZXM6IExBQkVMX09WRVJSSURFCiAgICBhY3Rpb246IG92ZXJyb2RlLWxhYmVsLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAjIEFVRElUX01BQ19DSEVDSyAtIFVzZXIgc3BhY2UgTUFDIGRlY2lzaW9uIHJlc3VsdHMKICAtIHJlY29yZF90eXBlczogTUFDX0NIRUNLCiAgICBhY3Rpb246IG1hYy1wZXJtaXNzaW9uCiAgIyBBVURJVF9NQUNfQ09ORklHX0NIQU5HRSAtIENoYW5nZXMgdG8gYm9vbGVhbnMKICAtIHJlY29yZF90eXBlczogTUFDX0NPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1zZWxpbnV4LWJvb2xlYW4KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYm9vbAogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfTUFDX1BPTElDWV9MT0FEIC0gUG9saWN5IGZpbGUgbG9hZAogIC0gcmVjb3JkX3R5cGVzOiBNQUNfUE9MSUNZX0xPQUQKICAgIGFjdGlvbjogbG9hZGVkLXNlbGludXgtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogYWNjZXNzCiAgIyBBVURJVF9NQUNfU1RBVFVTIC0gQ2hhbmdlZCBlbmZvcmNpbmcscGVybWlzc2l2ZSxvZmYKICAtIHJlY29yZF90eXBlczogTUFDX1NUQVRVUwogICAgYWN0aW9uOiBjaGFuZ2VkLXNlbGludXgtZW5mb3JjZW1lbnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZW5mb3JjaW5nCiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9VU0VSX0FWQyAtIFVzZXIgc3BhY2UgYXZjIG1lc3NhZ2UKICAtIHJlY29yZF90eXBlczogVVNFUl9BVkMKICAgIGFjdGlvbjogYWNjZXNzLXBlcm1pc3Npb24KICAjIEFVRElUX1VTRVJfTUFDX0NPTkZJR19DSEFOR0UgLSBDaGFuZ2UgbWFkZSB0byBNQUMgcG9saWN5CiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfTUFDX0NPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1tYWMtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVVNFUl9NQUNfUE9MSUNZX0xPQUQgLSBVc2Vyc3BjIGRhZW1vbiBsb2FkZWQgcG9saWMKICAtIHJlY29yZF90eXBlczogVVNFUl9NQUNfUE9MSUNZX0xPQUQKICAgIGFjdGlvbjogbG9hZGVkLW1hYy1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBhY2Nlc3MKICAjIEFVRElUX1VTRVJfU0VMSU5VWF9FUlIgLSBTRSBMaW51eCB1c2VyIHNwYWNlIGVycm9yCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfU0VMSU5VWF9FUlIKICAgIGFjdGlvbjogYWNjZXNzLWVycm9yCiAgIyBBVURJVF9TRUNDT01QIC0gU2VjdXJlIENvbXB1dGluZyBldmVudAogIC0gcmVjb3JkX3R5cGVzOiBTRUNDT01QCiAgICBhY3Rpb246IHZpb2xhdGVkLXNlY2NvbXAtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHN5c2NhbGwKICAgICAgd2hhdDogcHJvY2VzcwogICMgQVVESVRfU0VMSU5VWF9FUlIgLSBJbnRlcm5hbCBTRSBMaW51eCBFcnJvcnMKICAtIGFjdGlvbjogY2F1c2VkLW1hYy1wb2xpY3ktZXJyb3IKICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICByZWNvcmRfdHlwZXM6IFNFTElOVVhfRVJSCiAgIyBBVURJVF9BUFBBUk1PUl9BTExPV0VECiAgIyBBVURJVF9BUFBBUk1PUl9ERU5JRUQKICAjIEFVRElUX0FQUEFSTU9SX0VSUk9SCiAgIyBBVURJVF9BVkNfUEFUSCAtIGRlbnRyeSwgdmZzbW91bnQgcGFpciBmcm9tIGF2YwogICMgQVVESVRfQVBQQVJNT1JfQVVESVQKICAjIEFVRElUX0FQUEFSTU9SX0hJTlQKICAjIEFVRElUX0FQUEFSTU9SX1NUQVRVUwogICMgQVVESVRfQVBQQVJNT1JfRVJST1IKICAjIEFVRElUX0RFVl9BTExPQyAtIERldmljZSB3YXMgYWxsb2NhdGVkCiAgIyBBVURJVF9ERVZfREVBTExPQyAtIERldmljZSB3YXMgZGVhbGxvY2F0ZWQKICAjIEFVRElUX01BQ19VTkxCTF9BTExPVyAtIE5ldExhYmVsOiBhbGxvdyB1bmxhYmVsZWQgdHJhZmZpYwogICMgQVVESVRfTUFDX0NJUFNPVjRfQUREIC0gTmV0TGFiZWw6IGFkZCBDSVBTT3Y0IERPSSBlbnRyeQogICMgQVVESVRfTUFDX0NJUFNPVjRfREVMIC0gTmV0TGFiZWw6IGRlbCBDSVBTT3Y0IERPSSBlbnRyeQogICMgQVVESVRfTUFDX01BUF9BREQgLSBOZXRMYWJlbDogYWRkIExTTSBkb21haW4gbWFwcGluZwogICMgQVVESVRfTUFDX01BUF9ERUwgLSBOZXRMYWJlbDogZGVsIExTTSBkb21haW4gbWFwcGluZwogICMgQVVESVRfTUFDX0lQU0VDX0VWRU5UIC0gQXVkaXQgYW4gSVBTZWMgZXZlbnQKICAjIEFVRElUX01BQ19VTkxCTF9TVENBREQgLSBOZXRMYWJlbDogYWRkIGEgc3RhdGljIGxhYmVsCiAgIyBBVURJVF9NQUNfVU5MQkxfU1RDREVMIC0gTmV0TGFiZWw6IGRlbCBhIHN0YXRpYyBsYWJlbAogICMgQVVESVRfTUFDX0NBTElQU09fQUREIC0gTmV0TGFiZWw6IGFkZCBDQUxJUFNPIERPSSBlbnRyeQogICMgQVVESVRfTUFDX0NBTElQU09fREVMIC0gTmV0TGFiZWw6IGRlbCBDQUxJUFNPIERPSSBlbnRyeQogICMgQVVESVRfVVNFUl9MQUJFTEVEX0VYUE9SVCAtIE9iamVjdCBleHBvcnRlZCB3aXRoIGxhYmVsCiAgIyBBVURJVF9VU0VSX1VOTEFCRUxFRF9FWFBPUlQgLSBPYmplY3QgZXhwb3J0ZWQgd2l0aG91dCBsYWJlbAoKICAjIENyeXB0byBldmVudHMKCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgYWN0aW9uOiBuZWdvdGlhdGVkLWNyeXB0by1rZXkKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZnAKICAgICAgc2Vjb25kYXJ5OiBbYWRkciwgaG9zdG5hbWVdCiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fS0VZX1VTRVIKICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBjcnlwdG8tb2ZmaWNlci1sb2dnZWQtaW4KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0xPR0lOCiAgLSBhY3Rpb246IGNyeXB0by1vZmZpY2VyLWxvZ2dlZC1vdXQKICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0xPR09VVAogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICBhY3Rpb246IHN0YXJ0ZWQtY3J5cHRvLXNlc3Npb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYWRkcgogICAgICBzZWNvbmRhcnk6IFtycG9ydF0KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX1NFU1NJT04KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBhY2Nlc3MtcmVzdWx0CiAgICByZWNvcmRfdHlwZXM6IERBQ19DSEVDSwoKICAjIEFub21hbGllcwoKICAjIEFVRElUX0FOT01fQUJFTkQgLSBQcm9jZXNzIGVuZGVkIGFibm9ybWFsbHkKICAtIHJlY29yZF90eXBlczogQU5PTV9BQkVORAogICAgYWN0aW9uOiBjcmFzaGVkLXByb2dyYW0KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2NvbW0sIGV4ZV0KICAgICAgc2Vjb25kYXJ5OiBwaWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzaWcKICAgIGVjczoKICAgICAgIyBjb25zaWRlciBhZGRpbmcgYW4gYW5vbWFseSBjYXRlZ29yeSB3aGVuIHdlIGludHJvZHVjZQogICAgICAjIHRvIEVDUwogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfQU5PTV9FWEVDIC0gRXhlY3V0aW9uIG9mIGZpbGUKICAtIHJlY29yZF90eXBlczogQU5PTV9FWEVDCiAgICBhY3Rpb246IGF0dGVtcHRlZC1leGVjdXRpb24tb2YtZm9yYmlkZGVuLXByb2dyYW0KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogY21kCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKICAgIGVjczoKICAgICAgIyBjb25zaWRlciBhZGRpbmcgYW4gYW5vbWFseSBjYXRlZ29yeSB3aGVuIHdlIGludHJvZHVjZQogICAgICAjIHRvIEVDUwogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9BTk9NX0xJTksgLSBTdXNwaWNpb3VzIHVzZSBvZiBmaWxlIGxpbmtzCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fTElOSwogICAgYWN0aW9uOiB1c2VkLXN1c3BpY2lvdXMtbGluawogICMgQVVESVRfQU5PTV9MT0dJTl9GQUlMVVJFUyAtIEZhaWxlZCBsb2dpbiBsaW1pdCByZWFjaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX0ZBSUxVUkVTCiAgICBhY3Rpb246IGZhaWxlZC1sb2ctaW4tdG9vLW1hbnktdGltZXMtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fTE9DQVRJT04gLSBMb2dpbiBmcm9tIGZvcmJpZGRlbiBsb2NhdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9MT0NBVElPTgogICAgYWN0aW9uOiBhdHRlbXB0ZWQtbG9nLWluLWZyb20tdW51c3VhbC1wbGFjZS10bwogICMgQVVESVRfQU5PTV9MT0dJTl9TRVNTSU9OUyAtIE1heCBjb25jdXJyZW50IHNlc3Npb25zIHJlYWNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fU0VTU0lPTlMKICAgIGFjdGlvbjogb3BlbmVkLXRvby1tYW55LXNlc3Npb25zLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX1RJTUUgLSBMb2dpbiBhdHRlbXB0ZWQgYXQgYmFkIHRpbWUKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fVElNRQogICAgYWN0aW9uOiBhdHRlbXB0ZWQtbG9nLWluLWR1cmluZy11bnVzdWFsLWhvdXItdG8KICAjIEFVRElUX0FOT01fUFJPTUlTQ1VPVVMgLSBEZXZpY2UgY2hhbmdlZCBwcm9taXNjdW91cyBtb2RlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fUFJPTUlTQ1VPVVMKICAgIGFjdGlvbjogY2hhbmdlZC1wcm9taXNjdW91cy1tb2RlLW9uLWRldmljZSAjIENvdWxkIGJlIGVudGVyZWQgb3IgZXhpdGVkIGJhc2VkIG9uIHByb20gZmllbGQuCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGRldgogICAgICB3aGF0OiBuZXR3b3JrLWRldmljZQogICMgQVVESVRfQU5PTV9SQkFDX0lOVEVHUklUWV9GQUlMIC0gUkJBQyBmaWxlIGludGVncml0eSBmYWlsdXJlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fUkJBQ19JTlRFR1JJVFlfRkFJTAogICAgYWN0aW9uOiB0ZXN0ZWQtZmlsZS1zeXN0ZW0taW50ZWdyaXR5LW9mCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGhvc3RuYW1lCiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAjIEFVRElUX0FOT01fTE9HSU5fQUNDVCAtIExvZ2luIGF0dGVtcHRlZCB0byB3YXRjaGVkIGFjY3QKICAjIEFVRElUX0FOT01fTUFYX0RBQyAtIE1heCBEQUMgZmFpbHVyZXMgcmVhY2hlZAogICMgQVVESVRfQU5PTV9NQVhfTUFDIC0gTWF4IE1BQyBmYWlsdXJlcyByZWFjaGVkCiAgIyBBVURJVF9BTk9NX0FNVFVfRkFJTCAtIEFNVFUgZmFpbHVyZQogICMgQVVESVRfQU5PTV9SQkFDX0ZBSUwgLSBSQkFDIHNlbGYgdGVzdCBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX0NSWVBUT19GQUlMIC0gQ3J5cHRvIHN5c3RlbSB0ZXN0IGZhaWx1cmUKICAjIEFVRElUX0FOT01fTUtfRVhFIC0gTWFrZSBhbiBleGVjdXRhYmxlCiAgIyBBVURJVF9BTk9NX0FDQ0VTU19GUyAtIEFjY2VzcyBvZiBmaWxlIG9yIGRpcgogICMgQVVESVRfQU5PTV9BRERfQUNDVCAtIEFkZGluZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX0RFTF9BQ0NUIC0gRGVsZXRpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9NT0RfQUNDVCAtIENoYW5naW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fUk9PVF9UUkFOUyAtIFVzZXIgYmVjYW1lIHJvb3QKICAjIEFVRElUX0FOT01fTE9HSU5fU0VSVklDRSAtIFNlcnZpY2UgYWNjdCBhdHRlbXB0ZWQgbG9naW4KCiAgIyBBbm9tYWx5IHJlc3BvbnNlcwoKICAjIEFVRElUX1JFU1BfQU5PTUFMWSAtIEFub21hbHkgbm90IHJlYWN0ZWQgdG8KICAjIEFVRElUX1JFU1BfQUxFUlQgLSBBbGVydCBlbWFpbCB3YXMgc2VudAogICMgQVVESVRfUkVTUF9LSUxMX1BST0MgLSBLaWxsIHByb2dyYW0KICAjIEFVRElUX1JFU1BfVEVSTV9BQ0NFU1MgLSBUZXJtaW5hdGUgc2Vzc2lvbgogICMgQVVESVRfUkVTUF9BQ0NUX1JFTU9URSAtIEFjY3QgbG9ja2VkIGZyb20gcmVtb3RlIGFjY2VzcwogICMgQVVESVRfUkVTUF9BQ0NUX0xPQ0tfVElNRUQgLSBVc2VyIGFjY3QgbG9ja2VkIGZvciB0aW1lCiAgIyBBVURJVF9SRVNQX0FDQ1RfVU5MT0NLX1RJTUVEIC0gVXNlciBhY2N0IHVubG9ja2VkIGZyb20gdGltZQogICMgQVVESVRfUkVTUF9BQ0NUX0xPQ0sgLSBVc2VyIGFjY3Qgd2FzIGxvY2tlZAogICMgQVVESVRfUkVTUF9URVJNX0xPQ0sgLSBUZXJtaW5hbCB3YXMgbG9ja2VkCiAgIyBBVURJVF9SRVNQX1NFQk9PTCAtIFNldCBhbiBTRSBMaW51eCBib29sZWFuCiAgIyBBVURJVF9SRVNQX0VYRUMgLSBFeGVjdXRlIGEgc2NyaXB0CiAgIyBBVURJVF9SRVNQX1NJTkdMRSAtIEdvIHRvIHNpbmdsZSB1c2VyIG1vZGUKICAjIEFVRElUX1JFU1BfSEFMVCAtIHRha2UgdGhlIHN5c3RlbSBkb3duCiAgIyBBVURJVF9SRVNQX09SSUdJTl9CTE9DSyAtIEFkZHJlc3MgYmxvY2tlZCBieSBpcHRhYmxlcwogICMgQVVESVRfUkVTUF9PUklHSU5fQkxPQ0tfVElNRUQgLSBBZGRyZXNzIGJsb2NrZWQgZm9yIHRpbWUKCiAgIyBBdWRpdCBydWxlIGV2ZW50cwoKICAjIEFVRElUX1NZU0NBTEwgLSBTeXNjYWxsIGV2ZW50CiAgIyBBVURJVF9QQVRIIC0gRmlsZW5hbWUgcGF0aCBpbmZvcm1hdGlvbgogICMgQVVESVRfSVBDIC0gSVBDIHJlY29yZAogICMgQVVESVRfU09DS0VUQ0FMTCAtIHN5c19zb2NrZXRjYWxsIGFyZ3VtZW50cwogICMgQVVESVRfU09DS0FERFIgLSBzb2NrYWRkciBjb3BpZWQgYXMgc3lzY2FsbCBhcmcKICAjIEFVRElUX0NXRCAtIEN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKICAjIEFVRElUX0VYRUNWRSAtIGV4ZWN2ZSBhcmd1bWVudHMKICAjIEFVRElUX0lQQ19TRVRfUEVSTSAtIElQQyBuZXcgcGVybWlzc2lvbnMgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX09QRU4gLSBQT1NJWCBNUSBvcGVuIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9TRU5EUkVDVi0gUE9TSVggTVEgc2VuZC9yZWNlaXZlIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9OT1RJRlkgLSBQT1NJWCBNUSBub3RpZnkgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX0dFVFNFVEFUVFIgLSBQT1NJWCBNUSBnZXQvc2V0IGF0dHJpYnV0ZSByZWNvcmQgdHlwZQogICMgQVVESVRfRkRfUEFJUiAtIGF1ZGl0IHJlY29yZCBmb3IgcGlwZS9zb2NrZXRwYWlyCiAgIyBBVURJVF9PQkpfUElEIC0gcHRyYWNlIHRhcmdldAogICMgQVVESVRfQlBSTV9GQ0FQUyAtIEluZm9ybWF0aW9uIGFib3V0IGZjYXBzIGluY3JlYXNpbmcgcGVybXMKICAjIEFVRElUX0NBUFNFVCAtIFJlY29yZCBzaG93aW5nIGFyZ3VtZW50IHRvIHN5c19jYXBzZXQKICAjIEFVRElUX01NQVAgLSBSZWNvcmQgc2hvd2luZyBkZXNjcmlwdG9yIGFuZCBmbGFncyBpbiBtbWFwCiAgIyBBVURJVF9ORVRGSUxURVJfUEtUIC0gUGFja2V0cyB0cmF2ZXJzaW5nIG5ldGZpbHRlciBjaGFpbnMKCiAgIyBJbnRlZ3JpdHkgY2hlY2tzCgogICMgQVVESVRfSU5URUdSSVRZX0RBVEEgLSBEYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24KICAjIEFVRElUX0lOVEVHUklUWV9NRVRBREFUQSAtIE1ldGFkYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24KICAjIEFVRElUX0lOVEVHUklUWV9TVEFUVVMgLSBJbnRlZ3JpdHkgZW5hYmxlIHN0YXR1cwogICMgQVVESVRfSU5URUdSSVRZX0hBU0ggLSBJbnRlZ3JpdHkgSEFTSCB0eXBlCiAgIyBBVURJVF9JTlRFR1JJVFlfUENSIC0gUENSIGludmFsaWRhdGlvbiBtc2dzCiAgIyBBVURJVF9JTlRFR1JJVFlfUlVMRSAtIFBvbGljeSBydWxlCgogICMgVmFyaW91cwoKICAjIEFVRElUX1VTRVIgLSBNZXNzYWdlIGZyb20gdXNlcnNwYWNlIC0tIGRlcHJlY2F0ZWQKICAtIHJlY29yZF90eXBlczogVVNFUgogICAgYWN0aW9uOiBzZW50LW1lc3NhZ2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYWRkcgoKICAjIEFVRElUX1NPRlRXQVJFX1VQREFURSAtIFBhY2thZ2UgbWFuYWdlbWVudAogIC0gcmVjb3JkX3R5cGVzOiBTT0ZUV0FSRV9VUERBVEUKICAgIGFjdGlvbjogcGFja2FnZS11cGRhdGVkCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBwYWNrYWdlCiAgICAgIHR5cGU6IGluZm8K")
+		value, _ = base64.StdEncoding.DecodeString("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCgogIC0gJmVjcy1zZXNzaW9uCiAgICBjYXRlZ29yeTogc2Vzc2lvbgogICAgdHlwZTogaW5mbwogICAgbWFwcGluZ3M6CiAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQoKICAtICZlY3MtaG9zdAogICAgY2F0ZWdvcnk6IGhvc3QKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLXByb2Nlc3MKICAgIGNhdGVnb3J5OiBwcm9jZXNzCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1maWxlCiAgICBjYXRlZ29yeTogZmlsZQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtZHJpdmVyCiAgICBjYXRlZ29yeTogZHJpdmVyCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1uZXR3b3JrCiAgICBjYXRlZ29yeTogbmV0d29yawogICAgdHlwZToKICAgICAgLSBjb25uZWN0aW9uCiAgICAgIC0gaW5mbwoKICAtICZlY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgIG1hcHBpbmdzOgogICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyCiAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyLnRhcmdldAoKICAtICZlY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgICAgIC0gZnJvbTogb2JqZWN0LnByaW1hcnkKICAgICAgICB0bzogZ3JvdXAKCiMgTm9ybWFsaXphdGlvbnMgaXMgYSBsaXN0IG9mIGRlY2xhcmF0aW9ucyBzcGVjaWZ5aW5nIGhvdyB0byBub3JtYWxpemUgdGhlIGRhdGEKIyBjb250YWluZWQgaW4gYW4gZXZlbnQuIFRoZSBub3JtYWxpemF0aW9uIGNhbiBiZSBhcHBsaWVkIGJhc2VkIG9uIHRoZSBzeXNjYWxsCiMgbmFtZSAoZS5nLiBjb25uZWN0LCBvcGVuKSBvciBiYXNlZCBvbiB0aGUgcmVjb3JkIHR5cGUgKGUuZy4gVVNFUl9MT0dJTikuCiMgTm8gdHdvIG5vcm1hbGl6YXRpb25zIGNhbiBhcHBseSB0byB0aGUgc2FtZSBzeXNjYWxsIG9yIHJlY29yZCB0eXBlLiBUaGlzCiMgd2lsbCByZXN1bHQgaW4gYSBmYWlsdXJlIGF0IGxvYWQgdGltZS4KIwojIEVhY2ggbm9ybWFsaXphdGlvbiBzaG91bGQgc3BlY2lmeToKIyAgIGFjdGlvbiAtIHdoYXQgaGFwcGVuZWQKIyAgIGFjdG9yICAtIHdobyBkaWQgdGhpcyBvciB3aG8gdHJpZ2dlcmVkIHRoZSBldmVudAojICAgb2JqZWN0IC0gd2hhdCB3YXMgdGhlICJ0aGluZyIgaW52b2x2ZWQgaW4gdGhlIGFjdGlvbiAoZS5nLiBwcm9jZXNzLCBzb2NrZXQpCiMgICBob3cgICAgLSBob3cgd2FzIHRoZSBhY3Rpb24gcGVyZm9ybWVkIChlLmcuIGV4ZSBvciB0ZXJtaW5hbCkKbm9ybWFsaXphdGlvbnM6CiAgLSBlY3M6ICplY3MtcHJvY2VzcwogICAgc3lzY2FsbHM6CiAgICAgIC0gJyonICMgdGhpcyBpcyBhIGNhdGNoIGFsbAogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjcmVhdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBjcmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGZhbGxvY2F0ZSAtIG1hbmlwdWxhdGUgZmlsZSBzcGFjZQogICAgICAtIGZhbGxvY2F0ZQogICAgICAjIHRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIHRydW5jYXRlCiAgICAgICMgZnRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIGZ0cnVuY2F0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgdGVjaG5pY2FsbHkgeW91IGNhbiB0cnVuY2F0ZSBhIGZpbGUgdG8gdGhlIHNhbWUgbGVuZ3RoCiAgICAgICMgYnV0IHJlZ2FyZGxlc3MsIHdlIGNvbnNpZGVyIHRoaXMgYSBjaGFuZ2UKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIG9wZW4gLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbgogICAgICAjIG9wZW5hdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBvcGVuYXQKICAgICAgIyByZWFkbGluayAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmsKICAgICAgIyByZWFkbGlua2F0IC0gcmVhZCB2YWx1ZSBvZiBhIHN5bWJvbGljIGxpbmsKICAgICAgLSByZWFkbGlua2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiByZWFkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcmVhZCAtIHJlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHJlYWQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHdyb3RlLXRvLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgd3JpdGUgLSB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHdyaXRlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1hdHRyaWJ1dGVzLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIHNldHhhdHRyCiAgICAgICMgZnNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZzZXR4YXR0cgogICAgICAjIGxzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsc2V0eGF0dHIKICAgICAgIyByZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSByZW1vdmV4YXR0cgogICAgICAjIGZyZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSBmcmVtb3ZleGF0dHIKICAgICAgIyBscmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gbHJlbW92ZXhhdHRyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1wZXJtaXNzaW9ucy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBjaG1vZAogICAgICAjIGZjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2QKICAgICAgIyBmY2htb2RhdCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2RhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtb3duZXJzaGlwLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBjaG93bgogICAgICAjIGZjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gZmNob3duCiAgICAgICMgZmNob3duYXQgLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bmF0CiAgICAgICMgbGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBsY2hvd24KICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbG9hZGVkLWtlcm5lbC1tb2R1bGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwcmltYXJ5OiBuYW1lCiAgICByZWNvcmRfdHlwZXM6CiAgICAgIC0gS0VSTl9NT0RVTEUKICAgIHN5c2NhbGxzOgogICAgICAjIGZpbml0X21vZHVsZSAtIGxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZmluaXRfbW9kdWxlCiAgICAgICMgaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGluaXRfbW9kdWxlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWRyaXZlcgogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiB1bmxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGRlbGV0ZV9tb2R1bGUgLSB1bmxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZGVsZXRlX21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNyZWF0ZWQtZGlyZWN0b3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtkaXIgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcgogICAgICAjIG1rZGlyYXQgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcmF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogbW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1vdW50IC0gbW91bnQgZmlsZXN5c3RlbQogICAgICAtIG1vdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyBzaW5jZSBhIG5ldyBtb3VudCBhcHBlYXJzIG9uIHRoZSBzeXN0ZW0KICAgICAgIyB3ZSBjb25zaWRlciB0aGlzIGEgaGlnaC1sZXZlbCAiY3JlYXRpb24iIGV2ZW50CiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHJlbmFtZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwYXRoX2luZGV4OiAyCiAgICBzeXNjYWxsczoKICAgICAgIyByZW5hbWUgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lCiAgICAgICMgcmVuYW1lYXQgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQKICAgICAgIyByZW5hbWVhdDIgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoZWNrZWQtbWV0YWRhdGEtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgYWNjZXNzIC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBhY2Nlc3MKICAgICAgIyBmYWNjZXNzYXQgLSBjaGVjayB1c2VyJ3MgcGVybWlzc2lvbnMgZm9yIGEgZmlsZQogICAgICAtIGZhY2Nlc3NhdAogICAgICAjIGZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBmc3RhdGF0CiAgICAgICMgbmV3ZnN0YXRhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIG5ld2ZzdGF0YXQKICAgICAgIyBzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gc3RhdAogICAgICAjIHN0YXQ2NCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQ2NAogICAgICAjIGZzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXQKICAgICAgIyBsc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGxzdGF0CiAgICAgICMgZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBnZXR4YXR0cgogICAgICAjIGxnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGxnZXR4YXR0cgogICAgICAjIGZnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZnZXR4YXR0cgogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogY2hlY2tlZC1maWxlc3lzdGVtLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBzdGF0ZnMKICAgICAgIyBmc3RhdGZzIC0gZ2V0IGZpbGVzeXN0ZW0gc3RhdGlzdGljcwogICAgICAtIGZzdGF0ZnMKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHN5bWxpbmtlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzeW1saW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rCiAgICAgICMgc3ltbGlua2F0IC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjICJjcmVhdGlvbiIgc2luY2Ugd2UncmUgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0KICAgICAgIyBlbnRyeSBmb3IgdGhlIHN5bWxpbmsKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogdW5tb3VudGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHVtb3VudCAtIHVubW91bnQgZmlsZXN5c3RlbQogICAgICAtIHVtb3VudAogICAgICAjIHVtb3VudDIgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiZGVsZXRpb24iIHRvIG1pcnJvciB0aGUgImNyZWF0aW9uIiBvZiB0aGUgbW91bnQKICAgICAgdHlwZTogZGVsZXRpb24KICAtIGFjdGlvbjogZGVsZXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBybWRpciAtIGRlbGV0ZSBhIGRpcmVjdG9yeQogICAgICAtIHJtZGlyCiAgICAgICMgdW5saW5rIC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rCiAgICAgICMgdW5saW5rYXQgLSBkZWxldGUgYSBuYW1lIGFuZCBwb3NzaWJseSB0aGUgZmlsZSBpdCByZWZlcnMgdG8KICAgICAgLSB1bmxpbmthdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGNoYW5nZWQtdGltZXN0YW1wLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHV0aW1lIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lCiAgICAgICMgdXRpbWVzIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lcwogICAgICAjIGZ1dGltZXNhdCAtIGNoYW5nZSB0aW1lc3RhbXBzIG9mIGEgZmlsZSByZWxhdGl2ZSB0byBhIFwgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGZ1dGltZXNhdAogICAgICAjIGZ1dGltZW5zIC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gZnV0aW1lbnMKICAgICAgIyB1dGltZW5zYXQgLSBjaGFuZ2UgZmlsZSB0aW1lc3RhbXBzIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24KICAgICAgLSB1dGltZW5zYXQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGV4ZWN1dGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGV4ZWN2ZSAtIGV4ZWN1dGUgcHJvZ3JhbQogICAgICAtIGV4ZWN2ZQogICAgICAjIGV4ZWN2ZWF0IC0gZXhlY3V0ZSBwcm9ncmFtIHJlbGF0aXZlIHRvIGEgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGV4ZWN2ZWF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogbGlzdGVuLWZvci1jb25uZWN0aW9ucwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGxpc3Rlbi0gbGlzdGVuIGZvciBjb25uZWN0aW9ucyBvbiBhIHNvY2tldAogICAgICAtIGxpc3RlbgogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGFjY2VwdGVkLWNvbm5lY3Rpb24tZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VwdCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQKICAgICAgIyBhY2NlcHQ0IC0gYWNjZXB0IGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICAgICAtIGFjY2VwdDQKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogYm91bmQtc29ja2V0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgYmluZCAtYmluZCBhIG5hbWUgdG8gYSBzb2NrZXQKICAgICAgLSBiaW5kCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogY29ubmVjdGVkLXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgIC0gY29ubmVjdAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogIC0gYWN0aW9uOiByZWNlaXZlZC1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgcmVjdiAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2CiAgICAgICMgcmVjdmZyb20gLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdmZyb20KICAgICAgIyByZWN2bXNnIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Ztc2cKICAgICAgIyByZWN2bW1zZyAtIHJlY2VpdmUgbXVsdGlwbGUgbWVzc2FnZXMgb24gYSBzb2NrZXQKICAgICAgLSByZWN2bW1zZwogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgLSBhY3Rpb246IHNlbnQtdG8KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBzZW5kIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kCiAgICAgICMgc2VuZHRvIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kdG8KICAgICAgIyBzZW5kbXNnIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kbXNnCiAgICAgICMgc2VuZG1tc2cgLSBzZW5kIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBraWxsZWQtcGlkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAjIGtpbGwgLSBzZW5kIHNpZ25hbCB0byBhIHByb2Nlc3MKICAgICAgLSBraWxsCiAgICAgICMgdGtpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGtpbGwKICAgICAgIyB0Z2tpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGdraWxsCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNoYW5nZWQtaWRlbnRpdHktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR1aWQgLSBzZXQgdXNlciBpZGVudGl0eQogICAgICAtIHNldHVpZAogICAgICAjIHNldGV1aWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRldWlkCiAgICAgICMgc2V0ZnN1aWQgLSBzZXQgdXNlciBpZGVudGl0eSB1c2VkIGZvciBmaWxlc3lzdGVtIGNoZWNrcwogICAgICAtIHNldGZzdWlkCiAgICAgICMgc2V0cmV1aWQgLSBzZXQgcmVhbCBhbmQvb3IgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXVpZAogICAgICAjIHNldGdpZCAtIHNldCBncm91cCBpZGVudGl0eQogICAgICAtIHNldGdpZAogICAgICAjIHNldGVnaWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRlZ2lkCiAgICAgICMgc2V0ZnNnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc2dpZAogICAgICAjIHNldHJlZ2lkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVnaWQKICAgICAgIyBzZXRyZXN1aWQgLSBzZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVzdWlkCiAgICAgICMgc2V0cmVzZ2lkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc2dpZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS10aW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgcmVjb3JkX3R5cGVzOgogICAgICAtIFRJTUVfQURKTlRQVkFMCiAgICAgIC0gVElNRV9JTkpPRkZTRVQKICAgIHN5c2NhbGxzOgogICAgICAjIHNldHRpbWVvZmRheSAtIGdldCAvIHNldCB0aW1lCiAgICAgIC0gc2V0dGltZW9mZGF5CiAgICAgICMgY2xvY2tfc2V0dGltZSAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICAgICAtIGNsb2NrX3NldHRpbWUKICAgICAgIyBzdGltZSAtIHNldCB0aW1lCiAgICAgIC0gc3RpbWUKICAgICAgIyBhZGp0aW1leCAtIHR1bmUga2VybmVsIGNsb2NrCiAgICAgIC0gYWRqdGltZXgKICAgICAgIyBjbG9ja19hZGp0aW1lIC0gc2ltaWxhciB0byBhZGp0aW1leCBidXQgc3BlY2lmaWVzIGEgc3BlY2lmaWMgY2xvY2sKICAgICAgLSBjbG9ja19hZGp0aW1lCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IG1ha2UtZGV2aWNlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIG1rbm9kIC0gY3JlYXRlIGEgc3BlY2lhbCBvciBvcmRpbmFyeSBmaWxlCiAgICAgIC0gbWtub2QKICAgICAgIyBta25vZGF0IC0gY3JlYXRlIGEgc3BlY2lhbCBvciBvcmRpbmFyeSBmaWxlCiAgICAgIC0gbWtub2RhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IGNoYW5nZWQtc3lzdGVtLW5hbWUKICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXRob3N0bmFtZSAtIGdldC9zZXQgaG9zdG5hbWUKICAgICAgLSBzZXRob3N0bmFtZQogICAgICAjIHNldGRvbWFpbm5hbWUgLSBnZXQvc2V0IE5JUyBkb21haW4gbmFtZQogICAgICAtIHNldGRvbWFpbm5hbWUKICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogYWxsb2NhdGVkLW1lbW9yeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtZW1vcnkKICAgIHN5c2NhbGxzOgogICAgICAjIG1tYXAgLSBtYXAgb3IgdW5tYXAgZmlsZXMgb3IgZGV2aWNlcyBpbnRvIG1lbW9yeQogICAgICAtIG1tYXAKICAgICAgIyBtbWFwMiAtIG1hcCBmaWxlcyBvciBkZXZpY2VzIGludG8gbWVtb3J5CiAgICAgIC0gbW1hcDIKICAgICAgIyBicmsgLSBjaGFuZ2UgZGF0YSBzZWdtZW50IHNpemUKICAgICAgLSBicmsKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSBhY3Rpb246IGFkanVzdGVkLXNjaGVkdWxpbmctcG9saWN5LW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogc3lzY2FsbAogICAgc3lzY2FsbHM6CiAgICAgICMgc2NoZWRfc2V0cGFyYW0gLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBhcmFtZXRlcnMKICAgICAgLSBzY2hlZF9zZXRwYXJhbQogICAgICAjIHNjaGVkX3NldHNjaGVkdWxlciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5L3BhcmFtZXRlcnMKICAgICAgLSBzY2hlZF9zZXRzY2hlZHVsZXIKICAgICAgIyBzY2hlZF9zZXRhdHRyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kgYW5kIGF0dHJpYnV0ZXMKICAgICAgLSBzY2hlZF9zZXRhdHRyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCgogICMgQ3VycmVudGx5IHVuaGFuZGxlZAogICMgdGhpcyBsaXN0IGNvbWVzIGZyb20gcGFyc2luZyBsaW51eCBtYW4gcGFnZXMgYXQgaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2RvY3MvbWFuLXBhZ2VzL21hbi1wYWdlcy5naXQKCiAgIyBzaWdhY3Rpb24gLSBleGFtaW5lIGFuZCBjaGFuZ2UgYSBzaWduYWwgYWN0aW9uCiAgIyBydF9zaWdhY3Rpb24gLSBleGFtaW5lIGFuZCBjaGFuZ2UgYSBzaWduYWwgYWN0aW9uCiAgIyBwcmVhZCAtIHJlYWQgZnJvbSBvciB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvciBhdCBhIGdpdmVuIG9mZnNldAogICMgcHdyaXRlIC0gcmVhZCBmcm9tIG9yIHdyaXRlIHRvIGEgZmlsZSBkZXNjcmlwdG9yIGF0IGEgZ2l2ZW4gb2Zmc2V0CiAgIyBzMzkwX2d1YXJkZWRfc3RvcmFnZSAtIG9wZXJhdGlvbnMgd2l0aCB6L0FyY2hpdGVjdHVyZSBndWFyZGVkIHN0b3JhZ2UgZmFjaWxpdHkKICAjIHNjaGVkX2dldGF0dHIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeSBhbmQgYXR0cmlidXRlcwogICMgZ2V0cnVzYWdlIC0gZ2V0IHJlc291cmNlIHVzYWdlCiAgIyBmbG9jayAtIGFwcGx5IG9yIHJlbW92ZSBhbiBhZHZpc29yeSBsb2NrIG9uIGFuIG9wZW4gZmlsZQogICMgcGlkZmRfZ2V0ZmQgLSBvYnRhaW4gYSBkdXBsaWNhdGUgb2YgYW5vdGhlciBwcm9jZXNzJ3MgZmlsZSBkZXNjcmlwdG9yCiAgIyBjbG9ja19uYW5vc2xlZXAgLSBoaWdoLXJlc29sdXRpb24gc2xlZXAgd2l0aCBzcGVjaWZpYWJsZSBjbG9jawogICMgZ2V0cGFnZXNpemUgLSBnZXQgbWVtb3J5IHBhZ2Ugc2l6ZQogICMgcGlkZmRfb3BlbiAtIG9idGFpbiBhIGZpbGUgZGVzY3JpcHRvciB0aGF0IHJlZmVycyB0byBhIHByb2Nlc3MKICAjIHNwbGljZSAtIHNwbGljZSBkYXRhIHRvL2Zyb20gYSBwaXBlCiAgIyBnZXRyZXN1aWQgLSBnZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyL2dyb3VwIElEcwogICMgZ2V0cmVzZ2lkIC0gZ2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlci9ncm91cCBJRHMKICAjIHJlbWFwX2ZpbGVfcGFnZXMgLSBjcmVhdGUgYSBub25saW5lYXIgZmlsZSBtYXBwaW5nCiAgIyBpb19jYW5jZWwgLSBjYW5jZWwgYW4gb3V0c3RhbmRpbmcgYXN5bmNocm9ub3VzIEkvTyBvcGVyYXRpb24KICAjIHByY3RsIC0gb3BlcmF0aW9ucyBvbiBhIHByb2Nlc3Mgb3IgdGhyZWFkCiAgIyBjbG9ja19nZXRyZXMgLSBjbG9jayBhbmQgdGltZSBmdW5jdGlvbnMKICAjIGNsb2NrX2dldHRpbWUgLSBjbG9jayBhbmQgdGltZSBmdW5jdGlvbnMKICAjIGdldGdyb3VwcyAtIGdldC9zZXQgbGlzdCBvZiBzdXBwbGVtZW50YXJ5IGdyb3VwIElEcwogICMgc2V0Z3JvdXBzIC0gZ2V0L3NldCBsaXN0IG9mIHN1cHBsZW1lbnRhcnkgZ3JvdXAgSURzCiAgIyB2bXNwbGljZSAtIHNwbGljZSB1c2VyIHBhZ2VzIHRvL2Zyb20gYSBwaXBlCiAgIyBlcG9sbF9jcmVhdGUgLSBvcGVuIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgZXBvbGxfY3JlYXRlMSAtIG9wZW4gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBwb3NpeF9mYWR2aXNlIC0gcHJlZGVjbGFyZSBhbiBhY2Nlc3MgcGF0dGVybiBmb3IgZmlsZSBkYXRhCiAgIyBzaWd3YWl0aW5mbyAtIHN5bmNocm9ub3VzbHkgd2FpdCBmb3IgcXVldWVkIHNpZ25hbHMKICAjIHNpZ3RpbWVkd2FpdCAtIHN5bmNocm9ub3VzbHkgd2FpdCBmb3IgcXVldWVkIHNpZ25hbHMKICAjIHJ0X3NpZ3RpbWVkd2FpdCAtIHN5bmNocm9ub3VzbHkgd2FpdCBmb3IgcXVldWVkIHNpZ25hbHMKICAjIHNpZ3JldHVybiAtIHJldHVybiBmcm9tIHNpZ25hbCBoYW5kbGVyIGFuZCBjbGVhbnVwIHN0YWNrIGZyYW1lCiAgIyBydF9zaWdyZXR1cm4gLSByZXR1cm4gZnJvbSBzaWduYWwgaGFuZGxlciBhbmQgY2xlYW51cCBzdGFjayBmcmFtZQogICMgZ2V0cmFuZG9tIC0gb2J0YWluIGEgc2VyaWVzIG9mIHJhbmRvbSBieXRlcwogICMga2V5Y3RsIC0gbWFuaXB1bGF0ZSB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHNjaGVkX2dldHNjaGVkdWxlciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5L3BhcmFtZXRlcnMKICAjIG1iaW5kIC0gc2V0IG1lbW9yeSBwb2xpY3kgZm9yIGEgbWVtb3J5IHJhbmdlCiAgIyBnZXRwcmlvcml0eSAtIGdldC9zZXQgcHJvZ3JhbSBzY2hlZHVsaW5nIHByaW9yaXR5CiAgIyBzZXRwcmlvcml0eSAtIGdldC9zZXQgcHJvZ3JhbSBzY2hlZHVsaW5nIHByaW9yaXR5CiAgIyBpbm90aWZ5X2luaXQgLSBpbml0aWFsaXplIGFuIGlub3RpZnkgaW5zdGFuY2UKICAjIGlub3RpZnlfaW5pdDEgLSBpbml0aWFsaXplIGFuIGlub3RpZnkgaW5zdGFuY2UKICAjIHNlbWN0bCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBjb250cm9sIG9wZXJhdGlvbnMKICAjIGdldGhvc3RuYW1lIC0gZ2V0L3NldCBob3N0bmFtZQogICMgcHRyYWNlIC0gcHJvY2VzcyB0cmFjZQogICMgc3lzY3RsIC0gcmVhZC93cml0ZSBzeXN0ZW0gcGFyYW1ldGVycwogICMgZ2V0cGVlcm5hbWUgLSBnZXQgbmFtZSBvZiBjb25uZWN0ZWQgcGVlciBzb2NrZXQKICAjIGZvcmsgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBxdWVyeV9tb2R1bGUgLSBxdWVyeSB0aGUga2VybmVsIGZvciB2YXJpb3VzIGJpdHMgcGVydGFpbmluZyB0byBtb2R1bGVzCiAgIyBpb2N0bF9saXN0IC0gbGlzdCBvZiBpb2N0bCBjYWxscyBpbiBMaW51eC9pMzg2IGtlcm5lbAogICMgbXNnZ2V0IC0gZ2V0IGEgU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBpZGVudGlmaWVyCiAgIyBzcHVfY3JlYXRlIC0gY3JlYXRlIGEgbmV3IHNwdSBjb250ZXh0CiAgIyBzdWJwYWdlX3Byb3QgLSBkZWZpbmUgYSBzdWJwYWdlIHByb3RlY3Rpb24gZm9yIGFuIGFkZHJlc3MgcmFuZ2UKICAjIHF1b3RhY3RsIC0gbWFuaXB1bGF0ZSBkaXNrIHF1b3RhcwogICMgbmZzc2VydmN0bCAtIHN5c2NhbGwgaW50ZXJmYWNlIHRvIGtlcm5lbCBuZnMgZGFlbW9uCiAgIyBvcGVuYXQyIC0gb3BlbiBhbmQgcG9zc2libHkgY3JlYXRlIGEgZmlsZSAoZXh0ZW5kZWQpCiAgIyBnZXRybGltaXQgLSBnZXQvc2V0IHJlc291cmNlIGxpbWl0cwogICMgc2V0cmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHBybGltaXQgLSBnZXQvc2V0IHJlc291cmNlIGxpbWl0cwogICMgdGVlIC0gZHVwbGljYXRpbmcgcGlwZSBjb250ZW50CiAgIyBzaG1nZXQgLSBhbGxvY2F0ZXMgYSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IHNlZ21lbnQKICAjIGNyZWF0ZV9tb2R1bGUgLSBjcmVhdGUgYSBsb2FkYWJsZSBtb2R1bGUgZW50cnkKICAjIGdldHRpbWVvZmRheSAtIGdldCAvIHNldCB0aW1lCiAgIyB0aW1lcl9jcmVhdGUgLSBjcmVhdGUgYSBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgZmFub3RpZnlfbWFyayAtIGFkZCwgcmVtb3ZlLCBvciBtb2RpZnkgYW4gZmFub3RpZnkgbWFyayBvbiBhIGZpbGVzeXN0ZW0gb2JqZWN0CiAgIyBwaXBlIC0gY3JlYXRlIHBpcGUKICAjIHBpcGUyIC0gY3JlYXRlIHBpcGUKICAjIGludHJvIC0gaW50cm9kdWN0aW9uIHRvIHN5c3RlbSBjYWxscwogICMgbG9va3VwX2Rjb29raWUgLSByZXR1cm4gYSBkaXJlY3RvcnkgZW50cnkncyBwYXRoCiAgIyBzeXNmcyAtIGdldCBmaWxlc3lzdGVtIHR5cGUgaW5mb3JtYXRpb24KICAjIHMzOTBfcnVudGltZV9pbnN0ciAtIGVuYWJsZS9kaXNhYmxlIHMzOTAgQ1BVIHJ1bi10aW1lIGluc3RydW1lbnRhdGlvbgogICMgc2V0bnMgLSByZWFzc29jaWF0ZSB0aHJlYWQgd2l0aCBhIG5hbWVzcGFjZQogICMgc2V0X21lbXBvbGljeSAtIHNldCBkZWZhdWx0IE5VTUEgbWVtb3J5IHBvbGljeSBmb3IgYSB0aHJlYWQgYW5kIGl0cyBjaGlsZHJlbgogICMgbmljZSAtIGNoYW5nZSBwcm9jZXNzIHByaW9yaXR5CiAgIyBpb19zZXR1cCAtIGNyZWF0ZSBhbiBhc3luY2hyb25vdXMgSS9PIGNvbnRleHQKICAjIG1pbmNvcmUgLSBkZXRlcm1pbmUgd2hldGhlciBwYWdlcyBhcmUgcmVzaWRlbnQgaW4gbWVtb3J5CiAgIyBpb2N0bF9jb25zb2xlIC0gaW9jdGxzIGZvciBjb25zb2xlIHRlcm1pbmFsIGFuZCB2aXJ0dWFsIGNvbnNvbGVzCiAgIyBwb2xsIC0gd2FpdCBmb3Igc29tZSBldmVudCBvbiBhIGZpbGUgZGVzY3JpcHRvcgogICMgcHBvbGwgLSB3YWl0IGZvciBzb21lIGV2ZW50IG9uIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBjYXBnZXQgLSBzZXQvZ2V0IGNhcGFiaWxpdGllcyBvZiB0aHJlYWQocykKICAjIGNhcHNldCAtIHNldC9nZXQgY2FwYWJpbGl0aWVzIG9mIHRocmVhZChzKQogICMgaW9jdGxfdHR5IC0gaW9jdGxzIGZvciB0ZXJtaW5hbHMgYW5kIHNlcmlhbCBsaW5lcwogICMgaW9wbCAtIGNoYW5nZSBJL08gcHJpdmlsZWdlIGxldmVsCiAgIyBpb19nZXRldmVudHMgLSByZWFkIGFzeW5jaHJvbm91cyBJL08gZXZlbnRzIGZyb20gdGhlIGNvbXBsZXRpb24gcXVldWUKICAjIHByb2Nlc3Nfdm1fcmVhZHYgLSB0cmFuc2ZlciBkYXRhIGJldHdlZW4gcHJvY2VzcyBhZGRyZXNzIHNwYWNlcwogICMgcHJvY2Vzc192bV93cml0ZXYgLSB0cmFuc2ZlciBkYXRhIGJldHdlZW4gcHJvY2VzcyBhZGRyZXNzIHNwYWNlcwogICMgcGNpY29uZmlnX3JlYWQgLSBwY2kgZGV2aWNlIGluZm9ybWF0aW9uIGhhbmRsaW5nCiAgIyBwY2ljb25maWdfd3JpdGUgLSBwY2kgZGV2aWNlIGluZm9ybWF0aW9uIGhhbmRsaW5nCiAgIyBwY2ljb25maWdfaW9iYXNlIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgc2JyayAtIGNoYW5nZSBkYXRhIHNlZ21lbnQgc2l6ZQogICMgc2V0X3RpZF9hZGRyZXNzIC0gc2V0IHBvaW50ZXIgdG8gdGhyZWFkIElECiAgIyBwa2V5X2FsbG9jIC0gYWxsb2NhdGUgb3IgZnJlZSBhIHByb3RlY3Rpb24ga2V5CiAgIyBwa2V5X2ZyZWUgLSBhbGxvY2F0ZSBvciBmcmVlIGEgcHJvdGVjdGlvbiBrZXkKICAjIHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIHBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBrZXhlY19sb2FkIC0gbG9hZCBhIG5ldyBrZXJuZWwgZm9yIGxhdGVyIGV4ZWN1dGlvbgogICMga2V4ZWNfZmlsZV9sb2FkIC0gbG9hZCBhIG5ldyBrZXJuZWwgZm9yIGxhdGVyIGV4ZWN1dGlvbgogICMgcGVyc29uYWxpdHkgLSBzZXQgdGhlIHByb2Nlc3MgZXhlY3V0aW9uIGRvbWFpbgogICMgaW9jdGxfZ2V0ZnNtYXAgLSByZXRyaWV2ZSB0aGUgcGh5c2ljYWwgbGF5b3V0IG9mIHRoZSBmaWxlc3lzdGVtCiAgIyBpbm90aWZ5X3JtX3dhdGNoIC0gcmVtb3ZlIGFuIGV4aXN0aW5nIHdhdGNoIGZyb20gYW4gaW5vdGlmeSBpbnN0YW5jZQogICMgcGVyZl9ldmVudF9vcGVuIC0gc2V0IHVwIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcKICAjIHRpbWVyX2dldG92ZXJydW4gLSBnZXQgb3ZlcnJ1biBjb3VudCBmb3IgYSBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgd2FpdDMgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZSwgQlNEIHN0eWxlCiAgIyB3YWl0NCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlLCBCU0Qgc3R5bGUKICAjIGxpbmsgLSBtYWtlIGEgbmV3IG5hbWUgZm9yIGEgZmlsZQogICMgbGlua2F0IC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAjIHNjaGVkX3JyX2dldF9pbnRlcnZhbCAtIGdldCB0aGUgU0NIRURfUlIgaW50ZXJ2YWwgZm9yIHRoZSBuYW1lZCBwcm9jZXNzCiAgIyBtdW5tYXAgLSBtYXAgb3IgdW5tYXAgZmlsZXMgb3IgZGV2aWNlcyBpbnRvIG1lbW9yeQogICMgc29ja2V0Y2FsbCAtIHNvY2tldCBzeXN0ZW0gY2FsbHMKICAjIG1yZW1hcCAtIHJlbWFwIGEgdmlydHVhbCBtZW1vcnkgYWRkcmVzcwogICMgdmZvcmsgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzIGFuZCBibG9jayBwYXJlbnQKICAjIHNlY2NvbXAgLSBvcGVyYXRlIG9uIFNlY3VyZSBDb21wdXRpbmcgc3RhdGUgb2YgdGhlIHByb2Nlc3MKICAjIHJlcXVlc3Rfa2V5IC0gcmVxdWVzdCBhIGtleSBmcm9tIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgc3lzY2FsbCAtIGluZGlyZWN0IHN5c3RlbSBjYWxsCiAgIyBrY21wIC0gY29tcGFyZSB0d28gcHJvY2Vzc2VzIHRvIGRldGVybWluZSBpZiB0aGV5IHNoYXJlIGEga2VybmVsIHJlc291cmNlCiAgIyByZWFkZGlyIC0gcmVhZCBkaXJlY3RvcnkgZW50cnkKICAjIGlvcGVybSAtIHNldCBwb3J0IGlucHV0L291dHB1dCBwZXJtaXNzaW9ucwogICMgc3B1X3J1biAtIGV4ZWN1dGUgYW4gU1BVIGNvbnRleHQKICAjIHJlYm9vdCAtIHJlYm9vdCBvciBlbmFibGUvZGlzYWJsZSBDdHJsLUFsdC1EZWwKICAjIHJlYWRhaGVhZCAtIGluaXRpYXRlIGZpbGUgcmVhZGFoZWFkIGludG8gcGFnZSBjYWNoZQogICMgc2NoZWRfZ2V0cGFyYW0gLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBhcmFtZXRlcnMKICAjIGFjY3QgLSBzd2l0Y2ggcHJvY2VzcyBhY2NvdW50aW5nIG9uIG9yIG9mZgogICMgc2lnc3VzcGVuZCAtIHdhaXQgZm9yIGEgc2lnbmFsCiAgIyBydF9zaWdzdXNwZW5kIC0gd2FpdCBmb3IgYSBzaWduYWwKICAjIGV4aXRfZ3JvdXAgLSBleGl0IGFsbCB0aHJlYWRzIGluIGEgcHJvY2VzcwogICMgc29ja2V0IC0gY3JlYXRlIGFuIGVuZHBvaW50IGZvciBjb21tdW5pY2F0aW9uCiAgIyBpb2N0bF91c2VyZmF1bHRmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgaGFuZGxpbmcgcGFnZSBmYXVsdHMgaW4gdXNlciBzcGFjZQogICMgc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAtIGdldCBzdGF0aWMgcHJpb3JpdHkgcmFuZ2UKICAjIHNjaGVkX2dldF9wcmlvcml0eV9taW4gIC0gZ2V0IHN0YXRpYyBwcmlvcml0eSByYW5nZQogICMgZ2V0ZGVudHMgLSBnZXQgZGlyZWN0b3J5IGVudHJpZXMKICAjIGdldGRlbnRzNjQgLSBnZXQgZGlyZWN0b3J5IGVudHJpZXMKICAjIHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIHBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBhbGxvY19odWdlcGFnZXMgLSBhbGxvY2F0ZSBvciBmcmVlIGh1Z2UgcGFnZXMKICAjIGZyZWVfaHVnZXBhZ2VzIC0gYWxsb2NhdGUgb3IgZnJlZSBodWdlIHBhZ2VzCiAgIyBmc3luYyAtIHN5bmNocm9uaXplIGEgZmlsZSdzIGluLWNvcmUgc3RhdGUgd2l0aCBzdG9yYWdlIGRldmljZQogICMgZmRhdGFzeW5jIC0gc3luY2hyb25pemUgYSBmaWxlJ3MgaW4tY29yZSBzdGF0ZSB3aXRoIHN0b3JhZ2UgZGV2aWNlCiAgIyBzeXNjYWxscyAtIExpbnV4IHN5c3RlbSBjYWxscwogICMgbWVtZmRfY3JlYXRlIC0gY3JlYXRlIGFuIGFub255bW91cyBmaWxlCiAgIyBtb2RpZnlfbGR0IC0gZ2V0IG9yIHNldCBhIHBlci1wcm9jZXNzIExEVCBlbnRyeQogICMgZ2V0X2tlcm5lbF9zeW1zIC0gcmV0cmlldmUgZXhwb3J0ZWQga2VybmVsIGFuZCBtb2R1bGUgc3ltYm9scwogICMgbHNlZWsgLSByZXBvc2l0aW9uIHJlYWQvd3JpdGUgZmlsZSBvZmZzZXQKICAjIHNobWF0IC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBvcGVyYXRpb25zCiAgIyBzaG1kdCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgb3BlcmF0aW9ucwogICMgdGltZXJfZGVsZXRlIC0gZGVsZXRlIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHBlcmZtb25jdGwgLSBpbnRlcmZhY2UgdG8gSUEtNjQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB1bml0CiAgIyBtb3ZlX3BhZ2VzIC0gbW92ZSBpbmRpdmlkdWFsIHBhZ2VzIG9mIGEgcHJvY2VzcyB0byBhbm90aGVyIG5vZGUKICAjIGNoZGlyIC0gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5CiAgIyBmY2hkaXIgLSBjaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkKICAjIHRpbWUgLSBnZXQgdGltZSBpbiBzZWNvbmRzCiAgIyBfZXhpdCAtIHRlcm1pbmF0ZSB0aGUgY2FsbGluZyBwcm9jZXNzCiAgIyBfRXhpdCAtIHRlcm1pbmF0ZSB0aGUgY2FsbGluZyBwcm9jZXNzCiAgIyBzMzkwX3N0aHlpIC0gZW11bGF0ZSBTVEhZSSBpbnN0cnVjdGlvbgogICMgaW9fc3VibWl0IC0gc3VibWl0IGFzeW5jaHJvbm91cyBJL08gYmxvY2tzIGZvciBwcm9jZXNzaW5nCiAgIyBtbG9jayAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIG1sb2NrMiAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIG11bmxvY2sgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtbG9ja2FsbCAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIG11bmxvY2thbGwgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyB1bWFzayAtIHNldCBmaWxlIG1vZGUgY3JlYXRpb24gbWFzawogICMgYXJjaF9wcmN0bCAtIHNldCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdGhyZWFkIHN0YXRlCiAgIyB1c2VsaWIgLSBsb2FkIHNoYXJlZCBsaWJyYXJ5CiAgIyBzZW5kZmlsZSAtIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBmaWxlIGRlc2NyaXB0b3JzCiAgIyBzaG1jdGwgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IGNvbnRyb2wKICAjIGVwb2xsX3dhaXQgLSB3YWl0IGZvciBhbiBJL08gZXZlbnQgb24gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBlcG9sbF9wd2FpdCAtIHdhaXQgZm9yIGFuIEkvTyBldmVudCBvbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIHNpZ2FsdHN0YWNrIC0gc2V0IGFuZC9vciBnZXQgc2lnbmFsIHN0YWNrIGNvbnRleHQKICAjIGlvY3RsIC0gY29udHJvbCBkZXZpY2UKICAjIHNpZ25hbGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBhY2NlcHRpbmcgc2lnbmFscwogICMgdW5zaGFyZSAtIGRpc2Fzc29jaWF0ZSBwYXJ0cyBvZiB0aGUgcHJvY2VzcyBleGVjdXRpb24gY29udGV4dAogICMgY2hyb290IC0gY2hhbmdlIHJvb3QgZGlyZWN0b3J5CiAgIyBtYWR2aXNlIC0gZ2l2ZSBhZHZpY2UgYWJvdXQgdXNlIG9mIG1lbW9yeQogICMgZ2V0dGlkIC0gZ2V0IHRocmVhZCBpZGVudGlmaWNhdGlvbgogICMgZ2V0c29ja25hbWUgLSBnZXQgc29ja2V0IG5hbWUKICAjIGlvX2Rlc3Ryb3kgLSBkZXN0cm95IGFuIGFzeW5jaHJvbm91cyBJL08gY29udGV4dAogICMgc2V0dXAgLSBzZXR1cCBkZXZpY2VzIGFuZCBmaWxlc3lzdGVtcywgbW91bnQgcm9vdCBmaWxlc3lzdGVtCiAgIyBudHBfYWRqdGltZSAtIHR1bmUga2VybmVsIGNsb2NrCiAgIyBzZW1nZXQgLSBnZXQgYSBTeXN0ZW0gViBzZW1hcGhvcmUgc2V0IGlkZW50aWZpZXIKICAjIGdldHVpZCAtIGdldCB1c2VyIGlkZW50aXR5CiAgIyBnZXRldWlkIC0gZ2V0IHVzZXIgaWRlbnRpdHkKICAjIF9zeXNjYWxsIC0gaW52b2tpbmcgYSBzeXN0ZW0gY2FsbCB3aXRob3V0IGxpYnJhcnkgc3VwcG9ydCAoT0JTT0xFVEUpCiAgIyBzY2hlZF9zZXRhZmZpbml0eSAtIFwgc2V0IGFuZCBnZXQgYSB0aHJlYWQncyBDUFUgYWZmaW5pdHkgbWFzawogICMgc2NoZWRfZ2V0YWZmaW5pdHkgLSBcIHNldCBhbmQgZ2V0IGEgdGhyZWFkJ3MgQ1BVIGFmZmluaXR5IG1hc2sKICAjIGNhY2hlZmx1c2ggLSBmbHVzaCBjb250ZW50cyBvZiBpbnN0cnVjdGlvbiBhbmQvb3IgZGF0YSBjYWNoZQogICMgcGl2b3Rfcm9vdCAtIGNoYW5nZSB0aGUgcm9vdCBtb3VudAogICMgbXNnY3RsIC0gU3lzdGVtIFYgbWVzc2FnZSBjb250cm9sIG9wZXJhdGlvbnMKICAjIGlvY3RsX2ZhdCAtIG1hbmlwdWxhdGluZyB0aGUgRkFUIGZpbGVzeXN0ZW0KICAjIHNldHBnaWQgLSBzZXQvZ2V0IHByb2Nlc3MgZ3JvdXAKICAjIGdldHBnaWQgLSBzZXQvZ2V0IHByb2Nlc3MgZ3JvdXAKICAjIHNldHBncnAgLSBzZXQvZ2V0IHByb2Nlc3MgZ3JvdXAKICAjIGdldHBncnAgLSBzZXQvZ2V0IHByb2Nlc3MgZ3JvdXAKICAjIHNvY2tldHBhaXIgLSBjcmVhdGUgYSBwYWlyIG9mIGNvbm5lY3RlZCBzb2NrZXRzCiAgIyBiZGZsdXNoIC0gc3RhcnQsIGZsdXNoLCBvciB0dW5lIGJ1ZmZlci1kaXJ0eS1mbHVzaCBkYWVtb24KICAjIGFsYXJtIC0gc2V0IGFuIGFsYXJtIGNsb2NrIGZvciBkZWxpdmVyeSBvZiBhIHNpZ25hbAogICMgdGltZXJfc2V0dGltZSAtIGFybS9kaXNhcm0gYW5kIGZldGNoIHN0YXRlIG9mIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyB0aW1lcl9nZXR0aW1lIC0gYXJtL2Rpc2FybSBhbmQgZmV0Y2ggc3RhdGUgb2YgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIGFkZF9rZXkgLSBhZGQgYSBrZXkgdG8gdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBydF9zaWdxdWV1ZWluZm8gLSBxdWV1ZSBhIHNpZ25hbCBhbmQgZGF0YQogICMgcnRfdGdzaWdxdWV1ZWluZm8gLSBxdWV1ZSBhIHNpZ25hbCBhbmQgZGF0YQogICMgdXNlcmZhdWx0ZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIGluIHVzZXIgc3BhY2UKICAjIHNlbW9wIC0gU3lzdGVtIFYgc2VtYXBob3JlIG9wZXJhdGlvbnMKICAjIHNlbXRpbWVkb3AgLSBTeXN0ZW0gViBzZW1hcGhvcmUgb3BlcmF0aW9ucwogICMgZ2V0Z2lkIC0gZ2V0IGdyb3VwIGlkZW50aXR5CiAgIyBnZXRlZ2lkIC0gZ2V0IGdyb3VwIGlkZW50aXR5CiAgIyBnZXRwaWQgLSBnZXQgcHJvY2VzcyBpZGVudGlmaWNhdGlvbgogICMgZ2V0cHBpZCAtIGdldCBwcm9jZXNzIGlkZW50aWZpY2F0aW9uCiAgIyBzaWdwcm9jbWFzayAtIGV4YW1pbmUgYW5kIGNoYW5nZSBibG9ja2VkIHNpZ25hbHMKICAjIHJ0X3NpZ3Byb2NtYXNrIC0gZXhhbWluZSBhbmQgY2hhbmdlIGJsb2NrZWQgc2lnbmFscwogICMgdW5hbWUgLSBnZXQgbmFtZSBhbmQgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBrZXJuZWwKICAjIHN0YXR4IC0gZ2V0IGZpbGUgc3RhdHVzIChleHRlbmRlZCkKICAjIGlvY3RsX2ZpY2xvbmVyYW5nZSAtIHNoYXJlIHNvbWUgdGhlIGRhdGEgb2Ygb25lIGZpbGUgd2l0aCBhbm90aGVyIGZpbGUKICAjIGlvY3RsX2ZpY2xvbmUgLSBzaGFyZSBzb21lIHRoZSBkYXRhIG9mIG9uZSBmaWxlIHdpdGggYW5vdGhlciBmaWxlCiAgIyBtcV9nZXRzZXRhdHRyIC0gZ2V0L3NldCBtZXNzYWdlIHF1ZXVlIGF0dHJpYnV0ZXMKICAjIGlvcHJpb19nZXQgLSBnZXQvc2V0IEkvTyBzY2hlZHVsaW5nIGNsYXNzIGFuZCBwcmlvcml0eQogICMgaW9wcmlvX3NldCAtIGdldC9zZXQgSS9PIHNjaGVkdWxpbmcgY2xhc3MgYW5kIHByaW9yaXR5CiAgIyBlcG9sbF9jdGwgLSBjb250cm9sIGludGVyZmFjZSBmb3IgYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBzeW5jIC0gY29tbWl0IGZpbGVzeXN0ZW0gY2FjaGVzIHRvIGRpc2sKICAjIHN5bmNmcyAtIGNvbW1pdCBmaWxlc3lzdGVtIGNhY2hlcyB0byBkaXNrCiAgIyBzZXRzaWQgLSBjcmVhdGVzIGEgc2Vzc2lvbiBhbmQgc2V0cyB0aGUgcHJvY2VzcyBncm91cCBJRAogICMgc2h1dGRvd24gLSBzaHV0IGRvd24gcGFydCBvZiBhIGZ1bGwtZHVwbGV4IGNvbm5lY3Rpb24KICAjIGdldHNpZCAtIGdldCBzZXNzaW9uIElECiAgIyBnZXRfdGhyZWFkX2FyZWEgLSBtYW5pcHVsYXRlIHRocmVhZC1sb2NhbCBzdG9yYWdlIGluZm9ybWF0aW9uCiAgIyBzZXRfdGhyZWFkX2FyZWEgLSBtYW5pcHVsYXRlIHRocmVhZC1sb2NhbCBzdG9yYWdlIGluZm9ybWF0aW9uCiAgIyB0aW1lcmZkX2NyZWF0ZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgdGltZXJmZF9zZXR0aW1lIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyB0aW1lcmZkX2dldHRpbWUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIGlvY3RsX2ZpZGVkdXBlcmFuZ2UgLSBzaGFyZSBzb21lIHRoZSBkYXRhIG9mIG9uZSBmaWxlIHdpdGggYW5vdGhlciBmaWxlCiAgIyBuYW1lX3RvX2hhbmRsZV9hdCAtIG9idGFpbiBoYW5kbGUgZm9yIGEgcGF0aG5hbWUgYW5kIG9wZW4gZmlsZSB2aWEgYSBoYW5kbGUKICAjIG9wZW5fYnlfaGFuZGxlX2F0IC0gb2J0YWluIGhhbmRsZSBmb3IgYSBwYXRobmFtZSBhbmQgb3BlbiBmaWxlIHZpYSBhIGhhbmRsZQogICMgZnV0ZXggLSBmYXN0IHVzZXItc3BhY2UgbG9ja2luZwogICMgaW9jdGxfbnMgLSBpb2N0bCgpIG9wZXJhdGlvbnMgZm9yIExpbnV4IG5hbWVzcGFjZXMKICAjIHBpZGZkX3NlbmRfc2lnbmFsIC0gc2VuZCBhIHNpZ25hbCB0byBhIHByb2Nlc3Mgc3BlY2lmaWVkIGJ5IGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBjbG9uZSAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIF9fY2xvbmUyIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgY2xvbmUzIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgdGltZXMgLSBnZXQgcHJvY2VzcyB0aW1lcwogICMgc3lzaW5mbyAtIHJldHVybiBzeXN0ZW0gaW5mb3JtYXRpb24KICAjIGlwYyAtIFN5c3RlbSBWIElQQyBzeXN0ZW0gY2FsbHMKICAjIGV2ZW50ZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGV2ZW50IG5vdGlmaWNhdGlvbgogICMgd2FpdCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlCiAgIyB3YWl0cGlkIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUKICAjIHdhaXRpZCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlCiAgIyBnZXRkb21haW5uYW1lIC0gZ2V0L3NldCBOSVMgZG9tYWluIG5hbWUKICAjIGlkbGUgLSBtYWtlIHByb2Nlc3MgMCBpZGxlCiAgIyBpbm90aWZ5X2FkZF93YXRjaCAtIGFkZCBhIHdhdGNoIHRvIGFuIGluaXRpYWxpemVkIGlub3RpZnkgaW5zdGFuY2UKICAjIGdldF9tZW1wb2xpY3kgLSByZXRyaWV2ZSBOVU1BIG1lbW9yeSBwb2xpY3kgZm9yIGEgdGhyZWFkCiAgIyBicGYgLSBwZXJmb3JtIGEgY29tbWFuZCBvbiBhbiBleHRlbmRlZCBCUEYgbWFwIG9yIHByb2dyYW0KICAjIGdldHNvY2tvcHQgLSBnZXQgYW5kIHNldCBvcHRpb25zIG9uIHNvY2tldHMKICAjIHNldHNvY2tvcHQgLSBnZXQgYW5kIHNldCBvcHRpb25zIG9uIHNvY2tldHMKICAjIGdldGl0aW1lciAtIGdldCBvciBzZXQgdmFsdWUgb2YgYW4gaW50ZXJ2YWwgdGltZXIKICAjIHNldGl0aW1lciAtIGdldCBvciBzZXQgdmFsdWUgb2YgYW4gaW50ZXJ2YWwgdGltZXIKICAjIG1lbWJhcnJpZXIgLSBpc3N1ZSBtZW1vcnkgYmFycmllcnMgb24gYSBzZXQgb2YgdGhyZWFkcwogICMgbXByb3RlY3QgLSBzZXQgcHJvdGVjdGlvbiBvbiBhIHJlZ2lvbiBvZiBtZW1vcnkKICAjIHBrZXlfbXByb3RlY3QgLSBzZXQgcHJvdGVjdGlvbiBvbiBhIHJlZ2lvbiBvZiBtZW1vcnkKICAjIGdldGNwdSAtIGRldGVybWluZSBDUFUgYW5kIE5VTUEgbm9kZSBvbiB3aGljaCB0aGUgY2FsbGluZyB0aHJlYWQgaXMgcnVubmluZwogICMgaW9jdGxfZnNsYWJlbCAtIGdldCBvciBzZXQgYSBmaWxlc3lzdGVtIGxhYmVsCiAgIyBsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgbGxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBmbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIF9sbHNlZWsgLSByZXBvc2l0aW9uIHJlYWQvd3JpdGUgZmlsZSBvZmZzZXQKICAjIGZjbnRsIC0gbWFuaXB1bGF0ZSBmaWxlIGRlc2NyaXB0b3IKICAjIHVzdGF0IC0gZ2V0IGZpbGVzeXN0ZW0gc3RhdGlzdGljcwogICMgc2lnbmFsIC0gQU5TSSBDIHNpZ25hbCBoYW5kbGluZwogICMgbmFub3NsZWVwIC0gaGlnaC1yZXNvbHV0aW9uIHNsZWVwCiAgIyBjb25uZWN0IC0gaW5pdGlhdGUgYSBjb25uZWN0aW9uIG9uIGEgc29ja2V0CiAgIyB2bTg2b2xkIC0gZW50ZXIgdmlydHVhbCA4MDg2IG1vZGUKICAjIHZtODYgLSBlbnRlciB2aXJ0dWFsIDgwODYgbW9kZQogICMgZmFub3RpZnlfaW5pdCAtIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBmYW5vdGlmeSBncm91cAogICMgbWlncmF0ZV9wYWdlcyAtIG1vdmUgYWxsIHBhZ2VzIGluIGEgcHJvY2VzcyB0byBhbm90aGVyIHNldCBvZiBub2RlcwogICMgcmVzdGFydF9zeXNjYWxsIC0gcmVzdGFydCBhIHN5c3RlbSBjYWxsIGFmdGVyIGludGVycnVwdGlvbiBieSBhIHN0b3Agc2lnbmFsCiAgIyBjbG9zZSAtIGNsb3NlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBtc2dyY3YgLSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIG9wZXJhdGlvbnMKICAjIG1zZ3NuZCAtIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgb3BlcmF0aW9ucwogICMgcmVhZHYgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyB3cml0ZXYgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwcmVhZHYgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwd3JpdGV2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHJlYWR2MiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHB3cml0ZXYyIC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgc3lzbG9nIC0gcmVhZCBhbmQvb3IgY2xlYXIga2VybmVsIG1lc3NhZ2UgcmluZyBidWZmZXI7IHNldCBjb25zb2xlX2xvZ2xldmVsCiAgIyBrbG9nY3RsIC0gcmVhZCBhbmQvb3IgY2xlYXIga2VybmVsIG1lc3NhZ2UgcmluZyBidWZmZXI7IHNldCBjb25zb2xlX2xvZ2xldmVsCiAgIyBzY2hlZF95aWVsZCAtIHlpZWxkIHRoZSBwcm9jZXNzb3IKICAjIHZoYW5ndXAgLSB2aXJ0dWFsbHkgaGFuZ3VwIHRoZSBjdXJyZW50IHRlcm1pbmFsCiAgIyBpb2N0bF9pZmxhZ3MgLSBpb2N0bCgpIG9wZXJhdGlvbnMgZm9yIGlub2RlIGZsYWdzCiAgIyBzZ2V0bWFzayAtIG1hbmlwdWxhdGlvbiBvZiBzaWduYWwgbWFzayAob2Jzb2xldGUpCiAgIyBzc2V0bWFzayAtIG1hbmlwdWxhdGlvbiBvZiBzaWduYWwgbWFzayAob2Jzb2xldGUpCiAgIyBzeW5jX2ZpbGVfcmFuZ2UgLSBzeW5jIGEgZmlsZSBzZWdtZW50IHdpdGggZGlzawogICMgY29weV9maWxlX3JhbmdlIC0gQ29weSBhIHJhbmdlIG9mIGRhdGEgZnJvbSBvbmUgZmlsZSB0byBhbm90aGVyCiAgIyBzaWdwZW5kaW5nIC0gZXhhbWluZSBwZW5kaW5nIHNpZ25hbHMKICAjIHJ0X3NpZ3BlbmRpbmcgLSBleGFtaW5lIHBlbmRpbmcgc2lnbmFscwogICMgZ2V0dW53aW5kIC0gY29weSB0aGUgdW53aW5kIGRhdGEgdG8gY2FsbGVyJ3MgYnVmZmVyCiAgIyBtc3luYyAtIHN5bmNocm9uaXplIGEgZmlsZSB3aXRoIGEgbWVtb3J5IG1hcAogICMgZ2V0X3JvYnVzdF9saXN0IC0gZ2V0L3NldCBsaXN0IG9mIHJvYnVzdCBmdXRleGVzCiAgIyBzZXRfcm9idXN0X2xpc3QgLSBnZXQvc2V0IGxpc3Qgb2Ygcm9idXN0IGZ1dGV4ZXMKICAjIGR1cCAtIGR1cGxpY2F0ZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgZHVwMiAtIGR1cGxpY2F0ZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgZHVwMyAtIGR1cGxpY2F0ZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgczM5MF9wY2lfbW1pb193cml0ZSAtIHRyYW5zZmVyIGRhdGEgdG8vZnJvbSBQQ0kgTU1JTyBtZW1vcnkgcGFnZQogICMgczM5MF9wY2lfbW1pb19yZWFkIC0gdHJhbnNmZXIgZGF0YSB0by9mcm9tIFBDSSBNTUlPIG1lbW9yeSBwYWdlCiAgIyBwYXVzZSAtIHdhaXQgZm9yIHNpZ25hbAogICMgc3dhcG9uIC0gc3RhcnQvc3RvcCBzd2FwcGluZyB0byBmaWxlL2RldmljZQogICMgc3dhcG9mZiAtIHN0YXJ0L3N0b3Agc3dhcHBpbmcgdG8gZmlsZS9kZXZpY2UKCiAgIyBSZWNvcmQgdHlwZSBub3JtYWxpemF0aW9ucwogICMgVXNlZnVsIGxpbmtzOgogICMgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3RvcnZhbGRzL2xpbnV4L3Y0LjE2L2luY2x1ZGUvdWFwaS9saW51eC9hdWRpdC5oCiAgIyBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbGludXgtYXVkaXQvYXVkaXQtdXNlcnNwYWNlLzRkOTMzMzAxYjE4MzVjYWZhMDhiOWU5ZWY3MDVjOGZiNmM5NmNiNjIvbGliL2xpYmF1ZGl0LmgKICAjIGh0dHBzOi8vd3d3LmVsYXN0aWMuY28vZ3VpZGUvZW4vZWNzL2N1cnJlbnQvZWNzLWFsbG93ZWQtdmFsdWVzLWV2ZW50LWNhdGVnb3J5Lmh0bWwKCiAgIyBJQU0gcmVsYXRlZCBldmVudHMKCiAgIyBBVURJVF9BQ0NUX0xPQ0sgLSBVc2VyJ3MgYWNjb3VudCBsb2NrZWQgYnkgYWRtaW4KICAtIHJlY29yZF90eXBlczogQUNDVF9MT0NLCiAgICBhY3Rpb246IGxvY2tlZC1hY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gaW5mbwogICMgQVVESVRfQUNDVF9VTkxPQ0sgLSBVc2VyJ3MgYWNjb3VudCB1bmxvY2tlZCBieSBhZG1pbgogIC0gcmVjb3JkX3R5cGVzOiBBQ0NUX1VOTE9DSwogICAgYWN0aW9uOiB1bmxvY2tlZC1hY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gaW5mbwogICMgQVVESVRfQUREX0dST1VQIC0gR3JvdXAgYWNjb3VudCBhZGRlZAogIC0gcmVjb3JkX3R5cGVzOiBBRERfR1JPVVAKICAgIGFjdGlvbjogYWRkZWQtZ3JvdXAtYWNjb3VudC10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6IFsqZWNzLWlhbSwgKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3NdCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY3JlYXRpb24KCiAgIyBBVURJVF9BRERfVVNFUiAtIFVzZXIgYWNjb3VudCBhZGRlZAogIC0gcmVjb3JkX3R5cGVzOiBBRERfVVNFUgogICAgYWN0aW9uOiBhZGRlZC11c2VyLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiBbKmVjcy1pYW0sICplY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3NdCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjcmVhdGlvbgogICMgQVVESVRfREVMX0dST1VQIC0gR3JvdXAgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9HUk9VUAogICAgYWN0aW9uOiBkZWxldGVkLWdyb3VwLWFjY291bnQtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6IFsqZWNzLWlhbSwgKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3NdCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gZGVsZXRpb24KICAjIEFVRElUX0RFTF9VU0VSIC0gVXNlciBhY2NvdW50IGRlbGV0ZWQKICAtIHJlY29yZF90eXBlczogREVMX1VTRVIKICAgIGFjdGlvbjogZGVsZXRlZC11c2VyLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiBbKmVjcy1pYW0sICplY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3NdCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBkZWxldGlvbgogICMgQVVESVRfR1JQX01HTVQgLSBHcm91cCBhY2NvdW50IGF0dHIgd2FzIG1vZGlmaWVkCiAgLSByZWNvcmRfdHlwZXM6IEdSUF9NR01UCiAgICBhY3Rpb246IG1vZGlmaWVkLWdyb3VwLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogZ3JvdXAKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICMgQVVESVRfUk9MRV9BU1NJR04gLSBBZG1pbiBhc3NpZ25lZCB1c2VyIHRvIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9BU1NJR04KICAgIGFjdGlvbjogYXNzaWduZWQtdXNlci1yb2xlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9NT0RJRlkgLSBBZG1pbiBtb2RpZmllZCBhIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9NT0RJRlkKICAgIGFjdGlvbjogbW9kaWZpZWQtcm9sZQogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9SRU1PVkUgLSBBZG1pbiByZW1vdmVkIHVzZXIgZnJvbSByb2xlCiAgLSByZWNvcmRfdHlwZXM6IFJPTEVfUkVNT1ZFCiAgICBhY3Rpb246IHJlbW92ZWQtdXNlci1yb2xlLWZyb20KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9VU0VSX01HTVQgLSBVc2VyIGFjY3QgYXR0cmlidXRlIGNoYW5nZQogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9NR01UCiAgICBhY3Rpb246IG1vZGlmaWVkLXVzZXItYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogdXNlci50YXJnZXQKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICMgQVVESVRfVVNFUl9DSEFVVEhUT0sgLSBVc2VyIGFjY3QgcGFzc3dvcmQgb3IgcGluIGNoYW5nZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQ0hBVVRIVE9LCiAgICBhY3Rpb246IGNoYW5nZWQtcGFzc3dvcmQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAgICAgbWFwcGluZ3M6CiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogdXNlci50YXJnZXQKCiAgIyBBVURJVF9HUlBfQ0hBVVRIVE9LIC0gR3JvdXAgYWNjdCBwYXNzd29yZCBvciBwaW4gY2hhbmdlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogR1JQX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLWdyb3VwLXBhc3N3b3JkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFjY3QKICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICAgIHRvOiBncm91cAoKICAjIEF1dGhlbnRpY2F0aW9uIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQ1JFRF9BQ1EgLSBVc2VyIGNyZWRlbnRpYWwgYWNxdWlyZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfQUNRCiAgICBhY3Rpb246IGFjcXVpcmVkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfQ1JFRF9ESVNQIC0gVXNlciBjcmVkZW50aWFsIGRpc3Bvc2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX0RJU1AKICAgIGFjdGlvbjogZGlzcG9zZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9DUkVEX1JFRlIgLSBVc2VyIGNyZWRlbnRpYWwgcmVmcmVzaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX1JFRlIKICAgIGFjdGlvbjogcmVmcmVzaGVkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfR1JQX0FVVEggLSBBdXRoZW50aWNhdGlvbiBmb3IgZ3JvdXAgcGFzc3dvcmQKICAtIHJlY29yZF90eXBlczogR1JQX0FVVEgKICAgIGFjdGlvbjogYXV0aGVudGljYXRlZC10by1ncm91cAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0xPR0lOIC0gRGVmaW5lIHRoZSBsb2dpbiBpZCBhbmQgaW5mb3JtYXRpb24KICAtIHJlY29yZF90eXBlczogTE9HSU4KICAgIGFjdGlvbjogY2hhbmdlZC1sb2dpbi1pZC10bwogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogW29sZF9hdWlkLCBvbGQtYXVpZF0KICAgICAgc2Vjb25kYXJ5OiB1aWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW25ldy1hdWlkLCBuZXdfYXVpZCwgYXVpZF0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogc3RhcnQKICAgICAgbWFwcGluZ3M6CiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgIyBBVURJVF9VU0VSX0FDQ1QgLSBVc2VyIHN5c3RlbSBhY2Nlc3MgYXV0aG9yaXphdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9BQ0NUCiAgICBhY3Rpb246IHdhcy1hdXRob3JpemVkCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9BVVRIIC0gVXNlciBzeXN0ZW0gYWNjZXNzIGF1dGhlbnRpY2F0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0FVVEgKICAgIGFjdGlvbjogYXV0aGVudGljYXRlZAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfRU5EIC0gVXNlciBzZXNzaW9uIGVuZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FTkQKICAgIGFjdGlvbjogZW5kZWQtc2Vzc2lvbgogICAgZWNzOgogICAgICA8PDogKmVjcy1zZXNzaW9uCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfVVNFUl9FUlIgLSBVc2VyIGFjY3Qgc3RhdGUgZXJyb3IKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfRVJSCiAgICBhY3Rpb246IGVycm9yCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfTE9HSU4gLSBVc2VyIGhhcyBsb2dnZWQgaW4KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfTE9HSU4KICAgIGFjdGlvbjogbG9nZ2VkLWluCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9VU0VSX0xPR09VVCAtIFVzZXIgaGFzIGxvZ2dlZCBvdXQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfTE9HT1VUCiAgICBhY3Rpb246IGxvZ2dlZC1vdXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtYXV0aAogICAgICB0eXBlOiBlbmQKICAjIEFVRElUX1VTRVJfUk9MRV9DSEFOR0UgLSBVc2VyIGNoYW5nZWQgdG8gYSBuZXcgcm9sZQogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9ST0xFX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLXJvbGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogc2VsZWN0ZWQtY29udGV4dAogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAjIEFVRElUX1VTRVJfU1RBUlQgLSBVc2VyIHNlc3Npb24gc3RhcnQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfU1RBUlQKICAgIGFjdGlvbjogc3RhcnRlZC1zZXNzaW9uCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOgogICAgICA8PDogKmVjcy1zZXNzaW9uCiAgICAgIHR5cGU6IHN0YXJ0CgogICMgSG9zdCB2aXJ0dWFsaXphdGlvbiBldmVudHMKCiAgIyBBVURJVF9WSVJUX0NPTlRST0wgLSBTdGFydCwgUGF1c2UsIFN0b3AgVk0KICAtIHJlY29yZF90eXBlczogVklSVF9DT05UUk9MCiAgICBhY3Rpb246IGlzc3VlZC12bS1jb250cm9sCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wCiAgICAgIHNlY29uZGFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9DUkVBVEUgLSBDcmVhdGlvbiBvZiBndWVzdCBpbWFnZQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0NSRUFURQogICAgYWN0aW9uOiBjcmVhdGVkLXZtLWltYWdlCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9ERVNUUk9ZIC0gRGVzdHJ1Y3Rpb24gb2YgZ3Vlc3QgaW1hZ2UKICAtIHJlY29yZF90eXBlczogVklSVF9ERVNUUk9ZCiAgICBhY3Rpb246IGRlbGV0ZWQtdm0taW1hZ2UKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0lOVEVHUklUWV9DSEVDSyAtIEd1ZXN0IGludGVncml0eSByZXN1bHRzCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfSU5URUdSSVRZX0NIRUNLCiAgICBhY3Rpb246IGNoZWNrZWQtaW50ZWdyaXR5LW9mCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NQUNISU5FX0lEIC0gQmluZGluZyBvZiBsYWJlbCB0byBWTQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01BQ0hJTkVfSUQKICAgIGFjdGlvbjogYXNzaWduZWQtdm0taWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NSUdSQVRFX0lOIC0gSW5ib3VuZCBndWVzdCBtaWdyYXRpb24gaW5mbwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01JR1JBVEVfSU4KICAgIGFjdGlvbjogbWlncmF0ZWQtdm0tZnJvbQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUlHUkFURV9PVVQgLSBPdXRib3VuZCBndWVzdCBtaWdyYXRpb24gaW5mbwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01JR1JBVEVfT1VUCiAgICBhY3Rpb246IG1pZ3JhdGVkLXZtLXRvCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9SRVNPVVJDRSAtIFJlc291cmNlIGFzc2lnbm1lbnQKICAtIHJlY29yZF90eXBlczogVklSVF9SRVNPVVJDRQogICAgYWN0aW9uOiBhc3NpZ25lZC12bS1yZXNvdXJjZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiByZXNyYwogICAgICBzZWNvbmRhcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKCiAgIyBVc2Vyc3BhY2UgcHJvY2VzcyBldmVudHMKCiAgIyBBVURJVF9DSEdSUF9JRCAtIFVzZXIgc3BhY2UgZ3JvdXAgSUQgY2hhbmdlZAogIC0gcmVjb3JkX3R5cGVzOiBDSEdSUF9JRAogICAgYWN0aW9uOiBjaGFuZ2VkLWdyb3VwCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9DSFVTRVJfSUQgLSBDaGFuZ2VkIHVzZXIgSUQgc3VwcGxlbWVudGFsIGRhdGEKICAtIHJlY29yZF90eXBlczogQ0hVU0VSX0lECiAgICBhY3Rpb246IGNoYW5nZWQtdXNlci1pZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVEVTVCAtIFVzZWQgZm9yIHRlc3Qgc3VjY2VzcyBtZXNzYWdlcwogIC0gcmVjb3JkX3R5cGVzOiBURVNUCiAgICBhY3Rpb246IHNlbnQtdGVzdAogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX1RSVVNURURfQVBQIC0gVHJ1c3RlZCBhcHAgbXNnIC0gZnJlZXN0eWxlIHRleHQKICAtIHJlY29yZF90eXBlczogVFJVU1RFRF9BUFAKICAgIGFjdGlvbjogdW5rbm93bgogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX1VTRVJfQ01EIC0gVXNlciBzaGVsbCBjb21tYW5kIGFuZCBhcmdzCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfQ01ECiAgICBhY3Rpb246IHJhbi1jb21tYW5kCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGNtZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBkZXNjcmlwdGlvbjogPgogICAgICBUaGVzZSBtZXNzYWdlcyBhcmUgZnJvbSB1c2VyLXNwYWNlIGFwcHMsIGxpa2Ugc3VkbywgdGhhdCBsb2cgY29tbWFuZHMKICAgICAgYmVpbmcgcnVuIGJ5IGEgdXNlci4gVGhlIHVpZCBjb250YWluZWQgaW4gdGhlc2UgbWVzc2FnZXMgaXMgdXNlcidzIFVJRCBhdAogICAgICB0aGUgdGltZSB0aGUgY29tbWFuZCB3YXMgcnVuLiBJdCBpcyBub3QgdGhlICJ0YXJnZXQiIFVJRCB1c2VkIHRvIHJ1biB0aGUKICAgICAgY29tbWFuZCwgd2hpY2ggaXMgbm9ybWFsbHkgcm9vdC4KICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAoKICAjIEhvc3QtbGV2ZWwgZXZlbnRzCgogICMgQVVESVRfU1lTVEVNX0JPT1QgLSBTeXN0ZW0gYm9vdAogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fQk9PVAogICAgYWN0aW9uOiBib290ZWQtc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9TWVNURU1fUlVOTEVWRUwgLSBTeXN0ZW0gcnVubGV2ZWwgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9SVU5MRVZFTAogICAgYWN0aW9uOiBjaGFuZ2VkLXRvLXJ1bmxldmVsCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG5ldy1sZXZlbAogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1NZU1RFTV9TSFVURE9XTiAtIFN5c3RlbSBzaHV0ZG93bgogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fU0hVVERPV04KICAgIGFjdGlvbjogc2h1dGRvd24tc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGVuZAoKICAjIFNlcnZpY2UtbGV2ZWwgZXZlbnRzCgogICMgQVVESVRfU0VSVklDRV9TVEFSVCAtIFNlcnZpY2UgKGRhZW1vbikgc3RhcnQKICAtIHJlY29yZF90eXBlczogU0VSVklDRV9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlcnZpY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdW5pdAogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1NFUlZJQ0VfU1RPUCAtIFNlcnZpY2UgKGRhZW1vbikgc3RvcAogIC0gcmVjb3JkX3R5cGVzOiBTRVJWSUNFX1NUT1AKICAgIGFjdGlvbjogc3RvcHBlZC1zZXJ2aWNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHVuaXQKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKCiAgIyBBdWRpdGQgaW50ZXJuYWwgZXZlbnRzCgogICMgQVVESVRfQ09ORklHX0NIQU5HRSAtIEF1ZGl0IHN5c3RlbSBjb25maWd1cmF0aW9uIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBDT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OgogICAgICAgIFtvcCwga2V5LCBhdWRpdF9lbmFibGVkLCBhdWRpdF9waWQsIGF1ZGl0X2JhY2tsb2dfbGltaXQsIGF1ZGl0X2ZhaWx1cmVdCiAgICAgIHdoYXQ6IGF1ZGl0LWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX0FCT1JUIC0gRGFlbW9uIGVycm9yIHN0b3AgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9BQk9SVAogICAgYWN0aW9uOiBhYm9ydGVkLWF1ZGl0ZC1zdGFydHVwCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCiAgIyBBVURJVF9EQUVNT05fQUNDRVBUIC0gQXVkaXRkIGFjY2VwdGVkIHJlbW90ZSBjb25uZWN0aW9uCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9BQ0NFUFQKICAgIGFjdGlvbjogcmVtb3RlLWF1ZGl0LWNvbm5lY3RlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgIyBBVURJVF9EQUVNT05fQ0xPU0UgLSBBdWRpdGQgY2xvc2VkIHJlbW90ZSBjb25uZWN0aW9uCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9DTE9TRQogICAgYWN0aW9uOiByZW1vdGUtYXVkaXQtZGlzY29ubmVjdGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAjIEFVRElUX0RBRU1PTl9DT05GSUcgLSBEYWVtb24gY29uZmlnIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQ09ORklHCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXRkLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX0VORCAtIERhZW1vbiBub3JtYWwgc3RvcCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX0VORAogICAgYWN0aW9uOiBzaHV0ZG93bi1hdWRpdAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAogICMgQVVESVRfREFFTU9OX0VSUiAtIEF1ZGl0ZCBpbnRlcm5hbCBlcnJvcgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fRVJSCiAgICBhY3Rpb246IGF1ZGl0LWVycm9yCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9EQUVNT05fUkVDT05GSUcgLSBBdWRpdGQgc2hvdWxkIHJlY29uZmlndXJlCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9SRUNPTkZJRwogICAgYWN0aW9uOiByZWNvbmZpZ3VyZWQtYXVkaXRkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBpbmZvCiAgIyBBVURJVF9EQUVNT05fUkVTVU1FIC0gQXVkaXRkIHNob3VsZCByZXN1bWUgbG9nZ2luZwogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUkVTVU1FCiAgICBhY3Rpb246IHJlc3VtZWQtYXVkaXQtbG9nZ2luZwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fUk9UQVRFIC0gQXVkaXRkIHNob3VsZCByb3RhdGUgbG9ncwogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUk9UQVRFCiAgICBhY3Rpb246IHJvdGF0ZWQtYXVkaXQtbG9ncwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fU1RBUlQgLSBEYWVtb24gc3RhcnR1cCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX1NUQVJUCiAgICBhY3Rpb246IHN0YXJ0ZWQtYXVkaXQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9LRVJORUwgLSBBc3luY2hyb25vdXMgYXVkaXQgcmVjb3JkLiBOT1QgQSBSRVFVRVNULgogIC0gcmVjb3JkX3R5cGVzOiBLRVJORUwKICAgIGFjdGlvbjogaW5pdGlhbGl6ZWQtYXVkaXQtc3Vic3lzdGVtCiAgICBlY3M6ICplY3MtcHJvY2VzcwoKICAjIENvbmZpZ3VyYXRpb24gY2hhbmdlIGV2ZW50cwoKICAjIEFVRElUX1VTWVNfQ09ORklHIC0gVXNlciBzcGFjZSBzeXN0ZW0gY29uZmlnIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBVU1lTX0NPTkZJRwogICAgYWN0aW9uOiBjaGFuZ2VkLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3AKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfTkVURklMVEVSX0NGRyAtIE5ldGZpbHRlciBjaGFpbiBtb2RpZmljYXRpb25zCiAgLSByZWNvcmRfdHlwZXM6IE5FVEZJTFRFUl9DRkcKICAgIGFjdGlvbjogbG9hZGVkLWZpcmV3YWxsLXJ1bGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdGFibGUKICAgICAgd2hhdDogZmlyZXdhbGwKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9GRUFUVVJFX0NIQU5HRSAtIGF1ZGl0IGxvZyBsaXN0aW5nIGZlYXR1cmUgY2hhbmdlcwogIC0gcmVjb3JkX3R5cGVzOiBGRUFUVVJFX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0LWZlYXR1cmUKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZmVhdHVyZQogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9SRVBMQUNFIC0gUmVwbGFjZSBhdWRpdGQgaWYgdGhpcyBwYWNrZXQgdW5hbnN3ZXJkCgogICMgVFRZIGV2ZW50cwoKICAtIHJlY29yZF90eXBlczoKICAgICAgIyBBVURJVF9UVFkgLSBJbnB1dCBvbiBhbiBhZG1pbmlzdHJhdGl2ZSBUVFkKICAgICAgLSBUVFkKICAgICAgIyBBVURJVF9VU0VSX1RUWSAtIE5vbi1JQ0FOT04gVFRZIGlucHV0IG1lYW5pbmcKICAgICAgLSBVU0VSX1RUWQogICAgYWN0aW9uOiB0eXBlZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBkYXRhCiAgICAgIHdoYXQ6IGtleXN0cm9rZXMKICAgIGhvdzogW2NvbW0sIGV4ZV0KCiAgIyBQb2xpY3kgZXZlbnRzCgogICMgQVVESVRfQVZDIC0gU0UgTGludXggYXZjIGRlbmlhbCBvciBncmFudCAoc2VsaW51eCkKICAtIHJlY29yZF90eXBlczogQVZDCiAgICBhY3Rpb246IHZpb2xhdGVkLXNlbGludXgtcG9saWN5CiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBzY29udGV4dAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0Y29udGV4dAogICAgICBzZWNvbmRhcnk6IHRjbGFzcwogICAgaGFzX2ZpZWxkczoKICAgICAgLSBzZXJlc3VsdAogICMgQVVESVRfQVZDIC0gU0UgTGludXggYXZjIGRlbmlhbCBvciBncmFudCAoYXBwYXJtb3IpCiAgLSByZWNvcmRfdHlwZXM6IEFWQwogICAgYWN0aW9uOiB2aW9sYXRlZC1hcHBhcm1vci1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3BlcmF0aW9uCiAgICAgIHNlY29uZGFyeTogW3JlcXVlc3RlZF9tYXNrLCBkZW5pZWRfbWFzaywgY2FwbmFtZV0KICAgICAgd2hhdDogcG9saWN5CiAgICBoYXNfZmllbGRzOgogICAgICAtIGFwcGFybW9yCiAgIyBBVURJVF9GU19SRUxBQkVMIC0gRmlsZXN5c3RlbSByZWxhYmVsZWQKICAtIHJlY29yZF90eXBlczogRlNfUkVMQUJFTAogICAgYWN0aW9uOiByZWxhYmVsZWQtZmlsZXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgIyBBVURJVF9MQUJFTF9MRVZFTF9DSEFOR0UgLSBPYmplY3QncyBsZXZlbCB3YXMgY2hhbmdlZAogIC0gcmVjb3JkX3R5cGVzOiBMQUJFTF9MRVZFTF9DSEFOR0UKICAgIGFjdGlvbjogbW9kaWZpZWQtbGV2ZWwtb2YKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogcHJpbnRlcgogICAgICB3aGF0OiBwcmludGVyCiAgIyBBVURJVF9MQUJFTF9PVkVSUklERSAtIEFkbWluIGlzIG92ZXJyaWRpbmcgYSBsYWJlbAogIC0gcmVjb3JkX3R5cGVzOiBMQUJFTF9PVkVSUklERQogICAgYWN0aW9uOiBvdmVycm9kZS1sYWJlbC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgIyBBVURJVF9NQUNfQ0hFQ0sgLSBVc2VyIHNwYWNlIE1BQyBkZWNpc2lvbiByZXN1bHRzCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19DSEVDSwogICAgYWN0aW9uOiBtYWMtcGVybWlzc2lvbgogICMgQVVESVRfTUFDX0NPTkZJR19DSEFOR0UgLSBDaGFuZ2VzIHRvIGJvb2xlYW5zCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19DT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtc2VsaW51eC1ib29sZWFuCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGJvb2wKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX01BQ19QT0xJQ1lfTE9BRCAtIFBvbGljeSBmaWxlIGxvYWQKICAtIHJlY29yZF90eXBlczogTUFDX1BPTElDWV9MT0FECiAgICBhY3Rpb246IGxvYWRlZC1zZWxpbnV4LXBvbGljeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGFjY2VzcwogICMgQVVESVRfTUFDX1NUQVRVUyAtIENoYW5nZWQgZW5mb3JjaW5nLHBlcm1pc3NpdmUsb2ZmCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19TVEFUVVMKICAgIGFjdGlvbjogY2hhbmdlZC1zZWxpbnV4LWVuZm9yY2VtZW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGVuZm9yY2luZwogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVVNFUl9BVkMgLSBVc2VyIHNwYWNlIGF2YyBtZXNzYWdlCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfQVZDCiAgICBhY3Rpb246IGFjY2Vzcy1wZXJtaXNzaW9uCiAgIyBBVURJVF9VU0VSX01BQ19DT05GSUdfQ0hBTkdFIC0gQ2hhbmdlIG1hZGUgdG8gTUFDIHBvbGljeQogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX01BQ19DT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtbWFjLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1VTRVJfTUFDX1BPTElDWV9MT0FEIC0gVXNlcnNwYyBkYWVtb24gbG9hZGVkIHBvbGljCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfTUFDX1BPTElDWV9MT0FECiAgICBhY3Rpb246IGxvYWRlZC1tYWMtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogYWNjZXNzCiAgIyBBVURJVF9VU0VSX1NFTElOVVhfRVJSIC0gU0UgTGludXggdXNlciBzcGFjZSBlcnJvcgogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX1NFTElOVVhfRVJSCiAgICBhY3Rpb246IGFjY2Vzcy1lcnJvcgogICMgQVVESVRfU0VDQ09NUCAtIFNlY3VyZSBDb21wdXRpbmcgZXZlbnQKICAtIHJlY29yZF90eXBlczogU0VDQ09NUAogICAgYWN0aW9uOiB2aW9sYXRlZC1zZWNjb21wLXBvbGljeQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzeXNjYWxsCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAjIEFVRElUX1NFTElOVVhfRVJSIC0gSW50ZXJuYWwgU0UgTGludXggRXJyb3JzCiAgLSBhY3Rpb246IGNhdXNlZC1tYWMtcG9saWN5LWVycm9yCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgcmVjb3JkX3R5cGVzOiBTRUxJTlVYX0VSUgogICMgQVVESVRfQVBQQVJNT1JfQUxMT1dFRAogICMgQVVESVRfQVBQQVJNT1JfREVOSUVECiAgIyBBVURJVF9BUFBBUk1PUl9FUlJPUgogICMgQVVESVRfQVZDX1BBVEggLSBkZW50cnksIHZmc21vdW50IHBhaXIgZnJvbSBhdmMKICAjIEFVRElUX0FQUEFSTU9SX0FVRElUCiAgIyBBVURJVF9BUFBBUk1PUl9ISU5UCiAgIyBBVURJVF9BUFBBUk1PUl9TVEFUVVMKICAjIEFVRElUX0FQUEFSTU9SX0VSUk9SCiAgIyBBVURJVF9ERVZfQUxMT0MgLSBEZXZpY2Ugd2FzIGFsbG9jYXRlZAogICMgQVVESVRfREVWX0RFQUxMT0MgLSBEZXZpY2Ugd2FzIGRlYWxsb2NhdGVkCiAgIyBBVURJVF9NQUNfVU5MQkxfQUxMT1cgLSBOZXRMYWJlbDogYWxsb3cgdW5sYWJlbGVkIHRyYWZmaWMKICAjIEFVRElUX01BQ19DSVBTT1Y0X0FERCAtIE5ldExhYmVsOiBhZGQgQ0lQU092NCBET0kgZW50cnkKICAjIEFVRElUX01BQ19DSVBTT1Y0X0RFTCAtIE5ldExhYmVsOiBkZWwgQ0lQU092NCBET0kgZW50cnkKICAjIEFVRElUX01BQ19NQVBfQUREIC0gTmV0TGFiZWw6IGFkZCBMU00gZG9tYWluIG1hcHBpbmcKICAjIEFVRElUX01BQ19NQVBfREVMIC0gTmV0TGFiZWw6IGRlbCBMU00gZG9tYWluIG1hcHBpbmcKICAjIEFVRElUX01BQ19JUFNFQ19FVkVOVCAtIEF1ZGl0IGFuIElQU2VjIGV2ZW50CiAgIyBBVURJVF9NQUNfVU5MQkxfU1RDQUREIC0gTmV0TGFiZWw6IGFkZCBhIHN0YXRpYyBsYWJlbAogICMgQVVESVRfTUFDX1VOTEJMX1NUQ0RFTCAtIE5ldExhYmVsOiBkZWwgYSBzdGF0aWMgbGFiZWwKICAjIEFVRElUX01BQ19DQUxJUFNPX0FERCAtIE5ldExhYmVsOiBhZGQgQ0FMSVBTTyBET0kgZW50cnkKICAjIEFVRElUX01BQ19DQUxJUFNPX0RFTCAtIE5ldExhYmVsOiBkZWwgQ0FMSVBTTyBET0kgZW50cnkKICAjIEFVRElUX1VTRVJfTEFCRUxFRF9FWFBPUlQgLSBPYmplY3QgZXhwb3J0ZWQgd2l0aCBsYWJlbAogICMgQVVESVRfVVNFUl9VTkxBQkVMRURfRVhQT1JUIC0gT2JqZWN0IGV4cG9ydGVkIHdpdGhvdXQgbGFiZWwKCiAgIyBDcnlwdG8gZXZlbnRzCgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIGFjdGlvbjogbmVnb3RpYXRlZC1jcnlwdG8ta2V5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGZwCiAgICAgIHNlY29uZGFyeTogW2FkZHIsIGhvc3RuYW1lXQogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0tFWV9VU0VSCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogY3J5cHRvLW9mZmljZXItbG9nZ2VkLWluCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19MT0dJTgogIC0gYWN0aW9uOiBjcnlwdG8tb2ZmaWNlci1sb2dnZWQtb3V0CiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19MT0dPVVQKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgYWN0aW9uOiBzdGFydGVkLWNyeXB0by1zZXNzaW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFkZHIKICAgICAgc2Vjb25kYXJ5OiBbcnBvcnRdCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19TRVNTSU9OCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogYWNjZXNzLXJlc3VsdAogICAgcmVjb3JkX3R5cGVzOiBEQUNfQ0hFQ0sKCiAgIyBBbm9tYWxpZXMKCiAgIyBBVURJVF9BTk9NX0FCRU5EIC0gUHJvY2VzcyBlbmRlZCBhYm5vcm1hbGx5CiAgLSByZWNvcmRfdHlwZXM6IEFOT01fQUJFTkQKICAgIGFjdGlvbjogY3Jhc2hlZC1wcm9ncmFtCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtjb21tLCBleGVdCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogc2lnCiAgICBlY3M6CiAgICAgICMgY29uc2lkZXIgYWRkaW5nIGFuIGFub21hbHkgY2F0ZWdvcnkgd2hlbiB3ZSBpbnRyb2R1Y2UKICAgICAgIyB0byBFQ1MKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBlbmQKICAjIEFVRElUX0FOT01fRVhFQyAtIEV4ZWN1dGlvbiBvZiBmaWxlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fRVhFQwogICAgYWN0aW9uOiBhdHRlbXB0ZWQtZXhlY3V0aW9uLW9mLWZvcmJpZGRlbi1wcm9ncmFtCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGNtZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHRlcm1pbmFsCiAgICBlY3M6CiAgICAgICMgY29uc2lkZXIgYWRkaW5nIGFuIGFub21hbHkgY2F0ZWdvcnkgd2hlbiB3ZSBpbnRyb2R1Y2UKICAgICAgIyB0byBFQ1MKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfQU5PTV9MSU5LIC0gU3VzcGljaW91cyB1c2Ugb2YgZmlsZSBsaW5rcwogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0xJTksKICAgIGFjdGlvbjogdXNlZC1zdXNwaWNpb3VzLWxpbmsKICAjIEFVRElUX0FOT01fTE9HSU5fRkFJTFVSRVMgLSBGYWlsZWQgbG9naW4gbGltaXQgcmVhY2hlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9GQUlMVVJFUwogICAgYWN0aW9uOiBmYWlsZWQtbG9nLWluLXRvby1tYW55LXRpbWVzLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX0xPQ0FUSU9OIC0gTG9naW4gZnJvbSBmb3JiaWRkZW4gbG9jYXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fTE9DQVRJT04KICAgIGFjdGlvbjogYXR0ZW1wdGVkLWxvZy1pbi1mcm9tLXVudXN1YWwtcGxhY2UtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fU0VTU0lPTlMgLSBNYXggY29uY3VycmVudCBzZXNzaW9ucyByZWFjaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX1NFU1NJT05TCiAgICBhY3Rpb246IG9wZW5lZC10b28tbWFueS1zZXNzaW9ucy10bwogICMgQVVESVRfQU5PTV9MT0dJTl9USU1FIC0gTG9naW4gYXR0ZW1wdGVkIGF0IGJhZCB0aW1lCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX1RJTUUKICAgIGFjdGlvbjogYXR0ZW1wdGVkLWxvZy1pbi1kdXJpbmctdW51c3VhbC1ob3VyLXRvCiAgIyBBVURJVF9BTk9NX1BST01JU0NVT1VTIC0gRGV2aWNlIGNoYW5nZWQgcHJvbWlzY3VvdXMgbW9kZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX1BST01JU0NVT1VTCiAgICBhY3Rpb246IGNoYW5nZWQtcHJvbWlzY3VvdXMtbW9kZS1vbi1kZXZpY2UgIyBDb3VsZCBiZSBlbnRlcmVkIG9yIGV4aXRlZCBiYXNlZCBvbiBwcm9tIGZpZWxkLgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBkZXYKICAgICAgd2hhdDogbmV0d29yay1kZXZpY2UKICAjIEFVRElUX0FOT01fUkJBQ19JTlRFR1JJVFlfRkFJTCAtIFJCQUMgZmlsZSBpbnRlZ3JpdHkgZmFpbHVyZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX1JCQUNfSU5URUdSSVRZX0ZBSUwKICAgIGFjdGlvbjogdGVzdGVkLWZpbGUtc3lzdGVtLWludGVncml0eS1vZgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBob3N0bmFtZQogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgIyBBVURJVF9BTk9NX0xPR0lOX0FDQ1QgLSBMb2dpbiBhdHRlbXB0ZWQgdG8gd2F0Y2hlZCBhY2N0CiAgIyBBVURJVF9BTk9NX01BWF9EQUMgLSBNYXggREFDIGZhaWx1cmVzIHJlYWNoZWQKICAjIEFVRElUX0FOT01fTUFYX01BQyAtIE1heCBNQUMgZmFpbHVyZXMgcmVhY2hlZAogICMgQVVESVRfQU5PTV9BTVRVX0ZBSUwgLSBBTVRVIGZhaWx1cmUKICAjIEFVRElUX0FOT01fUkJBQ19GQUlMIC0gUkJBQyBzZWxmIHRlc3QgZmFpbHVyZQogICMgQVVESVRfQU5PTV9DUllQVE9fRkFJTCAtIENyeXB0byBzeXN0ZW0gdGVzdCBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX01LX0VYRSAtIE1ha2UgYW4gZXhlY3V0YWJsZQogICMgQVVESVRfQU5PTV9BQ0NFU1NfRlMgLSBBY2Nlc3Mgb2YgZmlsZSBvciBkaXIKICAjIEFVRElUX0FOT01fQUREX0FDQ1QgLSBBZGRpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9ERUxfQUNDVCAtIERlbGV0aW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fTU9EX0FDQ1QgLSBDaGFuZ2luZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX1JPT1RfVFJBTlMgLSBVc2VyIGJlY2FtZSByb290CiAgIyBBVURJVF9BTk9NX0xPR0lOX1NFUlZJQ0UgLSBTZXJ2aWNlIGFjY3QgYXR0ZW1wdGVkIGxvZ2luCgogICMgQW5vbWFseSByZXNwb25zZXMKCiAgIyBBVURJVF9SRVNQX0FOT01BTFkgLSBBbm9tYWx5IG5vdCByZWFjdGVkIHRvCiAgIyBBVURJVF9SRVNQX0FMRVJUIC0gQWxlcnQgZW1haWwgd2FzIHNlbnQKICAjIEFVRElUX1JFU1BfS0lMTF9QUk9DIC0gS2lsbCBwcm9ncmFtCiAgIyBBVURJVF9SRVNQX1RFUk1fQUNDRVNTIC0gVGVybWluYXRlIHNlc3Npb24KICAjIEFVRElUX1JFU1BfQUNDVF9SRU1PVEUgLSBBY2N0IGxvY2tlZCBmcm9tIHJlbW90ZSBhY2Nlc3MKICAjIEFVRElUX1JFU1BfQUNDVF9MT0NLX1RJTUVEIC0gVXNlciBhY2N0IGxvY2tlZCBmb3IgdGltZQogICMgQVVESVRfUkVTUF9BQ0NUX1VOTE9DS19USU1FRCAtIFVzZXIgYWNjdCB1bmxvY2tlZCBmcm9tIHRpbWUKICAjIEFVRElUX1JFU1BfQUNDVF9MT0NLIC0gVXNlciBhY2N0IHdhcyBsb2NrZWQKICAjIEFVRElUX1JFU1BfVEVSTV9MT0NLIC0gVGVybWluYWwgd2FzIGxvY2tlZAogICMgQVVESVRfUkVTUF9TRUJPT0wgLSBTZXQgYW4gU0UgTGludXggYm9vbGVhbgogICMgQVVESVRfUkVTUF9FWEVDIC0gRXhlY3V0ZSBhIHNjcmlwdAogICMgQVVESVRfUkVTUF9TSU5HTEUgLSBHbyB0byBzaW5nbGUgdXNlciBtb2RlCiAgIyBBVURJVF9SRVNQX0hBTFQgLSB0YWtlIHRoZSBzeXN0ZW0gZG93bgogICMgQVVESVRfUkVTUF9PUklHSU5fQkxPQ0sgLSBBZGRyZXNzIGJsb2NrZWQgYnkgaXB0YWJsZXMKICAjIEFVRElUX1JFU1BfT1JJR0lOX0JMT0NLX1RJTUVEIC0gQWRkcmVzcyBibG9ja2VkIGZvciB0aW1lCgogICMgQXVkaXQgcnVsZSBldmVudHMKCiAgIyBBVURJVF9TWVNDQUxMIC0gU3lzY2FsbCBldmVudAogICMgQVVESVRfUEFUSCAtIEZpbGVuYW1lIHBhdGggaW5mb3JtYXRpb24KICAjIEFVRElUX0lQQyAtIElQQyByZWNvcmQKICAjIEFVRElUX1NPQ0tFVENBTEwgLSBzeXNfc29ja2V0Y2FsbCBhcmd1bWVudHMKICAjIEFVRElUX1NPQ0tBRERSIC0gc29ja2FkZHIgY29waWVkIGFzIHN5c2NhbGwgYXJnCiAgIyBBVURJVF9DV0QgLSBDdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CiAgIyBBVURJVF9FWEVDVkUgLSBleGVjdmUgYXJndW1lbnRzCiAgIyBBVURJVF9JUENfU0VUX1BFUk0gLSBJUEMgbmV3IHBlcm1pc3Npb25zIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9PUEVOIC0gUE9TSVggTVEgb3BlbiByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfU0VORFJFQ1YtIFBPU0lYIE1RIHNlbmQvcmVjZWl2ZSByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfTk9USUZZIC0gUE9TSVggTVEgbm90aWZ5IHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9HRVRTRVRBVFRSIC0gUE9TSVggTVEgZ2V0L3NldCBhdHRyaWJ1dGUgcmVjb3JkIHR5cGUKICAjIEFVRElUX0ZEX1BBSVIgLSBhdWRpdCByZWNvcmQgZm9yIHBpcGUvc29ja2V0cGFpcgogICMgQVVESVRfT0JKX1BJRCAtIHB0cmFjZSB0YXJnZXQKICAjIEFVRElUX0JQUk1fRkNBUFMgLSBJbmZvcm1hdGlvbiBhYm91dCBmY2FwcyBpbmNyZWFzaW5nIHBlcm1zCiAgIyBBVURJVF9DQVBTRVQgLSBSZWNvcmQgc2hvd2luZyBhcmd1bWVudCB0byBzeXNfY2Fwc2V0CiAgIyBBVURJVF9NTUFQIC0gUmVjb3JkIHNob3dpbmcgZGVzY3JpcHRvciBhbmQgZmxhZ3MgaW4gbW1hcAogICMgQVVESVRfTkVURklMVEVSX1BLVCAtIFBhY2tldHMgdHJhdmVyc2luZyBuZXRmaWx0ZXIgY2hhaW5zCgogICMgSW50ZWdyaXR5IGNoZWNrcwoKICAjIEFVRElUX0lOVEVHUklUWV9EQVRBIC0gRGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uCiAgIyBBVURJVF9JTlRFR1JJVFlfTUVUQURBVEEgLSBNZXRhZGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uCiAgIyBBVURJVF9JTlRFR1JJVFlfU1RBVFVTIC0gSW50ZWdyaXR5IGVuYWJsZSBzdGF0dXMKICAjIEFVRElUX0lOVEVHUklUWV9IQVNIIC0gSW50ZWdyaXR5IEhBU0ggdHlwZQogICMgQVVESVRfSU5URUdSSVRZX1BDUiAtIFBDUiBpbnZhbGlkYXRpb24gbXNncwogICMgQVVESVRfSU5URUdSSVRZX1JVTEUgLSBQb2xpY3kgcnVsZQoKICAjIFZhcmlvdXMKCiAgIyBBVURJVF9VU0VSIC0gTWVzc2FnZSBmcm9tIHVzZXJzcGFjZSAtLSBkZXByZWNhdGVkCiAgLSByZWNvcmRfdHlwZXM6IFVTRVIKICAgIGFjdGlvbjogc2VudC1tZXNzYWdlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFkZHIKCiAgIyBBVURJVF9TT0ZUV0FSRV9VUERBVEUgLSBQYWNrYWdlIG1hbmFnZW1lbnQKICAtIHJlY29yZF90eXBlczogU09GVFdBUkVfVVBEQVRFCiAgICBhY3Rpb246IHBhY2thZ2UtdXBkYXRlZAogICAgZWNzOgogICAgICBjYXRlZ29yeTogcGFja2FnZQogICAgICB0eXBlOiBpbmZvCg==")
 		assets["normalizationData"] = value
 	}
 
diff --git a/auparse/mk_audit_arches.pl b/auparse/mk_audit_arches.pl
index 031a50d..4953acd 100644
--- a/auparse/mk_audit_arches.pl
+++ b/auparse/mk_audit_arches.pl
@@ -55,6 +55,7 @@ print FILE <<EOF;
 
 // Code generated by $command - DO NOT EDIT.
 
+//go:build ignore
 // +build ignore
 
 package auparse


Test patch:
diff --git a/aucoalesce/testdata/random-internet.json.golden b/aucoalesce/testdata/random-internet.json.golden
index 98db480..a99fd54 100644
--- a/aucoalesce/testdata/random-internet.json.golden
+++ b/aucoalesce/testdata/random-internet.json.golden
@@ -59,5 +59,84 @@
         "group": {}
       }
     }
+  },
+  {
+    "test_name": "TIME_INJOFFSET",
+    "event": {
+      "@timestamp": "2018-07-03T11:07:24.507Z",
+      "sequence": 7,
+      "category": "unknown",
+      "record_type": "time_injoffset",
+      "result": "success",
+      "session": "1",
+      "summary": {
+        "actor": {
+          "primary": "0",
+          "secondary": "0"
+        },
+        "action": "changed-system-time",
+        "object": {
+          "type": "system"
+        },
+        "how": "/usr/sbin/chronyd"
+      },
+      "user": {
+        "ids": {
+          "auid": "0",
+          "egid": "0",
+          "euid": "0",
+          "fsgid": "0",
+          "fsuid": "0",
+          "gid": "0",
+          "sgid": "0",
+          "suid": "0",
+          "uid": "0"
+        },
+        "selinux": {
+          "domain": "kernel_t",
+          "level": "s0",
+          "role": "system_r",
+          "user": "system_u"
+        }
+      },
+      "process": {
+        "pid": "629",
+        "ppid": "626",
+        "title": "chronyd -q",
+        "name": "chronyd",
+        "exe": "/usr/sbin/chronyd"
+      },
+      "data": {
+        "a0": "7fff57e78c00",
+        "a1": "1",
+        "a2": "1",
+        "a3": "7f754ae28c0a",
+        "arch": "x86_64",
+        "exit": "5",
+        "new": "8256",
+        "nsec": "0",
+        "old": "64",
+        "op": "status",
+        "sec": "0",
+        "syscall": "adjtimex",
+        "tty": "(none)"
+      },
+      "ecs": {
+        "event": {
+          "category": [
+            "host"
+          ],
+          "type": [
+            "change"
+          ]
+        },
+        "user": {
+          "effective": {},
+          "target": {},
+          "changes": {}
+        },
+        "group": {}
+      }
+    }
   }
 ]
diff --git a/aucoalesce/testdata/random-internet.yaml b/aucoalesce/testdata/random-internet.yaml
index d86b910..44fd897 100644
--- a/aucoalesce/testdata/random-internet.yaml
+++ b/aucoalesce/testdata/random-internet.yaml
@@ -2,3 +2,10 @@
 tests:
   ANOM_ABEND SIGSEGV seg fault: |
     type=ANOM_ABEND msg=audit(1423234994.398:911150): auid=4294967295 uid=48 gid=48 ses=4294967295 subj=system_u:system_r:httpd_t:s0 pid=31242 comm="httpd" reason="memory violation" sig=11
+
+  # https://lkml.org/lkml/2018/8/24/314
+  TIME_INJOFFSET: |
+    type=TIME_INJOFFSET msg=audit(1530616044.507:7): sec=0 nsec=0
+    type=TIME_ADJNTPVAL msg=audit(1530616044.507:7): op=status old=64 new=8256
+    type=SYSCALL msg=audit(1530616044.507:7): arch=c000003e syscall=159 success=yes exit=5 a0=7fff57e78c00 a1=1 a2=1 a3=7f754ae28c0a items=0 ppid=626 pid=629 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=1 comm="chronyd" exe="/usr/sbin/chronyd" subj=system_u:system_r:kernel_t:s0 key=(null)
+    type=PROCTITLE msg=audit(1530616044.507:7): proctitle=6368726F6E7964002D71
diff --git a/aucoalesce/testdata/ubuntu-21.10-linux-5.13.json.golden b/aucoalesce/testdata/ubuntu-21.10-linux-5.13.json.golden
new file mode 100644
index 0000000..3a47670
--- /dev/null
+++ b/aucoalesce/testdata/ubuntu-21.10-linux-5.13.json.golden
@@ -0,0 +1,238 @@
+[
+  {
+    "test_name": "AUDIT_TIME_ADJNTPVAL chronyd freq",
+    "event": {
+      "@timestamp": "2022-01-25T22:48:01.711Z",
+      "sequence": 884,
+      "category": "unknown",
+      "record_type": "time_adjntpval",
+      "result": "success",
+      "session": "unset",
+      "tags": [
+        "x86_64"
+      ],
+      "summary": {
+        "actor": {
+          "primary": "unset",
+          "secondary": "112"
+        },
+        "action": "changed-system-time",
+        "object": {
+          "type": "system"
+        },
+        "how": "/usr/sbin/chronyd"
+      },
+      "user": {
+        "ids": {
+          "auid": "unset",
+          "egid": "120",
+          "euid": "112",
+          "fsgid": "120",
+          "fsuid": "112",
+          "gid": "120",
+          "sgid": "120",
+          "suid": "112",
+          "uid": "112"
+        },
+        "selinux": {
+          "user": "/usr/sbin/chronyd"
+        }
+      },
+      "process": {
+        "pid": "20294",
+        "ppid": "1",
+        "title": "/usr/sbin/chronyd -F 1",
+        "name": "chronyd",
+        "exe": "/usr/sbin/chronyd"
+      },
+      "data": {
+        "a0": "0",
+        "a1": "7ffe952aaf40",
+        "a2": "e5d91",
+        "a3": "7ffe952bd080",
+        "arch": "x86_64",
+        "exit": "5",
+        "new": "61699325952000",
+        "old": "61699380790580",
+        "op": "freq",
+        "syscall": "clock_adjtime",
+        "tty": "(none)"
+      },
+      "ecs": {
+        "event": {
+          "category": [
+            "host"
+          ],
+          "type": [
+            "change"
+          ]
+        },
+        "user": {
+          "effective": {},
+          "target": {},
+          "changes": {}
+        },
+        "group": {}
+      }
+    }
+  },
+  {
+    "test_name": "AUDIT_TIME_ADJNTPVAL chronyd status",
+    "event": {
+      "@timestamp": "2022-01-25T22:47:54.899Z",
+      "sequence": 880,
+      "category": "unknown",
+      "record_type": "time_adjntpval",
+      "result": "success",
+      "session": "unset",
+      "tags": [
+        "x86_64"
+      ],
+      "summary": {
+        "actor": {
+          "primary": "unset",
+          "secondary": "0"
+        },
+        "action": "changed-system-time",
+        "object": {
+          "type": "system"
+        },
+        "how": "/usr/sbin/chronyd"
+      },
+      "user": {
+        "ids": {
+          "auid": "unset",
+          "egid": "0",
+          "euid": "0",
+          "fsgid": "0",
+          "fsuid": "0",
+          "gid": "0",
+          "sgid": "0",
+          "suid": "0",
+          "uid": "0"
+        },
+        "selinux": {
+          "user": "/usr/sbin/chronyd"
+        }
+      },
+      "process": {
+        "pid": "20294",
+        "ppid": "1",
+        "title": "/usr/sbin/chronyd -F 1",
+        "name": "chronyd",
+        "exe": "/usr/sbin/chronyd"
+      },
+      "data": {
+        "a0": "0",
+        "a1": "7ffe952abf50",
+        "a2": "0",
+        "a3": "0",
+        "arch": "x86_64",
+        "exit": "5",
+        "new": "64",
+        "old": "8257",
+        "op": "status",
+        "syscall": "clock_adjtime",
+        "tty": "(none)"
+      },
+      "ecs": {
+        "event": {
+          "category": [
+            "host"
+          ],
+          "type": [
+            "change"
+          ]
+        },
+        "user": {
+          "effective": {},
+          "target": {},
+          "changes": {}
+        },
+        "group": {}
+      }
+    }
+  },
+  {
+    "test_name": "AUDIT_TIME_ADJNTPVAL freq/tick",
+    "event": {
+      "@timestamp": "2022-01-25T22:48:01.711Z",
+      "sequence": 885,
+      "category": "unknown",
+      "record_type": "time_adjntpval",
+      "result": "success",
+      "session": "unset",
+      "tags": [
+        "x86_64"
+      ],
+      "summary": {
+        "actor": {
+          "primary": "unset",
+          "secondary": "112"
+        },
+        "action": "changed-system-time",
+        "object": {
+          "type": "system"
+        },
+        "how": "/usr/sbin/chronyd"
+      },
+      "user": {
+        "ids": {
+          "auid": "unset",
+          "egid": "120",
+          "euid": "112",
+          "fsgid": "120",
+          "fsuid": "112",
+          "gid": "120",
+          "sgid": "120",
+          "suid": "112",
+          "uid": "112"
+        },
+        "selinux": {
+          "user": "/usr/sbin/chronyd"
+        }
+      },
+      "process": {
+        "pid": "20294",
+        "ppid": "1",
+        "title": "/usr/sbin/chronyd -F 1",
+        "name": "chronyd",
+        "exe": "/usr/sbin/chronyd"
+      },
+      "data": {
+        "a0": "0",
+        "a1": "7ffe952aaf50",
+        "a2": "212126",
+        "a3": "7ffe952bd080",
+        "arch": "x86_64",
+        "exit": "5",
+        "new": "142290059264000",
+        "old": "61699325952000",
+        "op": "freq",
+        "syscall": "clock_adjtime",
+        "tty": "(none)"
+      },
+      "ecs": {
+        "event": {
+          "category": [
+            "host"
+          ],
+          "type": [
+            "change"
+          ]
+        },
+        "user": {
+          "effective": {},
+          "target": {},
+          "changes": {}
+        },
+        "group": {}
+      }
+    },
+    "warnings": [
+      "duplicate key (new) from TIME_ADJNTPVAL message",
+      "duplicate key (old) from TIME_ADJNTPVAL message",
+      "duplicate key (op) from TIME_ADJNTPVAL message"
+    ]
+  }
+]
diff --git a/aucoalesce/testdata/ubuntu-21.10-linux-5.13.yaml b/aucoalesce/testdata/ubuntu-21.10-linux-5.13.yaml
new file mode 100644
index 0000000..1a69913
--- /dev/null
+++ b/aucoalesce/testdata/ubuntu-21.10-linux-5.13.yaml
@@ -0,0 +1,20 @@
+---
+tests:
+  # Test data generated by using:
+  # auditctl -a exit,always -F arch=b64 -S adjtimex
+  # sudo apt install chrony -y
+  AUDIT_TIME_ADJNTPVAL chronyd status: |
+    type=TIME_ADJNTPVAL msg=audit(1643150874.899:880): op=status old=8257 new=64
+    type=SYSCALL msg=audit(1643150874.899:880): arch=c000003e syscall=305 success=yes exit=5 a0=0 a1=7ffe952abf50 a2=0 a3=0 items=0 ppid=1 pid=20294 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="chronyd" exe="/usr/sbin/chronyd" subj=/usr/sbin/chronyd key=(null)ARCH=x86_64 SYSCALL=clock_adjtime AUID="unset" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root"
+    type=PROCTITLE msg=audit(1643150874.899:880): proctitle=2F7573722F7362696E2F6368726F6E7964002D460031
+
+  AUDIT_TIME_ADJNTPVAL chronyd freq: |
+    type=TIME_ADJNTPVAL msg=audit(1643150881.711:884): op=freq old=61699380790580 new=61699325952000
+    type=SYSCALL msg=audit(1643150881.711:884): arch=c000003e syscall=305 success=yes exit=5 a0=0 a1=7ffe952aaf40 a2=e5d91 a3=7ffe952bd080 items=0 ppid=1 pid=20294 auid=4294967295 uid=112 gid=120 euid=112 suid=112 fsuid=112 egid=120 sgid=120 fsgid=120 tty=(none) ses=4294967295 comm="chronyd" exe="/usr/sbin/chronyd" subj=/usr/sbin/chronyd key=(null)ARCH=x86_64 SYSCALL=clock_adjtime AUID="unset" UID="_chrony" GID="_chrony" EUID="_chrony" SUID="_chrony" FSUID="_chrony" EGID="_chrony" SGID="_chrony" FSGID="_chrony"
+    type=PROCTITLE msg=audit(1643150881.711:884): proctitle=2F7573722F7362696E2F6368726F6E7964002D460031
+
+  AUDIT_TIME_ADJNTPVAL freq/tick: |
+    type=TIME_ADJNTPVAL msg=audit(1643150881.711:885): op=freq old=61699325952000 new=142290059264000
+    type=TIME_ADJNTPVAL msg=audit(1643150881.711:885): op=tick old=10000 new=9980
+    type=SYSCALL msg=audit(1643150881.711:885): arch=c000003e syscall=305 success=yes exit=5 a0=0 a1=7ffe952aaf50 a2=212126 a3=7ffe952bd080 items=0 ppid=1 pid=20294 auid=4294967295 uid=112 gid=120 euid=112 suid=112 fsuid=112 egid=120 sgid=120 fsgid=120 tty=(none) ses=4294967295 comm="chronyd" exe="/usr/sbin/chronyd" subj=/usr/sbin/chronyd key=(null)ARCH=x86_64 SYSCALL=clock_adjtime AUID="unset" UID="_chrony" GID="_chrony" EUID="_chrony" SUID="_chrony" FSUID="_chrony" EGID="_chrony" SGID="_chrony" FSGID="_chrony"
+    type=PROCTITLE msg=audit(1643150881.711:885): proctitle=2F7573722F7362696E2F6368726F6E7964002D460031
\ No newline at end of file