Name: series-workflowpszws Phase: Succeeded StartedAt: 2026-07-25 02:52:43 +0000 UTC FinishedAt: 2026-07-25 05:27:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[0] Phase: Succeeded StartedAt: 2026-07-25 02:52:43 +0000 UTC FinishedAt: 2026-07-25 03:20:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 02:52:43 +0000 UTC FinishedAt: 2026-07-25 03:20:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTUALIZATION", "KVM", "KVM_AMD", "KVM_AMD_SEV", "CRYPTO_DEV_CCP_DD", "CRYPTO_DEV_SP_PSP", "AMD_IOMMU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTUALIZATION", "KVM", "KVM_AMD", "KVM_AMD_SEV", "CRYPTO_DEV_CCP_DD", "CRYPTO_DEV_SP_PSP", "AMD_IOMMU" ], "series_id": "3f5ca8b7-3b82-450f-964b-4559c438af07" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "sev_mem_enc_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRVQUxJWkFUSU9OJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfQ0NQX0REJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nldl9tZW1fZW5jX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljIGluIEtWTSBTRVYgZGVidWcgY3J5cHRvZ3JhcGh5IGZ1bmN0aW9ucyAoc2V2X2RiZ19kZWNyeXB0X3Nsb3cgYW5kIHNldl9kYmdfZW5jcnlwdF9zbG93KS4gSXQgYWxsb2NhdGVzIGEgZnVsbCBwYWdlIGluc3RlYWQgb2YgdXNpbmcga21hbGxvYyB3aGVuIFNFVi1TTlAgaXMgYWN0aXZlIHRvIHByZXZlbnQgY29uY3VycmVudCBhY2Nlc3NlcyBkdXJpbmcgUFNQIGRyaXZlciBSTVAgdXBkYXRlcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyAoS1ZNX1NFVl9EQkdfREVDUllQVCBhbmQgS1ZNX1NFVl9EQkdfRU5DUllQVCkgd2hlbiBydW5uaW5nIG9uIHN1cHBvcnRlZCBBTUQgaGFyZHdhcmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NGM0NzE0NzY5ZWMxYzU0ZTA2OWYxYmEyZTVmY2ViYTA2ZmJiNTRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMDM6MTc6MzMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDc0ZmIxNTU1MWU4M2ZhLi44MDNiZDM5Njk1ZmRkYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC0xMjgwLDkgJiM0MzsxMjgwLDI4IEBAIHN0YXRpYyB2b2lkICpzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgX192YSxcbiBcdGlmIChXQVJOX09OX09OQ0UoKCpwYSBcdTAwMjYgUEFHRV9NQVNLKSAhPSAoKCpwYSAmIzQzOyAqbnJfYnl0ZXMgLSAxKSBcdTAwMjYgUEFHRV9NQVNLKSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgU05QIGlzIGVuYWJsZWQsIGkuZS4gdGhlIFJNUCBpcyBhY3RpdmUsIGFsbG9jYXRlIGEgZnVsbCBwYWdlIHRvXG4mIzQzO1x0ICogcHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIHRvIHRoZSBwYWdlLiAgQXMgcmVxdWlyZWQgYnkgZmlybXdhcmUsXG4mIzQzO1x0ICogdGhlIFBTUCBkcml2ZXIgdXBkYXRlcyB0aGUgUk1QIHRvIHRlbXBvcmFyaWx5IHRyYW5zZmVyIG93bmVyc2hpcCBvZlxuJiM0MztcdCAqIHRoZSBwYWdlIHRvIEZpcm13YXJlIHdoaWxlIHRoZSB7REUsRU59Q1JZUFQgb3BlcmF0aW9uIGlzIGluLXByb2dyZXNzLFxuJiM0MztcdCAqIGFuZCBzbyBjb25jdXJyZW50IHNvZnR3YXJlIGFjY2Vzc2VzIHRvIHRoZSBwYWdlIHdpbGwgZW5jb3VudGVyXG4mIzQzO1x0ICogc2VlbWluZ2x5IHNwdXJpb3VzIFJNUCAjUEYgdmlvbGF0aW9uc1xuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuJiM0MztcdFx0cmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xuJiM0MztcbiBcdHJldHVybiBrbWFsbG9jKCpucl9ieXRlcywgR0ZQX0tFUk5FTCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZSh2b2lkICpidWYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbiYjNDM7XHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWYpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGtmcmVlKGJ1Zik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxuIFx0XHRcdFx0c3RydWN0IHBhZ2UgKnNyY19wLCB1bnNpZ25lZCBsb25nIGRzdCxcbiBcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIGludCAqZXJyKVxuQEAgLTEzMDQsNyAmIzQzOzEzMjMsNyBAQCBzdGF0aWMgaW50IHNldl9kYmdfZGVjcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsXG4gXHRpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWRzdCwgYnVmICYjNDM7IChzcmMgXHUwMDI2IDE1KSwgbGVuKSlcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gb3V0OlxuLVx0a2ZyZWUoYnVmKTtcbiYjNDM7XHRzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZShidWYpO1xuIFx0cmV0dXJuIHI7XG4gfVxuIFxuQEAgLTEzMzcsNyAmIzQzOzEzNTYsNyBAQCBzdGF0aWMgaW50IHNldl9kYmdfZW5jcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsXG4gXHRcdHIgPSBzZXZfaXNzdWVfZGJnX2NtZChrdm0sIF9fc21lX3NldChfX3BhKGJ1ZikpLCBkc3RfcGEsXG4gXHRcdFx0XHQgICAgICBucl9ieXRlcywgS1ZNX1NFVl9EQkdfRU5DUllQVCwgZXJyKTtcbiBvdXQ6XG4tXHRrZnJlZShidWYpO1xuJiM0MztcdHNldl9kYmdfY3J5cHRfc2xvd19mcmVlKGJ1Zik7XG4gXHRyZXR1cm4gcjtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRVQUxJWkFUSU9OJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfQ0NQX0REJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nldl9tZW1fZW5jX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljIGluIEtWTSBTRVYgZGVidWcgY3J5cHRvZ3JhcGh5IGZ1bmN0aW9ucyAoc2V2X2RiZ19kZWNyeXB0X3Nsb3cgYW5kIHNldl9kYmdfZW5jcnlwdF9zbG93KS4gSXQgYWxsb2NhdGVzIGEgZnVsbCBwYWdlIGluc3RlYWQgb2YgdXNpbmcga21hbGxvYyB3aGVuIFNFVi1TTlAgaXMgYWN0aXZlIHRvIHByZXZlbnQgY29uY3VycmVudCBhY2Nlc3NlcyBkdXJpbmcgUFNQIGRyaXZlciBSTVAgdXBkYXRlcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyAoS1ZNX1NFVl9EQkdfREVDUllQVCBhbmQgS1ZNX1NFVl9EQkdfRU5DUllQVCkgd2hlbiBydW5uaW5nIG9uIHN1cHBvcnRlZCBBTUQgaGFyZHdhcmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NGM0NzE0NzY5ZWMxYzU0ZTA2OWYxYmEyZTVmY2ViYTA2ZmJiNTRkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMjUgMDM6MTc6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwppbmRleCA3NGZiMTU1NTFlODNmYS4uODAzYmQzOTY5NWZkZGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwpAQCAtMTI4MCw5ICYjNDM7MTI4MCwyOCBAQCBzdGF0aWMgdm9pZCAqc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIF9fdmEsCiAJaWYgKFdBUk5fT05fT05DRSgoKnBhICZhbXA7IFBBR0VfTUFTSykgIT0gKCgqcGEgJiM0MzsgKm5yX2J5dGVzIC0gMSkgJmFtcDsgUEFHRV9NQVNLKSkpCiAJCXJldHVybiBOVUxMOwogCiYjNDM7CS8qCiYjNDM7CSAqIElmIFNOUCBpcyBlbmFibGVkLCBpLmUuIHRoZSBSTVAgaXMgYWN0aXZlLCBhbGxvY2F0ZSBhIGZ1bGwgcGFnZSB0bwomIzQzOwkgKiBwcmV2ZW50IGNvbmN1cnJlbnQgYWNjZXNzZXMgdG8gdGhlIHBhZ2UuICBBcyByZXF1aXJlZCBieSBmaXJtd2FyZSwKJiM0MzsJICogdGhlIFBTUCBkcml2ZXIgdXBkYXRlcyB0aGUgUk1QIHRvIHRlbXBvcmFyaWx5IHRyYW5zZmVyIG93bmVyc2hpcCBvZgomIzQzOwkgKiB0aGUgcGFnZSB0byBGaXJtd2FyZSB3aGlsZSB0aGUge0RFLEVOfUNSWVBUIG9wZXJhdGlvbiBpcyBpbi1wcm9ncmVzcywKJiM0MzsJICogYW5kIHNvIGNvbmN1cnJlbnQgc29mdHdhcmUgYWNjZXNzZXMgdG8gdGhlIHBhZ2Ugd2lsbCBlbmNvdW50ZXIKJiM0MzsJICogc2VlbWluZ2x5IHNwdXJpb3VzIFJNUCAjUEYgdmlvbGF0aW9ucwomIzQzOwkgKi8KJiM0MzsJaWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpCiYjNDM7CQlyZXR1cm4gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiYjNDM7CiAJcmV0dXJuIGttYWxsb2MoKm5yX2J5dGVzLCBHRlBfS0VSTkVMKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHNldl9kYmdfY3J5cHRfc2xvd19mcmVlKHZvaWQgKmJ1ZikKJiM0Mzt7CiYjNDM7CWlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKQomIzQzOwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zik7CiYjNDM7CWVsc2UKJiM0MzsJCWtmcmVlKGJ1Zik7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLAogCQkJCXN0cnVjdCBwYWdlICpzcmNfcCwgdW5zaWduZWQgbG9uZyBkc3QsCiAJCQkJdW5zaWduZWQgaW50IGxlbiwgaW50ICplcnIpCkBAIC0xMzA0LDcgJiM0MzsxMzIzLDcgQEAgc3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLAogCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopZHN0LCBidWYgJiM0MzsgKHNyYyAmYW1wOyAxNSksIGxlbikpCiAJCXIgPSAtRUZBVUxUOwogb3V0OgotCWtmcmVlKGJ1Zik7CiYjNDM7CXNldl9kYmdfY3J5cHRfc2xvd19mcmVlKGJ1Zik7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTEzMzcsNyAmIzQzOzEzNTYsNyBAQCBzdGF0aWMgaW50IHNldl9kYmdfZW5jcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsCiAJCXIgPSBzZXZfaXNzdWVfZGJnX2NtZChrdm0sIF9fc21lX3NldChfX3BhKGJ1ZikpLCBkc3RfcGEsCiAJCQkJICAgICAgbnJfYnl0ZXMsIEtWTV9TRVZfREJHX0VOQ1JZUFQsIGVycik7CiBvdXQ6Ci0Ja2ZyZWUoYnVmKTsKJiM0MzsJc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUoYnVmKTsKIAlyZXR1cm4gcjsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTU2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtWTSBTRVYgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBtb2RpZnlpbmcgYHNldl9kYmdfY3J5cHRfc2xvd19hbGxvY2AgYW5kIGludHJvZHVjaW5nIGEgY29ycmVzcG9uZGluZyBgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWVgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBoZXJlIGlzIGhvdyB0aGV5IGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGluIGBzZXZfZGJnX2RlY3J5cHRfc2xvd2AgYW5kIGBzZXZfZGJnX2VuY3J5cHRfc2xvd2AuIElmIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgaXMgc2V0LCBtZWFuaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggU0VWLVNOUCBjYXBhYmxlIGhhcmR3YXJlIChvciBhdCBsZWFzdCBlbXVsYXRpbmcgaXQpLCB0aGV5JiMzOTtyZSBub3cgdXNpbmcgYF9fZ2V0X2ZyZWVfcGFnZWAgZm9yIGEgZnVsbCBwYWdlIGFsbG9jYXRpb24gaW5zdGVhZCBvZiBga21hbGxvY2AsIGFuZCBjb3JyZXNwb25kaW5nbHksIGBmcmVlX3BhZ2VgIGluc3RlYWQgb2YgYGtmcmVlYCB0byByZWxlYXNlIHRoZSBtZW1vcnkuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgcmVhY2hhYmxlLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaXMgaXQgd29ydGggdGhlIGVmZm9ydCB0byBmdXp6IGl0PyBUaGlzIGlzIEtWTSBTRVYgY29kZSwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgQU1EIHByb2Nlc3NvcnMgYW5kIHRoZWlyIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gZmVhdHVyZXMgaW4gbXkgbWluZC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgYWN0dWFsbHkgZnV6eiB0aGlzIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJIGtub3cgU0VWIGFuZCBTRVYtU05QIGFyZSBvZnRlbiB0aWVkIHRvIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQsIGJ1dCBJIGFsc28gcmVjYWxsIEtWTSBTRVYgY2FuIGJlIHRlc3RlZCB3aXRoIGVtdWxhdGlvbiBpZiB0aGUgaG9zdCBkb2VzbiYjMzk7dCBoYXZlIGl0IG5hdGl2ZWx5LgoKV2FpdCBhIHNlY29uZC4uLiBzeXprYWxsZXIhIERvZXNuJiMzOTt0IHN5emthbGxlciBoYXZlIEtWTSBmdXp6aW5nPyBBbmQgaWYgc28sIGRvZXMgaXQgZXZlbiB0b3VjaCBTRVYgZnVuY3Rpb25hbGl0eT8gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCBkb2VzLiBZZXMsIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQuIE9rYXksIHRoZW4sIGxldCYjMzk7cyBmaW5kIHRoZSBLY29uZmlnIHRvIGNvbmZpcm0uIFRoZSBmaWxlIGluIHF1ZXN0aW9uLCBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AsIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1fQU1EX1NFVmAgaXMgZW5hYmxlZC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGF0JiMzOTtzIHRoZSBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGRlcGVuZGVuY2llcyBvZiBgS1ZNX0FNRF9TRVZgOgoKKipBbmFseXppbmcgS1ZNX0FNRF9TRVYgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtWTV9BTURfU0VWYC4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYS4gT2J2aW91c2x5LCBzaW5jZSBpdCYjMzk7cyByZWxhdGVkIHRvIEFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpLCBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGJyb2FkZXIgS1ZNIHZpcnR1YWxpemF0aW9uIGluZnJhc3RydWN0dXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1tZWRpYXRlIGNvbXBvbmVudHMgaXQgcmVsaWVzIG9uLiBJcyBpdCBhIG1vZHVsZSB0aGF0IGxpbmtzIGludG8gdGhlIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHksIHBlcmhhcHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaHlwZXJ2aXNvciBvciBzcGVjaWZpYyBBTUQtcmVsYXRlZCBoYXJkd2FyZSBmZWF0dXJlcyB0aHJvdWdoIGV4aXN0aW5nIGludGVyZmFjZXM/CgpJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIHRoaXMgaW4gbGF5ZXJzLiBGaXJzdCwgSSYjMzk7bGwgaWRlbnRpZnkgdGhlIGJhc2UgS1ZNIGNvbXBvbmVudHMuIElzIGl0IGNhbGxpbmcgb24gdGhlIHN0YW5kYXJkIEtWTSBBUEk/IERvZXMgaXQgdXNlIHNwZWNpZmljIEFNRC1zcGVjaWZpYyByZWdpc3RlcnMgb3IgZXh0ZW5zaW9ucz8gQXJlIHRoZXJlIGFueSBrZXJuZWwtbGV2ZWwgbW9kdWxlcyByZXF1aXJlZCwgbGlrZSBBTUQmIzM5O3MgUFNQIG9yIFNlY3VyZSBNZW1vcnkgRW5jcnlwdGlvbiAoU01FKSBkcml2ZXJzLCB0aGF0IGBLVk1fQU1EX1NFVmAgaW50ZXJhY3RzIHdpdGggZGlyZWN0bHk/IEkmIzM5O2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgaWYgdGhpcyBtb2R1bGUgaXMgbW9yZSBhYm91dCBwcm92aWRpbmcgYW4gYWJzdHJhY3Rpb24gbGF5ZXIgb24gdG9wIG9mIHRob3NlIGV4aXN0aW5nIGNvbXBvbmVudHMuCgpJJiMzOTtsbCBhbHNvIGhhdmUgdG8gbG9vayBmb3IgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcy4gQXJlIHRoZXJlIGFueSBjcnlwdG8gbGlicmFyaWVzLCBzcGVjaWZpYyBmaXJtd2FyZSB2ZXJzaW9ucywgb3Igc2VjdXJpdHktcmVsYXRlZCBhc3BlY3RzIHRoYXQgY291bGQgY29tZSBpbnRvIHBsYXk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aWdodGx5IGNvdXBsZWQgaXQgaXMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgdGhlIEFNRCBTZWN1cmUgUHJvY2Vzc29yLCBhbmQgb3RoZXIgcGxhdGZvcm0gc2VjdXJpdHkgZmVhdHVyZXMuIEkgZXhwZWN0IHRoZXJlJiMzOTtzIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgQU1EJiMzOTtzIFBTUCAoUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yKSBhdCBhIGxvd2VyIGxldmVsIGFuZCB3aWxsIHdhbnQgdG8gZGV0ZXJtaW5lIHRoZSBncmFudWxhcml0eSBvZiB0aGF0IHJlbGF0aW9uc2hpcC4gS25vd2luZyB0aGUgcmVsYXRpb25zaGlwIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBtb2R1bGUmIzM5O3Mgb3ZlcmFsbCBzZWN1cml0eSBwb3N0dXJlLgoKSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IGFuZCBsb29rIGZvciBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgY29uZGl0aW9uIGl0cyBpbmNsdXNpb24gb3IgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9BTURfU0VWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk5NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEtWTSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgbGluZSAxNTYgb3IgdGhlcmVhYm91dHMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJiMzOTttIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBJdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBhIHNwZWNpZmljIGZlYXR1cmUgb3IgZGVwZW5kZW5jeSBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kLCBvciBwZXJoYXBzIGEgYnVnIGZpeCBJJiMzOTttIGNoYXNpbmcgZG93biB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIEtub3dpbmcgdGhlIGFyY2hpdGVjdHVyZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzZXR0aW5ncyBkaXJlY3RseSBhZmZlY3RpbmcgeDg2IHZpcnR1YWxpemF0aW9uIGJlaGF2aW9yIC0gdGhpbmdzIGxpa2UgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucywgTVNSIGhhbmRsaW5nLCBvciBpbnRlcnJ1cHQgZGVsaXZlcnkgbWVjaGFuaXNtcy4gSSBhbnRpY2lwYXRlIHRoaXMgbGluZSB3aWxsIGVpdGhlciBiZSBhIHJlbGV2YW50IG9wdGlvbiBkZWZpbml0aW9uIGl0c2VsZiwgb3IgYSByZWZlcmVuY2UgdG8gYW5vdGhlciBzZWN0aW9uIG9yIGRlcGVuZGVuY3kgd2l0aGluIHRoZSBLY29uZmlnIHN0cnVjdHVyZS4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyB3aGF0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0NjpcdGNvbmZpZyBLVk1fQU1EXG4gMTQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAxNDg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcbiAxNDk6XHRcdGhlbHBcbiAxNTA6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXG4gMTUxOlx0XHQgIChTVk0pIGV4dGVuc2lvbnMuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDE1NDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0tYW1kLlxuIDE1NTpcdFxuIDE1NjpcdGNvbmZpZyBLVk1fQU1EX1NFVlxuIDE1NzpcdFx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4gMTU4Olx0XHRkZWZhdWx0IHlcbiAxNTk6XHRcdGRlcGVuZHMgb24gS1ZNX0FNRCBcdTAwMjZcdTAwMjYgWDg2XzY0XG4gMTYwOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFx1MDAyNlx1MDAyNiAhKEtWTV9BTUQ9eSBcdTAwMjZcdTAwMjYgQ1JZUFRPX0RFVl9DQ1BfREQ9bSlcbiAxNjE6XHRcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxuIDE2MjpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4gMTYzOlx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcbiAxNjQ6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuIDE2NTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE2NjpcdFx0aGVscFxuIDE2NzpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXG4gMTY4Olx0XHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXG4gMTY5Olx0XHQgIEVuY3J5cHRlZCBTdGF0ZSAoU0VWLUVTKSwgYW5kIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxuIDE3MDpcdFx0ICBTZWN1cmUgTmVzdGVkIFBhZ2luZyAoU0VWLVNOUCkgdGVjaG5vbG9naWVzIG9uIEFNRCBwcm9jZXNzb3JzLlxuIDE3MTpcdFxuIDE3MjpcdGNvbmZpZyBLVk1fSU9BUElDXG4gMTczOlx0XHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4gMTc0Olx0XHRkZWZhdWx0IHlcbiAxNzU6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NzYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGRlcGVuZGVuY2llcywgYXMgaWYgdGhleSB3ZXJlIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGVwZW5kZW5jaWVzLCBEZXBlbmRlbmNpZXMgRXZlcnl3aGVyZSEqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0aGUgYEtWTV9BTURfU0VWYCBmZWF0dXJlLCB3aGljaCBpcyByaWdodCBpbiBteSB3aGVlbGhvdXNlIHdoZW4gZGVhbGluZyB3aXRoIHNlY3VyZSB2aXJ0dWFsaXphdGlvbiBvbiBBTUQgaGFyZHdhcmUsIGhhcyBhIGZldyBjcml0aWNhbCBkZXBlbmRlbmNpZXMuIFNwZWNpZmljYWxseSwgaXQgcmVsaWVzIG9uIGBLVk1fQU1EYCAob2J2aW91c2x5KSwgYFg4Nl82NGAgKHRoYXQmIzM5O3MgYSBnaXZlbiBpbiB0aGlzIGNvbnRleHQpLCBhbmQsIGhtbSwgYENSWVBUT19ERVZfU1BfUFNQYC4gTm93LCBgS1ZNX0FNRGAgYW5kIGBYODZfNjRgIEkgY29tcGxldGVseSB1bmRlcnN0YW5kLCB0aGV5JiMzOTtyZSBmdW5kYW1lbnRhbCB0byB0aGUgd2hvbGUgc2V0dXAuIEJ1dCBgQ1JZUFRPX0RFVl9TUF9QU1Bg4oCmIHRoYXQgcmVxdWlyZXMgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGNyeXB0byBkZXZpY2Ugb3IgZHJpdmVyIGJyaW5ncyB0byB0aGUgdGFibGUgZm9yIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIHdoZXJlIHRoZSBzZWN1cml0eSBhbmQgaW50ZWdyaXR5IHJlc2lkZS4gV2hhdCYjMzk7cyB0aGUgbGluayB3aXRoIHRoZSBQU1AgKFBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3Nvcik/IExldCYjMzk7cyBkaWcgaW50byBgQ1JZUFRPX0RFVl9TUF9QU1BgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc9MjM9Y29uZmlnIENSWVBUT19ERVZfQ0NQX0NSWVBUT1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM3LVxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc6Mzg6Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7UGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApIGRldmljZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTkxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQ0NQIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1RpbWUgdG8gZGlnIGludG8gdGhlIGBkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM4LiYjMzQ7IEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIENDUCBjcnlwdG8gZW5naW5lLiBJJiMzOTttIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhhdCBsaW5lIGJlY2F1c2UgSSB2YWd1ZWx5IHJlY2FsbCBzb21lIGNyaXRpY2FsIHNldHRpbmcgYmVpbmcgZGVmaW5lZCB0aGVyZSAtIG1heWJlIHJlbGF0ZWQgdG8ga2V5IHNpemUsIHN1cHBvcnRlZCBhbGdvcml0aG1zLCBvciBwZXJoYXBzIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIHF1aWNrbHkgemVybyBpbiBvbiBpdCBhbmQgZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIHdoYXQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyBjcnVjaWFsIGZvciBhbnkgZGVlcGVyIGFuYWx5c2lzIG9yIG1vZGlmaWNhdGlvbiBJIG5lZWQgdG8gcGVyZm9ybS4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcdHNlbGVjdCBDUllQVE9fQVVUSEVOQ1xuICAzMTpcdFx0c2VsZWN0IENSWVBUT19SU0FcbiAgMzI6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FFU1xuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBTdXBwb3J0IGZvciB1c2luZyB0aGUgY3J5cHRvZ3JhcGhpYyBBUEkgd2l0aCB0aGUgQU1EIENyeXB0b2dyYXBoaWNcbiAgMzU6XHRcdCAgQ29wcm9jZXNzb3IuIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG9mZmxvYWQgb2YgU0hBIGFuZCBBRVMgYWxnb3JpdGhtcy5cbiAgMzY6XHRcdCAgSWYgeW91IGNob29zZSAmIzM5O00mIzM5OyBoZXJlLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjY3BfY3J5cHRvLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxuICAzOTpcdFx0Ym9vbCBcJiMzNDtQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkgZGV2aWNlXCYjMzQ7XG4gIDQwOlx0XHRkZWZhdWx0IHlcbiAgNDE6XHRcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfREQgXHUwMDI2XHUwMDI2IFg4Nl82NCBcdTAwMjZcdTAwMjYgQU1EX0lPTU1VXG4gIDQyOlx0XHRzZWxlY3QgUENJX1RTTSBpZiBQQ0lcbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCBQcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBBTUQgUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApLlxuICA0NTpcdFx0IFRoZSBQU1AgaXMgYSBkZWRpY2F0ZWQgcHJvY2Vzc29yIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3Iga2V5XG4gIDQ2Olx0XHQgbWFuYWdlbWVudCBjb21tYW5kcyBpbiBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIG1vZGUsXG4gIDQ3Olx0XHQgYWxvbmcgd2l0aCBzb2Z0d2FyZS1iYXNlZCBUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCAoVEVFKSB0b1xuICA0ODpcdFx0IGVuYWJsZSB0aGlyZC1wYXJ0eSB0cnVzdGVkIGFwcGxpY2F0aW9ucy5cbiAgNDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcyMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYW5kIHRoaXMgaXMgYSBicmllZiBtZW50YWwgbm90ZToKCioqRGVwZW5kZW5jaWVzIGFuZCBWZXJpZmljYXRpb24qKgoKUmlnaHQsIHNvIGBDUllQVE9fREVWX1NQX1BTUGAgaXMgY29udGluZ2VudCBvbiBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBgWDg2XzY0YCwgYW5kIGBBTURfSU9NTVVgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBsaWtlbHkgYSBzZWN1cml0eS1mb2N1c2VkIG1vZHVsZSBvciBzdWJzeXN0ZW0gdGhhdCByZXF1aXJlcyBjZXJ0YWluIGhhcmR3YXJlIGFuZCB1bmRlcmx5aW5nIGNyeXB0b2dyYXBoaWMgc2VydmljZXMuIE5vdywgZ2l2ZW4gdGhhdCBkZXBlbmRlbmN5IGNoYWluLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdmVyaWZ5IHRoZSBzdGF0ZSBvZiBgQ1JZUFRPX0RFVl9DQ1BfRERgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvcmUgY29tcG9uZW50IGl0IHJlbGllcyB1cG9uIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCBiZWNhdXNlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoYXQgY29tcG9uZW50IGRpcmVjdGx5IGRpY3RhdGVzIHRoZSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbnMgb2YgdGhlIGNvbXBvbmVudHMgd2hpY2ggYXJlIGRlcGVuZGVudCB1cG9uIGl0LiBJIG11c3QgY2hlY2sgb24gYENSWVBUT19ERVZfQ0NQX0REYCB0byBzZWUgaWYgdGhhdCYjMzk7cyBjb25maWd1cmVkIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ1JZUFRPX0RFVl9DQ1BfREQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjI6Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNzMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ3J5cHRvIExhbmRzY2FwZSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDIuIFRoaXMgcHJvYmFibHkgbWVhbnMgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQ0NQIGNyeXB0byBkZXZpY2UgZHJpdmVyLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgYXZhaWxhYmxlIGFuZCBob3cgaXQmIzM5O3MgY29udHJvbGxlZC4gSXMgaXQgYSBjb3JlIG1vZHVsZSwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lmaWM/IFRoZSBLY29uZmlnIGZpbGUgaXMgdGhlIGtleSB0byB0aGF0LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgbG90IG9mIGBjb25maWdgIGFuZCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyB0byB3b3JrIG91dCB0aGUgcmVsYXRpb25zaGlwcyBhbmQgZGVwZW5kZW5jaWVzLiBJIHdpbGwgbGlrZWx5IGJlIHRyeWluZyB0byBnZXQgYSBncmFzcCBvZiBpdHMgcGxhY2UgaW4gdGhlIHN5c3RlbSYjMzk7cyBsYXJnZXIgY3J5cHRvZ3JhcGhpYyBlY29zeXN0ZW0uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTZWN1cmUgUHJvY2Vzc29yIGRldmljZSBkcml2ZXJcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgfHwgQVJNNjRcbiAgIDU6XHRcdGRlZmF1bHQgbVxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBQcm92aWRlcyBBTUQgU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyLlxuICAgODpcdFx0ICBJZiB5b3UgY2hvb3NlICYjMzk7TSYjMzk7IGhlcmUsIHRoaXMgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNjcC5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgQ1JZUFRPX0RFVl9TUF9DQ1BcbiAgMTE6XHRcdGJvb2wgXCYjMzQ7Q3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBkZXZpY2VcJiMzNDtcbiAgMTI6XHRcdGRlZmF1bHQgeVxuICAxMzpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX0NDUF9ERCBcdTAwMjZcdTAwMjYgRE1BREVWSUNFU1xuICAxNDpcdFx0c2VsZWN0IEhXX1JBTkRPTVxuICAxNTpcdFx0c2VsZWN0IERNQV9FTkdJTkVcbiAgMTY6XHRcdHNlbGVjdCBDUllQVE9fU0hBMVxuICAxNzpcdFx0c2VsZWN0IENSWVBUT19TSEEyNTZcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgUHJvdmlkZXMgdGhlIHN1cHBvcnQgZm9yIEFNRCBDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIChDQ1ApIGRldmljZVxuICAyMDpcdFx0ICB3aGljaCBjYW4gYmUgdXNlZCB0byBvZmZsb2FkIGVuY3J5cHRpb24gb3BlcmF0aW9ucyBzdWNoIGFzIFNIQSwgQUVTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NzkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIHRoaXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlIGFyZSBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGFuZCBgQU1EX0lPTU1VYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIHBhdGggZXZlbiAqcmVhY2hhYmxlKiBpbiBhIFFFTVUgb3IgR0NFIGVudmlyb25tZW50PwoKU0VWLCBvYnZpb3VzbHksIG5lY2Vzc2l0YXRlcyBBTUQgaGFyZHdhcmUgd2l0aCBTRVYgY2FwYWJpbGl0aWVzLiBXZSBrbm93IHRoYXQgU3l6a2FsbGVyIGlzIGRlcGxveWVkIG9uIEdDRSwgYW5kIEdDRSAqZG9lcyogb2ZmZXIgQU1EIGluc3RhbmNlcyB3aXRoIFNFViBzdXBwb3J0IOKAkyBzcGVjaWZpY2FsbHkgdGhlIE4yRCBhbmQgQzJEIGZhbWlsaWVzIGNvbWUgdG8gbWluZC4gVGhlIGNydWNpYWwgcG9pbnQgaXMsIGRvZXMgU3l6a2FsbGVyIHV0aWxpemUgdGhvc2UgQU1EIGluc3RhbmNlcz8gVGhlIGFuc3dlciBpcyB5ZXM7IFN5emthbGxlciBkb2VzIGxldmVyYWdlIHNvbWUgQU1EIGhhcmR3YXJlIGZvciB0ZXN0aW5nLgoKV2UgYWxzbyBrbm93IHRoYXQgUUVNVSBjYW4gZW11bGF0ZSBjZXJ0YWluIGFzcGVjdHMgb2YgaGFyZHdhcmUsIGJ1dCBTRVYgZnVuZGFtZW50YWxseSBuZWVkcyBoYXJkd2FyZSBzdXBwb3J0IHRocm91Z2ggS1ZNLiBUaGUga2V5IHBhcnQgb2YgdGhpcyBwYXRjaCB0b3VjaGVzIGBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NgIGFuZCBgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWVgLCB3aGljaCBhcmUgZGlyZWN0bHkgaW52b2tlZCBieSBgc2V2X2RiZ19kZWNyeXB0X3Nsb3dgIGFuZCBgc2V2X2RiZ19lbmNyeXB0X3Nsb3dgLiBTbywgdGhlIG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIGNoZWNrIHdoZXJlIGBzZXZfZGJnX2RlY3J5cHRfc2xvd2AgZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIG92ZXJhbGwgY29kZWJhc2UuIFRoYXQgd2lsbCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgYXR0YWNrIHN1cmZhY2Ugb2YgdGhpcyBtb2RpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nldl9kYmdfZGVjcnlwdF9zbG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyOTc9c3RhdGljIHZvaWQgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUodm9pZCAqYnVmKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMwNC1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMwNTpzdGF0aWMgaW50IHNldl9kYmdfZGVjcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDYtXHRcdFx0XHRzdHJ1Y3QgcGFnZSAqc3JjX3AsIHVuc2lnbmVkIGxvbmcgZHN0LFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTM2Mz1zdGF0aWMgaW50IHNldl9kYmdfY3J5cHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDIzLVx0XHRlbHNlIGlmIChjbWQgPT0gS1ZNX1NFVl9EQkdfREVDUllQVClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTQyNDpcdFx0XHRyZXQgPSBzZXZfZGJnX2RlY3J5cHRfc2xvdyhrdm0sIHNyYywgc3JjX3AsIGRzdCxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQyNS1cdFx0XHRcdFx0XHQgICBsZW4sIFx1MDAyNmFyZ3AtXHUwMDNlZXJyb3IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDYxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUgYXMgYSBmaWVsZCBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIHNldl9kYmdfY3J5cHQgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIGBzZXZfZGJnX2NyeXB0YC4uLiB3aGVyZSYjMzk7cyB0aGF0IGJlaW5nIHVzZWQgYWdhaW4/IE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbSBgc2V2X2lzc3VlX2NtZGAgb3Igc29tZXRoaW5nIGZ1bmN0aW9uYWxseSBzaW1pbGFyLCBzb21ldGhpbmcgaW52b2x2ZWQgd2l0aCBpc3N1aW5nIGNvbW1hbmRzIHRvIHRoZSBTRVYgKFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24pIGhhcmR3YXJlLCBvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBjcnlwdG8gZW5naW5lcy4gQnV0IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp1bmRlcnN0YW5kKiB0aGUgY29udGV4dCBvZiBpdHMgY2FsbHMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBgc2V2X2RiZ19jcnlwdGAgZnVuY3Rpb24gaXRzZWxmLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mICpob3cqIHRoaXMgaXMgdXNlZC4gVGltZSB0byBjaGVjayB0aGUgc291cmNlLCBjcm9zcy1yZWZlcmVuY2UgdGhlIGNhbGwgc2l0ZXMsIGFuZCBzZWUgd2hhdCB0aGUgY29kZSBmbG93IHRlbGxzIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXZfZGJnX2NyeXB0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyNDA9c3RhdGljIGludCBzZXZfaXNzdWVfZGJnX2NtZChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjX3BhLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI1NS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTI1NjpzdGF0aWMgdm9pZCAqc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIF9fdmEsXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyNTctXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBsb25nICpwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyOTYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEyOTc6c3RhdGljIHZvaWQgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUodm9pZCAqYnVmKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjk4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzMDU9c3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMxMy1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMxNDpcdGJ1ZiA9IHNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzcmNfcCwgc3JjLCBsZW4sIFx1MDAyNnNyY19wYSwgXHUwMDI2bnJfYnl0ZXMpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzE1LVx0aWYgKCFidWYpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzI1LW91dDpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMyNjpcdHNldl9kYmdfY3J5cHRfc2xvd19mcmVlKGJ1Zik7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMjctXHRyZXR1cm4gcjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzMzA9c3RhdGljIGludCBzZXZfZGJnX2VuY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMzOS1cdC8qIERlY3J5cHQgdGhlIF9kZXN0aW5hdGlvbl8gdG8gZG8gYSBSTVcgb24gcGxhaW50ZXh0LiAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzQwOlx0YnVmID0gc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKGRzdF9wLCBkc3QsIGxlbiwgXHUwMDI2ZHN0X3BhLCBcdTAwMjZucl9ieXRlcyk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNDEtXHRpZiAoIWJ1Zilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNTgtb3V0OlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzU5Olx0c2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUoYnVmKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2MC1cdHJldHVybiByO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2Mi1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTM2MzpzdGF0aWMgaW50IHNldl9kYmdfY3J5cHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNjQtXHRcdFx0IHVuc2lnbmVkIGludCBjbWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjQyPWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcwMC1cdGNhc2UgS1ZNX1NFVl9EQkdfRU5DUllQVDpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjcwMTpcdFx0ciA9IHNldl9kYmdfY3J5cHQoa3ZtLCBcdTAwMjZzZXZfY21kLCBzZXZfY21kLmlkKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcwMi1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NjYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHNldl9kYmdfY3J5cHRgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBzZXZfZGJnX2NyeXB0YCBpcyBjYWxsZWQgd2l0aGluIHRoZSBgc2V2X21lbV9lbmNfaW9jdGxgIGZ1bmN0aW9uLCB3aGljaCBpcyBpdHNlbGYgcGFydCBvZiB0aGUgS1ZNIGlvY3RsIGhhbmRsaW5nLiBUaGF0IG1lYW5zLCBhbmQgdGhpcyBpcyBrZXksIHVzZXJzcGFjZSBjYW4gZGVmaW5pdGVseSByZWFjaCBpdCB0aHJvdWdoIHRoZSBgS1ZNX1NFVl9EQkdfREVDUllQVGAgYW5kIGBLVk1fU0VWX0RCR19FTkNSWVBUYCBpb2N0bHMuIENvbnNpZGVyaW5nIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgZnJlZWQgd2l0aGluIHRoZSBLVk0gU0VWIGlvY3RsIHByb2Nlc3MsIHNwZWNpZmljYWxseSBpbXBhY3RpbmcgbWVtb3J5IGFsbG9jYXRpb24vZnJlZWluZywgKnllcyosIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBvdGVudGlhbCBhcmVhIGZvciBpbnRlcmVzdGluZyB2dWxuZXJhYmlsaXRpZXMuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jYCBhbmQgYHNldl9kYmdfY3J5cHRfc2xvd19mcmVlYC4gVGhlIHBhdGNoIGRpY3RhdGVzIHRoYXQgdGhleSBub3cgYWxsb2NhdGUgYW5kIGZyZWUgYSBmdWxsIHBhZ2Ugd2hlbiBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgcmV0dXJucyB0cnVlLiBUaGlzIGlzIHNwZWNpZmljYWxseSB0byBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBhY2Nlc3MgaXNzdWVzIHRvIHRoZSBwYWdlIHRoYXQgbWlnaHQgb2NjdXIgZHVyaW5nIFJNUCB1cGRhdGVzIGZyb20gdGhlIFBTUCBkcml2ZXIuIFRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhcmUgc2lnbmlmaWNhbnQgYW5kIG11c3QgYmUgY2FyZWZ1bGx5IGFuYWx5emVkLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBXZSBkZWZpbml0ZWx5IG5lZWQgYEtWTV9BTURgLCBgS1ZNX0FNRF9TRVZgLCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBgQ1JZUFRPX0RFVl9TUF9QU1BgLCBhbmQgYEFNRF9JT01NVWAgZW5hYmxlZC4gSGFuZyBvbi4uLiBsZXQmIzM5O3MgZG91YmxlIGNoZWNrIHRob3NlIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24uIEFoLCB5ZXMsIGBLVk1fQU1EX1NFVmAgaXMgZGVwZW5kZW50IG9uIGBDUllQVE9fREVWX1NQX1BTUGAgYW5kIHRoZSBleGNsdXNpb24gb2YgYChLVk1fQU1EPXkgJmFtcDsmYW1wOyBDUllQVE9fREVWX0NDUF9ERD1tKWAuIFRodXMsIHdlIHJlcXVpcmUgYENSWVBUT19ERVZfQ0NQX0REPXlgIGFuZCBgQ1JZUFRPX0RFVl9TUF9QU1A9eWAuIFdlIGFsc28ga25vdyB0aGF0IGBBTURfSU9NTVVgIGlzIGNydWNpYWwgZm9yIGBDUllQVE9fREVWX1NQX1BTUGAuIFRoZXJlZm9yZSwgYmVmb3JlIGZ1enppbmcsIGl0JiMzOTtzIHZpdGFsIEkgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgQU1EX0lPTU1VYCB0byBlbnN1cmUgY29tcGxldGUgY292ZXJhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTURfSU9NTVUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0yLSMgQU1EIElPTU1VIHN1cHBvcnRcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6Mzpjb25maWcgQU1EX0lPTU1VXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQtXHRib29sIFwmIzM0O0FNRCBJT01NVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zMi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6MzM6Y29uZmlnIEFNRF9JT01NVV9JT01NVUZEXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTM0LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU9NTVVGRCBmZWF0dXJlcyBmb3IgQU1EIElPTU1VIChFWFBFUklNRU5UQUwpXCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00Mi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6NDM6Y29uZmlnIEFNRF9JT01NVV9ERUJVR0ZTXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQ0LVx0Ym9vbCBcJiMzNDtFbmFibGUgQU1EIElPTU1VIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gQU1EIElPTU1VIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgQU1EIElPTU1VIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHRoZSBjYW5vbmljYWwgbG9jYXRpb24gZm9yIHRoZXNlIHNvcnRzIG9mIGRlZmluaXRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgYXJvdW5kIGxpbmUgMywgd2hpY2ggaXMgdXN1YWxseSB3aGVyZSBhIGdvb2Qgb3ZlcnZpZXcgb3IgZ2VuZXJhbCBkZXNjcmlwdGlvbiBiZWdpbnMsIG9yIGF0IGxlYXN0IHRoZSB0b3AtbGV2ZWwgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0IyBBTUQgSU9NTVUgc3VwcG9ydFxuICAgMzpcdGNvbmZpZyBBTURfSU9NTVVcbiAgIDQ6XHRcdGJvb2wgXCYjMzQ7QU1EIElPTU1VIHN1cHBvcnRcJiMzNDtcbiAgIDU6XHRcdHNlbGVjdCBTV0lPVExCXG4gICA2Olx0XHRzZWxlY3QgUENJX01TSVxuICAgNzpcdFx0c2VsZWN0IFBDSV9BVFNcbiAgIDg6XHRcdHNlbGVjdCBQQ0lfUFJJXG4gICA5Olx0XHRzZWxlY3QgUENJX1BBU0lEXG4gIDEwOlx0XHRzZWxlY3QgSVJRX01TSV9MSUJcbiAgMTE6XHRcdHNlbGVjdCBNTVVfTk9USUZJRVJcbiAgMTI6XHRcdHNlbGVjdCBJT01NVV9BUElcbiAgMTM6XHRcdHNlbGVjdCBJT01NVV9JT1ZBXG4gIDE0Olx0XHRzZWxlY3QgSU9NTVVfU1ZBXG4gIDE1Olx0XHRzZWxlY3QgSU9NTVVfSU9QRlxuICAxNjpcdFx0c2VsZWN0IElPTU1VRkRfRFJJVkVSIGlmIElPTU1VRkRcbiAgMTc6XHRcdHNlbGVjdCBHRU5FUklDX1BUXG4gIDE4Olx0XHRzZWxlY3QgSU9NTVVfUFRcbiAgMTk6XHRcdHNlbGVjdCBJT01NVV9QVF9BTURWMVxuICAyMDpcdFx0c2VsZWN0IElPTU1VX1BUX1g4Nl82NFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE2MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIG1vZHVsZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgbG9jYXRlZCBpbiBgZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZ2AsIHdoaWNoIHN1Z2dlc3RzIGl0JiMzOTtzIEFNRC1zcGVjaWZpYyBmb3IgSU9NTVUgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG5haWwgZG93biBleGFjdGx5IHdoYXQmIzM5O3MgcmVxdWlyZWQgdG8gYnVpbGQgYW5kIGVuYWJsZSB0aGlzIHRoaW5nLiBJdCBzZWVtcyBwcmV0dHkgc2VsZi1jb250YWluZWQsIG5vdCByZXF1aXJpbmcgYW55dGhpbmcgdHJ1bHkgKnN0cmljdCosIGJ1dCBJIHNob3VsZCBkb3VibGUgY2hlY2sgaWYgaXQgaW1wbGljaXRseSByZWxpZXMgb24gYFg4Nl82NGAgZ2l2ZW4gaXRzIGxvY2F0aW9uLCB0aG91Z2ggaXQgbWlnaHQgYmUgaW5jbHVkZWQgYnkgYSBtb3JlIGdlbmVyYWwgaW9tbXUgS2NvbmZpZy4KCkxldCYjMzk7cyBzdGFydCBieSBsaXN0aW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSB0aGluayB3aWxsIGJlIG5lZWRlZC4gSSYjMzk7bSBnb2luZyB0byBlbmFibGU6CgoqICAgYEtWTV9BTURgCiogICBgS1ZNX0FNRF9TRVZgCiogICBgQ1JZUFRPX0RFVl9DQ1BfRERgCiogICBgQ1JZUFRPX0RFVl9TUF9QU1BgCiogICBgQU1EX0lPTU1VYAoKQnV0IGhvbGQgb24sIGBLVk1fQU1EYCAqZG9lcyogZGVwZW5kIG9uIGBLVk1gLiBSaWdodCwgdGhhdCYjMzk7cyBjcnVjaWFsLiBJIGNhbiYjMzk7dCBvdmVybG9vayB0aGF0LiBTbywgSSBoYXZlIHRvIG1ha2Ugc3VyZSBgS1ZNYCBpcyBjb25maWd1cmVkLCB3aGljaCBJIHByb2JhYmx5IGFscmVhZHkgZGlkLiBOb3csIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBkZXBlbmRlbmNpZXMgZm9yIGBLVk1gLCBqdXN0IHRvIGJlIGNlcnRhaW4gSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBvdGhlciBpbXBsaWNpdCByZXF1aXJlbWVudHMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZCBiZWZvcmUgSSBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXHRib29sIFwmIzM0O0NvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cdGJvb2wgXCYjMzQ7U3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXHRib29sIFwmIzM0O1Byb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVx0Ym9vbFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg1NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCYjMzk7cyBWaXJ0dWFsaXphdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgS1ZNYCDigJMgaXQmIzM5O3MgZGVmaW5pdGVseSBhIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ3ksIHRoYXQgbXVjaCBpcyBjbGVhci4gVGhlcmVmb3JlLCBteSBpbW1lZGlhdGUgZm9jdXMgaGFzIHRvIHNoaWZ0IHRvIHRoZSBjb3JlIGBWSVJUVUFMSVpBVElPTmAgZnJhbWV3b3JrIHdpdGhpbiB0aGUga2VybmVsLiBXaGVyZSB3b3VsZCBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoYXQ/IFJpZ2h0LCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtjb25maWcgZmlsZXMgYXJlIHRoZSBwbGFjZSB0byBzdGFydC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBkcmlsbCBkb3duIGludG8gYGFyY2gveDg2L0tjb25maWdgIHRvIHNlZSBob3cgYFZJUlRVQUxJWkFUSU9OYCBpcyBoYW5kbGVkIHRoZXJlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIG5leHQgc3RlcCwgdGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBsaWZlYmxvb2Qgb2YgdGhpcyBzb3J0IG9mIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZJUlRVQUxJWkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDg3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIEtjb25maWcgTG9jYXRpb25zIGZvciBWSVJUVUFMSVpBVElPTioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGUgYFZJUlRVQUxJWkFUSU9OYCBvcHRpb24gaXMgZGVmaW5lZCBpbiB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCB3b3VsZCBiZSB3aXRoaW4gdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZGlyZWN0b3J5LCBnaXZlbiB0aGF0IHdlIGFyZSB0YWxraW5nIGFib3V0IHZpcnR1YWxpemF0aW9uIG9uIHg4NiwgYW5kIEtWTSBpcyBhIGNvbW1vbiB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2d5LiBIb3dldmVyLCBteSBndXQgaXMgdGVsbGluZyBtZSBpdCBtaWdodCBhbHNvIHJlc2lkZSBpbiBhIGhpZ2hlci1sZXZlbCBgYXJjaC94ODYvS2NvbmZpZ2AgZmlsZSBvciBwZXJoYXBzIHNvbWV0aGluZyByZWxhdGVkIHRvIHZob3N0LCBzbyBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBpcyBhbHNvIGEgcG9zc2liaWxpdHkuIEl0IGNvdWxkIGV2ZW4gYmUgc3ByZWFkIGFjcm9zcyBtdWx0aXBsZSBmaWxlcy4gVGhlIGJlc3QgYXBwcm9hY2ggaXMgdG8gYmUgY29tcHJlaGVuc2l2ZS4gTGV0JiMzOTtzIGZpcmUgdXAgYSBgZ3JlcGAgY29tbWFuZCB0byBzZWFyY2ggdGhlIGVudGlyZSBzb3VyY2UgdHJlZSBmb3IgdGhlIHN0cmluZyBgbWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTmAuIFRoaXMgd2lsbCBxdWlja2x5IHJldmVhbCBhbGwgdGhlIGxvY2F0aW9ucyB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCBob3BlZnVsbHkgcGlucG9pbnQgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBmaWxlcyBJIG5lZWQgdG8gZXhhbWluZS4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIGZpbGUgZGVmaW5lcyBpdCwgYW5kIGlkZWFsbHksIEkmIzM5O2xsIHJldmlldyBpdHMgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTY9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNy1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTktXHRib29sIFwmIzM0O1ZpcnR1YWxpemF0aW9uXCYjMzQ7XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc9Nj1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctNy1cbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbi0tXG5hcmNoL21pcHMva3ZtL0tjb25maWc9NT1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC9taXBzL2t2bS9LY29uZmlnLTYtXG5hcmNoL21pcHMva3ZtL0tjb25maWc6NzptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL21pcHMva3ZtL0tjb25maWctOC1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Nj1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTctXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTY9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctNy1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTktXHRib29sIFwmIzM0O1ZpcnR1YWxpemF0aW9uXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnPTU9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy02LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjc6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9Nj1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC94ODYva3ZtL0tjb25maWctNy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVmlydHVhbGl6YXRpb24gQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGltcGxlbWVudGluZyBgVklSVFVBTElaQVRJT05gLiBUaW1lIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIG5lZWQgYFZJUlRVQUxJWkFUSU9OYCBvYnZpb3VzbHksIGZvbGxvd2VkIGJ5IGBLVk1gLiBOb3csIHNpbmNlIEkmIzM5O20gZGVhbGluZyB3aXRoIEFNRCBoYXJkd2FyZSwgSSBzaG91bGQgY29uc2lkZXIgYEtWTV9BTURgLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBgS1ZNX0FNRF9TRVZgIGZvciBzZWN1cmUgZW5jcnlwdGVkIHZpcnR1YWxpemF0aW9uLiBBbmQgbGV0JiMzOTtzIG5vdCBmb3JnZXQgdGhlIGNyeXB0byBkZXZpY2UgZHJpdmVycywgc3BlY2lmaWNhbGx5IGBDUllQVE9fREVWX0NDUF9ERGAgYW5kIGBDUllQVE9fREVWX1NQX1BTUGAuIEZpbmFsbHksIGZvciBwcm9wZXIgSU9NTVUgc3VwcG9ydCwgSSBzaG91bGQgZW5hYmxlIGBBTURfSU9NTVVgLgoKUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGNvcmUgc2V0LiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW4gb3JkZXIuIGBLVk1gIGl0c2VsZiBoYXMgYSBidW5jaCBvZiBwcmVyZXF1aXNpdGVzIOKAkyBgSElHSF9SRVNfVElNRVJTYCwgYFg4Nl9MT0NBTF9BUElDYCwgYFBSRUVNUFRfTk9USUZJRVJTYCwgYE1NVV9OT1RJRklFUmAsIGBIQVZFX0tWTWAsIGBFVkVOVEZEYCwgYW5kIGBJUlFfQllQQVNTX01BTkFHRVJgLiBNb3N0IG9mIHRoZXNlIHNob3VsZCBiZSBzdGFuZGFyZCBhbmQgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgSSYjMzk7bGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZTogdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgb24gd2hhdCYjMzk7cyByZXF1aXJlZCBmb3IgYSBjbGVhbiBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRcdHNlbGVjdCBIQVZFX0tWTV9NU0lcbiAgNDE6XHRcdHNlbGVjdCBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXG4gIDQyOlx0XHRzZWxlY3QgSEFWRV9LVk1fTk9fUE9MTFxuICA0MzpcdFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG4gIDQ0Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXG4gIDQ1Olx0XHRzZWxlY3QgS1ZNX1ZGSU9cbiAgNDY6XHRcdHNlbGVjdCBIQVZFX0tWTV9QTV9OT1RJRklFUiBpZiBQTVxuICA0NzpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG4gIDQ4Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxuICA0OTpcdFx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXG4gIDUwOlx0XHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxuICA1MTpcdFxuICA1MjpcdGNvbmZpZyBLVk1cbiAgNTM6XHRcdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuICA1NDpcdFx0ZGVwZW5kcyBvbiBYODZfTE9DQUxfQVBJQ1xuICA1NTpcdFx0aGVscFxuICA1NjpcdFx0ICBTdXBwb3J0IGhvc3RpbmcgZnVsbHkgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMgdXNpbmcgaGFyZHdhcmVcbiAgNTc6XHRcdCAgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gIFlvdSB3aWxsIG5lZWQgYSBmYWlybHkgcmVjZW50XG4gIDU4Olx0XHQgIHByb2Nlc3NvciBlcXVpcHBlZCB3aXRoIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuIFlvdSB3aWxsIGFsc29cbiAgNTk6XHRcdCAgbmVlZCB0byBzZWxlY3Qgb25lIG9yIG1vcmUgb2YgdGhlIHByb2Nlc3NvciBtb2R1bGVzIGJlbG93LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg2MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBnZXR0aW5nIGBLVk1gIHdvcmtpbmcgb3B0aW1hbGx5LCBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBgWDg2X0xPQ0FMX0FQSUNgIGlzIGEgY29yZSBkZXBlbmRlbmN5LiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBmdW5kYW1lbnRhbCB0byBob3cgdGhlIENQVSBpbnRlcmFjdHMgd2l0aCBpbnRlcnJ1cHRzIGFuZCB2aXJ0dWFsaXphdGlvbi4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MgZW5hYmxlZC4gVGhhdCYjMzk7cyBgVklSVFVBTElaQVRJT05gLCBgS1ZNYCwgYEtWTV9BTURgLCBgS1ZNX0FNRF9TRVZgLCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBhbmQgYENSWVBUT19ERVZfU1BfUFNQYC4gVGhlIEFNRC1zcGVjaWZpYyBvbmVzIGFyZSBvYnZpb3VzbHkgY3J1Y2lhbCBmb3IgbXkgc2V0dXAsIGFuZCBgQU1EX0lPTU1VYCBpcyBhIG11c3QuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBzdXNwZWN0IHNvbWUgb2YgdGhlIGNyeXB0byBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBpbnRlci1yZWxhdGVkLiBJIHdhbnQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ1JZUFRPX0RFVl9DQ1BfRERgLiBMZXQgbWUgZGlnIGludG8gdGhvc2Ugbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTZWN1cmUgUHJvY2Vzc29yIGRldmljZSBkcml2ZXJcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgfHwgQVJNNjRcbiAgIDU6XHRcdGRlZmF1bHQgbVxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBQcm92aWRlcyBBTUQgU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyLlxuICAgODpcdFx0ICBJZiB5b3UgY2hvb3NlICYjMzk7TSYjMzk7IGhlcmUsIHRoaXMgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNjcC5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgQ1JZUFRPX0RFVl9TUF9DQ1BcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNDAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIFByb2Nlc3NvciBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIFRoZSBsb2dpYyBoaW5nZXMgb24gdGhlIHByb2Nlc3NvciBhcmNoaXRlY3R1cmUuIEl0ICpyZWFsbHkqIGRlcGVuZHMgb24gd2hldGhlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIEFNRCBDUFUgb3IgYW4gQVJNNjQgb25lLiBUaGF0IGBDUFVfU1VQX0FNRCB8fCBBUk02NGAgY29uZGl0aW9uIGlzIHRoZSBrZXkuIEFuZCwgKm9mIGNvdXJzZSosIGBDUFVfU1VQX0FNRGAgaXMgcHJldHR5IG11Y2ggdGhlIGRlZmF1bHQgZm9yIGFueSBzdGFuZGFyZCB4ODYgc2V0dXAuIFdlIGNhbiBwcm9iYWJseSBtYWtlIHRoYXQgYXNzdW1wdGlvbi4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIElPTU1Vcy4gSXMgdGhlcmUgYW55IGRlcGVuZGVuY3kgdGllZCB0byBgQU1EX0lPTU1VYCB0aGF0IG5lZWRzIHRvIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbj8gSSB3b25kZXIgaWYgdGhlcmUgaXMgYW4gaW50ZXJhY3Rpb24/IEkgc2hvdWxkIGV4cGxvcmUgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0IyBBTUQgSU9NTVUgc3VwcG9ydFxuICAgMzpcdGNvbmZpZyBBTURfSU9NTVVcbiAgIDQ6XHRcdGJvb2wgXCYjMzQ7QU1EIElPTU1VIHN1cHBvcnRcJiMzNDtcbiAgIDU6XHRcdHNlbGVjdCBTV0lPVExCXG4gICA2Olx0XHRzZWxlY3QgUENJX01TSVxuICAgNzpcdFx0c2VsZWN0IFBDSV9BVFNcbiAgIDg6XHRcdHNlbGVjdCBQQ0lfUFJJXG4gICA5Olx0XHRzZWxlY3QgUENJX1BBU0lEXG4gIDEwOlx0XHRzZWxlY3QgSVJRX01TSV9MSUJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MTIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYSBCb29sZWFuIENoYW5nZSoqCgpPa2F5LCBzbyBpdCYjMzk7cyBqdXN0IGEgYm9vbGVhbiwgaW5pdGlhbGx5LiBCdXQgYXMgd2Uga25vdywgZXZlbiBzZWVtaW5nbHkgc2ltcGxlIGNoYW5nZXMgY2FuIHJpcHBsZSBvdXR3YXJkcy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIHNjb3BlIG9mIHRoaXMgbW9kaWZpY2F0aW9uLiBJIG5lZWQgdG8gdHJhY2UgaXRzIHBhdGggdGhyb3VnaCB0aGUgY29kZS4KClRoZSBmb2N1cyBpcyBvbiBob3cgdGhpcyBib29sIGFmZmVjdHMgdGhlIGBzZXZfZGJnX2NyeXB0YCBmYW1pbHksIHNwZWNpZmljYWxseSB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGZ1bmN0aW9ucy4gSSYjMzk7dmUgaWRlbnRpZmllZCBgc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jYCBhbmQgYHNldl9kYmdfY3J5cHRfc2xvd19mcmVlYCwgYm90aCBtYXJrZWQgYXMgc3RhdGljLCBhcyB0aGUga2V5IHRhcmdldHMuIFRoZXkgYXJlIGNhbGxlZCBmcm9tIHRoZSBhbHNvIHN0YXRpYyBgc2V2X2RiZ19kZWNyeXB0X3Nsb3dgIGFuZCBgc2V2X2RiZ19lbmNyeXB0X3Nsb3dgLiBUaG9zZSB0d28gZnVuY3Rpb25zLCBpbiB0dXJuLCBhcmUgY2FsbGVkIGJ5IGBzZXZfZGJnX2NyeXB0YCwgd2hpY2ggaXMgaXRzZWxmIHN0YXRpYy4KCk5vdyBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IGBzZXZfZGJnX2NyeXB0YCBpcyBjYWxsZWQgYnkgYHNldl9tZW1fZW5jX2lvY3RsYC4gVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBub3Qgc3RhdGljLiBUaGVyZWZvcmUsIGl0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCB0byB0aGlzIHdob2xlIGNoYWluLiBUaGUgYm9vbGVhbiBjaGFuZ2UgcG90ZW50aWFsbHkgYWZmZWN0cyBmdW5jdGlvbnMgdGhhdCBhcmUgYXZhaWxhYmxlIHRvIHVzZXJzIG9mIHRoZSBrZXJuZWwgbW9kdWxlLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG11c3QgdGhvcm91Z2hseSBleGFtaW5lIGBzZXZfbWVtX2VuY19pb2N0bGAgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBib29sZWFuIGFuZCBpdHMgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V2X21lbV9lbmNfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjYzMj1zdGF0aWMgaW50IHNucF9lbmFibGVfY2VydHMoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0MS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY0MjppbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzE2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlNFViBJT0NUTCBFbnRyeSBQb2ludCBJbnZlc3RpZ2F0aW9uKioKClJpZ2h0LCBzbyBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIHRoZSBhc3N1bWVkIGVudHJ5IHBvaW50IGZvciBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIGlvY3Rscy4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gd2UmIzM5O3JlIHN0YXJ0aW5nIHdpdGguIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IGlzIHRoaXMgKnRoZSogb25seSBlbnRyeSBwb2ludD8gQXJlIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIFNFViBpb2N0bCBoYW5kbGluZyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGRvIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbHRlcm5hdGl2ZXMgb3IgaWYgc29tZXRoaW5nIGlzIG1pc3NlZC4gTGV0IG1lIHBpdm90IHRvIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCBub3cgYW5kIHZlcmlmeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V2X21lbV9lbmNfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI2MzI9c3RhdGljIGludCBzbnBfZW5hYmxlX2NlcnRzKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDEtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2NDI6aW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDMte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTMyNT1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NDMtXHQuZGV2X2dldF9hdHRyID0gc2V2X2Rldl9nZXRfYXR0cixcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTQ0NDpcdC5tZW1fZW5jX2lvY3RsID0gc2V2X21lbV9lbmNfaW9jdGwsXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NDUtXHQubWVtX2VuY19yZWdpc3Rlcl9yZWdpb24gPSBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24sXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD05Nzg9dm9pZCBzZXZfZXNfdW5tYXBfZ2hjYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05ODAtI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODE6aW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05ODItaW50IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDA4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBTRVYgTWVtb3J5IEVuY3J5cHRpb24gSU9DVEwqKgoKQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIGluZGVlZCB0aGUgcHJpbWFyeSBmdW5jdGlvbiBJIG5lZWQgdG8gY29uY2VudHJhdGUgb24gaGVyZS4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQsIHNvIHRoYXQgZmVlbHMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBOb3csIGhvbGQgb24gYSBzZWNvbmQuLi4gd2hhdCYjMzk7cyB0aGlzPyBgc2V2X2RiZ19jcnlwdGAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCB5ZXQgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRob3NlIGRlYnVnZ2luZyBvcGVyYXRpb25zLCBgS1ZNX1NFVl9EQkdfREVDUllQVGAgYW5kIGBLVk1fU0VWX0RCR19FTkNSWVBUYC4gVGhpcyBpcyBhIGJpdCB1bnVzdWFsLgoKQnV0LCBzaW5jZSBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIHRoZSBvdmVyYWxsIGVudHJ5IHBvaW50LCBpdCBtYWtlcyBzZW5zZSB0byBrZWVwIGl0IGFzIG15IG1haW4gZm9jdXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnkgb3RoZXIgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBtZWNoYW5pc20uIFRoZSBuZXh0IHF1ZXN0aW9uIHRvIGFuc3dlciBpcyB3aGV0aGVyIG9yIG5vdCBgc2V2X2RiZ19jcnlwdGAgaXMgaW5saW5lZC4gVGhhdCB3aWxsIGltcGFjdCBob3cgSSBhcHByb2FjaCB0aGUgYW5hbHlzaXMuIExldCYjMzk7cyBsb29rIGludG8gdGhhdCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXZfZGJnX2NyeXB0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyNDA9c3RhdGljIGludCBzZXZfaXNzdWVfZGJnX2NtZChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjX3BhLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI1NS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTI1NjpzdGF0aWMgdm9pZCAqc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIF9fdmEsXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyNTctXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBsb25nICpwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyOTYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEyOTc6c3RhdGljIHZvaWQgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUodm9pZCAqYnVmKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjk4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzMDU9c3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMxMy1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMxNDpcdGJ1ZiA9IHNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzcmNfcCwgc3JjLCBsZW4sIFx1MDAyNnNyY19wYSwgXHUwMDI2bnJfYnl0ZXMpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzE1LVx0aWYgKCFidWYpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzI1LW91dDpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMyNjpcdHNldl9kYmdfY3J5cHRfc2xvd19mcmVlKGJ1Zik7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMjctXHRyZXR1cm4gcjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzMzA9c3RhdGljIGludCBzZXZfZGJnX2VuY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMzOS1cdC8qIERlY3J5cHQgdGhlIF9kZXN0aW5hdGlvbl8gdG8gZG8gYSBSTVcgb24gcGxhaW50ZXh0LiAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzQwOlx0YnVmID0gc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKGRzdF9wLCBkc3QsIGxlbiwgXHUwMDI2ZHN0X3BhLCBcdTAwMjZucl9ieXRlcyk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNDEtXHRpZiAoIWJ1Zilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNTgtb3V0OlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzU5Olx0c2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUoYnVmKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2MC1cdHJldHVybiByO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2Mi1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTM2MzpzdGF0aWMgaW50IHNldl9kYmdfY3J5cHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNjQtXHRcdFx0IHVuc2lnbmVkIGludCBjbWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjQyPWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcwMC1cdGNhc2UgS1ZNX1NFVl9EQkdfRU5DUllQVDpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjcwMTpcdFx0ciA9IHNldl9kYmdfY3J5cHQoa3ZtLCBcdTAwMjZzZXZfY21kLCBzZXZfY21kLmlkKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcwMi1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzIzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEtWTSBTRVYgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBzZXZfZGJnX2NyeXB0YCBpcyBzdGF0aWMgYnV0IG5vdCBpbmxpbmUuIEl0JiMzOTtzIGxpa2VseSB0aGUgY29tcGlsZXIgd2lsbCBpbmxpbmUgaXQsIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgYWx0aG91Z2ggSSB3b3VsZG4mIzM5O3Qgd29ycnkgYWJvdXQgaXQgdG9vIG11Y2guIE15IG1haW4gZm9jdXMsIGhvd2V2ZXIsIGlzIG9uIGBzZXZfbWVtX2VuY19pb2N0bGAuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50LgoKRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYHNldl9tZW1fZW5jX2lvY3RsYCBpcyBpbmRlZWQgdGhlICpvbmx5KiBpb2N0bCBoYW5kbGVyIGZvciBLVk0gbWVtb3J5IGVuY3J5cHRpb24uIFllcCwgY29uZmlybWVkLiBUaGF0JiMzOTtzIGdvb2QuIE5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcmUuCgpBbHJpZ2h0LCBzbyBgS1ZNX0FNRF9TRVZgIGRlcGVuZHMgb24gYEtWTV9BTURgIGFuZCBgWDg2XzY0YCwgd2hpY2ggaXMgZXhwZWN0ZWQuIGBDUllQVE9fREVWX1NQX1BTUGAgZGVwZW5kcyBvbiBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBgWDg2XzY0YCwgYW5kIGBBTURfSU9NTVVgLiBOb3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkgaGVyZTsgYFg4Nl82NGAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbi4KCkxldCYjMzk7cyByZXZpZXcgdGhlIHJlcXVpcmVkIGNvbmZpZ3M6IGBWSVJUVUFMSVpBVElPTmAsIGBLVk1gLCBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGFuZCBgQU1EX0lPTU1VYC4KCkhvbGQgb24uLi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIGBLVk1fQU1EX1NFVmAgYWN0dWFsbHkgKmRlcGVuZHMqIG9uIGAhKEtWTV9BTUQ9eSAmYW1wOyZhbXA7IENSWVBUT19ERVZfQ0NQX0REPW0pYC4gTWVhbmluZywgKmlmKiBgS1ZNX0FNRGAgaXMgYHlgLCB0aGVuIGBDUllQVE9fREVWX0NDUF9ERGAgKm11c3QqIGJlIGB5YC4gR2l2ZW4gdGhlIFN5emthbGxlciBjb250ZXh0LCB0aGlzIG1lYW5zIHRoYXQgdGhlc2UgY29uZmlncyB3aWxsIGJlIHNldCB0byBgeWAgc2luY2UgU3l6a2FsbGVyIHRlbmRzIHRvIGVuYWJsZSBldmVyeXRoaW5nIGl0IGNhbiwgc28gYENSWVBUT19ERVZfQ0NQX0REYCBhbmQgYENSWVBUT19ERVZfU1BfUFNQYCB3aWxsIGVmZmVjdGl2ZWx5IGJlIGB5YC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogQ2FuIHdlIGhpdCBgc2V2X2RiZ19jcnlwdGAgZnJvbSBHQ0U/IFN5emthbGxlciBydW5zIG9uIEdDRSwgYW5kIEdDRSBoYXMgQU1EIGluc3RhbmNlcywgc28gaXQgKmNvdWxkKiBoYXZlIFNFViBzdXBwb3J0LiBPYnZpb3VzbHksIEtWTSBTRVYgcmVxdWlyZXMgaGFyZHdhcmUgc3VwcG9ydCB0byByZWFsbHkgd29yaywgYnV0IGV2ZW4gd2l0aG91dCBpdCwgd2UgY2FuIHN0aWxsIGxpa2VseSByZWFjaCB1cCB0byB0aGUgaGFyZHdhcmUgY2hlY2tzIHRocm91Z2ggdGhlIEtWTSBpb2N0bHMuIEkmIzM5O20gd29uZGVyaW5nIGlmIGBzZXZfbWVtX2VuY19pb2N0bGAgZG9lcyBhIGNoZWNrIG9uIGBzZXZfZ3Vlc3Qoa3ZtKWAgb3Igc29tZXRoaW5nIHNpbWlsYXI/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gZmluZCBvdXQgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY0MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjQyOlx0aW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG4yNjQzOlx0e1xuMjY0NDpcdFx0c3RydWN0IGt2bV9zZXZfY21kIHNldl9jbWQ7XG4yNjQ1Olx0XHRpbnQgcjtcbjI2NDY6XHRcbjI2NDc6XHRcdGlmICghc2V2X2VuYWJsZWQpXG4yNjQ4Olx0XHRcdHJldHVybiAtRU5PVFRZO1xuMjY0OTpcdFxuMjY1MDpcdFx0aWYgKCFhcmdwKVxuMjY1MTpcdFx0XHRyZXR1cm4gMDtcbjI2NTI6XHRcbjI2NTM6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZzZXZfY21kLCBhcmdwLCBzaXplb2Yoc3RydWN0IGt2bV9zZXZfY21kKSkpXG4yNjU0Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjY1NTpcdFxuMjY1NjpcdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbjI2NTc6XHRcbjI2NTg6XHRcdC8qIE9ubHkgdGhlIGVuY19jb250ZXh0X293bmVyIGhhbmRsZXMgc29tZSBtZW1vcnkgZW5jIG9wZXJhdGlvbnMuICovXG4yNjU5Olx0XHRpZiAoaXNfbWlycm9yaW5nX2VuY19jb250ZXh0KGt2bSkgXHUwMDI2XHUwMDI2XG4yNjYwOlx0XHQgICAgIWlzX2NtZF9hbGxvd2VkX2Zyb21fbWlycm9yKHNldl9jbWQuaWQpKVxuMjY2MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI2NjI6XHRcbjI2NjM6XHRcdC8qXG4yNjY0Olx0XHQgKiBPbmNlIEtWTV9TRVZfSU5JVDIgaW5pdGlhbGl6ZXMgYSBLVk0gaW5zdGFuY2UgYXMgYW4gU05QIGd1ZXN0LCBvbmx5XG4yNjY1Olx0XHQgKiBhbGxvdyB0aGUgdXNlIG9mIFNOUC1zcGVjaWZpYyBjb21tYW5kcy5cbjI2NjY6XHRcdCAqL1xuMjY2NzpcdFx0aWYgKHNldl9zbnBfZ3Vlc3Qoa3ZtKSBcdTAwMjZcdTAwMjYgc2V2X2NtZC5pZCBcdTAwM2MgS1ZNX1NFVl9TTlBfTEFVTkNIX1NUQVJUKVxuMjY2ODpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMjY2OTpcdFxuMjY3MDpcdFx0c3dpdGNoIChzZXZfY21kLmlkKSB7XG4yNjcxOlx0XHRjYXNlIEtWTV9TRVZfRVNfSU5JVDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqRGVidWdnaW5nIHRoZSBgc2V2X2VuYWJsZWRgIFZhcmlhYmxlKioKCk9rYXksIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGNvbmZpcm1pbmcgdGhhdCBgc2V2X2VuYWJsZWRgIGlzIGNoZWNrZWQuIE5vdywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIG9yaWdpbiBvZiB0aGlzIHZhcmlhYmxlLiBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgYHNldl9lbmFibGVkYCBpcyBhY3R1YWxseSBiZWluZyBzZXQuIEtub3dpbmcgd2hlcmUgaXQgZ2V0cyBpdHMgdmFsdWUgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgYW5kIGhvdyB0byB0cm91Ymxlc2hvb3QgYW55IGlzc3VlcyByZWxhdGVkIHRvIGl0LiBVbmRlcnN0YW5kaW5nIGl0cyBkZWZpbml0aW9uIGlzIHRoZSBrZXkgdG8gcmVzb2x2aW5nIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nldl9lbmFibGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTU0LS8qIGVuYWJsZS9kaXNhYmxlIFNFViBzdXBwb3J0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjU1OnN0YXRpYyBib29sIF9fcm9fYWZ0ZXJfaW5pdCBzZXZfZW5hYmxlZCA9IHRydWU7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjU2Om1vZHVsZV9wYXJhbV9uYW1lZChzZXYsIHNldl9lbmFibGVkLCBib29sLCAwNDQ0KTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTctXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjQyPWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0Ni1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY0NzpcdGlmICghc2V2X2VuYWJsZWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDgtXHRcdHJldHVybiAtRU5PVFRZO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzAyMD12b2lkIF9faW5pdCBzZXZfc2V0X2NwdV9jYXBzKHZvaWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwMjEte1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMDIyOlx0aWYgKHNldl9lbmFibGVkKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMDIzLVx0XHRrdm1fY3B1X2NhcF9zZXQoWDg2X0ZFQVRVUkVfU0VWKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwNjQ9dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMDcyLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMDczOlx0aWYgKCFzZXZfZW5hYmxlZCB8fCAhbnB0X2VuYWJsZWQgfHwgIW5yaXBzKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMDc0LVx0XHRnb3RvIG91dDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxNzEtb3V0OlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMTcyOlx0aWYgKHNldl9lbmFibGVkKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxNzMtXHRcdGluaXRfYXJncy5wcm9iZSA9IHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjI3LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjI4Olx0c2V2X2VuYWJsZWQgPSBzZXZfc3VwcG9ydGVkO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjI5LVx0c2V2X2VzX2VuYWJsZWQgPSBzZXZfZXNfc3VwcG9ydGVkO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzI0Mj12b2lkIHNldl9oYXJkd2FyZV91bnNldHVwKHZvaWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNDMte1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjQ0Olx0aWYgKCFzZXZfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI0NS1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzI1OT1pbnQgc2V2X2NwdV9pbml0KHN0cnVjdCBzdm1fY3B1X2RhdGEgKnNkKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjYwLXtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzI2MTpcdGlmICghc2V2X2VuYWJsZWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNjItXHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkxOQoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiA1MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqU0VWIFN1cHBvcnQgYW5kIEZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3QuIGBzZXZfZW5hYmxlZGAgaXMgc2V0IGJhc2VkIG9uIHdoZXRoZXIgdGhlIGhhcmR3YXJlIHN1cHBvcnRzIFNFViwgd2hpY2ggaXMgZGV0ZXJtaW5lZCBpbiBgc2V2X2hhcmR3YXJlX3NldHVwYC4gSWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IHN1cHBvcnQgU0VWLCBgc2V2X2VuYWJsZWRgIGlzIGZhbHNlLCBhbmQgdGhlIGBzZXZfbWVtX2VuY19pb2N0bGAgZnVuY3Rpb24gcmV0dXJucyBgLUVOT1RUWWAuIEJ1dCwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBTeXprYWxsZXIgKmRvZXMqIHJ1biBvbiBpbnN0YW5jZXMgdGhhdCBlaXRoZXIgZnVsbHkgc3VwcG9ydCBTRVYgb3IgYXQgbGVhc3QgaGF2ZSBTRVYgYXMgYSBrZXkga2VybmVsIGZlYXR1cmUgYWNjZXNzaWJsZSB3aGVuIHRoZSBoYXJkd2FyZSBpcyBwcmVzZW50LgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgdG91Y2hlcyBjb3JlIGtlcm5lbCBLVk0gU0VWIGxvZ2ljLCBhbmQgYmVjYXVzZSBpdCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gYW4gaW9jdGwgaGFuZGxlciAoYHNldl9tZW1fZW5jX2lvY3RsYCksIEkmIzM5O20gY29uZmlkZW50IHdlIG5lZWQgdG8gZnV6eiB0aGlzISBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRvIGJlIGNlcnRhaW4uIEkga25vdyBgS1ZNX0FNRF9TRVZgLCBgQ1JZUFRPX0RFVl9TUF9QU1BgLCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBgQU1EX0lPTU1VYCwgYEtWTV9BTURgLCBgS1ZNYCwgYW5kIGBWSVJUVUFMSVpBVElPTmAgYXJlIHJlbGV2YW50LiBXYWl0LCBgS1ZNX0FNRF9TRVZgIGlzIHRoZSBwcmltYXJ5IG9uZSwgaXQmIzM5O3MgdGhlIG1haW4gY29uZmlnIGhlcmUuCgpJJiMzOTtsbCBmb3JtYXQgdGhlIG91dHB1dCB0byBoaWdobGlnaHQgdGhpcyBrZXkgZnVuY3Rpb24gYW5kIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucy4gVGhlIGZvY3VzIHdpbGwgYmUgb24gYHNldl9tZW1fZW5jX2lvY3RsYCwgYW5kIHRoZSBlbmFibGUgY29uZmlncyB3aWxsIGJlIGBWSVJUVUFMSVpBVElPTmAsIGBLVk1gLCBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGFuZCBgQU1EX0lPTU1VYC4KCk5vdyBsZXQmIzM5O3Mgc2VlLCB3aGF0IGFib3V0IG90aGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIFNFVj8gSSYjMzk7bSBjaGVja2luZyBpZiBgc2V2X2RiZ19jcnlwdGAgaXMgZXhwb3J0ZWQuIE9oLCBpdCYjMzk7cyBzdGF0aWMuIFdlbGwsIGBzZXZfbWVtX2VuY19pb2N0bGAgaXMgZXhwb3J0ZWQgKG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMpLCB3aGljaCBpcyBnb29kLiBBbnl0aGluZyBlbHNlPyBgc2V2X2RiZ19kZWNyeXB0X3Nsb3dgIGFuZCBgc2V2X2RiZ19lbmNyeXB0X3Nsb3dgIGFyZSBzdGF0aWMuIEkmIzM5O2xsIHN0aWNrIHdpdGggZm9jdXNpbmcgb24gYHNldl9tZW1fZW5jX2lvY3RsYC4KCk9rYXksIEkmIzM5O20gcmV2aWV3aW5nIHRoZSBjb2RlIHNuaXBwZXQgSSBmb3VuZCBhZ2FpbjoKYGBgYwomIzQzOwlpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkKJiM0MzsJCXJldHVybiAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKYGBgCkFoLCByaWdodCwgdGhpcyBjb2RlIHVzZXMgYGNjX3BsYXRmb3JtX2hhc2AuIEkmIzM5O2xsIGNoZWNrIHRvIHNlZSBpZiBgY2NfcGxhdGZvcm1faGFzYCByZWxpZXMgb24gYW55IHNwZWNpZmljIGNvbmZpZ3MuIEFscmlnaHQsIHNvIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUgaW5kaWNhdGVzIHRoYXQgYHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STWAgaXMgY29uZmlndXJlZCBmb3IgYEtWTV9BTURfU0VWYC4gU28sIHdlIHNob3VsZCBiZSBhbGwgZ29vZCEKCkFscmlnaHQsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VklSVFVBTElaQVRJT04mIzM0OywKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNX0FNRF9TRVYmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9DQ1BfREQmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9TUF9QU1AmIzM0OywKICAgICYjMzQ7QU1EX0lPTU1VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V2X21lbV9lbmNfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgaW4gS1ZNIFNFViBkZWJ1ZyBjcnlwdG9ncmFwaHkgZnVuY3Rpb25zIChzZXZfZGJnX2RlY3J5cHRfc2xvdyBhbmQgc2V2X2RiZ19lbmNyeXB0X3Nsb3cpLiBJdCBhbGxvY2F0ZXMgYSBmdWxsIHBhZ2UgaW5zdGVhZCBvZiB1c2luZyBrbWFsbG9jIHdoZW4gU0VWLVNOUCBpcyBhY3RpdmUgdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIGR1cmluZyBQU1AgZHJpdmVyIFJNUCB1cGRhdGVzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIChLVk1fU0VWX0RCR19ERUNSWVBUIGFuZCBLVk1fU0VWX0RCR19FTkNSWVBUKSB3aGVuIHJ1bm5pbmcgb24gc3VwcG9ydGVkIEFNRCBoYXJkd2FyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VklSVFVBTElaQVRJT04mIzM0OywKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNX0FNRF9TRVYmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9DQ1BfREQmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9TUF9QU1AmIzM0OywKICAgICYjMzQ7QU1EX0lPTU1VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V2X21lbV9lbmNfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgaW4gS1ZNIFNFViBkZWJ1ZyBjcnlwdG9ncmFwaHkgZnVuY3Rpb25zIChzZXZfZGJnX2RlY3J5cHRfc2xvdyBhbmQgc2V2X2RiZ19lbmNyeXB0X3Nsb3cpLiBJdCBhbGxvY2F0ZXMgYSBmdWxsIHBhZ2UgaW5zdGVhZCBvZiB1c2luZyBrbWFsbG9jIHdoZW4gU0VWLVNOUCBpcyBhY3RpdmUgdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIGR1cmluZyBQU1AgZHJpdmVyIFJNUCB1cGRhdGVzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIChLVk1fU0VWX0RCR19ERUNSWVBUIGFuZCBLVk1fU0VWX0RCR19FTkNSWVBUKSB3aGVuIHJ1bm5pbmcgb24gc3VwcG9ydGVkIEFNRCBoYXJkd2FyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE3OjM2LjAwMTUyOTc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MTAyODIxMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCIsXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJDUllQVE9fREVWX0NDUF9ERFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgICBcIkFNRF9JT01NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNldl9tZW1fZW5jX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgaW4gS1ZNIFNFViBkZWJ1ZyBjcnlwdG9ncmFwaHkgZnVuY3Rpb25zIChzZXZfZGJnX2RlY3J5cHRfc2xvdyBhbmQgc2V2X2RiZ19lbmNyeXB0X3Nsb3cpLiBJdCBhbGxvY2F0ZXMgYSBmdWxsIHBhZ2UgaW5zdGVhZCBvZiB1c2luZyBrbWFsbG9jIHdoZW4gU0VWLVNOUCBpcyBhY3RpdmUgdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIGR1cmluZyBQU1AgZHJpdmVyIFJNUCB1cGRhdGVzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIChLVk1fU0VWX0RCR19ERUNSWVBUIGFuZCBLVk1fU0VWX0RCR19FTkNSWVBUKSB3aGVuIHJ1bm5pbmcgb24gc3VwcG9ydGVkIEFNRCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTc6MzYuMDAxNTM2MzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2Mjk5MzQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg0YzQ3MTQ3NjllYzFjNTRlMDY5ZjFiYTJlNWZjZWJhMDZmYmI1NGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMjUgMDM6MTc6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5pbmRleCA3NGZiMTU1NTFlODNmYS4uODAzYmQzOTY5NWZkZGIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5AQCAtMTI4MCw5ICsxMjgwLDI4IEBAIHN0YXRpYyB2b2lkICpzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgX192YSxcXG4gXFx0aWYgKFdBUk5fT05fT05DRSgoKnBhIFxcdTAwMjYgUEFHRV9NQVNLKSAhPSAoKCpwYSArICpucl9ieXRlcyAtIDEpIFxcdTAwMjYgUEFHRV9NQVNLKSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogSWYgU05QIGlzIGVuYWJsZWQsIGkuZS4gdGhlIFJNUCBpcyBhY3RpdmUsIGFsbG9jYXRlIGEgZnVsbCBwYWdlIHRvXFxuK1xcdCAqIHByZXZlbnQgY29uY3VycmVudCBhY2Nlc3NlcyB0byB0aGUgcGFnZS4gIEFzIHJlcXVpcmVkIGJ5IGZpcm13YXJlLFxcbitcXHQgKiB0aGUgUFNQIGRyaXZlciB1cGRhdGVzIHRoZSBSTVAgdG8gdGVtcG9yYXJpbHkgdHJhbnNmZXIgb3duZXJzaGlwIG9mXFxuK1xcdCAqIHRoZSBwYWdlIHRvIEZpcm13YXJlIHdoaWxlIHRoZSB7REUsRU59Q1JZUFQgb3BlcmF0aW9uIGlzIGluLXByb2dyZXNzLFxcbitcXHQgKiBhbmQgc28gY29uY3VycmVudCBzb2Z0d2FyZSBhY2Nlc3NlcyB0byB0aGUgcGFnZSB3aWxsIGVuY291bnRlclxcbitcXHQgKiBzZWVtaW5nbHkgc3B1cmlvdXMgUk1QICNQRiB2aW9sYXRpb25zXFxuK1xcdCAqL1xcbitcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG4rXFx0XFx0cmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xcbitcXG4gXFx0cmV0dXJuIGttYWxsb2MoKm5yX2J5dGVzLCBHRlBfS0VSTkVMKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUodm9pZCAqYnVmKVxcbit7XFxuK1xcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbitcXHRcXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRrZnJlZShidWYpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHNldl9kYmdfZGVjcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICpzcmNfcCwgdW5zaWduZWQgbG9uZyBkc3QsXFxuIFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBsZW4sIGludCAqZXJyKVxcbkBAIC0xMzA0LDcgKzEzMjMsNyBAQCBzdGF0aWMgaW50IHNldl9kYmdfZGVjcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsXFxuIFxcdGlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopZHN0LCBidWYgKyAoc3JjIFxcdTAwMjYgMTUpLCBsZW4pKVxcbiBcXHRcXHRyID0gLUVGQVVMVDtcXG4gb3V0Olxcbi1cXHRrZnJlZShidWYpO1xcbitcXHRzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZShidWYpO1xcbiBcXHRyZXR1cm4gcjtcXG4gfVxcbiBcXG5AQCAtMTMzNyw3ICsxMzU2LDcgQEAgc3RhdGljIGludCBzZXZfZGJnX2VuY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxcbiBcXHRcXHRyID0gc2V2X2lzc3VlX2RiZ19jbWQoa3ZtLCBfX3NtZV9zZXQoX19wYShidWYpKSwgZHN0X3BhLFxcbiBcXHRcXHRcXHRcXHQgICAgICBucl9ieXRlcywgS1ZNX1NFVl9EQkdfRU5DUllQVCwgZXJyKTtcXG4gb3V0Olxcbi1cXHRrZnJlZShidWYpO1xcbitcXHRzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZShidWYpO1xcbiBcXHRyZXR1cm4gcjtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTc6MzYuNzY1NTE4MzE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTU4MzM4ODE5NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCIsXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJDUllQVE9fREVWX0NDUF9ERFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgICBcIkFNRF9JT01NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNldl9tZW1fZW5jX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgaW4gS1ZNIFNFViBkZWJ1ZyBjcnlwdG9ncmFwaHkgZnVuY3Rpb25zIChzZXZfZGJnX2RlY3J5cHRfc2xvdyBhbmQgc2V2X2RiZ19lbmNyeXB0X3Nsb3cpLiBJdCBhbGxvY2F0ZXMgYSBmdWxsIHBhZ2UgaW5zdGVhZCBvZiB1c2luZyBrbWFsbG9jIHdoZW4gU0VWLVNOUCBpcyBhY3RpdmUgdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIGR1cmluZyBQU1AgZHJpdmVyIFJNUCB1cGRhdGVzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIChLVk1fU0VWX0RCR19ERUNSWVBUIGFuZCBLVk1fU0VWX0RCR19FTkNSWVBUKSB3aGVuIHJ1bm5pbmcgb24gc3VwcG9ydGVkIEFNRCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODRjNDcxNDc2OWVjMWM1NGUwNjlmMWJhMmU1ZmNlYmEwNmZiYjU0ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDAzOjE3OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDc0ZmIxNTU1MWU4M2ZhLi44MDNiZDM5Njk1ZmRkYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC0xMjgwLDkgKzEyODAsMjggQEAgc3RhdGljIHZvaWQgKnNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBfX3ZhLFxuIFx0aWYgKFdBUk5fT05fT05DRSgoKnBhIFx1MDAyNiBQQUdFX01BU0spICE9ICgoKnBhICsgKm5yX2J5dGVzIC0gMSkgXHUwMDI2IFBBR0VfTUFTSykpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbitcdC8qXG4rXHQgKiBJZiBTTlAgaXMgZW5hYmxlZCwgaS5lLiB0aGUgUk1QIGlzIGFjdGl2ZSwgYWxsb2NhdGUgYSBmdWxsIHBhZ2UgdG9cbitcdCAqIHByZXZlbnQgY29uY3VycmVudCBhY2Nlc3NlcyB0byB0aGUgcGFnZS4gIEFzIHJlcXVpcmVkIGJ5IGZpcm13YXJlLFxuK1x0ICogdGhlIFBTUCBkcml2ZXIgdXBkYXRlcyB0aGUgUk1QIHRvIHRlbXBvcmFyaWx5IHRyYW5zZmVyIG93bmVyc2hpcCBvZlxuK1x0ICogdGhlIHBhZ2UgdG8gRmlybXdhcmUgd2hpbGUgdGhlIHtERSxFTn1DUllQVCBvcGVyYXRpb24gaXMgaW4tcHJvZ3Jlc3MsXG4rXHQgKiBhbmQgc28gY29uY3VycmVudCBzb2Z0d2FyZSBhY2Nlc3NlcyB0byB0aGUgcGFnZSB3aWxsIGVuY291bnRlclxuK1x0ICogc2VlbWluZ2x5IHNwdXJpb3VzIFJNUCAjUEYgdmlvbGF0aW9uc1xuK1x0ICovXG4rXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbitcdFx0cmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xuK1xuIFx0cmV0dXJuIGttYWxsb2MoKm5yX2J5dGVzLCBHRlBfS0VSTkVMKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUodm9pZCAqYnVmKVxuK3tcbitcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuK1x0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmKTtcbitcdGVsc2VcbitcdFx0a2ZyZWUoYnVmKTtcbit9XG4rXG4gc3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxuIFx0XHRcdFx0c3RydWN0IHBhZ2UgKnNyY19wLCB1bnNpZ25lZCBsb25nIGRzdCxcbiBcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIGludCAqZXJyKVxuQEAgLTEzMDQsNyArMTMyMyw3IEBAIHN0YXRpYyBpbnQgc2V2X2RiZ19kZWNyeXB0X3Nsb3coc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyYyxcbiBcdGlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopZHN0LCBidWYgKyAoc3JjIFx1MDAyNiAxNSksIGxlbikpXG4gXHRcdHIgPSAtRUZBVUxUO1xuIG91dDpcbi1cdGtmcmVlKGJ1Zik7XG4rXHRzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZShidWYpO1xuIFx0cmV0dXJuIHI7XG4gfVxuIFxuQEAgLTEzMzcsNyArMTM1Niw3IEBAIHN0YXRpYyBpbnQgc2V2X2RiZ19lbmNyeXB0X3Nsb3coc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyYyxcbiBcdFx0ciA9IHNldl9pc3N1ZV9kYmdfY21kKGt2bSwgX19zbWVfc2V0KF9fcGEoYnVmKSksIGRzdF9wYSxcbiBcdFx0XHRcdCAgICAgIG5yX2J5dGVzLCBLVk1fU0VWX0RCR19FTkNSWVBULCBlcnIpO1xuIG91dDpcbi1cdGtmcmVlKGJ1Zik7XG4rXHRzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZShidWYpO1xuIFx0cmV0dXJuIHI7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTc6MzYuNzY1NTIwMjA0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMxMDU3NTYxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1ZNIFNFViBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYC4gU3BlY2lmaWNhbGx5LCBpdCdzIG1vZGlmeWluZyBgc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jYCBhbmQgaW50cm9kdWNpbmcgYSBjb3JyZXNwb25kaW5nIGBzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZWAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGhlcmUgaXMgaG93IHRoZXkgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gaW4gYHNldl9kYmdfZGVjcnlwdF9zbG93YCBhbmQgYHNldl9kYmdfZW5jcnlwdF9zbG93YC4gSWYgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpcyBzZXQsIG1lYW5pbmcgd2UncmUgZGVhbGluZyB3aXRoIFNFVi1TTlAgY2FwYWJsZSBoYXJkd2FyZSAob3IgYXQgbGVhc3QgZW11bGF0aW5nIGl0KSwgdGhleSdyZSBub3cgdXNpbmcgYF9fZ2V0X2ZyZWVfcGFnZWAgZm9yIGEgZnVsbCBwYWdlIGFsbG9jYXRpb24gaW5zdGVhZCBvZiBga21hbGxvY2AsIGFuZCBjb3JyZXNwb25kaW5nbHksIGBmcmVlX3BhZ2VgIGluc3RlYWQgb2YgYGtmcmVlYCB0byByZWxlYXNlIHRoZSBtZW1vcnkuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyByZWFjaGFibGUsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBpcyBpdCB3b3J0aCB0aGUgZWZmb3J0IHRvIGZ1enogaXQ/IFRoaXMgaXMgS1ZNIFNFViBjb2RlLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBBTUQgcHJvY2Vzc29ycyBhbmQgdGhlaXIgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiBmZWF0dXJlcyBpbiBteSBtaW5kLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSBmdXp6IHRoaXMgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEkga25vdyBTRVYgYW5kIFNFVi1TTlAgYXJlIG9mdGVuIHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydCwgYnV0IEkgYWxzbyByZWNhbGwgS1ZNIFNFViBjYW4gYmUgdGVzdGVkIHdpdGggZW11bGF0aW9uIGlmIHRoZSBob3N0IGRvZXNuJ3QgaGF2ZSBpdCBuYXRpdmVseS5cblxuV2FpdCBhIHNlY29uZC4uLiBzeXprYWxsZXIhIERvZXNuJ3Qgc3l6a2FsbGVyIGhhdmUgS1ZNIGZ1enppbmc/IEFuZCBpZiBzbywgZG9lcyBpdCBldmVuIHRvdWNoIFNFViBmdW5jdGlvbmFsaXR5PyBJJ20gcHJldHR5IHN1cmUgaXQgZG9lcy4gWWVzLCBJIHJlbWVtYmVyIHNlZWluZyB0aGF0LiBPa2F5LCB0aGVuLCBsZXQncyBmaW5kIHRoZSBLY29uZmlnIHRvIGNvbmZpcm0uIFRoZSBmaWxlIGluIHF1ZXN0aW9uLCBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AsIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1fQU1EX1NFVmAgaXMgZW5hYmxlZC4gTGV0J3MgZGlnIGludG8gYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBjb25maXJtIHRoYXQncyB0aGUgZGVwZW5kZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE3OjQ5Ljg3MTI3OTAzOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMyNzg5MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX0FNRF9TRVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxNzo1MC4wMjQ1NjU1NTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYzNTY2MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZGVwZW5kZW5jaWVzIG9mIGBLVk1fQU1EX1NFVmA6XG5cbioqQW5hbHl6aW5nIEtWTV9BTURfU0VWIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtWTV9BTURfU0VWYC4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYS4gT2J2aW91c2x5LCBzaW5jZSBpdCdzIHJlbGF0ZWQgdG8gQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFViksIEknbSBhc3N1bWluZyBpdCdzIHBhcnQgb2YgdGhlIGJyb2FkZXIgS1ZNIHZpcnR1YWxpemF0aW9uIGluZnJhc3RydWN0dXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1tZWRpYXRlIGNvbXBvbmVudHMgaXQgcmVsaWVzIG9uLiBJcyBpdCBhIG1vZHVsZSB0aGF0IGxpbmtzIGludG8gdGhlIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHksIHBlcmhhcHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaHlwZXJ2aXNvciBvciBzcGVjaWZpYyBBTUQtcmVsYXRlZCBoYXJkd2FyZSBmZWF0dXJlcyB0aHJvdWdoIGV4aXN0aW5nIGludGVyZmFjZXM/XG5cbkknbGwgbmVlZCB0byBjb25zaWRlciB0aGlzIGluIGxheWVycy4gRmlyc3QsIEknbGwgaWRlbnRpZnkgdGhlIGJhc2UgS1ZNIGNvbXBvbmVudHMuIElzIGl0IGNhbGxpbmcgb24gdGhlIHN0YW5kYXJkIEtWTSBBUEk/IERvZXMgaXQgdXNlIHNwZWNpZmljIEFNRC1zcGVjaWZpYyByZWdpc3RlcnMgb3IgZXh0ZW5zaW9ucz8gQXJlIHRoZXJlIGFueSBrZXJuZWwtbGV2ZWwgbW9kdWxlcyByZXF1aXJlZCwgbGlrZSBBTUQncyBQU1Agb3IgU2VjdXJlIE1lbW9yeSBFbmNyeXB0aW9uIChTTUUpIGRyaXZlcnMsIHRoYXQgYEtWTV9BTURfU0VWYCBpbnRlcmFjdHMgd2l0aCBkaXJlY3RseT8gSSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIGlmIHRoaXMgbW9kdWxlIGlzIG1vcmUgYWJvdXQgcHJvdmlkaW5nIGFuIGFic3RyYWN0aW9uIGxheWVyIG9uIHRvcCBvZiB0aG9zZSBleGlzdGluZyBjb21wb25lbnRzLlxuXG5JJ2xsIGFsc28gaGF2ZSB0byBsb29rIGZvciBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzLiBBcmUgdGhlcmUgYW55IGNyeXB0byBsaWJyYXJpZXMsIHNwZWNpZmljIGZpcm13YXJlIHZlcnNpb25zLCBvciBzZWN1cml0eS1yZWxhdGVkIGFzcGVjdHMgdGhhdCBjb3VsZCBjb21lIGludG8gcGxheT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRpZ2h0bHkgY291cGxlZCBpdCBpcyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCB0aGUgQU1EIFNlY3VyZSBQcm9jZXNzb3IsIGFuZCBvdGhlciBwbGF0Zm9ybSBzZWN1cml0eSBmZWF0dXJlcy4gSSBleHBlY3QgdGhlcmUncyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIEFNRCdzIFBTUCAoUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yKSBhdCBhIGxvd2VyIGxldmVsIGFuZCB3aWxsIHdhbnQgdG8gZGV0ZXJtaW5lIHRoZSBncmFudWxhcml0eSBvZiB0aGF0IHJlbGF0aW9uc2hpcC4gS25vd2luZyB0aGUgcmVsYXRpb25zaGlwIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBtb2R1bGUncyBvdmVyYWxsIHNlY3VyaXR5IHBvc3R1cmUuXG5cbkknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcgYW5kIGxvb2sgZm9yIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBjb25kaXRpb24gaXRzIGluY2x1c2lvbiBvciBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQzOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE3OjUzLjc4ODEzNDEzNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE5NzU1NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9BTURfU0VWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE0Nj1jb25maWcgS1ZNX0FNRFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTc6NTMuOTAwMTIwOTA0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwNjkyMzI5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBLVk0gY29uZmlndXJhdGlvbiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gSSdtIGd1ZXNzaW5nIHRoYXQgbGluZSAxNTYgb3IgdGhlcmVhYm91dHMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJ20gY3VycmVudGx5IGludmVzdGlnYXRpbmcuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBmZWF0dXJlIG9yIGRlcGVuZGVuY3kgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kLCBvciBwZXJoYXBzIGEgYnVnIGZpeCBJJ20gY2hhc2luZyBkb3duIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gS25vd2luZyB0aGUgYXJjaGl0ZWN0dXJlLCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc2V0dGluZ3MgZGlyZWN0bHkgYWZmZWN0aW5nIHg4NiB2aXJ0dWFsaXphdGlvbiBiZWhhdmlvciAtIHRoaW5ncyBsaWtlIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMsIE1TUiBoYW5kbGluZywgb3IgaW50ZXJydXB0IGRlbGl2ZXJ5IG1lY2hhbmlzbXMuIEkgYW50aWNpcGF0ZSB0aGlzIGxpbmUgd2lsbCBlaXRoZXIgYmUgYSByZWxldmFudCBvcHRpb24gZGVmaW5pdGlvbiBpdHNlbGYsIG9yIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIgc2VjdGlvbiBvciBkZXBlbmRlbmN5IHdpdGhpbiB0aGUgS2NvbmZpZyBzdHJ1Y3R1cmUuIFRpbWUgdG8gc2VlIHdoYXQncyB3aGF0IVxuXG5cbiIsIklucHV0VG9rZW5zIjozOTk0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTg6MDQuOTY5MzU5MTA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NixcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0NjpcXHRjb25maWcgS1ZNX0FNRFxcbiAxNDc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gMTQ4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKVxcbiAxNDk6XFx0XFx0aGVscFxcbiAxNTA6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVZcXG4gMTUxOlxcdFxcdCAgKFNWTSkgZXh0ZW5zaW9ucy5cXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTU0OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cXG4gMTU1OlxcdFxcbiAxNTY6XFx0Y29uZmlnIEtWTV9BTURfU0VWXFxuIDE1NzpcXHRcXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbiAxNTg6XFx0XFx0ZGVmYXVsdCB5XFxuIDE1OTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9BTUQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFxcdTAwMjZcXHUwMDI2ICEoS1ZNX0FNRD15IFxcdTAwMjZcXHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXFxuIDE2MTpcXHRcXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG4gMTYyOlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxNjM6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXFxuIDE2NDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4gMTY1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG4gMTY2OlxcdFxcdGhlbHBcXG4gMTY3OlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIGVuY3J5cHRlZCBWTXMgd2hpY2ggdXNlIFNlY3VyZVxcbiAxNjg6XFx0XFx0ICBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFViksIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxcbiAxNjk6XFx0XFx0ICBFbmNyeXB0ZWQgU3RhdGUgKFNFVi1FUyksIGFuZCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGhcXG4gMTcwOlxcdFxcdCAgU2VjdXJlIE5lc3RlZCBQYWdpbmcgKFNFVi1TTlApIHRlY2hub2xvZ2llcyBvbiBBTUQgcHJvY2Vzc29ycy5cXG4gMTcxOlxcdFxcbiAxNzI6XFx0Y29uZmlnIEtWTV9JT0FQSUNcXG4gMTczOlxcdFxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbiAxNzQ6XFx0XFx0ZGVmYXVsdCB5XFxuIDE3NTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9YODZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTg6MDQuOTY5NTU1NTU0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzMDAwMDU0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRlcGVuZGVuY2llcywgRGVwZW5kZW5jaWVzIEV2ZXJ5d2hlcmUhKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoZSBgS1ZNX0FNRF9TRVZgIGZlYXR1cmUsIHdoaWNoIGlzIHJpZ2h0IGluIG15IHdoZWVsaG91c2Ugd2hlbiBkZWFsaW5nIHdpdGggc2VjdXJlIHZpcnR1YWxpemF0aW9uIG9uIEFNRCBoYXJkd2FyZSwgaGFzIGEgZmV3IGNyaXRpY2FsIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCBpdCByZWxpZXMgb24gYEtWTV9BTURgIChvYnZpb3VzbHkpLCBgWDg2XzY0YCAodGhhdCdzIGEgZ2l2ZW4gaW4gdGhpcyBjb250ZXh0KSwgYW5kLCBobW0sIGBDUllQVE9fREVWX1NQX1BTUGAuIE5vdywgYEtWTV9BTURgIGFuZCBgWDg2XzY0YCBJIGNvbXBsZXRlbHkgdW5kZXJzdGFuZCwgdGhleSdyZSBmdW5kYW1lbnRhbCB0byB0aGUgd2hvbGUgc2V0dXAuIEJ1dCBgQ1JZUFRPX0RFVl9TUF9QU1Bg4oCmIHRoYXQgcmVxdWlyZXMgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGNyeXB0byBkZXZpY2Ugb3IgZHJpdmVyIGJyaW5ncyB0byB0aGUgdGFibGUgZm9yIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIHdoZXJlIHRoZSBzZWN1cml0eSBhbmQgaW50ZWdyaXR5IHJlc2lkZS4gV2hhdCdzIHRoZSBsaW5rIHdpdGggdGhlIFBTUCAoUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yKT8gTGV0J3MgZGlnIGludG8gYENSWVBUT19ERVZfU1BfUFNQYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTg6MDguNTk5NTYwNTQyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTY2NjUwNzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc9MjM9Y29uZmlnIENSWVBUT19ERVZfQ0NQX0NSWVBUT1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMzctXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc6Mzg6Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMzktXFx0Ym9vbCBcXFwiUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApIGRldmljZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTg6MTQuMTY2MjIxMTU0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MTg1NjU2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIENDUCBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0aGlua2luZywgXCJUaW1lIHRvIGRpZyBpbnRvIHRoZSBgZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzOC5cIiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBDQ1AgY3J5cHRvIGVuZ2luZS4gSSdtIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhhdCBsaW5lIGJlY2F1c2UgSSB2YWd1ZWx5IHJlY2FsbCBzb21lIGNyaXRpY2FsIHNldHRpbmcgYmVpbmcgZGVmaW5lZCB0aGVyZSAtIG1heWJlIHJlbGF0ZWQgdG8ga2V5IHNpemUsIHN1cHBvcnRlZCBhbGdvcml0aG1zLCBvciBwZXJoYXBzIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIHF1aWNrbHkgemVybyBpbiBvbiBpdCBhbmQgZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3Mgd2hhdC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGNydWNpYWwgZm9yIGFueSBkZWVwZXIgYW5hbHlzaXMgb3IgbW9kaWZpY2F0aW9uIEkgbmVlZCB0byBwZXJmb3JtLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxOTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxODoxNy4wODQ3OTAwMjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdFxcdHNlbGVjdCBDUllQVE9fQVVUSEVOQ1xcbiAgMzE6XFx0XFx0c2VsZWN0IENSWVBUT19SU0FcXG4gIDMyOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU1xcbiAgMzM6XFx0XFx0aGVscFxcbiAgMzQ6XFx0XFx0ICBTdXBwb3J0IGZvciB1c2luZyB0aGUgY3J5cHRvZ3JhcGhpYyBBUEkgd2l0aCB0aGUgQU1EIENyeXB0b2dyYXBoaWNcXG4gIDM1OlxcdFxcdCAgQ29wcm9jZXNzb3IuIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG9mZmxvYWQgb2YgU0hBIGFuZCBBRVMgYWxnb3JpdGhtcy5cXG4gIDM2OlxcdFxcdCAgSWYgeW91IGNob29zZSAnTScgaGVyZSwgdGhpcyBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2NwX2NyeXB0by5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQXFxuICAzOTpcXHRcXHRib29sIFxcXCJQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkgZGV2aWNlXFxcIlxcbiAgNDA6XFx0XFx0ZGVmYXVsdCB5XFxuICA0MTpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfQ0NQX0REIFxcdTAwMjZcXHUwMDI2IFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBBTURfSU9NTVVcXG4gIDQyOlxcdFxcdHNlbGVjdCBQQ0lfVFNNIGlmIFBDSVxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0IFByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEFNRCBQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkuXFxuICA0NTpcXHRcXHQgVGhlIFBTUCBpcyBhIGRlZGljYXRlZCBwcm9jZXNzb3IgdGhhdCBwcm92aWRlcyBzdXBwb3J0IGZvciBrZXlcXG4gIDQ2OlxcdFxcdCBtYW5hZ2VtZW50IGNvbW1hbmRzIGluIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgbW9kZSxcXG4gIDQ3OlxcdFxcdCBhbG9uZyB3aXRoIHNvZnR3YXJlLWJhc2VkIFRydXN0ZWQgRXhlY3V0aW9uIEVudmlyb25tZW50IChURUUpIHRvXFxuICA0ODpcXHRcXHQgZW5hYmxlIHRoaXJkLXBhcnR5IHRydXN0ZWQgYXBwbGljYXRpb25zLlxcbiAgNDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE4OjE3LjA4NDk0OTY2NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTUzMTQwOTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhIGFuZCB0aGlzIGlzIGEgYnJpZWYgbWVudGFsIG5vdGU6XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBWZXJpZmljYXRpb24qKlxuXG5SaWdodCwgc28gYENSWVBUT19ERVZfU1BfUFNQYCBpcyBjb250aW5nZW50IG9uIGBDUllQVE9fREVWX0NDUF9ERGAsIGBYODZfNjRgLCBhbmQgYEFNRF9JT01NVWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgbGlrZWx5IGEgc2VjdXJpdHktZm9jdXNlZCBtb2R1bGUgb3Igc3Vic3lzdGVtIHRoYXQgcmVxdWlyZXMgY2VydGFpbiBoYXJkd2FyZSBhbmQgdW5kZXJseWluZyBjcnlwdG9ncmFwaGljIHNlcnZpY2VzLiBOb3csIGdpdmVuIHRoYXQgZGVwZW5kZW5jeSBjaGFpbiwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHZlcmlmeSB0aGUgc3RhdGUgb2YgYENSWVBUT19ERVZfQ0NQX0REYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb3JlIGNvbXBvbmVudCBpdCByZWxpZXMgdXBvbiBpcyBjb25maWd1cmVkIGNvcnJlY3RseSwgYmVjYXVzZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGF0IGNvbXBvbmVudCBkaXJlY3RseSBkaWN0YXRlcyB0aGUgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb25zIG9mIHRoZSBjb21wb25lbnRzIHdoaWNoIGFyZSBkZXBlbmRlbnQgdXBvbiBpdC4gSSBtdXN0IGNoZWNrIG9uIGBDUllQVE9fREVWX0NDUF9ERGAgdG8gc2VlIGlmIHRoYXQncyBjb25maWd1cmVkIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzIwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxODoyMC4wMzgwOTQ2NTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzYxNzUyNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENSWVBUT19ERVZfQ0NQX0REXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjI6Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxODoyNS4wNzQyNzYwNDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ3MjUwMjQ0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENyeXB0byBMYW5kc2NhcGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEknbSBmb2N1c2luZyBvbiB0aGUgYGRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMi4gVGhpcyBwcm9iYWJseSBtZWFucyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIENDUCBjcnlwdG8gZGV2aWNlIGRyaXZlci4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgYXZhaWxhYmxlIGFuZCBob3cgaXQncyBjb250cm9sbGVkLiBJcyBpdCBhIGNvcmUgbW9kdWxlLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYz8gVGhlIEtjb25maWcgZmlsZSBpcyB0aGUga2V5IHRvIHRoYXQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIGxvdCBvZiBgY29uZmlnYCBhbmQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgdG8gd29yayBvdXQgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIGRlcGVuZGVuY2llcy4gSSB3aWxsIGxpa2VseSBiZSB0cnlpbmcgdG8gZ2V0IGEgZ3Jhc3Agb2YgaXRzIHBsYWNlIGluIHRoZSBzeXN0ZW0ncyBsYXJnZXIgY3J5cHRvZ3JhcGhpYyBlY29zeXN0ZW0uIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA3MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE4OjMzLjU0Njc4MTY3MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBDUllQVE9fREVWX0NDUF9ERFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNlY3VyZSBQcm9jZXNzb3IgZGV2aWNlIGRyaXZlclxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgfHwgQVJNNjRcXG4gICA1OlxcdFxcdGRlZmF1bHQgbVxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBQcm92aWRlcyBBTUQgU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyLlxcbiAgIDg6XFx0XFx0ICBJZiB5b3UgY2hvb3NlICdNJyBoZXJlLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjY3AuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBDUllQVE9fREVWX1NQX0NDUFxcbiAgMTE6XFx0XFx0Ym9vbCBcXFwiQ3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBkZXZpY2VcXFwiXFxuICAxMjpcXHRcXHRkZWZhdWx0IHlcXG4gIDEzOlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfREQgXFx1MDAyNlxcdTAwMjYgRE1BREVWSUNFU1xcbiAgMTQ6XFx0XFx0c2VsZWN0IEhXX1JBTkRPTVxcbiAgMTU6XFx0XFx0c2VsZWN0IERNQV9FTkdJTkVcXG4gIDE2OlxcdFxcdHNlbGVjdCBDUllQVE9fU0hBMVxcbiAgMTc6XFx0XFx0c2VsZWN0IENSWVBUT19TSEEyNTZcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgUHJvdmlkZXMgdGhlIHN1cHBvcnQgZm9yIEFNRCBDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIChDQ1ApIGRldmljZVxcbiAgMjA6XFx0XFx0ICB3aGljaCBjYW4gYmUgdXNlZCB0byBvZmZsb2FkIGVuY3J5cHRpb24gb3BlcmF0aW9ucyBzdWNoIGFzIFNIQSwgQUVTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE4OjMzLjU0Njk0NTExMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjM1NTEyNTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiB0aGlzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUgYXJlIGBLVk1fQU1EYCwgYEtWTV9BTURfU0VWYCwgYENSWVBUT19ERVZfQ0NQX0REYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYW5kIGBBTURfSU9NTVVgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGNvZGUgcGF0aCBldmVuICpyZWFjaGFibGUqIGluIGEgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnQ/XG5cblNFViwgb2J2aW91c2x5LCBuZWNlc3NpdGF0ZXMgQU1EIGhhcmR3YXJlIHdpdGggU0VWIGNhcGFiaWxpdGllcy4gV2Uga25vdyB0aGF0IFN5emthbGxlciBpcyBkZXBsb3llZCBvbiBHQ0UsIGFuZCBHQ0UgKmRvZXMqIG9mZmVyIEFNRCBpbnN0YW5jZXMgd2l0aCBTRVYgc3VwcG9ydCDigJMgc3BlY2lmaWNhbGx5IHRoZSBOMkQgYW5kIEMyRCBmYW1pbGllcyBjb21lIHRvIG1pbmQuIFRoZSBjcnVjaWFsIHBvaW50IGlzLCBkb2VzIFN5emthbGxlciB1dGlsaXplIHRob3NlIEFNRCBpbnN0YW5jZXM/IFRoZSBhbnN3ZXIgaXMgeWVzOyBTeXprYWxsZXIgZG9lcyBsZXZlcmFnZSBzb21lIEFNRCBoYXJkd2FyZSBmb3IgdGVzdGluZy5cblxuV2UgYWxzbyBrbm93IHRoYXQgUUVNVSBjYW4gZW11bGF0ZSBjZXJ0YWluIGFzcGVjdHMgb2YgaGFyZHdhcmUsIGJ1dCBTRVYgZnVuZGFtZW50YWxseSBuZWVkcyBoYXJkd2FyZSBzdXBwb3J0IHRocm91Z2ggS1ZNLiBUaGUga2V5IHBhcnQgb2YgdGhpcyBwYXRjaCB0b3VjaGVzIGBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NgIGFuZCBgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWVgLCB3aGljaCBhcmUgZGlyZWN0bHkgaW52b2tlZCBieSBgc2V2X2RiZ19kZWNyeXB0X3Nsb3dgIGFuZCBgc2V2X2RiZ19lbmNyeXB0X3Nsb3dgLiBTbywgdGhlIG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gTGV0J3MgZGlnIGRlZXBlciBhbmQgY2hlY2sgd2hlcmUgYHNldl9kYmdfZGVjcnlwdF9zbG93YCBnZXRzIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgb3ZlcmFsbCBjb2RlYmFzZS4gVGhhdCB3aWxsIHBhaW50IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0IGFuZCBhdHRhY2sgc3VyZmFjZSBvZiB0aGlzIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU3OSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE4OjM5Ljc4MjQ2MDYzNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NDY3NTExMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfZGJnX2RlY3J5cHRfc2xvd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTI5Nz1zdGF0aWMgdm9pZCBzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZSh2b2lkICpidWYpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDQtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzA1OnN0YXRpYyBpbnQgc2V2X2RiZ19kZWNyeXB0X3Nsb3coc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyYyxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDYtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnNyY19wLCB1bnNpZ25lZCBsb25nIGRzdCxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTM2Mz1zdGF0aWMgaW50IHNldl9kYmdfY3J5cHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTE0MjMtXFx0XFx0ZWxzZSBpZiAoY21kID09IEtWTV9TRVZfREJHX0RFQ1JZUFQpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxNDI0OlxcdFxcdFxcdHJldCA9IHNldl9kYmdfZGVjcnlwdF9zbG93KGt2bSwgc3JjLCBzcmNfcCwgZHN0LFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQyNS1cXHRcXHRcXHRcXHRcXHRcXHQgICBsZW4sIFxcdTAwMjZhcmdwLVxcdTAwM2VlcnJvcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE4OjQxLjE0NzE0MzMwOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mjc2MTcxOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUgYXMgYSBmaWVsZCBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgc2V2X2RiZ19jcnlwdCBGdW5jdGlvbioqXG5cblJpZ2h0LCBzbyBgc2V2X2RiZ19jcnlwdGAuLi4gd2hlcmUncyB0aGF0IGJlaW5nIHVzZWQgYWdhaW4/IE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIGBzZXZfaXNzdWVfY21kYCBvciBzb21ldGhpbmcgZnVuY3Rpb25hbGx5IHNpbWlsYXIsIHNvbWV0aGluZyBpbnZvbHZlZCB3aXRoIGlzc3VpbmcgY29tbWFuZHMgdG8gdGhlIFNFViAoU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbikgaGFyZHdhcmUsIG9yIGludGVyYWN0aW5nIHdpdGggdGhlIGNyeXB0byBlbmdpbmVzLiBCdXQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKnVuZGVyc3RhbmQqIHRoZSBjb250ZXh0IG9mIGl0cyBjYWxscy4gSSBzaG91bGQgc3RhcnQgYnkgZGl2aW5nIGludG8gdGhlIGBzZXZfZGJnX2NyeXB0YCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgKmhvdyogdGhpcyBpcyB1c2VkLiBUaW1lIHRvIGNoZWNrIHRoZSBzb3VyY2UsIGNyb3NzLXJlZmVyZW5jZSB0aGUgY2FsbCBzaXRlcywgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIGZsb3cgdGVsbHMgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxODo0OS40MjMzMTgwNzlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTI5NzUzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfZGJnX2NyeXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMjQwPXN0YXRpYyBpbnQgc2V2X2lzc3VlX2RiZ19jbWQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyY19wYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI1NS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEyNTY6c3RhdGljIHZvaWQgKnNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBfX3ZhLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI1Ny1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBsb25nICpwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI5Ni1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEyOTc6c3RhdGljIHZvaWQgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUodm9pZCAqYnVmKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI5OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzMDU9c3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzEzLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMxNDpcXHRidWYgPSBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3JjX3AsIHNyYywgbGVuLCBcXHUwMDI2c3JjX3BhLCBcXHUwMDI2bnJfYnl0ZXMpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMxNS1cXHRpZiAoIWJ1ZilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMyNS1vdXQ6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzI2OlxcdHNldl9kYmdfY3J5cHRfc2xvd19mcmVlKGJ1Zik7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzI3LVxcdHJldHVybiByO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMzMwPXN0YXRpYyBpbnQgc2V2X2RiZ19lbmNyeXB0X3Nsb3coc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyYyxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMzOS1cXHQvKiBEZWNyeXB0IHRoZSBfZGVzdGluYXRpb25fIHRvIGRvIGEgUk1XIG9uIHBsYWludGV4dC4gKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEzNDA6XFx0YnVmID0gc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKGRzdF9wLCBkc3QsIGxlbiwgXFx1MDAyNmRzdF9wYSwgXFx1MDAyNm5yX2J5dGVzKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNDEtXFx0aWYgKCFidWYpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNTgtb3V0OlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTM1OTpcXHRzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZShidWYpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2MC1cXHRyZXR1cm4gcjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2Mi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEzNjM6c3RhdGljIGludCBzZXZfZGJnX2NyeXB0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2NC1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGNtZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjY0Mj1pbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcwMC1cXHRjYXNlIEtWTV9TRVZfREJHX0VOQ1JZUFQ6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNzAxOlxcdFxcdHIgPSBzZXZfZGJnX2NyeXB0KGt2bSwgXFx1MDAyNnNldl9jbWQsIHNldl9jbWQuaWQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcwMi1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTg6NDkuNjMyNjI0NjExWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDYzNzY4MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBzZXZfZGJnX2NyeXB0YCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYHNldl9kYmdfY3J5cHRgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIGBzZXZfbWVtX2VuY19pb2N0bGAgZnVuY3Rpb24sIHdoaWNoIGlzIGl0c2VsZiBwYXJ0IG9mIHRoZSBLVk0gaW9jdGwgaGFuZGxpbmcuIFRoYXQgbWVhbnMsIGFuZCB0aGlzIGlzIGtleSwgdXNlcnNwYWNlIGNhbiBkZWZpbml0ZWx5IHJlYWNoIGl0IHRocm91Z2ggdGhlIGBLVk1fU0VWX0RCR19ERUNSWVBUYCBhbmQgYEtWTV9TRVZfREJHX0VOQ1JZUFRgIGlvY3Rscy4gQ29uc2lkZXJpbmcgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBmcmVlZCB3aXRoaW4gdGhlIEtWTSBTRVYgaW9jdGwgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGltcGFjdGluZyBtZW1vcnkgYWxsb2NhdGlvbi9mcmVlaW5nLCAqeWVzKiwgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIFdlJ3JlIGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgYXJlYSBmb3IgaW50ZXJlc3RpbmcgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jYCBhbmQgYHNldl9kYmdfY3J5cHRfc2xvd19mcmVlYC4gVGhlIHBhdGNoIGRpY3RhdGVzIHRoYXQgdGhleSBub3cgYWxsb2NhdGUgYW5kIGZyZWUgYSBmdWxsIHBhZ2Ugd2hlbiBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgcmV0dXJucyB0cnVlLiBUaGlzIGlzIHNwZWNpZmljYWxseSB0byBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBhY2Nlc3MgaXNzdWVzIHRvIHRoZSBwYWdlIHRoYXQgbWlnaHQgb2NjdXIgZHVyaW5nIFJNUCB1cGRhdGVzIGZyb20gdGhlIFBTUCBkcml2ZXIuIFRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhcmUgc2lnbmlmaWNhbnQgYW5kIG11c3QgYmUgY2FyZWZ1bGx5IGFuYWx5emVkLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gV2UgZGVmaW5pdGVseSBuZWVkIGBLVk1fQU1EYCwgYEtWTV9BTURfU0VWYCwgYENSWVBUT19ERVZfQ0NQX0REYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYW5kIGBBTURfSU9NTVVgIGVuYWJsZWQuIEhhbmcgb24uLi4gbGV0J3MgZG91YmxlIGNoZWNrIHRob3NlIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24uIEFoLCB5ZXMsIGBLVk1fQU1EX1NFVmAgaXMgZGVwZW5kZW50IG9uIGBDUllQVE9fREVWX1NQX1BTUGAgYW5kIHRoZSBleGNsdXNpb24gb2YgYChLVk1fQU1EPXkgXHUwMDI2XHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pYC4gVGh1cywgd2UgcmVxdWlyZSBgQ1JZUFRPX0RFVl9DQ1BfREQ9eWAgYW5kIGBDUllQVE9fREVWX1NQX1BTUD15YC4gV2UgYWxzbyBrbm93IHRoYXQgYEFNRF9JT01NVWAgaXMgY3J1Y2lhbCBmb3IgYENSWVBUT19ERVZfU1BfUFNQYC4gVGhlcmVmb3JlLCBiZWZvcmUgZnV6emluZywgaXQncyB2aXRhbCBJIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEFNRF9JT01NVWAgdG8gZW5zdXJlIGNvbXBsZXRlIGNvdmVyYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjY2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE5OjAwLjY5NjM5NjY5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3ODEwODU5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQU1EX0lPTU1VXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTItIyBBTUQgSU9NTVUgc3VwcG9ydFxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6Mzpjb25maWcgQU1EX0lPTU1VXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00LVxcdGJvb2wgXFxcIkFNRCBJT01NVSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zMi1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjMzOmNvbmZpZyBBTURfSU9NTVVfSU9NTVVGRFxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMzQtXFx0Ym9vbCBcXFwiRW5hYmxlIElPTU1VRkQgZmVhdHVyZXMgZm9yIEFNRCBJT01NVSAoRVhQRVJJTUVOVEFMKVxcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDItXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzo0Mzpjb25maWcgQU1EX0lPTU1VX0RFQlVHRlNcXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQ0LVxcdGJvb2wgXFxcIkVuYWJsZSBBTUQgSU9NTVUgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE5OjA1LjM3NDUxMTU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NDEyOTYyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBBTUQgSU9NTVUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgQU1EIElPTU1VIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZ2AgZmlsZS4gSSdtIGFzc3VtaW5nIHRoYXQncyB0aGUgY2Fub25pY2FsIGxvY2F0aW9uIGZvciB0aGVzZSBzb3J0cyBvZiBkZWZpbml0aW9ucy4gTGV0J3Mgc3RhcnQgYXJvdW5kIGxpbmUgMywgd2hpY2ggaXMgdXN1YWxseSB3aGVyZSBhIGdvb2Qgb3ZlcnZpZXcgb3IgZ2VuZXJhbCBkZXNjcmlwdGlvbiBiZWdpbnMsIG9yIGF0IGxlYXN0IHRoZSB0b3AtbGV2ZWwgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcxOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE5OjA4LjExNTgxMDk3NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ1MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCMgQU1EIElPTU1VIHN1cHBvcnRcXG4gICAzOlxcdGNvbmZpZyBBTURfSU9NTVVcXG4gICA0OlxcdFxcdGJvb2wgXFxcIkFNRCBJT01NVSBzdXBwb3J0XFxcIlxcbiAgIDU6XFx0XFx0c2VsZWN0IFNXSU9UTEJcXG4gICA2OlxcdFxcdHNlbGVjdCBQQ0lfTVNJXFxuICAgNzpcXHRcXHRzZWxlY3QgUENJX0FUU1xcbiAgIDg6XFx0XFx0c2VsZWN0IFBDSV9QUklcXG4gICA5OlxcdFxcdHNlbGVjdCBQQ0lfUEFTSURcXG4gIDEwOlxcdFxcdHNlbGVjdCBJUlFfTVNJX0xJQlxcbiAgMTE6XFx0XFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbiAgMTI6XFx0XFx0c2VsZWN0IElPTU1VX0FQSVxcbiAgMTM6XFx0XFx0c2VsZWN0IElPTU1VX0lPVkFcXG4gIDE0OlxcdFxcdHNlbGVjdCBJT01NVV9TVkFcXG4gIDE1OlxcdFxcdHNlbGVjdCBJT01NVV9JT1BGXFxuICAxNjpcXHRcXHRzZWxlY3QgSU9NTVVGRF9EUklWRVIgaWYgSU9NTVVGRFxcbiAgMTc6XFx0XFx0c2VsZWN0IEdFTkVSSUNfUFRcXG4gIDE4OlxcdFxcdHNlbGVjdCBJT01NVV9QVFxcbiAgMTk6XFx0XFx0c2VsZWN0IElPTU1VX1BUX0FNRFYxXFxuICAyMDpcXHRcXHRzZWxlY3QgSU9NTVVfUFRfWDg2XzY0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE5OjA4LjExNzk2MDg4NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjkwNDI4MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIG1vZHVsZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXQncyBsb2NhdGVkIGluIGBkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnYCwgd2hpY2ggc3VnZ2VzdHMgaXQncyBBTUQtc3BlY2lmaWMgZm9yIElPTU1VIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBuYWlsIGRvd24gZXhhY3RseSB3aGF0J3MgcmVxdWlyZWQgdG8gYnVpbGQgYW5kIGVuYWJsZSB0aGlzIHRoaW5nLiBJdCBzZWVtcyBwcmV0dHkgc2VsZi1jb250YWluZWQsIG5vdCByZXF1aXJpbmcgYW55dGhpbmcgdHJ1bHkgKnN0cmljdCosIGJ1dCBJIHNob3VsZCBkb3VibGUgY2hlY2sgaWYgaXQgaW1wbGljaXRseSByZWxpZXMgb24gYFg4Nl82NGAgZ2l2ZW4gaXRzIGxvY2F0aW9uLCB0aG91Z2ggaXQgbWlnaHQgYmUgaW5jbHVkZWQgYnkgYSBtb3JlIGdlbmVyYWwgaW9tbXUgS2NvbmZpZy5cblxuTGV0J3Mgc3RhcnQgYnkgbGlzdGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgdGhpbmsgd2lsbCBiZSBuZWVkZWQuIEknbSBnb2luZyB0byBlbmFibGU6XG5cbiogICBgS1ZNX0FNRGBcbiogICBgS1ZNX0FNRF9TRVZgXG4qICAgYENSWVBUT19ERVZfQ0NQX0REYFxuKiAgIGBDUllQVE9fREVWX1NQX1BTUGBcbiogICBgQU1EX0lPTU1VYFxuXG5CdXQgaG9sZCBvbiwgYEtWTV9BTURgICpkb2VzKiBkZXBlbmQgb24gYEtWTWAuIFJpZ2h0LCB0aGF0J3MgY3J1Y2lhbC4gSSBjYW4ndCBvdmVybG9vayB0aGF0LiBTbywgSSBoYXZlIHRvIG1ha2Ugc3VyZSBgS1ZNYCBpcyBjb25maWd1cmVkLCB3aGljaCBJIHByb2JhYmx5IGFscmVhZHkgZGlkLiBOb3csIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBkZXBlbmRlbmNpZXMgZm9yIGBLVk1gLCBqdXN0IHRvIGJlIGNlcnRhaW4gSSBoYXZlbid0IG92ZXJsb29rZWQgYW55IG90aGVyIGltcGxpY2l0IHJlcXVpcmVtZW50cyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkIGJlZm9yZSBJIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE2MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE5OjEyLjQwODM5MjA1NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4NDAyNTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTk6MTIuNjE2ODAwOTk4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODIzNDAzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgS2VybmVsJ3MgVmlydHVhbGl6YXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBLVk1gIOKAkyBpdCdzIGRlZmluaXRlbHkgYSB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2d5LCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZXJlZm9yZSwgbXkgaW1tZWRpYXRlIGZvY3VzIGhhcyB0byBzaGlmdCB0byB0aGUgY29yZSBgVklSVFVBTElaQVRJT05gIGZyYW1ld29yayB3aXRoaW4gdGhlIGtlcm5lbC4gV2hlcmUgd291bGQgSSBleHBlY3QgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGF0PyBSaWdodCwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGVzIGFyZSB0aGUgcGxhY2UgdG8gc3RhcnQuIFNwZWNpZmljYWxseSwgSSdsbCBkcmlsbCBkb3duIGludG8gYGFyY2gveDg2L0tjb25maWdgIHRvIHNlZSBob3cgYFZJUlRVQUxJWkFUSU9OYCBpcyBoYW5kbGVkIHRoZXJlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLCB0aGUgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGxpZmVibG9vZCBvZiB0aGlzIHNvcnQgb2YgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxOToxNS42OTkxNzI5MDRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1Nzg1MzAzOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZJUlRVQUxJWkFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE5OjE1Ljk1NzAzNTAxMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTgxNjY5MjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgS2NvbmZpZyBMb2NhdGlvbnMgZm9yIFZJUlRVQUxJWkFUSU9OKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhlIGBWSVJUVUFMSVpBVElPTmAgb3B0aW9uIGlzIGRlZmluZWQgaW4gdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCB3b3VsZCBiZSB3aXRoaW4gdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZGlyZWN0b3J5LCBnaXZlbiB0aGF0IHdlIGFyZSB0YWxraW5nIGFib3V0IHZpcnR1YWxpemF0aW9uIG9uIHg4NiwgYW5kIEtWTSBpcyBhIGNvbW1vbiB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2d5LiBIb3dldmVyLCBteSBndXQgaXMgdGVsbGluZyBtZSBpdCBtaWdodCBhbHNvIHJlc2lkZSBpbiBhIGhpZ2hlci1sZXZlbCBgYXJjaC94ODYvS2NvbmZpZ2AgZmlsZSBvciBwZXJoYXBzIHNvbWV0aGluZyByZWxhdGVkIHRvIHZob3N0LCBzbyBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBpcyBhbHNvIGEgcG9zc2liaWxpdHkuIEl0IGNvdWxkIGV2ZW4gYmUgc3ByZWFkIGFjcm9zcyBtdWx0aXBsZSBmaWxlcy4gVGhlIGJlc3QgYXBwcm9hY2ggaXMgdG8gYmUgY29tcHJlaGVuc2l2ZS4gTGV0J3MgZmlyZSB1cCBhIGBncmVwYCBjb21tYW5kIHRvIHNlYXJjaCB0aGUgZW50aXJlIHNvdXJjZSB0cmVlIGZvciB0aGUgc3RyaW5nIGBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OYC4gVGhpcyB3aWxsIHF1aWNrbHkgcmV2ZWFsIGFsbCB0aGUgbG9jYXRpb25zIHdoZXJlIGl0J3MgZGVmaW5lZCBhbmQgaG9wZWZ1bGx5IHBpbnBvaW50IHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gZmlsZXMgSSBuZWVkIHRvIGV4YW1pbmUuIEknbGwgbmVlZCB0byBrbm93IHdoaWNoIGZpbGUgZGVmaW5lcyBpdCwgYW5kIGlkZWFsbHksIEknbGwgcmV2aWV3IGl0cyBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA4NywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE5OjIwLjUzODcwODMxOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA1OTYxMzI3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnPTY9c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNy1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctOS1cXHRib29sIFxcXCJWaXJ0dWFsaXphdGlvblxcXCJcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnPTY9c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTctXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctOS1cXHRib29sIFxcXCJWaXJ0dWFsaXphdGlvblxcXCJcXG4tLVxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZz01PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL21pcHMva3ZtL0tjb25maWctNi1cXG5hcmNoL21pcHMva3ZtL0tjb25maWc6NzptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTgtXFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Nj1zb3VyY2UgXFxcInZpcnQva3ZtL0tjb25maWdcXFwiXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTctXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05LVxcdGJvb2wgXFxcIlZpcnR1YWxpemF0aW9uXFxcIlxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZz02PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTctXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzo4Om1lbnVjb25maWcgVklSVFVBTElaQVRJT05cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTktXFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc9NT1zb3VyY2UgXFxcInZpcnQva3ZtL0tjb25maWdcXFwiXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjc6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy04LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTY9c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctOS1cXHRib29sIFxcXCJWaXJ0dWFsaXphdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTk6MjQuNTk4MzI3OTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM1NTY1MjM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBWaXJ0dWFsaXphdGlvbiBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGltcGxlbWVudGluZyBgVklSVFVBTElaQVRJT05gLiBUaW1lIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQncyBzZWUuLi4gSSdsbCBuZWVkIGBWSVJUVUFMSVpBVElPTmAgb2J2aW91c2x5LCBmb2xsb3dlZCBieSBgS1ZNYC4gTm93LCBzaW5jZSBJJ20gZGVhbGluZyB3aXRoIEFNRCBoYXJkd2FyZSwgSSBzaG91bGQgY29uc2lkZXIgYEtWTV9BTURgLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBgS1ZNX0FNRF9TRVZgIGZvciBzZWN1cmUgZW5jcnlwdGVkIHZpcnR1YWxpemF0aW9uLiBBbmQgbGV0J3Mgbm90IGZvcmdldCB0aGUgY3J5cHRvIGRldmljZSBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgYENSWVBUT19ERVZfQ0NQX0REYCBhbmQgYENSWVBUT19ERVZfU1BfUFNQYC4gRmluYWxseSwgZm9yIHByb3BlciBJT01NVSBzdXBwb3J0LCBJIHNob3VsZCBlbmFibGUgYEFNRF9JT01NVWAuXG5cblJpZ2h0LCB0aGF0J3MgdGhlIGNvcmUgc2V0LiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW4gb3JkZXIuIGBLVk1gIGl0c2VsZiBoYXMgYSBidW5jaCBvZiBwcmVyZXF1aXNpdGVzIOKAkyBgSElHSF9SRVNfVElNRVJTYCwgYFg4Nl9MT0NBTF9BUElDYCwgYFBSRUVNUFRfTk9USUZJRVJTYCwgYE1NVV9OT1RJRklFUmAsIGBIQVZFX0tWTWAsIGBFVkVOVEZEYCwgYW5kIGBJUlFfQllQQVNTX01BTkFHRVJgLiBNb3N0IG9mIHRoZXNlIHNob3VsZCBiZSBzdGFuZGFyZCBhbmQgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLCBJJ2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2U6IHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUuIFRoYXQnbGwgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgb24gd2hhdCdzIHJlcXVpcmVkIGZvciBhIGNsZWFuIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAxNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxOTozMC45NTM5ODM3NDRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9NU0lcXG4gIDQxOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXFxuICA0MjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fTk9fUE9MTFxcbiAgNDM6XFx0XFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXFxuICA0NDpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxuICA0NTpcXHRcXHRzZWxlY3QgS1ZNX1ZGSU9cXG4gIDQ2OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9QTV9OT1RJRklFUiBpZiBQTVxcbiAgNDc6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxuICA0ODpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbiAgNDk6XFx0XFx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXFxuICA1MDpcXHRcXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgS1ZNXFxuICA1MzpcXHRcXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbiAgNTQ6XFx0XFx0ZGVwZW5kcyBvbiBYODZfTE9DQUxfQVBJQ1xcbiAgNTU6XFx0XFx0aGVscFxcbiAgNTY6XFx0XFx0ICBTdXBwb3J0IGhvc3RpbmcgZnVsbHkgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMgdXNpbmcgaGFyZHdhcmVcXG4gIDU3OlxcdFxcdCAgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gIFlvdSB3aWxsIG5lZWQgYSBmYWlybHkgcmVjZW50XFxuICA1ODpcXHRcXHQgIHByb2Nlc3NvciBlcXVpcHBlZCB3aXRoIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuIFlvdSB3aWxsIGFsc29cXG4gIDU5OlxcdFxcdCAgbmVlZCB0byBzZWxlY3Qgb25lIG9yIG1vcmUgb2YgdGhlIHByb2Nlc3NvciBtb2R1bGVzIGJlbG93LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxOTozMC45NTQxNzM3NzRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2MTQ0OTI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gZ2V0dGluZyBgS1ZNYCB3b3JraW5nIG9wdGltYWxseSwgYW5kIGl0J3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBgWDg2X0xPQ0FMX0FQSUNgIGlzIGEgY29yZSBkZXBlbmRlbmN5LiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGZ1bmRhbWVudGFsIHRvIGhvdyB0aGUgQ1BVIGludGVyYWN0cyB3aXRoIGludGVycnVwdHMgYW5kIHZpcnR1YWxpemF0aW9uLiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBjb25maWdzIGVuYWJsZWQuIFRoYXQncyBgVklSVFVBTElaQVRJT05gLCBgS1ZNYCwgYEtWTV9BTURgLCBgS1ZNX0FNRF9TRVZgLCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBhbmQgYENSWVBUT19ERVZfU1BfUFNQYC4gVGhlIEFNRC1zcGVjaWZpYyBvbmVzIGFyZSBvYnZpb3VzbHkgY3J1Y2lhbCBmb3IgbXkgc2V0dXAsIGFuZCBgQU1EX0lPTU1VYCBpcyBhIG11c3QuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBzdXNwZWN0IHNvbWUgb2YgdGhlIGNyeXB0byBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBpbnRlci1yZWxhdGVkLiBJIHdhbnQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ1JZUFRPX0RFVl9DQ1BfRERgLiBMZXQgbWUgZGlnIGludG8gdGhvc2Ugbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg2MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE5OjM1LjIxNTYyNzExOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBDUFVfU1VQX0FNRCB8fCBBUk02NFxcbiAgIDU6XFx0XFx0ZGVmYXVsdCBtXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFByb3ZpZGVzIEFNRCBTZWN1cmUgUHJvY2Vzc29yIGRldmljZSBkcml2ZXIuXFxuICAgODpcXHRcXHQgIElmIHlvdSBjaG9vc2UgJ00nIGhlcmUsIHRoaXMgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNjcC5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIENSWVBUT19ERVZfU1BfQ0NQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE5OjM1LjIxNTcyOTg0OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTUyOTc1NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFByb2Nlc3NvciBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHN5c3RlbSBjb25maWd1cmF0aW9uLiBUaGUgbG9naWMgaGluZ2VzIG9uIHRoZSBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlLiBJdCAqcmVhbGx5KiBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUgZGVhbGluZyB3aXRoIGFuIEFNRCBDUFUgb3IgYW4gQVJNNjQgb25lLiBUaGF0IGBDUFVfU1VQX0FNRCB8fCBBUk02NGAgY29uZGl0aW9uIGlzIHRoZSBrZXkuIEFuZCwgKm9mIGNvdXJzZSosIGBDUFVfU1VQX0FNRGAgaXMgcHJldHR5IG11Y2ggdGhlIGRlZmF1bHQgZm9yIGFueSBzdGFuZGFyZCB4ODYgc2V0dXAuIFdlIGNhbiBwcm9iYWJseSBtYWtlIHRoYXQgYXNzdW1wdGlvbi5cblxuTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgSU9NTVVzLiBJcyB0aGVyZSBhbnkgZGVwZW5kZW5jeSB0aWVkIHRvIGBBTURfSU9NTVVgIHRoYXQgbmVlZHMgdG8gYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uPyBJIHdvbmRlciBpZiB0aGVyZSBpcyBhbiBpbnRlcmFjdGlvbj8gSSBzaG91bGQgZXhwbG9yZSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM0MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTk6MzkuMTY4NzA4MTE5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCMgQU1EIElPTU1VIHN1cHBvcnRcXG4gICAzOlxcdGNvbmZpZyBBTURfSU9NTVVcXG4gICA0OlxcdFxcdGJvb2wgXFxcIkFNRCBJT01NVSBzdXBwb3J0XFxcIlxcbiAgIDU6XFx0XFx0c2VsZWN0IFNXSU9UTEJcXG4gICA2OlxcdFxcdHNlbGVjdCBQQ0lfTVNJXFxuICAgNzpcXHRcXHRzZWxlY3QgUENJX0FUU1xcbiAgIDg6XFx0XFx0c2VsZWN0IFBDSV9QUklcXG4gICA5OlxcdFxcdHNlbGVjdCBQQ0lfUEFTSURcXG4gIDEwOlxcdFxcdHNlbGVjdCBJUlFfTVNJX0xJQlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxOTozOS4xNjg4MDIzOTlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyNjUzMTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBhIEJvb2xlYW4gQ2hhbmdlKipcblxuT2theSwgc28gaXQncyBqdXN0IGEgYm9vbGVhbiwgaW5pdGlhbGx5LiBCdXQgYXMgd2Uga25vdywgZXZlbiBzZWVtaW5nbHkgc2ltcGxlIGNoYW5nZXMgY2FuIHJpcHBsZSBvdXR3YXJkcy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIHNjb3BlIG9mIHRoaXMgbW9kaWZpY2F0aW9uLiBJIG5lZWQgdG8gdHJhY2UgaXRzIHBhdGggdGhyb3VnaCB0aGUgY29kZS5cblxuVGhlIGZvY3VzIGlzIG9uIGhvdyB0aGlzIGJvb2wgYWZmZWN0cyB0aGUgYHNldl9kYmdfY3J5cHRgIGZhbWlseSwgc3BlY2lmaWNhbGx5IHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZnVuY3Rpb25zLiBJJ3ZlIGlkZW50aWZpZWQgYHNldl9kYmdfY3J5cHRfc2xvd19hbGxvY2AgYW5kIGBzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZWAsIGJvdGggbWFya2VkIGFzIHN0YXRpYywgYXMgdGhlIGtleSB0YXJnZXRzLiBUaGV5IGFyZSBjYWxsZWQgZnJvbSB0aGUgYWxzbyBzdGF0aWMgYHNldl9kYmdfZGVjcnlwdF9zbG93YCBhbmQgYHNldl9kYmdfZW5jcnlwdF9zbG93YC4gVGhvc2UgdHdvIGZ1bmN0aW9ucywgaW4gdHVybiwgYXJlIGNhbGxlZCBieSBgc2V2X2RiZ19jcnlwdGAsIHdoaWNoIGlzIGl0c2VsZiBzdGF0aWMuXG5cbk5vdyBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogYHNldl9kYmdfY3J5cHRgIGlzIGNhbGxlZCBieSBgc2V2X21lbV9lbmNfaW9jdGxgLiBUaGUgY3JpdGljYWwgcG9pbnQgaGVyZSBpcyB0aGF0IGBzZXZfbWVtX2VuY19pb2N0bGAgaXMgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vdCBzdGF0aWMuIFRoZXJlZm9yZSwgaXQncyB0aGUgZW50cnkgcG9pbnQgdG8gdGhpcyB3aG9sZSBjaGFpbi4gVGhlIGJvb2xlYW4gY2hhbmdlIHBvdGVudGlhbGx5IGFmZmVjdHMgZnVuY3Rpb25zIHRoYXQgYXJlIGF2YWlsYWJsZSB0byB1c2VycyBvZiB0aGUga2VybmVsIG1vZHVsZS5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG11c3QgdGhvcm91Z2hseSBleGFtaW5lIGBzZXZfbWVtX2VuY19pb2N0bGAgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBib29sZWFuIGFuZCBpdHMgcG90ZW50aWFsIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MTIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxOTo0My41OTUzNDcwOTlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMTYyMDgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfbWVtX2VuY19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjYzMj1zdGF0aWMgaW50IHNucF9lbmFibGVfY2VydHMoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjQxLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY0MjppbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxOTo0NC4zMDY5NzMwNzhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAwODEwMzM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlNFViBJT0NUTCBFbnRyeSBQb2ludCBJbnZlc3RpZ2F0aW9uKipcblxuUmlnaHQsIHNvIGBzZXZfbWVtX2VuY19pb2N0bGAgaXMgdGhlIGFzc3VtZWQgZW50cnkgcG9pbnQgZm9yIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgaW9jdGxzLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIHdlJ3JlIHN0YXJ0aW5nIHdpdGguIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IGlzIHRoaXMgKnRoZSogb25seSBlbnRyeSBwb2ludD8gQXJlIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIFNFViBpb2N0bCBoYW5kbGluZyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGRvIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbHRlcm5hdGl2ZXMgb3IgaWYgc29tZXRoaW5nIGlzIG1pc3NlZC4gTGV0IG1lIHBpdm90IHRvIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCBub3cgYW5kIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxOTo0OC4zMTUwODE2MDRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTAxOTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfbWVtX2VuY19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI2MzI9c3RhdGljIGludCBzbnBfZW5hYmxlX2NlcnRzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2NDI6aW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjQzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTMyNT1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQ0My1cXHQuZGV2X2dldF9hdHRyID0gc2V2X2Rldl9nZXRfYXR0cixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0NDQ6XFx0Lm1lbV9lbmNfaW9jdGwgPSBzZXZfbWVtX2VuY19pb2N0bCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NDUtXFx0Lm1lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD05Nzg9dm9pZCBzZXZfZXNfdW5tYXBfZ2hjYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk4MC0jaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODE6aW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTgyLWludCBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxOTo0OC41NTAxMDczNTRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxMjQ3MTYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEludmVzdGlnYXRpb24gaW50byB0aGUgU0VWIE1lbW9yeSBFbmNyeXB0aW9uIElPQ1RMKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIGluZGVlZCB0aGUgcHJpbWFyeSBmdW5jdGlvbiBJIG5lZWQgdG8gY29uY2VudHJhdGUgb24gaGVyZS4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCwgc28gdGhhdCBmZWVscyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIE5vdywgaG9sZCBvbiBhIHNlY29uZC4uLiB3aGF0J3MgdGhpcz8gYHNldl9kYmdfY3J5cHRgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgeWV0IGl0J3MgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRob3NlIGRlYnVnZ2luZyBvcGVyYXRpb25zLCBgS1ZNX1NFVl9EQkdfREVDUllQVGAgYW5kIGBLVk1fU0VWX0RCR19FTkNSWVBUYC4gVGhpcyBpcyBhIGJpdCB1bnVzdWFsLlxuXG5CdXQsIHNpbmNlIGBzZXZfbWVtX2VuY19pb2N0bGAgaXMgdGhlIG92ZXJhbGwgZW50cnkgcG9pbnQsIGl0IG1ha2VzIHNlbnNlIHRvIGtlZXAgaXQgYXMgbXkgbWFpbiBmb2N1cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55IG90aGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgbWVjaGFuaXNtLiBUaGUgbmV4dCBxdWVzdGlvbiB0byBhbnN3ZXIgaXMgd2hldGhlciBvciBub3QgYHNldl9kYmdfY3J5cHRgIGlzIGlubGluZWQuIFRoYXQgd2lsbCBpbXBhY3QgaG93IEkgYXBwcm9hY2ggdGhlIGFuYWx5c2lzLiBMZXQncyBsb29rIGludG8gdGhhdCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAwOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxOTo1Mi4zNjI1ODIzODdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzkyNDA5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfZGJnX2NyeXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMjQwPXN0YXRpYyBpbnQgc2V2X2lzc3VlX2RiZ19jbWQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyY19wYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI1NS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEyNTY6c3RhdGljIHZvaWQgKnNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBfX3ZhLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI1Ny1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBsb25nICpwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI5Ni1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEyOTc6c3RhdGljIHZvaWQgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUodm9pZCAqYnVmKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI5OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzMDU9c3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzEzLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMxNDpcXHRidWYgPSBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3JjX3AsIHNyYywgbGVuLCBcXHUwMDI2c3JjX3BhLCBcXHUwMDI2bnJfYnl0ZXMpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMxNS1cXHRpZiAoIWJ1ZilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMyNS1vdXQ6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzI2OlxcdHNldl9kYmdfY3J5cHRfc2xvd19mcmVlKGJ1Zik7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzI3LVxcdHJldHVybiByO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMzMwPXN0YXRpYyBpbnQgc2V2X2RiZ19lbmNyeXB0X3Nsb3coc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyYyxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMzOS1cXHQvKiBEZWNyeXB0IHRoZSBfZGVzdGluYXRpb25fIHRvIGRvIGEgUk1XIG9uIHBsYWludGV4dC4gKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEzNDA6XFx0YnVmID0gc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKGRzdF9wLCBkc3QsIGxlbiwgXFx1MDAyNmRzdF9wYSwgXFx1MDAyNm5yX2J5dGVzKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNDEtXFx0aWYgKCFidWYpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNTgtb3V0OlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTM1OTpcXHRzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZShidWYpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2MC1cXHRyZXR1cm4gcjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2Mi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEzNjM6c3RhdGljIGludCBzZXZfZGJnX2NyeXB0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2NC1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGNtZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjY0Mj1pbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcwMC1cXHRjYXNlIEtWTV9TRVZfREJHX0VOQ1JZUFQ6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNzAxOlxcdFxcdHIgPSBzZXZfZGJnX2NyeXB0KGt2bSwgXFx1MDAyNnNldl9jbWQsIHNldl9jbWQuaWQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcwMi1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTk6NTIuNTI2NTE1MDEzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4MTExMDIzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNIFNFViBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBzZXZfZGJnX2NyeXB0YCBpcyBzdGF0aWMgYnV0IG5vdCBpbmxpbmUuIEl0J3MgbGlrZWx5IHRoZSBjb21waWxlciB3aWxsIGlubGluZSBpdCwgc28gdGhhdCdzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQsIGFsdGhvdWdoIEkgd291bGRuJ3Qgd29ycnkgYWJvdXQgaXQgdG9vIG11Y2guIE15IG1haW4gZm9jdXMsIGhvd2V2ZXIsIGlzIG9uIGBzZXZfbWVtX2VuY19pb2N0bGAuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50LlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIGluZGVlZCB0aGUgKm9ubHkqIGlvY3RsIGhhbmRsZXIgZm9yIEtWTSBtZW1vcnkgZW5jcnlwdGlvbi4gWWVwLCBjb25maXJtZWQuIFRoYXQncyBnb29kLiBOb3csIGxldCdzIHNlZSB3aGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcmUuXG5cbkFscmlnaHQsIHNvIGBLVk1fQU1EX1NFVmAgZGVwZW5kcyBvbiBgS1ZNX0FNRGAgYW5kIGBYODZfNjRgLCB3aGljaCBpcyBleHBlY3RlZC4gYENSWVBUT19ERVZfU1BfUFNQYCBkZXBlbmRzIG9uIGBDUllQVE9fREVWX0NDUF9ERGAsIGBYODZfNjRgLCBhbmQgYEFNRF9JT01NVWAuIE5vdGhpbmcgb3V0IG9mIHRoZSBvcmRpbmFyeSBoZXJlOyBgWDg2XzY0YCBpcyBwcmV0dHkgbXVjaCBhIGdpdmVuLlxuXG5MZXQncyByZXZpZXcgdGhlIHJlcXVpcmVkIGNvbmZpZ3M6IGBWSVJUVUFMSVpBVElPTmAsIGBLVk1gLCBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGFuZCBgQU1EX0lPTU1VYC5cblxuSG9sZCBvbi4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gYEtWTV9BTURfU0VWYCBhY3R1YWxseSAqZGVwZW5kcyogb24gYCEoS1ZNX0FNRD15IFx1MDAyNlx1MDAyNiBDUllQVE9fREVWX0NDUF9ERD1tKWAuIE1lYW5pbmcsICppZiogYEtWTV9BTURgIGlzIGB5YCwgdGhlbiBgQ1JZUFRPX0RFVl9DQ1BfRERgICptdXN0KiBiZSBgeWAuIEdpdmVuIHRoZSBTeXprYWxsZXIgY29udGV4dCwgdGhpcyBtZWFucyB0aGF0IHRoZXNlIGNvbmZpZ3Mgd2lsbCBiZSBzZXQgdG8gYHlgIHNpbmNlIFN5emthbGxlciB0ZW5kcyB0byBlbmFibGUgZXZlcnl0aGluZyBpdCBjYW4sIHNvIGBDUllQVE9fREVWX0NDUF9ERGAgYW5kIGBDUllQVE9fREVWX1NQX1BTUGAgd2lsbCBlZmZlY3RpdmVseSBiZSBgeWAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogQ2FuIHdlIGhpdCBgc2V2X2RiZ19jcnlwdGAgZnJvbSBHQ0U/IFN5emthbGxlciBydW5zIG9uIEdDRSwgYW5kIEdDRSBoYXMgQU1EIGluc3RhbmNlcywgc28gaXQgKmNvdWxkKiBoYXZlIFNFViBzdXBwb3J0LiBPYnZpb3VzbHksIEtWTSBTRVYgcmVxdWlyZXMgaGFyZHdhcmUgc3VwcG9ydCB0byByZWFsbHkgd29yaywgYnV0IGV2ZW4gd2l0aG91dCBpdCwgd2UgY2FuIHN0aWxsIGxpa2VseSByZWFjaCB1cCB0byB0aGUgaGFyZHdhcmUgY2hlY2tzIHRocm91Z2ggdGhlIEtWTSBpb2N0bHMuIEknbSB3b25kZXJpbmcgaWYgYHNldl9tZW1fZW5jX2lvY3RsYCBkb2VzIGEgY2hlY2sgb24gYHNldl9ndWVzdChrdm0pYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGZpbmQgb3V0IG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzIzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjIwOjAxLjMzNzYyMDY0N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzA5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjQyLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjQyOlxcdGludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbjI2NDM6XFx0e1xcbjI2NDQ6XFx0XFx0c3RydWN0IGt2bV9zZXZfY21kIHNldl9jbWQ7XFxuMjY0NTpcXHRcXHRpbnQgcjtcXG4yNjQ2OlxcdFxcbjI2NDc6XFx0XFx0aWYgKCFzZXZfZW5hYmxlZClcXG4yNjQ4OlxcdFxcdFxcdHJldHVybiAtRU5PVFRZO1xcbjI2NDk6XFx0XFxuMjY1MDpcXHRcXHRpZiAoIWFyZ3ApXFxuMjY1MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yNjUyOlxcdFxcbjI2NTM6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZzZXZfY21kLCBhcmdwLCBzaXplb2Yoc3RydWN0IGt2bV9zZXZfY21kKSkpXFxuMjY1NDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yNjU1OlxcdFxcbjI2NTY6XFx0XFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZrdm0tXFx1MDAzZWxvY2spO1xcbjI2NTc6XFx0XFxuMjY1ODpcXHRcXHQvKiBPbmx5IHRoZSBlbmNfY29udGV4dF9vd25lciBoYW5kbGVzIHNvbWUgbWVtb3J5IGVuYyBvcGVyYXRpb25zLiAqL1xcbjI2NTk6XFx0XFx0aWYgKGlzX21pcnJvcmluZ19lbmNfY29udGV4dChrdm0pIFxcdTAwMjZcXHUwMDI2XFxuMjY2MDpcXHRcXHQgICAgIWlzX2NtZF9hbGxvd2VkX2Zyb21fbWlycm9yKHNldl9jbWQuaWQpKVxcbjI2NjE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjY2MjpcXHRcXG4yNjYzOlxcdFxcdC8qXFxuMjY2NDpcXHRcXHQgKiBPbmNlIEtWTV9TRVZfSU5JVDIgaW5pdGlhbGl6ZXMgYSBLVk0gaW5zdGFuY2UgYXMgYW4gU05QIGd1ZXN0LCBvbmx5XFxuMjY2NTpcXHRcXHQgKiBhbGxvdyB0aGUgdXNlIG9mIFNOUC1zcGVjaWZpYyBjb21tYW5kcy5cXG4yNjY2OlxcdFxcdCAqL1xcbjI2Njc6XFx0XFx0aWYgKHNldl9zbnBfZ3Vlc3Qoa3ZtKSBcXHUwMDI2XFx1MDAyNiBzZXZfY21kLmlkIFxcdTAwM2MgS1ZNX1NFVl9TTlBfTEFVTkNIX1NUQVJUKVxcbjI2Njg6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4yNjY5OlxcdFxcbjI2NzA6XFx0XFx0c3dpdGNoIChzZXZfY21kLmlkKSB7XFxuMjY3MTpcXHRcXHRjYXNlIEtWTV9TRVZfRVNfSU5JVDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MjA6MDEuMzM4Mjk4MTI3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzE3NjU0MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipEZWJ1Z2dpbmcgdGhlIGBzZXZfZW5hYmxlZGAgVmFyaWFibGUqKlxuXG5Pa2F5LCB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIGNvbmZpcm1pbmcgdGhhdCBgc2V2X2VuYWJsZWRgIGlzIGNoZWNrZWQuIE5vdywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIG9yaWdpbiBvZiB0aGlzIHZhcmlhYmxlLiBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biB3aGVyZSBgc2V2X2VuYWJsZWRgIGlzIGFjdHVhbGx5IGJlaW5nIHNldC4gS25vd2luZyB3aGVyZSBpdCBnZXRzIGl0cyB2YWx1ZSBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgaG93IHRvIHRyb3VibGVzaG9vdCBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gaXQuIFVuZGVyc3RhbmRpbmcgaXRzIGRlZmluaXRpb24gaXMgdGhlIGtleSB0byByZXNvbHZpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4NTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjIwOjA1LjIxMDA2ODg2NFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMTYwODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldl9lbmFibGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01NC0vKiBlbmFibGUvZGlzYWJsZSBTRVYgc3VwcG9ydCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTU6c3RhdGljIGJvb2wgX19yb19hZnRlcl9pbml0IHNldl9lbmFibGVkID0gdHJ1ZTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjU2Om1vZHVsZV9wYXJhbV9uYW1lZChzZXYsIHNldl9lbmFibGVkLCBib29sLCAwNDQ0KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTU3LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjQyPWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjQ2LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY0NzpcXHRpZiAoIXNldl9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0OC1cXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzAyMD12b2lkIF9faW5pdCBzZXZfc2V0X2NwdV9jYXBzKHZvaWQpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMDIxLXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMwMjI6XFx0aWYgKHNldl9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzAyMy1cXHRcXHRrdm1fY3B1X2NhcF9zZXQoWDg2X0ZFQVRVUkVfU0VWKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA2ND12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzA3Mi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMwNzM6XFx0aWYgKCFzZXZfZW5hYmxlZCB8fCAhbnB0X2VuYWJsZWQgfHwgIW5yaXBzKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzA3NC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzE3MS1vdXQ6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMTcyOlxcdGlmIChzZXZfZW5hYmxlZCkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzE3My1cXHRcXHRpbml0X2FyZ3MucHJvYmUgPSB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjI3LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIyODpcXHRzZXZfZW5hYmxlZCA9IHNldl9zdXBwb3J0ZWQ7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjI5LVxcdHNldl9lc19lbmFibGVkID0gc2V2X2VzX3N1cHBvcnRlZDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzI0Mj12b2lkIHNldl9oYXJkd2FyZV91bnNldHVwKHZvaWQpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjQzLXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyNDQ6XFx0aWYgKCFzZXZfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNDUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMjU5PWludCBzZXZfY3B1X2luaXQoc3RydWN0IHN2bV9jcHVfZGF0YSAqc2QpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjYwLXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyNjE6XFx0aWYgKCFzZXZfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNjItXFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjIwOjA1LjM5MTIzODAyOVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDgyNzI0MTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlNFViBTdXBwb3J0IGFuZCBGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIGhlcmUncyB3aGF0IEkndmUgZ290LiBgc2V2X2VuYWJsZWRgIGlzIHNldCBiYXNlZCBvbiB3aGV0aGVyIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyBTRVYsIHdoaWNoIGlzIGRldGVybWluZWQgaW4gYHNldl9oYXJkd2FyZV9zZXR1cGAuIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IHN1cHBvcnQgU0VWLCBgc2V2X2VuYWJsZWRgIGlzIGZhbHNlLCBhbmQgdGhlIGBzZXZfbWVtX2VuY19pb2N0bGAgZnVuY3Rpb24gcmV0dXJucyBgLUVOT1RUWWAuIEJ1dCwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBTeXprYWxsZXIgKmRvZXMqIHJ1biBvbiBpbnN0YW5jZXMgdGhhdCBlaXRoZXIgZnVsbHkgc3VwcG9ydCBTRVYgb3IgYXQgbGVhc3QgaGF2ZSBTRVYgYXMgYSBrZXkga2VybmVsIGZlYXR1cmUgYWNjZXNzaWJsZSB3aGVuIHRoZSBoYXJkd2FyZSBpcyBwcmVzZW50LlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyB0b3VjaGVzIGNvcmUga2VybmVsIEtWTSBTRVYgbG9naWMsIGFuZCBiZWNhdXNlIGl0IGludGVyYWN0cyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiBhbiBpb2N0bCBoYW5kbGVyIChgc2V2X21lbV9lbmNfaW9jdGxgKSwgSSdtIGNvbmZpZGVudCB3ZSBuZWVkIHRvIGZ1enogdGhpcyEgSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdG8gYmUgY2VydGFpbi4gSSBrbm93IGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBBTURfSU9NTVVgLCBgS1ZNX0FNRGAsIGBLVk1gLCBhbmQgYFZJUlRVQUxJWkFUSU9OYCBhcmUgcmVsZXZhbnQuIFdhaXQsIGBLVk1fQU1EX1NFVmAgaXMgdGhlIHByaW1hcnkgb25lLCBpdCdzIHRoZSBtYWluIGNvbmZpZyBoZXJlLlxuXG5JJ2xsIGZvcm1hdCB0aGUgb3V0cHV0IHRvIGhpZ2hsaWdodCB0aGlzIGtleSBmdW5jdGlvbiBhbmQgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLiBUaGUgZm9jdXMgd2lsbCBiZSBvbiBgc2V2X21lbV9lbmNfaW9jdGxgLCBhbmQgdGhlIGVuYWJsZSBjb25maWdzIHdpbGwgYmUgYFZJUlRVQUxJWkFUSU9OYCwgYEtWTWAsIGBLVk1fQU1EYCwgYEtWTV9BTURfU0VWYCwgYENSWVBUT19ERVZfQ0NQX0REYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYW5kIGBBTURfSU9NTVVgLlxuXG5Ob3cgbGV0J3Mgc2VlLCB3aGF0IGFib3V0IG90aGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIFNFVj8gSSdtIGNoZWNraW5nIGlmIGBzZXZfZGJnX2NyeXB0YCBpcyBleHBvcnRlZC4gT2gsIGl0J3Mgc3RhdGljLiBXZWxsLCBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIGV4cG9ydGVkIChvciBhdCBsZWFzdCBub24tc3RhdGljKSwgd2hpY2ggaXMgZ29vZC4gQW55dGhpbmcgZWxzZT8gYHNldl9kYmdfZGVjcnlwdF9zbG93YCBhbmQgYHNldl9kYmdfZW5jcnlwdF9zbG93YCBhcmUgc3RhdGljLiBJJ2xsIHN0aWNrIHdpdGggZm9jdXNpbmcgb24gYHNldl9tZW1fZW5jX2lvY3RsYC5cblxuT2theSwgSSdtIHJldmlld2luZyB0aGUgY29kZSBzbmlwcGV0IEkgZm91bmQgYWdhaW46XG5gYGBjXG4rXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbitcdFx0cmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xuYGBgXG5BaCwgcmlnaHQsIHRoaXMgY29kZSB1c2VzIGBjY19wbGF0Zm9ybV9oYXNgLiBJJ2xsIGNoZWNrIHRvIHNlZSBpZiBgY2NfcGxhdGZvcm1faGFzYCByZWxpZXMgb24gYW55IHNwZWNpZmljIGNvbmZpZ3MuIEFscmlnaHQsIHNvIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUgaW5kaWNhdGVzIHRoYXQgYHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STWAgaXMgY29uZmlndXJlZCBmb3IgYEtWTV9BTURfU0VWYC4gU28sIHdlIHNob3VsZCBiZSBhbGwgZ29vZCFcblxuQWxyaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTE5LCJPdXRwdXRUb2tlbnMiOjIwMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoyMDoxNC44NzM5NjU4MjVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzAzNjc1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCIsXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJDUllQVE9fREVWX0NDUF9ERFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgICBcIkFNRF9JT01NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNldl9tZW1fZW5jX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgaW4gS1ZNIFNFViBkZWJ1ZyBjcnlwdG9ncmFwaHkgZnVuY3Rpb25zIChzZXZfZGJnX2RlY3J5cHRfc2xvdyBhbmQgc2V2X2RiZ19lbmNyeXB0X3Nsb3cpLiBJdCBhbGxvY2F0ZXMgYSBmdWxsIHBhZ2UgaW5zdGVhZCBvZiB1c2luZyBrbWFsbG9jIHdoZW4gU0VWLVNOUCBpcyBhY3RpdmUgdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIGR1cmluZyBQU1AgZHJpdmVyIFJNUCB1cGRhdGVzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIChLVk1fU0VWX0RCR19ERUNSWVBUIGFuZCBLVk1fU0VWX0RCR19FTkNSWVBUKSB3aGVuIHJ1bm5pbmcgb24gc3VwcG9ydGVkIEFNRCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSVJUVUFMSVpBVElPTlwiLFxuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fQU1EX1NFVlwiLFxuICAgIFwiQ1JZUFRPX0RFVl9DQ1BfRERcIixcbiAgICBcIkNSWVBUT19ERVZfU1BfUFNQXCIsXG4gICAgXCJBTURfSU9NTVVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZXZfbWVtX2VuY19pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljIGluIEtWTSBTRVYgZGVidWcgY3J5cHRvZ3JhcGh5IGZ1bmN0aW9ucyAoc2V2X2RiZ19kZWNyeXB0X3Nsb3cgYW5kIHNldl9kYmdfZW5jcnlwdF9zbG93KS4gSXQgYWxsb2NhdGVzIGEgZnVsbCBwYWdlIGluc3RlYWQgb2YgdXNpbmcga21hbGxvYyB3aGVuIFNFVi1TTlAgaXMgYWN0aXZlIHRvIHByZXZlbnQgY29uY3VycmVudCBhY2Nlc3NlcyBkdXJpbmcgUFNQIGRyaXZlciBSTVAgdXBkYXRlcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyAoS1ZNX1NFVl9EQkdfREVDUllQVCBhbmQgS1ZNX1NFVl9EQkdfRU5DUllQVCkgd2hlbiBydW5uaW5nIG9uIHN1cHBvcnRlZCBBTUQgaGFyZHdhcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpszws[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 02:52:43 +0000 UTC FinishedAt: 2026-07-25 03:20:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTUALIZATION", "KVM", "KVM_AMD", "KVM_AMD_SEV", "CRYPTO_DEV_CCP_DD", "CRYPTO_DEV_SP_PSP", "AMD_IOMMU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTUALIZATION", "KVM", "KVM_AMD", "KVM_AMD_SEV", "CRYPTO_DEV_CCP_DD", "CRYPTO_DEV_SP_PSP", "AMD_IOMMU" ], "series_id": "3f5ca8b7-3b82-450f-964b-4559c438af07" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "sev_mem_enc_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRVQUxJWkFUSU9OJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfQ0NQX0REJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nldl9tZW1fZW5jX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljIGluIEtWTSBTRVYgZGVidWcgY3J5cHRvZ3JhcGh5IGZ1bmN0aW9ucyAoc2V2X2RiZ19kZWNyeXB0X3Nsb3cgYW5kIHNldl9kYmdfZW5jcnlwdF9zbG93KS4gSXQgYWxsb2NhdGVzIGEgZnVsbCBwYWdlIGluc3RlYWQgb2YgdXNpbmcga21hbGxvYyB3aGVuIFNFVi1TTlAgaXMgYWN0aXZlIHRvIHByZXZlbnQgY29uY3VycmVudCBhY2Nlc3NlcyBkdXJpbmcgUFNQIGRyaXZlciBSTVAgdXBkYXRlcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyAoS1ZNX1NFVl9EQkdfREVDUllQVCBhbmQgS1ZNX1NFVl9EQkdfRU5DUllQVCkgd2hlbiBydW5uaW5nIG9uIHN1cHBvcnRlZCBBTUQgaGFyZHdhcmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NGM0NzE0NzY5ZWMxYzU0ZTA2OWYxYmEyZTVmY2ViYTA2ZmJiNTRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMDM6MTc6MzMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDc0ZmIxNTU1MWU4M2ZhLi44MDNiZDM5Njk1ZmRkYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC0xMjgwLDkgJiM0MzsxMjgwLDI4IEBAIHN0YXRpYyB2b2lkICpzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgX192YSxcbiBcdGlmIChXQVJOX09OX09OQ0UoKCpwYSBcdTAwMjYgUEFHRV9NQVNLKSAhPSAoKCpwYSAmIzQzOyAqbnJfYnl0ZXMgLSAxKSBcdTAwMjYgUEFHRV9NQVNLKSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgU05QIGlzIGVuYWJsZWQsIGkuZS4gdGhlIFJNUCBpcyBhY3RpdmUsIGFsbG9jYXRlIGEgZnVsbCBwYWdlIHRvXG4mIzQzO1x0ICogcHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIHRvIHRoZSBwYWdlLiAgQXMgcmVxdWlyZWQgYnkgZmlybXdhcmUsXG4mIzQzO1x0ICogdGhlIFBTUCBkcml2ZXIgdXBkYXRlcyB0aGUgUk1QIHRvIHRlbXBvcmFyaWx5IHRyYW5zZmVyIG93bmVyc2hpcCBvZlxuJiM0MztcdCAqIHRoZSBwYWdlIHRvIEZpcm13YXJlIHdoaWxlIHRoZSB7REUsRU59Q1JZUFQgb3BlcmF0aW9uIGlzIGluLXByb2dyZXNzLFxuJiM0MztcdCAqIGFuZCBzbyBjb25jdXJyZW50IHNvZnR3YXJlIGFjY2Vzc2VzIHRvIHRoZSBwYWdlIHdpbGwgZW5jb3VudGVyXG4mIzQzO1x0ICogc2VlbWluZ2x5IHNwdXJpb3VzIFJNUCAjUEYgdmlvbGF0aW9uc1xuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuJiM0MztcdFx0cmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xuJiM0MztcbiBcdHJldHVybiBrbWFsbG9jKCpucl9ieXRlcywgR0ZQX0tFUk5FTCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZSh2b2lkICpidWYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbiYjNDM7XHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWYpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGtmcmVlKGJ1Zik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxuIFx0XHRcdFx0c3RydWN0IHBhZ2UgKnNyY19wLCB1bnNpZ25lZCBsb25nIGRzdCxcbiBcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIGludCAqZXJyKVxuQEAgLTEzMDQsNyAmIzQzOzEzMjMsNyBAQCBzdGF0aWMgaW50IHNldl9kYmdfZGVjcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsXG4gXHRpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWRzdCwgYnVmICYjNDM7IChzcmMgXHUwMDI2IDE1KSwgbGVuKSlcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gb3V0OlxuLVx0a2ZyZWUoYnVmKTtcbiYjNDM7XHRzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZShidWYpO1xuIFx0cmV0dXJuIHI7XG4gfVxuIFxuQEAgLTEzMzcsNyAmIzQzOzEzNTYsNyBAQCBzdGF0aWMgaW50IHNldl9kYmdfZW5jcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsXG4gXHRcdHIgPSBzZXZfaXNzdWVfZGJnX2NtZChrdm0sIF9fc21lX3NldChfX3BhKGJ1ZikpLCBkc3RfcGEsXG4gXHRcdFx0XHQgICAgICBucl9ieXRlcywgS1ZNX1NFVl9EQkdfRU5DUllQVCwgZXJyKTtcbiBvdXQ6XG4tXHRrZnJlZShidWYpO1xuJiM0MztcdHNldl9kYmdfY3J5cHRfc2xvd19mcmVlKGJ1Zik7XG4gXHRyZXR1cm4gcjtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRVQUxJWkFUSU9OJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfQ0NQX0REJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nldl9tZW1fZW5jX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljIGluIEtWTSBTRVYgZGVidWcgY3J5cHRvZ3JhcGh5IGZ1bmN0aW9ucyAoc2V2X2RiZ19kZWNyeXB0X3Nsb3cgYW5kIHNldl9kYmdfZW5jcnlwdF9zbG93KS4gSXQgYWxsb2NhdGVzIGEgZnVsbCBwYWdlIGluc3RlYWQgb2YgdXNpbmcga21hbGxvYyB3aGVuIFNFVi1TTlAgaXMgYWN0aXZlIHRvIHByZXZlbnQgY29uY3VycmVudCBhY2Nlc3NlcyBkdXJpbmcgUFNQIGRyaXZlciBSTVAgdXBkYXRlcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyAoS1ZNX1NFVl9EQkdfREVDUllQVCBhbmQgS1ZNX1NFVl9EQkdfRU5DUllQVCkgd2hlbiBydW5uaW5nIG9uIHN1cHBvcnRlZCBBTUQgaGFyZHdhcmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NGM0NzE0NzY5ZWMxYzU0ZTA2OWYxYmEyZTVmY2ViYTA2ZmJiNTRkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMjUgMDM6MTc6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwppbmRleCA3NGZiMTU1NTFlODNmYS4uODAzYmQzOTY5NWZkZGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwpAQCAtMTI4MCw5ICYjNDM7MTI4MCwyOCBAQCBzdGF0aWMgdm9pZCAqc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIF9fdmEsCiAJaWYgKFdBUk5fT05fT05DRSgoKnBhICZhbXA7IFBBR0VfTUFTSykgIT0gKCgqcGEgJiM0MzsgKm5yX2J5dGVzIC0gMSkgJmFtcDsgUEFHRV9NQVNLKSkpCiAJCXJldHVybiBOVUxMOwogCiYjNDM7CS8qCiYjNDM7CSAqIElmIFNOUCBpcyBlbmFibGVkLCBpLmUuIHRoZSBSTVAgaXMgYWN0aXZlLCBhbGxvY2F0ZSBhIGZ1bGwgcGFnZSB0bwomIzQzOwkgKiBwcmV2ZW50IGNvbmN1cnJlbnQgYWNjZXNzZXMgdG8gdGhlIHBhZ2UuICBBcyByZXF1aXJlZCBieSBmaXJtd2FyZSwKJiM0MzsJICogdGhlIFBTUCBkcml2ZXIgdXBkYXRlcyB0aGUgUk1QIHRvIHRlbXBvcmFyaWx5IHRyYW5zZmVyIG93bmVyc2hpcCBvZgomIzQzOwkgKiB0aGUgcGFnZSB0byBGaXJtd2FyZSB3aGlsZSB0aGUge0RFLEVOfUNSWVBUIG9wZXJhdGlvbiBpcyBpbi1wcm9ncmVzcywKJiM0MzsJICogYW5kIHNvIGNvbmN1cnJlbnQgc29mdHdhcmUgYWNjZXNzZXMgdG8gdGhlIHBhZ2Ugd2lsbCBlbmNvdW50ZXIKJiM0MzsJICogc2VlbWluZ2x5IHNwdXJpb3VzIFJNUCAjUEYgdmlvbGF0aW9ucwomIzQzOwkgKi8KJiM0MzsJaWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpCiYjNDM7CQlyZXR1cm4gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiYjNDM7CiAJcmV0dXJuIGttYWxsb2MoKm5yX2J5dGVzLCBHRlBfS0VSTkVMKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHNldl9kYmdfY3J5cHRfc2xvd19mcmVlKHZvaWQgKmJ1ZikKJiM0Mzt7CiYjNDM7CWlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKQomIzQzOwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zik7CiYjNDM7CWVsc2UKJiM0MzsJCWtmcmVlKGJ1Zik7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLAogCQkJCXN0cnVjdCBwYWdlICpzcmNfcCwgdW5zaWduZWQgbG9uZyBkc3QsCiAJCQkJdW5zaWduZWQgaW50IGxlbiwgaW50ICplcnIpCkBAIC0xMzA0LDcgJiM0MzsxMzIzLDcgQEAgc3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLAogCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopZHN0LCBidWYgJiM0MzsgKHNyYyAmYW1wOyAxNSksIGxlbikpCiAJCXIgPSAtRUZBVUxUOwogb3V0OgotCWtmcmVlKGJ1Zik7CiYjNDM7CXNldl9kYmdfY3J5cHRfc2xvd19mcmVlKGJ1Zik7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTEzMzcsNyAmIzQzOzEzNTYsNyBAQCBzdGF0aWMgaW50IHNldl9kYmdfZW5jcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsCiAJCXIgPSBzZXZfaXNzdWVfZGJnX2NtZChrdm0sIF9fc21lX3NldChfX3BhKGJ1ZikpLCBkc3RfcGEsCiAJCQkJICAgICAgbnJfYnl0ZXMsIEtWTV9TRVZfREJHX0VOQ1JZUFQsIGVycik7CiBvdXQ6Ci0Ja2ZyZWUoYnVmKTsKJiM0MzsJc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUoYnVmKTsKIAlyZXR1cm4gcjsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTU2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtWTSBTRVYgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBtb2RpZnlpbmcgYHNldl9kYmdfY3J5cHRfc2xvd19hbGxvY2AgYW5kIGludHJvZHVjaW5nIGEgY29ycmVzcG9uZGluZyBgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWVgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBoZXJlIGlzIGhvdyB0aGV5IGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGluIGBzZXZfZGJnX2RlY3J5cHRfc2xvd2AgYW5kIGBzZXZfZGJnX2VuY3J5cHRfc2xvd2AuIElmIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgaXMgc2V0LCBtZWFuaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggU0VWLVNOUCBjYXBhYmxlIGhhcmR3YXJlIChvciBhdCBsZWFzdCBlbXVsYXRpbmcgaXQpLCB0aGV5JiMzOTtyZSBub3cgdXNpbmcgYF9fZ2V0X2ZyZWVfcGFnZWAgZm9yIGEgZnVsbCBwYWdlIGFsbG9jYXRpb24gaW5zdGVhZCBvZiBga21hbGxvY2AsIGFuZCBjb3JyZXNwb25kaW5nbHksIGBmcmVlX3BhZ2VgIGluc3RlYWQgb2YgYGtmcmVlYCB0byByZWxlYXNlIHRoZSBtZW1vcnkuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgcmVhY2hhYmxlLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaXMgaXQgd29ydGggdGhlIGVmZm9ydCB0byBmdXp6IGl0PyBUaGlzIGlzIEtWTSBTRVYgY29kZSwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgQU1EIHByb2Nlc3NvcnMgYW5kIHRoZWlyIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gZmVhdHVyZXMgaW4gbXkgbWluZC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgYWN0dWFsbHkgZnV6eiB0aGlzIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJIGtub3cgU0VWIGFuZCBTRVYtU05QIGFyZSBvZnRlbiB0aWVkIHRvIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQsIGJ1dCBJIGFsc28gcmVjYWxsIEtWTSBTRVYgY2FuIGJlIHRlc3RlZCB3aXRoIGVtdWxhdGlvbiBpZiB0aGUgaG9zdCBkb2VzbiYjMzk7dCBoYXZlIGl0IG5hdGl2ZWx5LgoKV2FpdCBhIHNlY29uZC4uLiBzeXprYWxsZXIhIERvZXNuJiMzOTt0IHN5emthbGxlciBoYXZlIEtWTSBmdXp6aW5nPyBBbmQgaWYgc28sIGRvZXMgaXQgZXZlbiB0b3VjaCBTRVYgZnVuY3Rpb25hbGl0eT8gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCBkb2VzLiBZZXMsIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQuIE9rYXksIHRoZW4sIGxldCYjMzk7cyBmaW5kIHRoZSBLY29uZmlnIHRvIGNvbmZpcm0uIFRoZSBmaWxlIGluIHF1ZXN0aW9uLCBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AsIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1fQU1EX1NFVmAgaXMgZW5hYmxlZC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGF0JiMzOTtzIHRoZSBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGRlcGVuZGVuY2llcyBvZiBgS1ZNX0FNRF9TRVZgOgoKKipBbmFseXppbmcgS1ZNX0FNRF9TRVYgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtWTV9BTURfU0VWYC4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYS4gT2J2aW91c2x5LCBzaW5jZSBpdCYjMzk7cyByZWxhdGVkIHRvIEFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpLCBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGJyb2FkZXIgS1ZNIHZpcnR1YWxpemF0aW9uIGluZnJhc3RydWN0dXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1tZWRpYXRlIGNvbXBvbmVudHMgaXQgcmVsaWVzIG9uLiBJcyBpdCBhIG1vZHVsZSB0aGF0IGxpbmtzIGludG8gdGhlIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHksIHBlcmhhcHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaHlwZXJ2aXNvciBvciBzcGVjaWZpYyBBTUQtcmVsYXRlZCBoYXJkd2FyZSBmZWF0dXJlcyB0aHJvdWdoIGV4aXN0aW5nIGludGVyZmFjZXM/CgpJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIHRoaXMgaW4gbGF5ZXJzLiBGaXJzdCwgSSYjMzk7bGwgaWRlbnRpZnkgdGhlIGJhc2UgS1ZNIGNvbXBvbmVudHMuIElzIGl0IGNhbGxpbmcgb24gdGhlIHN0YW5kYXJkIEtWTSBBUEk/IERvZXMgaXQgdXNlIHNwZWNpZmljIEFNRC1zcGVjaWZpYyByZWdpc3RlcnMgb3IgZXh0ZW5zaW9ucz8gQXJlIHRoZXJlIGFueSBrZXJuZWwtbGV2ZWwgbW9kdWxlcyByZXF1aXJlZCwgbGlrZSBBTUQmIzM5O3MgUFNQIG9yIFNlY3VyZSBNZW1vcnkgRW5jcnlwdGlvbiAoU01FKSBkcml2ZXJzLCB0aGF0IGBLVk1fQU1EX1NFVmAgaW50ZXJhY3RzIHdpdGggZGlyZWN0bHk/IEkmIzM5O2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgaWYgdGhpcyBtb2R1bGUgaXMgbW9yZSBhYm91dCBwcm92aWRpbmcgYW4gYWJzdHJhY3Rpb24gbGF5ZXIgb24gdG9wIG9mIHRob3NlIGV4aXN0aW5nIGNvbXBvbmVudHMuCgpJJiMzOTtsbCBhbHNvIGhhdmUgdG8gbG9vayBmb3IgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcy4gQXJlIHRoZXJlIGFueSBjcnlwdG8gbGlicmFyaWVzLCBzcGVjaWZpYyBmaXJtd2FyZSB2ZXJzaW9ucywgb3Igc2VjdXJpdHktcmVsYXRlZCBhc3BlY3RzIHRoYXQgY291bGQgY29tZSBpbnRvIHBsYXk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aWdodGx5IGNvdXBsZWQgaXQgaXMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgdGhlIEFNRCBTZWN1cmUgUHJvY2Vzc29yLCBhbmQgb3RoZXIgcGxhdGZvcm0gc2VjdXJpdHkgZmVhdHVyZXMuIEkgZXhwZWN0IHRoZXJlJiMzOTtzIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgQU1EJiMzOTtzIFBTUCAoUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yKSBhdCBhIGxvd2VyIGxldmVsIGFuZCB3aWxsIHdhbnQgdG8gZGV0ZXJtaW5lIHRoZSBncmFudWxhcml0eSBvZiB0aGF0IHJlbGF0aW9uc2hpcC4gS25vd2luZyB0aGUgcmVsYXRpb25zaGlwIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBtb2R1bGUmIzM5O3Mgb3ZlcmFsbCBzZWN1cml0eSBwb3N0dXJlLgoKSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IGFuZCBsb29rIGZvciBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgY29uZGl0aW9uIGl0cyBpbmNsdXNpb24gb3IgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9BTURfU0VWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk5NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEtWTSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgbGluZSAxNTYgb3IgdGhlcmVhYm91dHMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJiMzOTttIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBJdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBhIHNwZWNpZmljIGZlYXR1cmUgb3IgZGVwZW5kZW5jeSBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kLCBvciBwZXJoYXBzIGEgYnVnIGZpeCBJJiMzOTttIGNoYXNpbmcgZG93biB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIEtub3dpbmcgdGhlIGFyY2hpdGVjdHVyZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzZXR0aW5ncyBkaXJlY3RseSBhZmZlY3RpbmcgeDg2IHZpcnR1YWxpemF0aW9uIGJlaGF2aW9yIC0gdGhpbmdzIGxpa2UgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucywgTVNSIGhhbmRsaW5nLCBvciBpbnRlcnJ1cHQgZGVsaXZlcnkgbWVjaGFuaXNtcy4gSSBhbnRpY2lwYXRlIHRoaXMgbGluZSB3aWxsIGVpdGhlciBiZSBhIHJlbGV2YW50IG9wdGlvbiBkZWZpbml0aW9uIGl0c2VsZiwgb3IgYSByZWZlcmVuY2UgdG8gYW5vdGhlciBzZWN0aW9uIG9yIGRlcGVuZGVuY3kgd2l0aGluIHRoZSBLY29uZmlnIHN0cnVjdHVyZS4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyB3aGF0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0NjpcdGNvbmZpZyBLVk1fQU1EXG4gMTQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAxNDg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcbiAxNDk6XHRcdGhlbHBcbiAxNTA6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXG4gMTUxOlx0XHQgIChTVk0pIGV4dGVuc2lvbnMuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDE1NDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0tYW1kLlxuIDE1NTpcdFxuIDE1NjpcdGNvbmZpZyBLVk1fQU1EX1NFVlxuIDE1NzpcdFx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4gMTU4Olx0XHRkZWZhdWx0IHlcbiAxNTk6XHRcdGRlcGVuZHMgb24gS1ZNX0FNRCBcdTAwMjZcdTAwMjYgWDg2XzY0XG4gMTYwOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFx1MDAyNlx1MDAyNiAhKEtWTV9BTUQ9eSBcdTAwMjZcdTAwMjYgQ1JZUFRPX0RFVl9DQ1BfREQ9bSlcbiAxNjE6XHRcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxuIDE2MjpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4gMTYzOlx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcbiAxNjQ6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuIDE2NTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE2NjpcdFx0aGVscFxuIDE2NzpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXG4gMTY4Olx0XHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXG4gMTY5Olx0XHQgIEVuY3J5cHRlZCBTdGF0ZSAoU0VWLUVTKSwgYW5kIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxuIDE3MDpcdFx0ICBTZWN1cmUgTmVzdGVkIFBhZ2luZyAoU0VWLVNOUCkgdGVjaG5vbG9naWVzIG9uIEFNRCBwcm9jZXNzb3JzLlxuIDE3MTpcdFxuIDE3MjpcdGNvbmZpZyBLVk1fSU9BUElDXG4gMTczOlx0XHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4gMTc0Olx0XHRkZWZhdWx0IHlcbiAxNzU6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NzYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGRlcGVuZGVuY2llcywgYXMgaWYgdGhleSB3ZXJlIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGVwZW5kZW5jaWVzLCBEZXBlbmRlbmNpZXMgRXZlcnl3aGVyZSEqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0aGUgYEtWTV9BTURfU0VWYCBmZWF0dXJlLCB3aGljaCBpcyByaWdodCBpbiBteSB3aGVlbGhvdXNlIHdoZW4gZGVhbGluZyB3aXRoIHNlY3VyZSB2aXJ0dWFsaXphdGlvbiBvbiBBTUQgaGFyZHdhcmUsIGhhcyBhIGZldyBjcml0aWNhbCBkZXBlbmRlbmNpZXMuIFNwZWNpZmljYWxseSwgaXQgcmVsaWVzIG9uIGBLVk1fQU1EYCAob2J2aW91c2x5KSwgYFg4Nl82NGAgKHRoYXQmIzM5O3MgYSBnaXZlbiBpbiB0aGlzIGNvbnRleHQpLCBhbmQsIGhtbSwgYENSWVBUT19ERVZfU1BfUFNQYC4gTm93LCBgS1ZNX0FNRGAgYW5kIGBYODZfNjRgIEkgY29tcGxldGVseSB1bmRlcnN0YW5kLCB0aGV5JiMzOTtyZSBmdW5kYW1lbnRhbCB0byB0aGUgd2hvbGUgc2V0dXAuIEJ1dCBgQ1JZUFRPX0RFVl9TUF9QU1Bg4oCmIHRoYXQgcmVxdWlyZXMgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGNyeXB0byBkZXZpY2Ugb3IgZHJpdmVyIGJyaW5ncyB0byB0aGUgdGFibGUgZm9yIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIHdoZXJlIHRoZSBzZWN1cml0eSBhbmQgaW50ZWdyaXR5IHJlc2lkZS4gV2hhdCYjMzk7cyB0aGUgbGluayB3aXRoIHRoZSBQU1AgKFBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3Nvcik/IExldCYjMzk7cyBkaWcgaW50byBgQ1JZUFRPX0RFVl9TUF9QU1BgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc9MjM9Y29uZmlnIENSWVBUT19ERVZfQ0NQX0NSWVBUT1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM3LVxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc6Mzg6Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7UGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApIGRldmljZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTkxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQ0NQIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1RpbWUgdG8gZGlnIGludG8gdGhlIGBkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM4LiYjMzQ7IEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIENDUCBjcnlwdG8gZW5naW5lLiBJJiMzOTttIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhhdCBsaW5lIGJlY2F1c2UgSSB2YWd1ZWx5IHJlY2FsbCBzb21lIGNyaXRpY2FsIHNldHRpbmcgYmVpbmcgZGVmaW5lZCB0aGVyZSAtIG1heWJlIHJlbGF0ZWQgdG8ga2V5IHNpemUsIHN1cHBvcnRlZCBhbGdvcml0aG1zLCBvciBwZXJoYXBzIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIHF1aWNrbHkgemVybyBpbiBvbiBpdCBhbmQgZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIHdoYXQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyBjcnVjaWFsIGZvciBhbnkgZGVlcGVyIGFuYWx5c2lzIG9yIG1vZGlmaWNhdGlvbiBJIG5lZWQgdG8gcGVyZm9ybS4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcdHNlbGVjdCBDUllQVE9fQVVUSEVOQ1xuICAzMTpcdFx0c2VsZWN0IENSWVBUT19SU0FcbiAgMzI6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FFU1xuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBTdXBwb3J0IGZvciB1c2luZyB0aGUgY3J5cHRvZ3JhcGhpYyBBUEkgd2l0aCB0aGUgQU1EIENyeXB0b2dyYXBoaWNcbiAgMzU6XHRcdCAgQ29wcm9jZXNzb3IuIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG9mZmxvYWQgb2YgU0hBIGFuZCBBRVMgYWxnb3JpdGhtcy5cbiAgMzY6XHRcdCAgSWYgeW91IGNob29zZSAmIzM5O00mIzM5OyBoZXJlLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjY3BfY3J5cHRvLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxuICAzOTpcdFx0Ym9vbCBcJiMzNDtQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkgZGV2aWNlXCYjMzQ7XG4gIDQwOlx0XHRkZWZhdWx0IHlcbiAgNDE6XHRcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfREQgXHUwMDI2XHUwMDI2IFg4Nl82NCBcdTAwMjZcdTAwMjYgQU1EX0lPTU1VXG4gIDQyOlx0XHRzZWxlY3QgUENJX1RTTSBpZiBQQ0lcbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCBQcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBBTUQgUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApLlxuICA0NTpcdFx0IFRoZSBQU1AgaXMgYSBkZWRpY2F0ZWQgcHJvY2Vzc29yIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3Iga2V5XG4gIDQ2Olx0XHQgbWFuYWdlbWVudCBjb21tYW5kcyBpbiBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIG1vZGUsXG4gIDQ3Olx0XHQgYWxvbmcgd2l0aCBzb2Z0d2FyZS1iYXNlZCBUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCAoVEVFKSB0b1xuICA0ODpcdFx0IGVuYWJsZSB0aGlyZC1wYXJ0eSB0cnVzdGVkIGFwcGxpY2F0aW9ucy5cbiAgNDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcyMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYW5kIHRoaXMgaXMgYSBicmllZiBtZW50YWwgbm90ZToKCioqRGVwZW5kZW5jaWVzIGFuZCBWZXJpZmljYXRpb24qKgoKUmlnaHQsIHNvIGBDUllQVE9fREVWX1NQX1BTUGAgaXMgY29udGluZ2VudCBvbiBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBgWDg2XzY0YCwgYW5kIGBBTURfSU9NTVVgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBsaWtlbHkgYSBzZWN1cml0eS1mb2N1c2VkIG1vZHVsZSBvciBzdWJzeXN0ZW0gdGhhdCByZXF1aXJlcyBjZXJ0YWluIGhhcmR3YXJlIGFuZCB1bmRlcmx5aW5nIGNyeXB0b2dyYXBoaWMgc2VydmljZXMuIE5vdywgZ2l2ZW4gdGhhdCBkZXBlbmRlbmN5IGNoYWluLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdmVyaWZ5IHRoZSBzdGF0ZSBvZiBgQ1JZUFRPX0RFVl9DQ1BfRERgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvcmUgY29tcG9uZW50IGl0IHJlbGllcyB1cG9uIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCBiZWNhdXNlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoYXQgY29tcG9uZW50IGRpcmVjdGx5IGRpY3RhdGVzIHRoZSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbnMgb2YgdGhlIGNvbXBvbmVudHMgd2hpY2ggYXJlIGRlcGVuZGVudCB1cG9uIGl0LiBJIG11c3QgY2hlY2sgb24gYENSWVBUT19ERVZfQ0NQX0REYCB0byBzZWUgaWYgdGhhdCYjMzk7cyBjb25maWd1cmVkIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ1JZUFRPX0RFVl9DQ1BfREQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjI6Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNzMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ3J5cHRvIExhbmRzY2FwZSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDIuIFRoaXMgcHJvYmFibHkgbWVhbnMgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQ0NQIGNyeXB0byBkZXZpY2UgZHJpdmVyLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgYXZhaWxhYmxlIGFuZCBob3cgaXQmIzM5O3MgY29udHJvbGxlZC4gSXMgaXQgYSBjb3JlIG1vZHVsZSwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lmaWM/IFRoZSBLY29uZmlnIGZpbGUgaXMgdGhlIGtleSB0byB0aGF0LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgbG90IG9mIGBjb25maWdgIGFuZCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyB0byB3b3JrIG91dCB0aGUgcmVsYXRpb25zaGlwcyBhbmQgZGVwZW5kZW5jaWVzLiBJIHdpbGwgbGlrZWx5IGJlIHRyeWluZyB0byBnZXQgYSBncmFzcCBvZiBpdHMgcGxhY2UgaW4gdGhlIHN5c3RlbSYjMzk7cyBsYXJnZXIgY3J5cHRvZ3JhcGhpYyBlY29zeXN0ZW0uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTZWN1cmUgUHJvY2Vzc29yIGRldmljZSBkcml2ZXJcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgfHwgQVJNNjRcbiAgIDU6XHRcdGRlZmF1bHQgbVxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBQcm92aWRlcyBBTUQgU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyLlxuICAgODpcdFx0ICBJZiB5b3UgY2hvb3NlICYjMzk7TSYjMzk7IGhlcmUsIHRoaXMgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNjcC5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgQ1JZUFRPX0RFVl9TUF9DQ1BcbiAgMTE6XHRcdGJvb2wgXCYjMzQ7Q3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBkZXZpY2VcJiMzNDtcbiAgMTI6XHRcdGRlZmF1bHQgeVxuICAxMzpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX0NDUF9ERCBcdTAwMjZcdTAwMjYgRE1BREVWSUNFU1xuICAxNDpcdFx0c2VsZWN0IEhXX1JBTkRPTVxuICAxNTpcdFx0c2VsZWN0IERNQV9FTkdJTkVcbiAgMTY6XHRcdHNlbGVjdCBDUllQVE9fU0hBMVxuICAxNzpcdFx0c2VsZWN0IENSWVBUT19TSEEyNTZcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgUHJvdmlkZXMgdGhlIHN1cHBvcnQgZm9yIEFNRCBDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIChDQ1ApIGRldmljZVxuICAyMDpcdFx0ICB3aGljaCBjYW4gYmUgdXNlZCB0byBvZmZsb2FkIGVuY3J5cHRpb24gb3BlcmF0aW9ucyBzdWNoIGFzIFNIQSwgQUVTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NzkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIHRoaXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlIGFyZSBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGFuZCBgQU1EX0lPTU1VYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIHBhdGggZXZlbiAqcmVhY2hhYmxlKiBpbiBhIFFFTVUgb3IgR0NFIGVudmlyb25tZW50PwoKU0VWLCBvYnZpb3VzbHksIG5lY2Vzc2l0YXRlcyBBTUQgaGFyZHdhcmUgd2l0aCBTRVYgY2FwYWJpbGl0aWVzLiBXZSBrbm93IHRoYXQgU3l6a2FsbGVyIGlzIGRlcGxveWVkIG9uIEdDRSwgYW5kIEdDRSAqZG9lcyogb2ZmZXIgQU1EIGluc3RhbmNlcyB3aXRoIFNFViBzdXBwb3J0IOKAkyBzcGVjaWZpY2FsbHkgdGhlIE4yRCBhbmQgQzJEIGZhbWlsaWVzIGNvbWUgdG8gbWluZC4gVGhlIGNydWNpYWwgcG9pbnQgaXMsIGRvZXMgU3l6a2FsbGVyIHV0aWxpemUgdGhvc2UgQU1EIGluc3RhbmNlcz8gVGhlIGFuc3dlciBpcyB5ZXM7IFN5emthbGxlciBkb2VzIGxldmVyYWdlIHNvbWUgQU1EIGhhcmR3YXJlIGZvciB0ZXN0aW5nLgoKV2UgYWxzbyBrbm93IHRoYXQgUUVNVSBjYW4gZW11bGF0ZSBjZXJ0YWluIGFzcGVjdHMgb2YgaGFyZHdhcmUsIGJ1dCBTRVYgZnVuZGFtZW50YWxseSBuZWVkcyBoYXJkd2FyZSBzdXBwb3J0IHRocm91Z2ggS1ZNLiBUaGUga2V5IHBhcnQgb2YgdGhpcyBwYXRjaCB0b3VjaGVzIGBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NgIGFuZCBgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWVgLCB3aGljaCBhcmUgZGlyZWN0bHkgaW52b2tlZCBieSBgc2V2X2RiZ19kZWNyeXB0X3Nsb3dgIGFuZCBgc2V2X2RiZ19lbmNyeXB0X3Nsb3dgLiBTbywgdGhlIG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIGNoZWNrIHdoZXJlIGBzZXZfZGJnX2RlY3J5cHRfc2xvd2AgZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIG92ZXJhbGwgY29kZWJhc2UuIFRoYXQgd2lsbCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgYXR0YWNrIHN1cmZhY2Ugb2YgdGhpcyBtb2RpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nldl9kYmdfZGVjcnlwdF9zbG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyOTc9c3RhdGljIHZvaWQgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUodm9pZCAqYnVmKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMwNC1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMwNTpzdGF0aWMgaW50IHNldl9kYmdfZGVjcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDYtXHRcdFx0XHRzdHJ1Y3QgcGFnZSAqc3JjX3AsIHVuc2lnbmVkIGxvbmcgZHN0LFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTM2Mz1zdGF0aWMgaW50IHNldl9kYmdfY3J5cHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDIzLVx0XHRlbHNlIGlmIChjbWQgPT0gS1ZNX1NFVl9EQkdfREVDUllQVClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTQyNDpcdFx0XHRyZXQgPSBzZXZfZGJnX2RlY3J5cHRfc2xvdyhrdm0sIHNyYywgc3JjX3AsIGRzdCxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQyNS1cdFx0XHRcdFx0XHQgICBsZW4sIFx1MDAyNmFyZ3AtXHUwMDNlZXJyb3IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDYxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUgYXMgYSBmaWVsZCBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIHNldl9kYmdfY3J5cHQgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIGBzZXZfZGJnX2NyeXB0YC4uLiB3aGVyZSYjMzk7cyB0aGF0IGJlaW5nIHVzZWQgYWdhaW4/IE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbSBgc2V2X2lzc3VlX2NtZGAgb3Igc29tZXRoaW5nIGZ1bmN0aW9uYWxseSBzaW1pbGFyLCBzb21ldGhpbmcgaW52b2x2ZWQgd2l0aCBpc3N1aW5nIGNvbW1hbmRzIHRvIHRoZSBTRVYgKFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24pIGhhcmR3YXJlLCBvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBjcnlwdG8gZW5naW5lcy4gQnV0IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp1bmRlcnN0YW5kKiB0aGUgY29udGV4dCBvZiBpdHMgY2FsbHMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBgc2V2X2RiZ19jcnlwdGAgZnVuY3Rpb24gaXRzZWxmLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mICpob3cqIHRoaXMgaXMgdXNlZC4gVGltZSB0byBjaGVjayB0aGUgc291cmNlLCBjcm9zcy1yZWZlcmVuY2UgdGhlIGNhbGwgc2l0ZXMsIGFuZCBzZWUgd2hhdCB0aGUgY29kZSBmbG93IHRlbGxzIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXZfZGJnX2NyeXB0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyNDA9c3RhdGljIGludCBzZXZfaXNzdWVfZGJnX2NtZChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjX3BhLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI1NS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTI1NjpzdGF0aWMgdm9pZCAqc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIF9fdmEsXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyNTctXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBsb25nICpwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyOTYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEyOTc6c3RhdGljIHZvaWQgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUodm9pZCAqYnVmKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjk4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzMDU9c3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMxMy1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMxNDpcdGJ1ZiA9IHNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzcmNfcCwgc3JjLCBsZW4sIFx1MDAyNnNyY19wYSwgXHUwMDI2bnJfYnl0ZXMpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzE1LVx0aWYgKCFidWYpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzI1LW91dDpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMyNjpcdHNldl9kYmdfY3J5cHRfc2xvd19mcmVlKGJ1Zik7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMjctXHRyZXR1cm4gcjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzMzA9c3RhdGljIGludCBzZXZfZGJnX2VuY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMzOS1cdC8qIERlY3J5cHQgdGhlIF9kZXN0aW5hdGlvbl8gdG8gZG8gYSBSTVcgb24gcGxhaW50ZXh0LiAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzQwOlx0YnVmID0gc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKGRzdF9wLCBkc3QsIGxlbiwgXHUwMDI2ZHN0X3BhLCBcdTAwMjZucl9ieXRlcyk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNDEtXHRpZiAoIWJ1Zilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNTgtb3V0OlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzU5Olx0c2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUoYnVmKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2MC1cdHJldHVybiByO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2Mi1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTM2MzpzdGF0aWMgaW50IHNldl9kYmdfY3J5cHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNjQtXHRcdFx0IHVuc2lnbmVkIGludCBjbWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjQyPWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcwMC1cdGNhc2UgS1ZNX1NFVl9EQkdfRU5DUllQVDpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjcwMTpcdFx0ciA9IHNldl9kYmdfY3J5cHQoa3ZtLCBcdTAwMjZzZXZfY21kLCBzZXZfY21kLmlkKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcwMi1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NjYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHNldl9kYmdfY3J5cHRgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBzZXZfZGJnX2NyeXB0YCBpcyBjYWxsZWQgd2l0aGluIHRoZSBgc2V2X21lbV9lbmNfaW9jdGxgIGZ1bmN0aW9uLCB3aGljaCBpcyBpdHNlbGYgcGFydCBvZiB0aGUgS1ZNIGlvY3RsIGhhbmRsaW5nLiBUaGF0IG1lYW5zLCBhbmQgdGhpcyBpcyBrZXksIHVzZXJzcGFjZSBjYW4gZGVmaW5pdGVseSByZWFjaCBpdCB0aHJvdWdoIHRoZSBgS1ZNX1NFVl9EQkdfREVDUllQVGAgYW5kIGBLVk1fU0VWX0RCR19FTkNSWVBUYCBpb2N0bHMuIENvbnNpZGVyaW5nIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgZnJlZWQgd2l0aGluIHRoZSBLVk0gU0VWIGlvY3RsIHByb2Nlc3MsIHNwZWNpZmljYWxseSBpbXBhY3RpbmcgbWVtb3J5IGFsbG9jYXRpb24vZnJlZWluZywgKnllcyosIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBvdGVudGlhbCBhcmVhIGZvciBpbnRlcmVzdGluZyB2dWxuZXJhYmlsaXRpZXMuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jYCBhbmQgYHNldl9kYmdfY3J5cHRfc2xvd19mcmVlYC4gVGhlIHBhdGNoIGRpY3RhdGVzIHRoYXQgdGhleSBub3cgYWxsb2NhdGUgYW5kIGZyZWUgYSBmdWxsIHBhZ2Ugd2hlbiBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgcmV0dXJucyB0cnVlLiBUaGlzIGlzIHNwZWNpZmljYWxseSB0byBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBhY2Nlc3MgaXNzdWVzIHRvIHRoZSBwYWdlIHRoYXQgbWlnaHQgb2NjdXIgZHVyaW5nIFJNUCB1cGRhdGVzIGZyb20gdGhlIFBTUCBkcml2ZXIuIFRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhcmUgc2lnbmlmaWNhbnQgYW5kIG11c3QgYmUgY2FyZWZ1bGx5IGFuYWx5emVkLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBXZSBkZWZpbml0ZWx5IG5lZWQgYEtWTV9BTURgLCBgS1ZNX0FNRF9TRVZgLCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBgQ1JZUFRPX0RFVl9TUF9QU1BgLCBhbmQgYEFNRF9JT01NVWAgZW5hYmxlZC4gSGFuZyBvbi4uLiBsZXQmIzM5O3MgZG91YmxlIGNoZWNrIHRob3NlIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24uIEFoLCB5ZXMsIGBLVk1fQU1EX1NFVmAgaXMgZGVwZW5kZW50IG9uIGBDUllQVE9fREVWX1NQX1BTUGAgYW5kIHRoZSBleGNsdXNpb24gb2YgYChLVk1fQU1EPXkgJmFtcDsmYW1wOyBDUllQVE9fREVWX0NDUF9ERD1tKWAuIFRodXMsIHdlIHJlcXVpcmUgYENSWVBUT19ERVZfQ0NQX0REPXlgIGFuZCBgQ1JZUFRPX0RFVl9TUF9QU1A9eWAuIFdlIGFsc28ga25vdyB0aGF0IGBBTURfSU9NTVVgIGlzIGNydWNpYWwgZm9yIGBDUllQVE9fREVWX1NQX1BTUGAuIFRoZXJlZm9yZSwgYmVmb3JlIGZ1enppbmcsIGl0JiMzOTtzIHZpdGFsIEkgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgQU1EX0lPTU1VYCB0byBlbnN1cmUgY29tcGxldGUgY292ZXJhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTURfSU9NTVUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0yLSMgQU1EIElPTU1VIHN1cHBvcnRcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6Mzpjb25maWcgQU1EX0lPTU1VXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQtXHRib29sIFwmIzM0O0FNRCBJT01NVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zMi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6MzM6Y29uZmlnIEFNRF9JT01NVV9JT01NVUZEXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTM0LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU9NTVVGRCBmZWF0dXJlcyBmb3IgQU1EIElPTU1VIChFWFBFUklNRU5UQUwpXCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00Mi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6NDM6Y29uZmlnIEFNRF9JT01NVV9ERUJVR0ZTXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQ0LVx0Ym9vbCBcJiMzNDtFbmFibGUgQU1EIElPTU1VIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gQU1EIElPTU1VIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgQU1EIElPTU1VIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHRoZSBjYW5vbmljYWwgbG9jYXRpb24gZm9yIHRoZXNlIHNvcnRzIG9mIGRlZmluaXRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgYXJvdW5kIGxpbmUgMywgd2hpY2ggaXMgdXN1YWxseSB3aGVyZSBhIGdvb2Qgb3ZlcnZpZXcgb3IgZ2VuZXJhbCBkZXNjcmlwdGlvbiBiZWdpbnMsIG9yIGF0IGxlYXN0IHRoZSB0b3AtbGV2ZWwgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0IyBBTUQgSU9NTVUgc3VwcG9ydFxuICAgMzpcdGNvbmZpZyBBTURfSU9NTVVcbiAgIDQ6XHRcdGJvb2wgXCYjMzQ7QU1EIElPTU1VIHN1cHBvcnRcJiMzNDtcbiAgIDU6XHRcdHNlbGVjdCBTV0lPVExCXG4gICA2Olx0XHRzZWxlY3QgUENJX01TSVxuICAgNzpcdFx0c2VsZWN0IFBDSV9BVFNcbiAgIDg6XHRcdHNlbGVjdCBQQ0lfUFJJXG4gICA5Olx0XHRzZWxlY3QgUENJX1BBU0lEXG4gIDEwOlx0XHRzZWxlY3QgSVJRX01TSV9MSUJcbiAgMTE6XHRcdHNlbGVjdCBNTVVfTk9USUZJRVJcbiAgMTI6XHRcdHNlbGVjdCBJT01NVV9BUElcbiAgMTM6XHRcdHNlbGVjdCBJT01NVV9JT1ZBXG4gIDE0Olx0XHRzZWxlY3QgSU9NTVVfU1ZBXG4gIDE1Olx0XHRzZWxlY3QgSU9NTVVfSU9QRlxuICAxNjpcdFx0c2VsZWN0IElPTU1VRkRfRFJJVkVSIGlmIElPTU1VRkRcbiAgMTc6XHRcdHNlbGVjdCBHRU5FUklDX1BUXG4gIDE4Olx0XHRzZWxlY3QgSU9NTVVfUFRcbiAgMTk6XHRcdHNlbGVjdCBJT01NVV9QVF9BTURWMVxuICAyMDpcdFx0c2VsZWN0IElPTU1VX1BUX1g4Nl82NFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE2MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIG1vZHVsZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgbG9jYXRlZCBpbiBgZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZ2AsIHdoaWNoIHN1Z2dlc3RzIGl0JiMzOTtzIEFNRC1zcGVjaWZpYyBmb3IgSU9NTVUgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG5haWwgZG93biBleGFjdGx5IHdoYXQmIzM5O3MgcmVxdWlyZWQgdG8gYnVpbGQgYW5kIGVuYWJsZSB0aGlzIHRoaW5nLiBJdCBzZWVtcyBwcmV0dHkgc2VsZi1jb250YWluZWQsIG5vdCByZXF1aXJpbmcgYW55dGhpbmcgdHJ1bHkgKnN0cmljdCosIGJ1dCBJIHNob3VsZCBkb3VibGUgY2hlY2sgaWYgaXQgaW1wbGljaXRseSByZWxpZXMgb24gYFg4Nl82NGAgZ2l2ZW4gaXRzIGxvY2F0aW9uLCB0aG91Z2ggaXQgbWlnaHQgYmUgaW5jbHVkZWQgYnkgYSBtb3JlIGdlbmVyYWwgaW9tbXUgS2NvbmZpZy4KCkxldCYjMzk7cyBzdGFydCBieSBsaXN0aW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSB0aGluayB3aWxsIGJlIG5lZWRlZC4gSSYjMzk7bSBnb2luZyB0byBlbmFibGU6CgoqICAgYEtWTV9BTURgCiogICBgS1ZNX0FNRF9TRVZgCiogICBgQ1JZUFRPX0RFVl9DQ1BfRERgCiogICBgQ1JZUFRPX0RFVl9TUF9QU1BgCiogICBgQU1EX0lPTU1VYAoKQnV0IGhvbGQgb24sIGBLVk1fQU1EYCAqZG9lcyogZGVwZW5kIG9uIGBLVk1gLiBSaWdodCwgdGhhdCYjMzk7cyBjcnVjaWFsLiBJIGNhbiYjMzk7dCBvdmVybG9vayB0aGF0LiBTbywgSSBoYXZlIHRvIG1ha2Ugc3VyZSBgS1ZNYCBpcyBjb25maWd1cmVkLCB3aGljaCBJIHByb2JhYmx5IGFscmVhZHkgZGlkLiBOb3csIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBkZXBlbmRlbmNpZXMgZm9yIGBLVk1gLCBqdXN0IHRvIGJlIGNlcnRhaW4gSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBvdGhlciBpbXBsaWNpdCByZXF1aXJlbWVudHMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZCBiZWZvcmUgSSBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXHRib29sIFwmIzM0O0NvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cdGJvb2wgXCYjMzQ7U3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXHRib29sIFwmIzM0O1Byb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVx0Ym9vbFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg1NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCYjMzk7cyBWaXJ0dWFsaXphdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgS1ZNYCDigJMgaXQmIzM5O3MgZGVmaW5pdGVseSBhIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ3ksIHRoYXQgbXVjaCBpcyBjbGVhci4gVGhlcmVmb3JlLCBteSBpbW1lZGlhdGUgZm9jdXMgaGFzIHRvIHNoaWZ0IHRvIHRoZSBjb3JlIGBWSVJUVUFMSVpBVElPTmAgZnJhbWV3b3JrIHdpdGhpbiB0aGUga2VybmVsLiBXaGVyZSB3b3VsZCBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoYXQ/IFJpZ2h0LCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtjb25maWcgZmlsZXMgYXJlIHRoZSBwbGFjZSB0byBzdGFydC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBkcmlsbCBkb3duIGludG8gYGFyY2gveDg2L0tjb25maWdgIHRvIHNlZSBob3cgYFZJUlRVQUxJWkFUSU9OYCBpcyBoYW5kbGVkIHRoZXJlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIG5leHQgc3RlcCwgdGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBsaWZlYmxvb2Qgb2YgdGhpcyBzb3J0IG9mIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZJUlRVQUxJWkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDg3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIEtjb25maWcgTG9jYXRpb25zIGZvciBWSVJUVUFMSVpBVElPTioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGUgYFZJUlRVQUxJWkFUSU9OYCBvcHRpb24gaXMgZGVmaW5lZCBpbiB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCB3b3VsZCBiZSB3aXRoaW4gdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZGlyZWN0b3J5LCBnaXZlbiB0aGF0IHdlIGFyZSB0YWxraW5nIGFib3V0IHZpcnR1YWxpemF0aW9uIG9uIHg4NiwgYW5kIEtWTSBpcyBhIGNvbW1vbiB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2d5LiBIb3dldmVyLCBteSBndXQgaXMgdGVsbGluZyBtZSBpdCBtaWdodCBhbHNvIHJlc2lkZSBpbiBhIGhpZ2hlci1sZXZlbCBgYXJjaC94ODYvS2NvbmZpZ2AgZmlsZSBvciBwZXJoYXBzIHNvbWV0aGluZyByZWxhdGVkIHRvIHZob3N0LCBzbyBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBpcyBhbHNvIGEgcG9zc2liaWxpdHkuIEl0IGNvdWxkIGV2ZW4gYmUgc3ByZWFkIGFjcm9zcyBtdWx0aXBsZSBmaWxlcy4gVGhlIGJlc3QgYXBwcm9hY2ggaXMgdG8gYmUgY29tcHJlaGVuc2l2ZS4gTGV0JiMzOTtzIGZpcmUgdXAgYSBgZ3JlcGAgY29tbWFuZCB0byBzZWFyY2ggdGhlIGVudGlyZSBzb3VyY2UgdHJlZSBmb3IgdGhlIHN0cmluZyBgbWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTmAuIFRoaXMgd2lsbCBxdWlja2x5IHJldmVhbCBhbGwgdGhlIGxvY2F0aW9ucyB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCBob3BlZnVsbHkgcGlucG9pbnQgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBmaWxlcyBJIG5lZWQgdG8gZXhhbWluZS4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIGZpbGUgZGVmaW5lcyBpdCwgYW5kIGlkZWFsbHksIEkmIzM5O2xsIHJldmlldyBpdHMgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTY9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNy1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTktXHRib29sIFwmIzM0O1ZpcnR1YWxpemF0aW9uXCYjMzQ7XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc9Nj1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctNy1cbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbi0tXG5hcmNoL21pcHMva3ZtL0tjb25maWc9NT1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC9taXBzL2t2bS9LY29uZmlnLTYtXG5hcmNoL21pcHMva3ZtL0tjb25maWc6NzptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL21pcHMva3ZtL0tjb25maWctOC1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Nj1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTctXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTY9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctNy1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTktXHRib29sIFwmIzM0O1ZpcnR1YWxpemF0aW9uXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnPTU9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy02LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjc6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9Nj1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC94ODYva3ZtL0tjb25maWctNy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVmlydHVhbGl6YXRpb24gQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGltcGxlbWVudGluZyBgVklSVFVBTElaQVRJT05gLiBUaW1lIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIG5lZWQgYFZJUlRVQUxJWkFUSU9OYCBvYnZpb3VzbHksIGZvbGxvd2VkIGJ5IGBLVk1gLiBOb3csIHNpbmNlIEkmIzM5O20gZGVhbGluZyB3aXRoIEFNRCBoYXJkd2FyZSwgSSBzaG91bGQgY29uc2lkZXIgYEtWTV9BTURgLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBgS1ZNX0FNRF9TRVZgIGZvciBzZWN1cmUgZW5jcnlwdGVkIHZpcnR1YWxpemF0aW9uLiBBbmQgbGV0JiMzOTtzIG5vdCBmb3JnZXQgdGhlIGNyeXB0byBkZXZpY2UgZHJpdmVycywgc3BlY2lmaWNhbGx5IGBDUllQVE9fREVWX0NDUF9ERGAgYW5kIGBDUllQVE9fREVWX1NQX1BTUGAuIEZpbmFsbHksIGZvciBwcm9wZXIgSU9NTVUgc3VwcG9ydCwgSSBzaG91bGQgZW5hYmxlIGBBTURfSU9NTVVgLgoKUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGNvcmUgc2V0LiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW4gb3JkZXIuIGBLVk1gIGl0c2VsZiBoYXMgYSBidW5jaCBvZiBwcmVyZXF1aXNpdGVzIOKAkyBgSElHSF9SRVNfVElNRVJTYCwgYFg4Nl9MT0NBTF9BUElDYCwgYFBSRUVNUFRfTk9USUZJRVJTYCwgYE1NVV9OT1RJRklFUmAsIGBIQVZFX0tWTWAsIGBFVkVOVEZEYCwgYW5kIGBJUlFfQllQQVNTX01BTkFHRVJgLiBNb3N0IG9mIHRoZXNlIHNob3VsZCBiZSBzdGFuZGFyZCBhbmQgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgSSYjMzk7bGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZTogdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgb24gd2hhdCYjMzk7cyByZXF1aXJlZCBmb3IgYSBjbGVhbiBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRcdHNlbGVjdCBIQVZFX0tWTV9NU0lcbiAgNDE6XHRcdHNlbGVjdCBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXG4gIDQyOlx0XHRzZWxlY3QgSEFWRV9LVk1fTk9fUE9MTFxuICA0MzpcdFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG4gIDQ0Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXG4gIDQ1Olx0XHRzZWxlY3QgS1ZNX1ZGSU9cbiAgNDY6XHRcdHNlbGVjdCBIQVZFX0tWTV9QTV9OT1RJRklFUiBpZiBQTVxuICA0NzpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG4gIDQ4Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxuICA0OTpcdFx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXG4gIDUwOlx0XHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxuICA1MTpcdFxuICA1MjpcdGNvbmZpZyBLVk1cbiAgNTM6XHRcdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuICA1NDpcdFx0ZGVwZW5kcyBvbiBYODZfTE9DQUxfQVBJQ1xuICA1NTpcdFx0aGVscFxuICA1NjpcdFx0ICBTdXBwb3J0IGhvc3RpbmcgZnVsbHkgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMgdXNpbmcgaGFyZHdhcmVcbiAgNTc6XHRcdCAgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gIFlvdSB3aWxsIG5lZWQgYSBmYWlybHkgcmVjZW50XG4gIDU4Olx0XHQgIHByb2Nlc3NvciBlcXVpcHBlZCB3aXRoIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuIFlvdSB3aWxsIGFsc29cbiAgNTk6XHRcdCAgbmVlZCB0byBzZWxlY3Qgb25lIG9yIG1vcmUgb2YgdGhlIHByb2Nlc3NvciBtb2R1bGVzIGJlbG93LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg2MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBnZXR0aW5nIGBLVk1gIHdvcmtpbmcgb3B0aW1hbGx5LCBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBgWDg2X0xPQ0FMX0FQSUNgIGlzIGEgY29yZSBkZXBlbmRlbmN5LiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBmdW5kYW1lbnRhbCB0byBob3cgdGhlIENQVSBpbnRlcmFjdHMgd2l0aCBpbnRlcnJ1cHRzIGFuZCB2aXJ0dWFsaXphdGlvbi4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MgZW5hYmxlZC4gVGhhdCYjMzk7cyBgVklSVFVBTElaQVRJT05gLCBgS1ZNYCwgYEtWTV9BTURgLCBgS1ZNX0FNRF9TRVZgLCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBhbmQgYENSWVBUT19ERVZfU1BfUFNQYC4gVGhlIEFNRC1zcGVjaWZpYyBvbmVzIGFyZSBvYnZpb3VzbHkgY3J1Y2lhbCBmb3IgbXkgc2V0dXAsIGFuZCBgQU1EX0lPTU1VYCBpcyBhIG11c3QuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBzdXNwZWN0IHNvbWUgb2YgdGhlIGNyeXB0byBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBpbnRlci1yZWxhdGVkLiBJIHdhbnQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ1JZUFRPX0RFVl9DQ1BfRERgLiBMZXQgbWUgZGlnIGludG8gdGhvc2Ugbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTZWN1cmUgUHJvY2Vzc29yIGRldmljZSBkcml2ZXJcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgfHwgQVJNNjRcbiAgIDU6XHRcdGRlZmF1bHQgbVxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBQcm92aWRlcyBBTUQgU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyLlxuICAgODpcdFx0ICBJZiB5b3UgY2hvb3NlICYjMzk7TSYjMzk7IGhlcmUsIHRoaXMgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNjcC5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgQ1JZUFRPX0RFVl9TUF9DQ1BcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNDAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIFByb2Nlc3NvciBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIFRoZSBsb2dpYyBoaW5nZXMgb24gdGhlIHByb2Nlc3NvciBhcmNoaXRlY3R1cmUuIEl0ICpyZWFsbHkqIGRlcGVuZHMgb24gd2hldGhlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIEFNRCBDUFUgb3IgYW4gQVJNNjQgb25lLiBUaGF0IGBDUFVfU1VQX0FNRCB8fCBBUk02NGAgY29uZGl0aW9uIGlzIHRoZSBrZXkuIEFuZCwgKm9mIGNvdXJzZSosIGBDUFVfU1VQX0FNRGAgaXMgcHJldHR5IG11Y2ggdGhlIGRlZmF1bHQgZm9yIGFueSBzdGFuZGFyZCB4ODYgc2V0dXAuIFdlIGNhbiBwcm9iYWJseSBtYWtlIHRoYXQgYXNzdW1wdGlvbi4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIElPTU1Vcy4gSXMgdGhlcmUgYW55IGRlcGVuZGVuY3kgdGllZCB0byBgQU1EX0lPTU1VYCB0aGF0IG5lZWRzIHRvIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbj8gSSB3b25kZXIgaWYgdGhlcmUgaXMgYW4gaW50ZXJhY3Rpb24/IEkgc2hvdWxkIGV4cGxvcmUgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0IyBBTUQgSU9NTVUgc3VwcG9ydFxuICAgMzpcdGNvbmZpZyBBTURfSU9NTVVcbiAgIDQ6XHRcdGJvb2wgXCYjMzQ7QU1EIElPTU1VIHN1cHBvcnRcJiMzNDtcbiAgIDU6XHRcdHNlbGVjdCBTV0lPVExCXG4gICA2Olx0XHRzZWxlY3QgUENJX01TSVxuICAgNzpcdFx0c2VsZWN0IFBDSV9BVFNcbiAgIDg6XHRcdHNlbGVjdCBQQ0lfUFJJXG4gICA5Olx0XHRzZWxlY3QgUENJX1BBU0lEXG4gIDEwOlx0XHRzZWxlY3QgSVJRX01TSV9MSUJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MTIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYSBCb29sZWFuIENoYW5nZSoqCgpPa2F5LCBzbyBpdCYjMzk7cyBqdXN0IGEgYm9vbGVhbiwgaW5pdGlhbGx5LiBCdXQgYXMgd2Uga25vdywgZXZlbiBzZWVtaW5nbHkgc2ltcGxlIGNoYW5nZXMgY2FuIHJpcHBsZSBvdXR3YXJkcy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIHNjb3BlIG9mIHRoaXMgbW9kaWZpY2F0aW9uLiBJIG5lZWQgdG8gdHJhY2UgaXRzIHBhdGggdGhyb3VnaCB0aGUgY29kZS4KClRoZSBmb2N1cyBpcyBvbiBob3cgdGhpcyBib29sIGFmZmVjdHMgdGhlIGBzZXZfZGJnX2NyeXB0YCBmYW1pbHksIHNwZWNpZmljYWxseSB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGZ1bmN0aW9ucy4gSSYjMzk7dmUgaWRlbnRpZmllZCBgc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jYCBhbmQgYHNldl9kYmdfY3J5cHRfc2xvd19mcmVlYCwgYm90aCBtYXJrZWQgYXMgc3RhdGljLCBhcyB0aGUga2V5IHRhcmdldHMuIFRoZXkgYXJlIGNhbGxlZCBmcm9tIHRoZSBhbHNvIHN0YXRpYyBgc2V2X2RiZ19kZWNyeXB0X3Nsb3dgIGFuZCBgc2V2X2RiZ19lbmNyeXB0X3Nsb3dgLiBUaG9zZSB0d28gZnVuY3Rpb25zLCBpbiB0dXJuLCBhcmUgY2FsbGVkIGJ5IGBzZXZfZGJnX2NyeXB0YCwgd2hpY2ggaXMgaXRzZWxmIHN0YXRpYy4KCk5vdyBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IGBzZXZfZGJnX2NyeXB0YCBpcyBjYWxsZWQgYnkgYHNldl9tZW1fZW5jX2lvY3RsYC4gVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBub3Qgc3RhdGljLiBUaGVyZWZvcmUsIGl0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCB0byB0aGlzIHdob2xlIGNoYWluLiBUaGUgYm9vbGVhbiBjaGFuZ2UgcG90ZW50aWFsbHkgYWZmZWN0cyBmdW5jdGlvbnMgdGhhdCBhcmUgYXZhaWxhYmxlIHRvIHVzZXJzIG9mIHRoZSBrZXJuZWwgbW9kdWxlLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG11c3QgdGhvcm91Z2hseSBleGFtaW5lIGBzZXZfbWVtX2VuY19pb2N0bGAgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBib29sZWFuIGFuZCBpdHMgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V2X21lbV9lbmNfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjYzMj1zdGF0aWMgaW50IHNucF9lbmFibGVfY2VydHMoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0MS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY0MjppbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzE2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlNFViBJT0NUTCBFbnRyeSBQb2ludCBJbnZlc3RpZ2F0aW9uKioKClJpZ2h0LCBzbyBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIHRoZSBhc3N1bWVkIGVudHJ5IHBvaW50IGZvciBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIGlvY3Rscy4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gd2UmIzM5O3JlIHN0YXJ0aW5nIHdpdGguIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IGlzIHRoaXMgKnRoZSogb25seSBlbnRyeSBwb2ludD8gQXJlIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIFNFViBpb2N0bCBoYW5kbGluZyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGRvIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbHRlcm5hdGl2ZXMgb3IgaWYgc29tZXRoaW5nIGlzIG1pc3NlZC4gTGV0IG1lIHBpdm90IHRvIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCBub3cgYW5kIHZlcmlmeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V2X21lbV9lbmNfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI2MzI9c3RhdGljIGludCBzbnBfZW5hYmxlX2NlcnRzKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDEtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2NDI6aW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDMte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTMyNT1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NDMtXHQuZGV2X2dldF9hdHRyID0gc2V2X2Rldl9nZXRfYXR0cixcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTQ0NDpcdC5tZW1fZW5jX2lvY3RsID0gc2V2X21lbV9lbmNfaW9jdGwsXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NDUtXHQubWVtX2VuY19yZWdpc3Rlcl9yZWdpb24gPSBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24sXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD05Nzg9dm9pZCBzZXZfZXNfdW5tYXBfZ2hjYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05ODAtI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODE6aW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05ODItaW50IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDA4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBTRVYgTWVtb3J5IEVuY3J5cHRpb24gSU9DVEwqKgoKQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIGluZGVlZCB0aGUgcHJpbWFyeSBmdW5jdGlvbiBJIG5lZWQgdG8gY29uY2VudHJhdGUgb24gaGVyZS4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQsIHNvIHRoYXQgZmVlbHMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBOb3csIGhvbGQgb24gYSBzZWNvbmQuLi4gd2hhdCYjMzk7cyB0aGlzPyBgc2V2X2RiZ19jcnlwdGAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCB5ZXQgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRob3NlIGRlYnVnZ2luZyBvcGVyYXRpb25zLCBgS1ZNX1NFVl9EQkdfREVDUllQVGAgYW5kIGBLVk1fU0VWX0RCR19FTkNSWVBUYC4gVGhpcyBpcyBhIGJpdCB1bnVzdWFsLgoKQnV0LCBzaW5jZSBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIHRoZSBvdmVyYWxsIGVudHJ5IHBvaW50LCBpdCBtYWtlcyBzZW5zZSB0byBrZWVwIGl0IGFzIG15IG1haW4gZm9jdXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnkgb3RoZXIgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBtZWNoYW5pc20uIFRoZSBuZXh0IHF1ZXN0aW9uIHRvIGFuc3dlciBpcyB3aGV0aGVyIG9yIG5vdCBgc2V2X2RiZ19jcnlwdGAgaXMgaW5saW5lZC4gVGhhdCB3aWxsIGltcGFjdCBob3cgSSBhcHByb2FjaCB0aGUgYW5hbHlzaXMuIExldCYjMzk7cyBsb29rIGludG8gdGhhdCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXZfZGJnX2NyeXB0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyNDA9c3RhdGljIGludCBzZXZfaXNzdWVfZGJnX2NtZChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjX3BhLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI1NS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTI1NjpzdGF0aWMgdm9pZCAqc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIF9fdmEsXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyNTctXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBsb25nICpwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyOTYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEyOTc6c3RhdGljIHZvaWQgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUodm9pZCAqYnVmKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjk4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzMDU9c3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMxMy1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMxNDpcdGJ1ZiA9IHNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzcmNfcCwgc3JjLCBsZW4sIFx1MDAyNnNyY19wYSwgXHUwMDI2bnJfYnl0ZXMpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzE1LVx0aWYgKCFidWYpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzI1LW91dDpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMyNjpcdHNldl9kYmdfY3J5cHRfc2xvd19mcmVlKGJ1Zik7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMjctXHRyZXR1cm4gcjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzMzA9c3RhdGljIGludCBzZXZfZGJnX2VuY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMzOS1cdC8qIERlY3J5cHQgdGhlIF9kZXN0aW5hdGlvbl8gdG8gZG8gYSBSTVcgb24gcGxhaW50ZXh0LiAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzQwOlx0YnVmID0gc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKGRzdF9wLCBkc3QsIGxlbiwgXHUwMDI2ZHN0X3BhLCBcdTAwMjZucl9ieXRlcyk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNDEtXHRpZiAoIWJ1Zilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNTgtb3V0OlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzU5Olx0c2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUoYnVmKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2MC1cdHJldHVybiByO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2Mi1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTM2MzpzdGF0aWMgaW50IHNldl9kYmdfY3J5cHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNjQtXHRcdFx0IHVuc2lnbmVkIGludCBjbWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjQyPWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcwMC1cdGNhc2UgS1ZNX1NFVl9EQkdfRU5DUllQVDpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjcwMTpcdFx0ciA9IHNldl9kYmdfY3J5cHQoa3ZtLCBcdTAwMjZzZXZfY21kLCBzZXZfY21kLmlkKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcwMi1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzIzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEtWTSBTRVYgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBzZXZfZGJnX2NyeXB0YCBpcyBzdGF0aWMgYnV0IG5vdCBpbmxpbmUuIEl0JiMzOTtzIGxpa2VseSB0aGUgY29tcGlsZXIgd2lsbCBpbmxpbmUgaXQsIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgYWx0aG91Z2ggSSB3b3VsZG4mIzM5O3Qgd29ycnkgYWJvdXQgaXQgdG9vIG11Y2guIE15IG1haW4gZm9jdXMsIGhvd2V2ZXIsIGlzIG9uIGBzZXZfbWVtX2VuY19pb2N0bGAuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50LgoKRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYHNldl9tZW1fZW5jX2lvY3RsYCBpcyBpbmRlZWQgdGhlICpvbmx5KiBpb2N0bCBoYW5kbGVyIGZvciBLVk0gbWVtb3J5IGVuY3J5cHRpb24uIFllcCwgY29uZmlybWVkLiBUaGF0JiMzOTtzIGdvb2QuIE5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcmUuCgpBbHJpZ2h0LCBzbyBgS1ZNX0FNRF9TRVZgIGRlcGVuZHMgb24gYEtWTV9BTURgIGFuZCBgWDg2XzY0YCwgd2hpY2ggaXMgZXhwZWN0ZWQuIGBDUllQVE9fREVWX1NQX1BTUGAgZGVwZW5kcyBvbiBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBgWDg2XzY0YCwgYW5kIGBBTURfSU9NTVVgLiBOb3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkgaGVyZTsgYFg4Nl82NGAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbi4KCkxldCYjMzk7cyByZXZpZXcgdGhlIHJlcXVpcmVkIGNvbmZpZ3M6IGBWSVJUVUFMSVpBVElPTmAsIGBLVk1gLCBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGFuZCBgQU1EX0lPTU1VYC4KCkhvbGQgb24uLi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIGBLVk1fQU1EX1NFVmAgYWN0dWFsbHkgKmRlcGVuZHMqIG9uIGAhKEtWTV9BTUQ9eSAmYW1wOyZhbXA7IENSWVBUT19ERVZfQ0NQX0REPW0pYC4gTWVhbmluZywgKmlmKiBgS1ZNX0FNRGAgaXMgYHlgLCB0aGVuIGBDUllQVE9fREVWX0NDUF9ERGAgKm11c3QqIGJlIGB5YC4gR2l2ZW4gdGhlIFN5emthbGxlciBjb250ZXh0LCB0aGlzIG1lYW5zIHRoYXQgdGhlc2UgY29uZmlncyB3aWxsIGJlIHNldCB0byBgeWAgc2luY2UgU3l6a2FsbGVyIHRlbmRzIHRvIGVuYWJsZSBldmVyeXRoaW5nIGl0IGNhbiwgc28gYENSWVBUT19ERVZfQ0NQX0REYCBhbmQgYENSWVBUT19ERVZfU1BfUFNQYCB3aWxsIGVmZmVjdGl2ZWx5IGJlIGB5YC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogQ2FuIHdlIGhpdCBgc2V2X2RiZ19jcnlwdGAgZnJvbSBHQ0U/IFN5emthbGxlciBydW5zIG9uIEdDRSwgYW5kIEdDRSBoYXMgQU1EIGluc3RhbmNlcywgc28gaXQgKmNvdWxkKiBoYXZlIFNFViBzdXBwb3J0LiBPYnZpb3VzbHksIEtWTSBTRVYgcmVxdWlyZXMgaGFyZHdhcmUgc3VwcG9ydCB0byByZWFsbHkgd29yaywgYnV0IGV2ZW4gd2l0aG91dCBpdCwgd2UgY2FuIHN0aWxsIGxpa2VseSByZWFjaCB1cCB0byB0aGUgaGFyZHdhcmUgY2hlY2tzIHRocm91Z2ggdGhlIEtWTSBpb2N0bHMuIEkmIzM5O20gd29uZGVyaW5nIGlmIGBzZXZfbWVtX2VuY19pb2N0bGAgZG9lcyBhIGNoZWNrIG9uIGBzZXZfZ3Vlc3Qoa3ZtKWAgb3Igc29tZXRoaW5nIHNpbWlsYXI/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gZmluZCBvdXQgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY0MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjQyOlx0aW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG4yNjQzOlx0e1xuMjY0NDpcdFx0c3RydWN0IGt2bV9zZXZfY21kIHNldl9jbWQ7XG4yNjQ1Olx0XHRpbnQgcjtcbjI2NDY6XHRcbjI2NDc6XHRcdGlmICghc2V2X2VuYWJsZWQpXG4yNjQ4Olx0XHRcdHJldHVybiAtRU5PVFRZO1xuMjY0OTpcdFxuMjY1MDpcdFx0aWYgKCFhcmdwKVxuMjY1MTpcdFx0XHRyZXR1cm4gMDtcbjI2NTI6XHRcbjI2NTM6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZzZXZfY21kLCBhcmdwLCBzaXplb2Yoc3RydWN0IGt2bV9zZXZfY21kKSkpXG4yNjU0Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjY1NTpcdFxuMjY1NjpcdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbjI2NTc6XHRcbjI2NTg6XHRcdC8qIE9ubHkgdGhlIGVuY19jb250ZXh0X293bmVyIGhhbmRsZXMgc29tZSBtZW1vcnkgZW5jIG9wZXJhdGlvbnMuICovXG4yNjU5Olx0XHRpZiAoaXNfbWlycm9yaW5nX2VuY19jb250ZXh0KGt2bSkgXHUwMDI2XHUwMDI2XG4yNjYwOlx0XHQgICAgIWlzX2NtZF9hbGxvd2VkX2Zyb21fbWlycm9yKHNldl9jbWQuaWQpKVxuMjY2MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI2NjI6XHRcbjI2NjM6XHRcdC8qXG4yNjY0Olx0XHQgKiBPbmNlIEtWTV9TRVZfSU5JVDIgaW5pdGlhbGl6ZXMgYSBLVk0gaW5zdGFuY2UgYXMgYW4gU05QIGd1ZXN0LCBvbmx5XG4yNjY1Olx0XHQgKiBhbGxvdyB0aGUgdXNlIG9mIFNOUC1zcGVjaWZpYyBjb21tYW5kcy5cbjI2NjY6XHRcdCAqL1xuMjY2NzpcdFx0aWYgKHNldl9zbnBfZ3Vlc3Qoa3ZtKSBcdTAwMjZcdTAwMjYgc2V2X2NtZC5pZCBcdTAwM2MgS1ZNX1NFVl9TTlBfTEFVTkNIX1NUQVJUKVxuMjY2ODpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMjY2OTpcdFxuMjY3MDpcdFx0c3dpdGNoIChzZXZfY21kLmlkKSB7XG4yNjcxOlx0XHRjYXNlIEtWTV9TRVZfRVNfSU5JVDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqRGVidWdnaW5nIHRoZSBgc2V2X2VuYWJsZWRgIFZhcmlhYmxlKioKCk9rYXksIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGNvbmZpcm1pbmcgdGhhdCBgc2V2X2VuYWJsZWRgIGlzIGNoZWNrZWQuIE5vdywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIG9yaWdpbiBvZiB0aGlzIHZhcmlhYmxlLiBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgYHNldl9lbmFibGVkYCBpcyBhY3R1YWxseSBiZWluZyBzZXQuIEtub3dpbmcgd2hlcmUgaXQgZ2V0cyBpdHMgdmFsdWUgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgYW5kIGhvdyB0byB0cm91Ymxlc2hvb3QgYW55IGlzc3VlcyByZWxhdGVkIHRvIGl0LiBVbmRlcnN0YW5kaW5nIGl0cyBkZWZpbml0aW9uIGlzIHRoZSBrZXkgdG8gcmVzb2x2aW5nIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nldl9lbmFibGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTU0LS8qIGVuYWJsZS9kaXNhYmxlIFNFViBzdXBwb3J0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjU1OnN0YXRpYyBib29sIF9fcm9fYWZ0ZXJfaW5pdCBzZXZfZW5hYmxlZCA9IHRydWU7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjU2Om1vZHVsZV9wYXJhbV9uYW1lZChzZXYsIHNldl9lbmFibGVkLCBib29sLCAwNDQ0KTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTctXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjQyPWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0Ni1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY0NzpcdGlmICghc2V2X2VuYWJsZWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDgtXHRcdHJldHVybiAtRU5PVFRZO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzAyMD12b2lkIF9faW5pdCBzZXZfc2V0X2NwdV9jYXBzKHZvaWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwMjEte1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMDIyOlx0aWYgKHNldl9lbmFibGVkKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMDIzLVx0XHRrdm1fY3B1X2NhcF9zZXQoWDg2X0ZFQVRVUkVfU0VWKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwNjQ9dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMDcyLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMDczOlx0aWYgKCFzZXZfZW5hYmxlZCB8fCAhbnB0X2VuYWJsZWQgfHwgIW5yaXBzKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMDc0LVx0XHRnb3RvIG91dDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxNzEtb3V0OlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMTcyOlx0aWYgKHNldl9lbmFibGVkKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxNzMtXHRcdGluaXRfYXJncy5wcm9iZSA9IHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjI3LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjI4Olx0c2V2X2VuYWJsZWQgPSBzZXZfc3VwcG9ydGVkO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjI5LVx0c2V2X2VzX2VuYWJsZWQgPSBzZXZfZXNfc3VwcG9ydGVkO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzI0Mj12b2lkIHNldl9oYXJkd2FyZV91bnNldHVwKHZvaWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNDMte1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjQ0Olx0aWYgKCFzZXZfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI0NS1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzI1OT1pbnQgc2V2X2NwdV9pbml0KHN0cnVjdCBzdm1fY3B1X2RhdGEgKnNkKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjYwLXtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzI2MTpcdGlmICghc2V2X2VuYWJsZWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNjItXHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkxOQoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiA1MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqU0VWIFN1cHBvcnQgYW5kIEZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3QuIGBzZXZfZW5hYmxlZGAgaXMgc2V0IGJhc2VkIG9uIHdoZXRoZXIgdGhlIGhhcmR3YXJlIHN1cHBvcnRzIFNFViwgd2hpY2ggaXMgZGV0ZXJtaW5lZCBpbiBgc2V2X2hhcmR3YXJlX3NldHVwYC4gSWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IHN1cHBvcnQgU0VWLCBgc2V2X2VuYWJsZWRgIGlzIGZhbHNlLCBhbmQgdGhlIGBzZXZfbWVtX2VuY19pb2N0bGAgZnVuY3Rpb24gcmV0dXJucyBgLUVOT1RUWWAuIEJ1dCwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBTeXprYWxsZXIgKmRvZXMqIHJ1biBvbiBpbnN0YW5jZXMgdGhhdCBlaXRoZXIgZnVsbHkgc3VwcG9ydCBTRVYgb3IgYXQgbGVhc3QgaGF2ZSBTRVYgYXMgYSBrZXkga2VybmVsIGZlYXR1cmUgYWNjZXNzaWJsZSB3aGVuIHRoZSBoYXJkd2FyZSBpcyBwcmVzZW50LgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgdG91Y2hlcyBjb3JlIGtlcm5lbCBLVk0gU0VWIGxvZ2ljLCBhbmQgYmVjYXVzZSBpdCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gYW4gaW9jdGwgaGFuZGxlciAoYHNldl9tZW1fZW5jX2lvY3RsYCksIEkmIzM5O20gY29uZmlkZW50IHdlIG5lZWQgdG8gZnV6eiB0aGlzISBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRvIGJlIGNlcnRhaW4uIEkga25vdyBgS1ZNX0FNRF9TRVZgLCBgQ1JZUFRPX0RFVl9TUF9QU1BgLCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBgQU1EX0lPTU1VYCwgYEtWTV9BTURgLCBgS1ZNYCwgYW5kIGBWSVJUVUFMSVpBVElPTmAgYXJlIHJlbGV2YW50LiBXYWl0LCBgS1ZNX0FNRF9TRVZgIGlzIHRoZSBwcmltYXJ5IG9uZSwgaXQmIzM5O3MgdGhlIG1haW4gY29uZmlnIGhlcmUuCgpJJiMzOTtsbCBmb3JtYXQgdGhlIG91dHB1dCB0byBoaWdobGlnaHQgdGhpcyBrZXkgZnVuY3Rpb24gYW5kIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucy4gVGhlIGZvY3VzIHdpbGwgYmUgb24gYHNldl9tZW1fZW5jX2lvY3RsYCwgYW5kIHRoZSBlbmFibGUgY29uZmlncyB3aWxsIGJlIGBWSVJUVUFMSVpBVElPTmAsIGBLVk1gLCBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGFuZCBgQU1EX0lPTU1VYC4KCk5vdyBsZXQmIzM5O3Mgc2VlLCB3aGF0IGFib3V0IG90aGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIFNFVj8gSSYjMzk7bSBjaGVja2luZyBpZiBgc2V2X2RiZ19jcnlwdGAgaXMgZXhwb3J0ZWQuIE9oLCBpdCYjMzk7cyBzdGF0aWMuIFdlbGwsIGBzZXZfbWVtX2VuY19pb2N0bGAgaXMgZXhwb3J0ZWQgKG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMpLCB3aGljaCBpcyBnb29kLiBBbnl0aGluZyBlbHNlPyBgc2V2X2RiZ19kZWNyeXB0X3Nsb3dgIGFuZCBgc2V2X2RiZ19lbmNyeXB0X3Nsb3dgIGFyZSBzdGF0aWMuIEkmIzM5O2xsIHN0aWNrIHdpdGggZm9jdXNpbmcgb24gYHNldl9tZW1fZW5jX2lvY3RsYC4KCk9rYXksIEkmIzM5O20gcmV2aWV3aW5nIHRoZSBjb2RlIHNuaXBwZXQgSSBmb3VuZCBhZ2FpbjoKYGBgYwomIzQzOwlpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkKJiM0MzsJCXJldHVybiAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKYGBgCkFoLCByaWdodCwgdGhpcyBjb2RlIHVzZXMgYGNjX3BsYXRmb3JtX2hhc2AuIEkmIzM5O2xsIGNoZWNrIHRvIHNlZSBpZiBgY2NfcGxhdGZvcm1faGFzYCByZWxpZXMgb24gYW55IHNwZWNpZmljIGNvbmZpZ3MuIEFscmlnaHQsIHNvIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUgaW5kaWNhdGVzIHRoYXQgYHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STWAgaXMgY29uZmlndXJlZCBmb3IgYEtWTV9BTURfU0VWYC4gU28sIHdlIHNob3VsZCBiZSBhbGwgZ29vZCEKCkFscmlnaHQsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VklSVFVBTElaQVRJT04mIzM0OywKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNX0FNRF9TRVYmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9DQ1BfREQmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9TUF9QU1AmIzM0OywKICAgICYjMzQ7QU1EX0lPTU1VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V2X21lbV9lbmNfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgaW4gS1ZNIFNFViBkZWJ1ZyBjcnlwdG9ncmFwaHkgZnVuY3Rpb25zIChzZXZfZGJnX2RlY3J5cHRfc2xvdyBhbmQgc2V2X2RiZ19lbmNyeXB0X3Nsb3cpLiBJdCBhbGxvY2F0ZXMgYSBmdWxsIHBhZ2UgaW5zdGVhZCBvZiB1c2luZyBrbWFsbG9jIHdoZW4gU0VWLVNOUCBpcyBhY3RpdmUgdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIGR1cmluZyBQU1AgZHJpdmVyIFJNUCB1cGRhdGVzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIChLVk1fU0VWX0RCR19ERUNSWVBUIGFuZCBLVk1fU0VWX0RCR19FTkNSWVBUKSB3aGVuIHJ1bm5pbmcgb24gc3VwcG9ydGVkIEFNRCBoYXJkd2FyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VklSVFVBTElaQVRJT04mIzM0OywKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNX0FNRF9TRVYmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9DQ1BfREQmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9TUF9QU1AmIzM0OywKICAgICYjMzQ7QU1EX0lPTU1VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V2X21lbV9lbmNfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgaW4gS1ZNIFNFViBkZWJ1ZyBjcnlwdG9ncmFwaHkgZnVuY3Rpb25zIChzZXZfZGJnX2RlY3J5cHRfc2xvdyBhbmQgc2V2X2RiZ19lbmNyeXB0X3Nsb3cpLiBJdCBhbGxvY2F0ZXMgYSBmdWxsIHBhZ2UgaW5zdGVhZCBvZiB1c2luZyBrbWFsbG9jIHdoZW4gU0VWLVNOUCBpcyBhY3RpdmUgdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIGR1cmluZyBQU1AgZHJpdmVyIFJNUCB1cGRhdGVzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIChLVk1fU0VWX0RCR19ERUNSWVBUIGFuZCBLVk1fU0VWX0RCR19FTkNSWVBUKSB3aGVuIHJ1bm5pbmcgb24gc3VwcG9ydGVkIEFNRCBoYXJkd2FyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE3OjM2LjAwMTUyOTc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MTAyODIxMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCIsXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJDUllQVE9fREVWX0NDUF9ERFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgICBcIkFNRF9JT01NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNldl9tZW1fZW5jX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgaW4gS1ZNIFNFViBkZWJ1ZyBjcnlwdG9ncmFwaHkgZnVuY3Rpb25zIChzZXZfZGJnX2RlY3J5cHRfc2xvdyBhbmQgc2V2X2RiZ19lbmNyeXB0X3Nsb3cpLiBJdCBhbGxvY2F0ZXMgYSBmdWxsIHBhZ2UgaW5zdGVhZCBvZiB1c2luZyBrbWFsbG9jIHdoZW4gU0VWLVNOUCBpcyBhY3RpdmUgdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIGR1cmluZyBQU1AgZHJpdmVyIFJNUCB1cGRhdGVzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIChLVk1fU0VWX0RCR19ERUNSWVBUIGFuZCBLVk1fU0VWX0RCR19FTkNSWVBUKSB3aGVuIHJ1bm5pbmcgb24gc3VwcG9ydGVkIEFNRCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTc6MzYuMDAxNTM2MzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2Mjk5MzQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg0YzQ3MTQ3NjllYzFjNTRlMDY5ZjFiYTJlNWZjZWJhMDZmYmI1NGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMjUgMDM6MTc6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5pbmRleCA3NGZiMTU1NTFlODNmYS4uODAzYmQzOTY5NWZkZGIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5AQCAtMTI4MCw5ICsxMjgwLDI4IEBAIHN0YXRpYyB2b2lkICpzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgX192YSxcXG4gXFx0aWYgKFdBUk5fT05fT05DRSgoKnBhIFxcdTAwMjYgUEFHRV9NQVNLKSAhPSAoKCpwYSArICpucl9ieXRlcyAtIDEpIFxcdTAwMjYgUEFHRV9NQVNLKSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogSWYgU05QIGlzIGVuYWJsZWQsIGkuZS4gdGhlIFJNUCBpcyBhY3RpdmUsIGFsbG9jYXRlIGEgZnVsbCBwYWdlIHRvXFxuK1xcdCAqIHByZXZlbnQgY29uY3VycmVudCBhY2Nlc3NlcyB0byB0aGUgcGFnZS4gIEFzIHJlcXVpcmVkIGJ5IGZpcm13YXJlLFxcbitcXHQgKiB0aGUgUFNQIGRyaXZlciB1cGRhdGVzIHRoZSBSTVAgdG8gdGVtcG9yYXJpbHkgdHJhbnNmZXIgb3duZXJzaGlwIG9mXFxuK1xcdCAqIHRoZSBwYWdlIHRvIEZpcm13YXJlIHdoaWxlIHRoZSB7REUsRU59Q1JZUFQgb3BlcmF0aW9uIGlzIGluLXByb2dyZXNzLFxcbitcXHQgKiBhbmQgc28gY29uY3VycmVudCBzb2Z0d2FyZSBhY2Nlc3NlcyB0byB0aGUgcGFnZSB3aWxsIGVuY291bnRlclxcbitcXHQgKiBzZWVtaW5nbHkgc3B1cmlvdXMgUk1QICNQRiB2aW9sYXRpb25zXFxuK1xcdCAqL1xcbitcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG4rXFx0XFx0cmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xcbitcXG4gXFx0cmV0dXJuIGttYWxsb2MoKm5yX2J5dGVzLCBHRlBfS0VSTkVMKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUodm9pZCAqYnVmKVxcbit7XFxuK1xcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbitcXHRcXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRrZnJlZShidWYpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHNldl9kYmdfZGVjcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICpzcmNfcCwgdW5zaWduZWQgbG9uZyBkc3QsXFxuIFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBsZW4sIGludCAqZXJyKVxcbkBAIC0xMzA0LDcgKzEzMjMsNyBAQCBzdGF0aWMgaW50IHNldl9kYmdfZGVjcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsXFxuIFxcdGlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopZHN0LCBidWYgKyAoc3JjIFxcdTAwMjYgMTUpLCBsZW4pKVxcbiBcXHRcXHRyID0gLUVGQVVMVDtcXG4gb3V0Olxcbi1cXHRrZnJlZShidWYpO1xcbitcXHRzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZShidWYpO1xcbiBcXHRyZXR1cm4gcjtcXG4gfVxcbiBcXG5AQCAtMTMzNyw3ICsxMzU2LDcgQEAgc3RhdGljIGludCBzZXZfZGJnX2VuY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxcbiBcXHRcXHRyID0gc2V2X2lzc3VlX2RiZ19jbWQoa3ZtLCBfX3NtZV9zZXQoX19wYShidWYpKSwgZHN0X3BhLFxcbiBcXHRcXHRcXHRcXHQgICAgICBucl9ieXRlcywgS1ZNX1NFVl9EQkdfRU5DUllQVCwgZXJyKTtcXG4gb3V0Olxcbi1cXHRrZnJlZShidWYpO1xcbitcXHRzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZShidWYpO1xcbiBcXHRyZXR1cm4gcjtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTc6MzYuNzY1NTE4MzE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTU4MzM4ODE5NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCIsXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJDUllQVE9fREVWX0NDUF9ERFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgICBcIkFNRF9JT01NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNldl9tZW1fZW5jX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgaW4gS1ZNIFNFViBkZWJ1ZyBjcnlwdG9ncmFwaHkgZnVuY3Rpb25zIChzZXZfZGJnX2RlY3J5cHRfc2xvdyBhbmQgc2V2X2RiZ19lbmNyeXB0X3Nsb3cpLiBJdCBhbGxvY2F0ZXMgYSBmdWxsIHBhZ2UgaW5zdGVhZCBvZiB1c2luZyBrbWFsbG9jIHdoZW4gU0VWLVNOUCBpcyBhY3RpdmUgdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIGR1cmluZyBQU1AgZHJpdmVyIFJNUCB1cGRhdGVzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIChLVk1fU0VWX0RCR19ERUNSWVBUIGFuZCBLVk1fU0VWX0RCR19FTkNSWVBUKSB3aGVuIHJ1bm5pbmcgb24gc3VwcG9ydGVkIEFNRCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODRjNDcxNDc2OWVjMWM1NGUwNjlmMWJhMmU1ZmNlYmEwNmZiYjU0ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDAzOjE3OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDc0ZmIxNTU1MWU4M2ZhLi44MDNiZDM5Njk1ZmRkYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC0xMjgwLDkgKzEyODAsMjggQEAgc3RhdGljIHZvaWQgKnNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBfX3ZhLFxuIFx0aWYgKFdBUk5fT05fT05DRSgoKnBhIFx1MDAyNiBQQUdFX01BU0spICE9ICgoKnBhICsgKm5yX2J5dGVzIC0gMSkgXHUwMDI2IFBBR0VfTUFTSykpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbitcdC8qXG4rXHQgKiBJZiBTTlAgaXMgZW5hYmxlZCwgaS5lLiB0aGUgUk1QIGlzIGFjdGl2ZSwgYWxsb2NhdGUgYSBmdWxsIHBhZ2UgdG9cbitcdCAqIHByZXZlbnQgY29uY3VycmVudCBhY2Nlc3NlcyB0byB0aGUgcGFnZS4gIEFzIHJlcXVpcmVkIGJ5IGZpcm13YXJlLFxuK1x0ICogdGhlIFBTUCBkcml2ZXIgdXBkYXRlcyB0aGUgUk1QIHRvIHRlbXBvcmFyaWx5IHRyYW5zZmVyIG93bmVyc2hpcCBvZlxuK1x0ICogdGhlIHBhZ2UgdG8gRmlybXdhcmUgd2hpbGUgdGhlIHtERSxFTn1DUllQVCBvcGVyYXRpb24gaXMgaW4tcHJvZ3Jlc3MsXG4rXHQgKiBhbmQgc28gY29uY3VycmVudCBzb2Z0d2FyZSBhY2Nlc3NlcyB0byB0aGUgcGFnZSB3aWxsIGVuY291bnRlclxuK1x0ICogc2VlbWluZ2x5IHNwdXJpb3VzIFJNUCAjUEYgdmlvbGF0aW9uc1xuK1x0ICovXG4rXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbitcdFx0cmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xuK1xuIFx0cmV0dXJuIGttYWxsb2MoKm5yX2J5dGVzLCBHRlBfS0VSTkVMKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUodm9pZCAqYnVmKVxuK3tcbitcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuK1x0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmKTtcbitcdGVsc2VcbitcdFx0a2ZyZWUoYnVmKTtcbit9XG4rXG4gc3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxuIFx0XHRcdFx0c3RydWN0IHBhZ2UgKnNyY19wLCB1bnNpZ25lZCBsb25nIGRzdCxcbiBcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIGludCAqZXJyKVxuQEAgLTEzMDQsNyArMTMyMyw3IEBAIHN0YXRpYyBpbnQgc2V2X2RiZ19kZWNyeXB0X3Nsb3coc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyYyxcbiBcdGlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopZHN0LCBidWYgKyAoc3JjIFx1MDAyNiAxNSksIGxlbikpXG4gXHRcdHIgPSAtRUZBVUxUO1xuIG91dDpcbi1cdGtmcmVlKGJ1Zik7XG4rXHRzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZShidWYpO1xuIFx0cmV0dXJuIHI7XG4gfVxuIFxuQEAgLTEzMzcsNyArMTM1Niw3IEBAIHN0YXRpYyBpbnQgc2V2X2RiZ19lbmNyeXB0X3Nsb3coc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyYyxcbiBcdFx0ciA9IHNldl9pc3N1ZV9kYmdfY21kKGt2bSwgX19zbWVfc2V0KF9fcGEoYnVmKSksIGRzdF9wYSxcbiBcdFx0XHRcdCAgICAgIG5yX2J5dGVzLCBLVk1fU0VWX0RCR19FTkNSWVBULCBlcnIpO1xuIG91dDpcbi1cdGtmcmVlKGJ1Zik7XG4rXHRzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZShidWYpO1xuIFx0cmV0dXJuIHI7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTc6MzYuNzY1NTIwMjA0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMxMDU3NTYxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1ZNIFNFViBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYC4gU3BlY2lmaWNhbGx5LCBpdCdzIG1vZGlmeWluZyBgc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jYCBhbmQgaW50cm9kdWNpbmcgYSBjb3JyZXNwb25kaW5nIGBzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZWAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGhlcmUgaXMgaG93IHRoZXkgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gaW4gYHNldl9kYmdfZGVjcnlwdF9zbG93YCBhbmQgYHNldl9kYmdfZW5jcnlwdF9zbG93YC4gSWYgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpcyBzZXQsIG1lYW5pbmcgd2UncmUgZGVhbGluZyB3aXRoIFNFVi1TTlAgY2FwYWJsZSBoYXJkd2FyZSAob3IgYXQgbGVhc3QgZW11bGF0aW5nIGl0KSwgdGhleSdyZSBub3cgdXNpbmcgYF9fZ2V0X2ZyZWVfcGFnZWAgZm9yIGEgZnVsbCBwYWdlIGFsbG9jYXRpb24gaW5zdGVhZCBvZiBga21hbGxvY2AsIGFuZCBjb3JyZXNwb25kaW5nbHksIGBmcmVlX3BhZ2VgIGluc3RlYWQgb2YgYGtmcmVlYCB0byByZWxlYXNlIHRoZSBtZW1vcnkuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyByZWFjaGFibGUsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBpcyBpdCB3b3J0aCB0aGUgZWZmb3J0IHRvIGZ1enogaXQ/IFRoaXMgaXMgS1ZNIFNFViBjb2RlLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBBTUQgcHJvY2Vzc29ycyBhbmQgdGhlaXIgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiBmZWF0dXJlcyBpbiBteSBtaW5kLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSBmdXp6IHRoaXMgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEkga25vdyBTRVYgYW5kIFNFVi1TTlAgYXJlIG9mdGVuIHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydCwgYnV0IEkgYWxzbyByZWNhbGwgS1ZNIFNFViBjYW4gYmUgdGVzdGVkIHdpdGggZW11bGF0aW9uIGlmIHRoZSBob3N0IGRvZXNuJ3QgaGF2ZSBpdCBuYXRpdmVseS5cblxuV2FpdCBhIHNlY29uZC4uLiBzeXprYWxsZXIhIERvZXNuJ3Qgc3l6a2FsbGVyIGhhdmUgS1ZNIGZ1enppbmc/IEFuZCBpZiBzbywgZG9lcyBpdCBldmVuIHRvdWNoIFNFViBmdW5jdGlvbmFsaXR5PyBJJ20gcHJldHR5IHN1cmUgaXQgZG9lcy4gWWVzLCBJIHJlbWVtYmVyIHNlZWluZyB0aGF0LiBPa2F5LCB0aGVuLCBsZXQncyBmaW5kIHRoZSBLY29uZmlnIHRvIGNvbmZpcm0uIFRoZSBmaWxlIGluIHF1ZXN0aW9uLCBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AsIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1fQU1EX1NFVmAgaXMgZW5hYmxlZC4gTGV0J3MgZGlnIGludG8gYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBjb25maXJtIHRoYXQncyB0aGUgZGVwZW5kZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE3OjQ5Ljg3MTI3OTAzOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMyNzg5MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX0FNRF9TRVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxNzo1MC4wMjQ1NjU1NTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYzNTY2MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZGVwZW5kZW5jaWVzIG9mIGBLVk1fQU1EX1NFVmA6XG5cbioqQW5hbHl6aW5nIEtWTV9BTURfU0VWIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtWTV9BTURfU0VWYC4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYS4gT2J2aW91c2x5LCBzaW5jZSBpdCdzIHJlbGF0ZWQgdG8gQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFViksIEknbSBhc3N1bWluZyBpdCdzIHBhcnQgb2YgdGhlIGJyb2FkZXIgS1ZNIHZpcnR1YWxpemF0aW9uIGluZnJhc3RydWN0dXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1tZWRpYXRlIGNvbXBvbmVudHMgaXQgcmVsaWVzIG9uLiBJcyBpdCBhIG1vZHVsZSB0aGF0IGxpbmtzIGludG8gdGhlIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHksIHBlcmhhcHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaHlwZXJ2aXNvciBvciBzcGVjaWZpYyBBTUQtcmVsYXRlZCBoYXJkd2FyZSBmZWF0dXJlcyB0aHJvdWdoIGV4aXN0aW5nIGludGVyZmFjZXM/XG5cbkknbGwgbmVlZCB0byBjb25zaWRlciB0aGlzIGluIGxheWVycy4gRmlyc3QsIEknbGwgaWRlbnRpZnkgdGhlIGJhc2UgS1ZNIGNvbXBvbmVudHMuIElzIGl0IGNhbGxpbmcgb24gdGhlIHN0YW5kYXJkIEtWTSBBUEk/IERvZXMgaXQgdXNlIHNwZWNpZmljIEFNRC1zcGVjaWZpYyByZWdpc3RlcnMgb3IgZXh0ZW5zaW9ucz8gQXJlIHRoZXJlIGFueSBrZXJuZWwtbGV2ZWwgbW9kdWxlcyByZXF1aXJlZCwgbGlrZSBBTUQncyBQU1Agb3IgU2VjdXJlIE1lbW9yeSBFbmNyeXB0aW9uIChTTUUpIGRyaXZlcnMsIHRoYXQgYEtWTV9BTURfU0VWYCBpbnRlcmFjdHMgd2l0aCBkaXJlY3RseT8gSSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIGlmIHRoaXMgbW9kdWxlIGlzIG1vcmUgYWJvdXQgcHJvdmlkaW5nIGFuIGFic3RyYWN0aW9uIGxheWVyIG9uIHRvcCBvZiB0aG9zZSBleGlzdGluZyBjb21wb25lbnRzLlxuXG5JJ2xsIGFsc28gaGF2ZSB0byBsb29rIGZvciBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzLiBBcmUgdGhlcmUgYW55IGNyeXB0byBsaWJyYXJpZXMsIHNwZWNpZmljIGZpcm13YXJlIHZlcnNpb25zLCBvciBzZWN1cml0eS1yZWxhdGVkIGFzcGVjdHMgdGhhdCBjb3VsZCBjb21lIGludG8gcGxheT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRpZ2h0bHkgY291cGxlZCBpdCBpcyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCB0aGUgQU1EIFNlY3VyZSBQcm9jZXNzb3IsIGFuZCBvdGhlciBwbGF0Zm9ybSBzZWN1cml0eSBmZWF0dXJlcy4gSSBleHBlY3QgdGhlcmUncyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIEFNRCdzIFBTUCAoUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yKSBhdCBhIGxvd2VyIGxldmVsIGFuZCB3aWxsIHdhbnQgdG8gZGV0ZXJtaW5lIHRoZSBncmFudWxhcml0eSBvZiB0aGF0IHJlbGF0aW9uc2hpcC4gS25vd2luZyB0aGUgcmVsYXRpb25zaGlwIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBtb2R1bGUncyBvdmVyYWxsIHNlY3VyaXR5IHBvc3R1cmUuXG5cbkknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcgYW5kIGxvb2sgZm9yIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBjb25kaXRpb24gaXRzIGluY2x1c2lvbiBvciBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQzOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE3OjUzLjc4ODEzNDEzNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE5NzU1NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9BTURfU0VWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE0Nj1jb25maWcgS1ZNX0FNRFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTc6NTMuOTAwMTIwOTA0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwNjkyMzI5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBLVk0gY29uZmlndXJhdGlvbiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gSSdtIGd1ZXNzaW5nIHRoYXQgbGluZSAxNTYgb3IgdGhlcmVhYm91dHMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJ20gY3VycmVudGx5IGludmVzdGlnYXRpbmcuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBmZWF0dXJlIG9yIGRlcGVuZGVuY3kgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kLCBvciBwZXJoYXBzIGEgYnVnIGZpeCBJJ20gY2hhc2luZyBkb3duIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gS25vd2luZyB0aGUgYXJjaGl0ZWN0dXJlLCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc2V0dGluZ3MgZGlyZWN0bHkgYWZmZWN0aW5nIHg4NiB2aXJ0dWFsaXphdGlvbiBiZWhhdmlvciAtIHRoaW5ncyBsaWtlIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMsIE1TUiBoYW5kbGluZywgb3IgaW50ZXJydXB0IGRlbGl2ZXJ5IG1lY2hhbmlzbXMuIEkgYW50aWNpcGF0ZSB0aGlzIGxpbmUgd2lsbCBlaXRoZXIgYmUgYSByZWxldmFudCBvcHRpb24gZGVmaW5pdGlvbiBpdHNlbGYsIG9yIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIgc2VjdGlvbiBvciBkZXBlbmRlbmN5IHdpdGhpbiB0aGUgS2NvbmZpZyBzdHJ1Y3R1cmUuIFRpbWUgdG8gc2VlIHdoYXQncyB3aGF0IVxuXG5cbiIsIklucHV0VG9rZW5zIjozOTk0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTg6MDQuOTY5MzU5MTA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NixcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0NjpcXHRjb25maWcgS1ZNX0FNRFxcbiAxNDc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gMTQ4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKVxcbiAxNDk6XFx0XFx0aGVscFxcbiAxNTA6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVZcXG4gMTUxOlxcdFxcdCAgKFNWTSkgZXh0ZW5zaW9ucy5cXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTU0OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cXG4gMTU1OlxcdFxcbiAxNTY6XFx0Y29uZmlnIEtWTV9BTURfU0VWXFxuIDE1NzpcXHRcXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbiAxNTg6XFx0XFx0ZGVmYXVsdCB5XFxuIDE1OTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9BTUQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFxcdTAwMjZcXHUwMDI2ICEoS1ZNX0FNRD15IFxcdTAwMjZcXHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXFxuIDE2MTpcXHRcXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG4gMTYyOlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxNjM6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXFxuIDE2NDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4gMTY1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG4gMTY2OlxcdFxcdGhlbHBcXG4gMTY3OlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIGVuY3J5cHRlZCBWTXMgd2hpY2ggdXNlIFNlY3VyZVxcbiAxNjg6XFx0XFx0ICBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFViksIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxcbiAxNjk6XFx0XFx0ICBFbmNyeXB0ZWQgU3RhdGUgKFNFVi1FUyksIGFuZCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGhcXG4gMTcwOlxcdFxcdCAgU2VjdXJlIE5lc3RlZCBQYWdpbmcgKFNFVi1TTlApIHRlY2hub2xvZ2llcyBvbiBBTUQgcHJvY2Vzc29ycy5cXG4gMTcxOlxcdFxcbiAxNzI6XFx0Y29uZmlnIEtWTV9JT0FQSUNcXG4gMTczOlxcdFxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbiAxNzQ6XFx0XFx0ZGVmYXVsdCB5XFxuIDE3NTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9YODZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTg6MDQuOTY5NTU1NTU0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzMDAwMDU0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRlcGVuZGVuY2llcywgRGVwZW5kZW5jaWVzIEV2ZXJ5d2hlcmUhKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoZSBgS1ZNX0FNRF9TRVZgIGZlYXR1cmUsIHdoaWNoIGlzIHJpZ2h0IGluIG15IHdoZWVsaG91c2Ugd2hlbiBkZWFsaW5nIHdpdGggc2VjdXJlIHZpcnR1YWxpemF0aW9uIG9uIEFNRCBoYXJkd2FyZSwgaGFzIGEgZmV3IGNyaXRpY2FsIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCBpdCByZWxpZXMgb24gYEtWTV9BTURgIChvYnZpb3VzbHkpLCBgWDg2XzY0YCAodGhhdCdzIGEgZ2l2ZW4gaW4gdGhpcyBjb250ZXh0KSwgYW5kLCBobW0sIGBDUllQVE9fREVWX1NQX1BTUGAuIE5vdywgYEtWTV9BTURgIGFuZCBgWDg2XzY0YCBJIGNvbXBsZXRlbHkgdW5kZXJzdGFuZCwgdGhleSdyZSBmdW5kYW1lbnRhbCB0byB0aGUgd2hvbGUgc2V0dXAuIEJ1dCBgQ1JZUFRPX0RFVl9TUF9QU1Bg4oCmIHRoYXQgcmVxdWlyZXMgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGNyeXB0byBkZXZpY2Ugb3IgZHJpdmVyIGJyaW5ncyB0byB0aGUgdGFibGUgZm9yIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIHdoZXJlIHRoZSBzZWN1cml0eSBhbmQgaW50ZWdyaXR5IHJlc2lkZS4gV2hhdCdzIHRoZSBsaW5rIHdpdGggdGhlIFBTUCAoUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yKT8gTGV0J3MgZGlnIGludG8gYENSWVBUT19ERVZfU1BfUFNQYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTg6MDguNTk5NTYwNTQyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTY2NjUwNzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc9MjM9Y29uZmlnIENSWVBUT19ERVZfQ0NQX0NSWVBUT1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMzctXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc6Mzg6Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMzktXFx0Ym9vbCBcXFwiUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApIGRldmljZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTg6MTQuMTY2MjIxMTU0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MTg1NjU2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIENDUCBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0aGlua2luZywgXCJUaW1lIHRvIGRpZyBpbnRvIHRoZSBgZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzOC5cIiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBDQ1AgY3J5cHRvIGVuZ2luZS4gSSdtIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhhdCBsaW5lIGJlY2F1c2UgSSB2YWd1ZWx5IHJlY2FsbCBzb21lIGNyaXRpY2FsIHNldHRpbmcgYmVpbmcgZGVmaW5lZCB0aGVyZSAtIG1heWJlIHJlbGF0ZWQgdG8ga2V5IHNpemUsIHN1cHBvcnRlZCBhbGdvcml0aG1zLCBvciBwZXJoYXBzIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIHF1aWNrbHkgemVybyBpbiBvbiBpdCBhbmQgZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3Mgd2hhdC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGNydWNpYWwgZm9yIGFueSBkZWVwZXIgYW5hbHlzaXMgb3IgbW9kaWZpY2F0aW9uIEkgbmVlZCB0byBwZXJmb3JtLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxOTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxODoxNy4wODQ3OTAwMjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdFxcdHNlbGVjdCBDUllQVE9fQVVUSEVOQ1xcbiAgMzE6XFx0XFx0c2VsZWN0IENSWVBUT19SU0FcXG4gIDMyOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU1xcbiAgMzM6XFx0XFx0aGVscFxcbiAgMzQ6XFx0XFx0ICBTdXBwb3J0IGZvciB1c2luZyB0aGUgY3J5cHRvZ3JhcGhpYyBBUEkgd2l0aCB0aGUgQU1EIENyeXB0b2dyYXBoaWNcXG4gIDM1OlxcdFxcdCAgQ29wcm9jZXNzb3IuIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG9mZmxvYWQgb2YgU0hBIGFuZCBBRVMgYWxnb3JpdGhtcy5cXG4gIDM2OlxcdFxcdCAgSWYgeW91IGNob29zZSAnTScgaGVyZSwgdGhpcyBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2NwX2NyeXB0by5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQXFxuICAzOTpcXHRcXHRib29sIFxcXCJQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkgZGV2aWNlXFxcIlxcbiAgNDA6XFx0XFx0ZGVmYXVsdCB5XFxuICA0MTpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfQ0NQX0REIFxcdTAwMjZcXHUwMDI2IFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBBTURfSU9NTVVcXG4gIDQyOlxcdFxcdHNlbGVjdCBQQ0lfVFNNIGlmIFBDSVxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0IFByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEFNRCBQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkuXFxuICA0NTpcXHRcXHQgVGhlIFBTUCBpcyBhIGRlZGljYXRlZCBwcm9jZXNzb3IgdGhhdCBwcm92aWRlcyBzdXBwb3J0IGZvciBrZXlcXG4gIDQ2OlxcdFxcdCBtYW5hZ2VtZW50IGNvbW1hbmRzIGluIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgbW9kZSxcXG4gIDQ3OlxcdFxcdCBhbG9uZyB3aXRoIHNvZnR3YXJlLWJhc2VkIFRydXN0ZWQgRXhlY3V0aW9uIEVudmlyb25tZW50IChURUUpIHRvXFxuICA0ODpcXHRcXHQgZW5hYmxlIHRoaXJkLXBhcnR5IHRydXN0ZWQgYXBwbGljYXRpb25zLlxcbiAgNDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE4OjE3LjA4NDk0OTY2NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTUzMTQwOTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhIGFuZCB0aGlzIGlzIGEgYnJpZWYgbWVudGFsIG5vdGU6XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBWZXJpZmljYXRpb24qKlxuXG5SaWdodCwgc28gYENSWVBUT19ERVZfU1BfUFNQYCBpcyBjb250aW5nZW50IG9uIGBDUllQVE9fREVWX0NDUF9ERGAsIGBYODZfNjRgLCBhbmQgYEFNRF9JT01NVWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgbGlrZWx5IGEgc2VjdXJpdHktZm9jdXNlZCBtb2R1bGUgb3Igc3Vic3lzdGVtIHRoYXQgcmVxdWlyZXMgY2VydGFpbiBoYXJkd2FyZSBhbmQgdW5kZXJseWluZyBjcnlwdG9ncmFwaGljIHNlcnZpY2VzLiBOb3csIGdpdmVuIHRoYXQgZGVwZW5kZW5jeSBjaGFpbiwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHZlcmlmeSB0aGUgc3RhdGUgb2YgYENSWVBUT19ERVZfQ0NQX0REYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb3JlIGNvbXBvbmVudCBpdCByZWxpZXMgdXBvbiBpcyBjb25maWd1cmVkIGNvcnJlY3RseSwgYmVjYXVzZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGF0IGNvbXBvbmVudCBkaXJlY3RseSBkaWN0YXRlcyB0aGUgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb25zIG9mIHRoZSBjb21wb25lbnRzIHdoaWNoIGFyZSBkZXBlbmRlbnQgdXBvbiBpdC4gSSBtdXN0IGNoZWNrIG9uIGBDUllQVE9fREVWX0NDUF9ERGAgdG8gc2VlIGlmIHRoYXQncyBjb25maWd1cmVkIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzIwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxODoyMC4wMzgwOTQ2NTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzYxNzUyNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENSWVBUT19ERVZfQ0NQX0REXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjI6Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxODoyNS4wNzQyNzYwNDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ3MjUwMjQ0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENyeXB0byBMYW5kc2NhcGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEknbSBmb2N1c2luZyBvbiB0aGUgYGRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMi4gVGhpcyBwcm9iYWJseSBtZWFucyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIENDUCBjcnlwdG8gZGV2aWNlIGRyaXZlci4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgYXZhaWxhYmxlIGFuZCBob3cgaXQncyBjb250cm9sbGVkLiBJcyBpdCBhIGNvcmUgbW9kdWxlLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYz8gVGhlIEtjb25maWcgZmlsZSBpcyB0aGUga2V5IHRvIHRoYXQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIGxvdCBvZiBgY29uZmlnYCBhbmQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgdG8gd29yayBvdXQgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIGRlcGVuZGVuY2llcy4gSSB3aWxsIGxpa2VseSBiZSB0cnlpbmcgdG8gZ2V0IGEgZ3Jhc3Agb2YgaXRzIHBsYWNlIGluIHRoZSBzeXN0ZW0ncyBsYXJnZXIgY3J5cHRvZ3JhcGhpYyBlY29zeXN0ZW0uIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA3MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE4OjMzLjU0Njc4MTY3MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBDUllQVE9fREVWX0NDUF9ERFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNlY3VyZSBQcm9jZXNzb3IgZGV2aWNlIGRyaXZlclxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgfHwgQVJNNjRcXG4gICA1OlxcdFxcdGRlZmF1bHQgbVxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBQcm92aWRlcyBBTUQgU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyLlxcbiAgIDg6XFx0XFx0ICBJZiB5b3UgY2hvb3NlICdNJyBoZXJlLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjY3AuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBDUllQVE9fREVWX1NQX0NDUFxcbiAgMTE6XFx0XFx0Ym9vbCBcXFwiQ3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBkZXZpY2VcXFwiXFxuICAxMjpcXHRcXHRkZWZhdWx0IHlcXG4gIDEzOlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfREQgXFx1MDAyNlxcdTAwMjYgRE1BREVWSUNFU1xcbiAgMTQ6XFx0XFx0c2VsZWN0IEhXX1JBTkRPTVxcbiAgMTU6XFx0XFx0c2VsZWN0IERNQV9FTkdJTkVcXG4gIDE2OlxcdFxcdHNlbGVjdCBDUllQVE9fU0hBMVxcbiAgMTc6XFx0XFx0c2VsZWN0IENSWVBUT19TSEEyNTZcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgUHJvdmlkZXMgdGhlIHN1cHBvcnQgZm9yIEFNRCBDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIChDQ1ApIGRldmljZVxcbiAgMjA6XFx0XFx0ICB3aGljaCBjYW4gYmUgdXNlZCB0byBvZmZsb2FkIGVuY3J5cHRpb24gb3BlcmF0aW9ucyBzdWNoIGFzIFNIQSwgQUVTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE4OjMzLjU0Njk0NTExMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjM1NTEyNTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiB0aGlzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUgYXJlIGBLVk1fQU1EYCwgYEtWTV9BTURfU0VWYCwgYENSWVBUT19ERVZfQ0NQX0REYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYW5kIGBBTURfSU9NTVVgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGNvZGUgcGF0aCBldmVuICpyZWFjaGFibGUqIGluIGEgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnQ/XG5cblNFViwgb2J2aW91c2x5LCBuZWNlc3NpdGF0ZXMgQU1EIGhhcmR3YXJlIHdpdGggU0VWIGNhcGFiaWxpdGllcy4gV2Uga25vdyB0aGF0IFN5emthbGxlciBpcyBkZXBsb3llZCBvbiBHQ0UsIGFuZCBHQ0UgKmRvZXMqIG9mZmVyIEFNRCBpbnN0YW5jZXMgd2l0aCBTRVYgc3VwcG9ydCDigJMgc3BlY2lmaWNhbGx5IHRoZSBOMkQgYW5kIEMyRCBmYW1pbGllcyBjb21lIHRvIG1pbmQuIFRoZSBjcnVjaWFsIHBvaW50IGlzLCBkb2VzIFN5emthbGxlciB1dGlsaXplIHRob3NlIEFNRCBpbnN0YW5jZXM/IFRoZSBhbnN3ZXIgaXMgeWVzOyBTeXprYWxsZXIgZG9lcyBsZXZlcmFnZSBzb21lIEFNRCBoYXJkd2FyZSBmb3IgdGVzdGluZy5cblxuV2UgYWxzbyBrbm93IHRoYXQgUUVNVSBjYW4gZW11bGF0ZSBjZXJ0YWluIGFzcGVjdHMgb2YgaGFyZHdhcmUsIGJ1dCBTRVYgZnVuZGFtZW50YWxseSBuZWVkcyBoYXJkd2FyZSBzdXBwb3J0IHRocm91Z2ggS1ZNLiBUaGUga2V5IHBhcnQgb2YgdGhpcyBwYXRjaCB0b3VjaGVzIGBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NgIGFuZCBgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWVgLCB3aGljaCBhcmUgZGlyZWN0bHkgaW52b2tlZCBieSBgc2V2X2RiZ19kZWNyeXB0X3Nsb3dgIGFuZCBgc2V2X2RiZ19lbmNyeXB0X3Nsb3dgLiBTbywgdGhlIG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gTGV0J3MgZGlnIGRlZXBlciBhbmQgY2hlY2sgd2hlcmUgYHNldl9kYmdfZGVjcnlwdF9zbG93YCBnZXRzIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgb3ZlcmFsbCBjb2RlYmFzZS4gVGhhdCB3aWxsIHBhaW50IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0IGFuZCBhdHRhY2sgc3VyZmFjZSBvZiB0aGlzIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU3OSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE4OjM5Ljc4MjQ2MDYzNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NDY3NTExMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfZGJnX2RlY3J5cHRfc2xvd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTI5Nz1zdGF0aWMgdm9pZCBzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZSh2b2lkICpidWYpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDQtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzA1OnN0YXRpYyBpbnQgc2V2X2RiZ19kZWNyeXB0X3Nsb3coc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyYyxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDYtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnNyY19wLCB1bnNpZ25lZCBsb25nIGRzdCxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTM2Mz1zdGF0aWMgaW50IHNldl9kYmdfY3J5cHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTE0MjMtXFx0XFx0ZWxzZSBpZiAoY21kID09IEtWTV9TRVZfREJHX0RFQ1JZUFQpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxNDI0OlxcdFxcdFxcdHJldCA9IHNldl9kYmdfZGVjcnlwdF9zbG93KGt2bSwgc3JjLCBzcmNfcCwgZHN0LFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQyNS1cXHRcXHRcXHRcXHRcXHRcXHQgICBsZW4sIFxcdTAwMjZhcmdwLVxcdTAwM2VlcnJvcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE4OjQxLjE0NzE0MzMwOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mjc2MTcxOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUgYXMgYSBmaWVsZCBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgc2V2X2RiZ19jcnlwdCBGdW5jdGlvbioqXG5cblJpZ2h0LCBzbyBgc2V2X2RiZ19jcnlwdGAuLi4gd2hlcmUncyB0aGF0IGJlaW5nIHVzZWQgYWdhaW4/IE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIGBzZXZfaXNzdWVfY21kYCBvciBzb21ldGhpbmcgZnVuY3Rpb25hbGx5IHNpbWlsYXIsIHNvbWV0aGluZyBpbnZvbHZlZCB3aXRoIGlzc3VpbmcgY29tbWFuZHMgdG8gdGhlIFNFViAoU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbikgaGFyZHdhcmUsIG9yIGludGVyYWN0aW5nIHdpdGggdGhlIGNyeXB0byBlbmdpbmVzLiBCdXQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKnVuZGVyc3RhbmQqIHRoZSBjb250ZXh0IG9mIGl0cyBjYWxscy4gSSBzaG91bGQgc3RhcnQgYnkgZGl2aW5nIGludG8gdGhlIGBzZXZfZGJnX2NyeXB0YCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgKmhvdyogdGhpcyBpcyB1c2VkLiBUaW1lIHRvIGNoZWNrIHRoZSBzb3VyY2UsIGNyb3NzLXJlZmVyZW5jZSB0aGUgY2FsbCBzaXRlcywgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIGZsb3cgdGVsbHMgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxODo0OS40MjMzMTgwNzlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTI5NzUzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfZGJnX2NyeXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMjQwPXN0YXRpYyBpbnQgc2V2X2lzc3VlX2RiZ19jbWQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyY19wYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI1NS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEyNTY6c3RhdGljIHZvaWQgKnNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBfX3ZhLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI1Ny1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBsb25nICpwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI5Ni1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEyOTc6c3RhdGljIHZvaWQgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUodm9pZCAqYnVmKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI5OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzMDU9c3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzEzLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMxNDpcXHRidWYgPSBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3JjX3AsIHNyYywgbGVuLCBcXHUwMDI2c3JjX3BhLCBcXHUwMDI2bnJfYnl0ZXMpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMxNS1cXHRpZiAoIWJ1ZilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMyNS1vdXQ6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzI2OlxcdHNldl9kYmdfY3J5cHRfc2xvd19mcmVlKGJ1Zik7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzI3LVxcdHJldHVybiByO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMzMwPXN0YXRpYyBpbnQgc2V2X2RiZ19lbmNyeXB0X3Nsb3coc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyYyxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMzOS1cXHQvKiBEZWNyeXB0IHRoZSBfZGVzdGluYXRpb25fIHRvIGRvIGEgUk1XIG9uIHBsYWludGV4dC4gKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEzNDA6XFx0YnVmID0gc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKGRzdF9wLCBkc3QsIGxlbiwgXFx1MDAyNmRzdF9wYSwgXFx1MDAyNm5yX2J5dGVzKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNDEtXFx0aWYgKCFidWYpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNTgtb3V0OlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTM1OTpcXHRzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZShidWYpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2MC1cXHRyZXR1cm4gcjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2Mi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEzNjM6c3RhdGljIGludCBzZXZfZGJnX2NyeXB0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2NC1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGNtZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjY0Mj1pbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcwMC1cXHRjYXNlIEtWTV9TRVZfREJHX0VOQ1JZUFQ6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNzAxOlxcdFxcdHIgPSBzZXZfZGJnX2NyeXB0KGt2bSwgXFx1MDAyNnNldl9jbWQsIHNldl9jbWQuaWQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcwMi1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTg6NDkuNjMyNjI0NjExWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDYzNzY4MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBzZXZfZGJnX2NyeXB0YCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYHNldl9kYmdfY3J5cHRgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIGBzZXZfbWVtX2VuY19pb2N0bGAgZnVuY3Rpb24sIHdoaWNoIGlzIGl0c2VsZiBwYXJ0IG9mIHRoZSBLVk0gaW9jdGwgaGFuZGxpbmcuIFRoYXQgbWVhbnMsIGFuZCB0aGlzIGlzIGtleSwgdXNlcnNwYWNlIGNhbiBkZWZpbml0ZWx5IHJlYWNoIGl0IHRocm91Z2ggdGhlIGBLVk1fU0VWX0RCR19ERUNSWVBUYCBhbmQgYEtWTV9TRVZfREJHX0VOQ1JZUFRgIGlvY3Rscy4gQ29uc2lkZXJpbmcgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBmcmVlZCB3aXRoaW4gdGhlIEtWTSBTRVYgaW9jdGwgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGltcGFjdGluZyBtZW1vcnkgYWxsb2NhdGlvbi9mcmVlaW5nLCAqeWVzKiwgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIFdlJ3JlIGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgYXJlYSBmb3IgaW50ZXJlc3RpbmcgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jYCBhbmQgYHNldl9kYmdfY3J5cHRfc2xvd19mcmVlYC4gVGhlIHBhdGNoIGRpY3RhdGVzIHRoYXQgdGhleSBub3cgYWxsb2NhdGUgYW5kIGZyZWUgYSBmdWxsIHBhZ2Ugd2hlbiBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgcmV0dXJucyB0cnVlLiBUaGlzIGlzIHNwZWNpZmljYWxseSB0byBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBhY2Nlc3MgaXNzdWVzIHRvIHRoZSBwYWdlIHRoYXQgbWlnaHQgb2NjdXIgZHVyaW5nIFJNUCB1cGRhdGVzIGZyb20gdGhlIFBTUCBkcml2ZXIuIFRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhcmUgc2lnbmlmaWNhbnQgYW5kIG11c3QgYmUgY2FyZWZ1bGx5IGFuYWx5emVkLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gV2UgZGVmaW5pdGVseSBuZWVkIGBLVk1fQU1EYCwgYEtWTV9BTURfU0VWYCwgYENSWVBUT19ERVZfQ0NQX0REYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYW5kIGBBTURfSU9NTVVgIGVuYWJsZWQuIEhhbmcgb24uLi4gbGV0J3MgZG91YmxlIGNoZWNrIHRob3NlIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24uIEFoLCB5ZXMsIGBLVk1fQU1EX1NFVmAgaXMgZGVwZW5kZW50IG9uIGBDUllQVE9fREVWX1NQX1BTUGAgYW5kIHRoZSBleGNsdXNpb24gb2YgYChLVk1fQU1EPXkgXHUwMDI2XHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pYC4gVGh1cywgd2UgcmVxdWlyZSBgQ1JZUFRPX0RFVl9DQ1BfREQ9eWAgYW5kIGBDUllQVE9fREVWX1NQX1BTUD15YC4gV2UgYWxzbyBrbm93IHRoYXQgYEFNRF9JT01NVWAgaXMgY3J1Y2lhbCBmb3IgYENSWVBUT19ERVZfU1BfUFNQYC4gVGhlcmVmb3JlLCBiZWZvcmUgZnV6emluZywgaXQncyB2aXRhbCBJIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEFNRF9JT01NVWAgdG8gZW5zdXJlIGNvbXBsZXRlIGNvdmVyYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjY2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE5OjAwLjY5NjM5NjY5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3ODEwODU5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQU1EX0lPTU1VXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTItIyBBTUQgSU9NTVUgc3VwcG9ydFxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6Mzpjb25maWcgQU1EX0lPTU1VXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00LVxcdGJvb2wgXFxcIkFNRCBJT01NVSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zMi1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjMzOmNvbmZpZyBBTURfSU9NTVVfSU9NTVVGRFxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMzQtXFx0Ym9vbCBcXFwiRW5hYmxlIElPTU1VRkQgZmVhdHVyZXMgZm9yIEFNRCBJT01NVSAoRVhQRVJJTUVOVEFMKVxcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDItXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzo0Mzpjb25maWcgQU1EX0lPTU1VX0RFQlVHRlNcXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQ0LVxcdGJvb2wgXFxcIkVuYWJsZSBBTUQgSU9NTVUgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE5OjA1LjM3NDUxMTU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NDEyOTYyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBBTUQgSU9NTVUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgQU1EIElPTU1VIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZ2AgZmlsZS4gSSdtIGFzc3VtaW5nIHRoYXQncyB0aGUgY2Fub25pY2FsIGxvY2F0aW9uIGZvciB0aGVzZSBzb3J0cyBvZiBkZWZpbml0aW9ucy4gTGV0J3Mgc3RhcnQgYXJvdW5kIGxpbmUgMywgd2hpY2ggaXMgdXN1YWxseSB3aGVyZSBhIGdvb2Qgb3ZlcnZpZXcgb3IgZ2VuZXJhbCBkZXNjcmlwdGlvbiBiZWdpbnMsIG9yIGF0IGxlYXN0IHRoZSB0b3AtbGV2ZWwgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcxOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE5OjA4LjExNTgxMDk3NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ1MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCMgQU1EIElPTU1VIHN1cHBvcnRcXG4gICAzOlxcdGNvbmZpZyBBTURfSU9NTVVcXG4gICA0OlxcdFxcdGJvb2wgXFxcIkFNRCBJT01NVSBzdXBwb3J0XFxcIlxcbiAgIDU6XFx0XFx0c2VsZWN0IFNXSU9UTEJcXG4gICA2OlxcdFxcdHNlbGVjdCBQQ0lfTVNJXFxuICAgNzpcXHRcXHRzZWxlY3QgUENJX0FUU1xcbiAgIDg6XFx0XFx0c2VsZWN0IFBDSV9QUklcXG4gICA5OlxcdFxcdHNlbGVjdCBQQ0lfUEFTSURcXG4gIDEwOlxcdFxcdHNlbGVjdCBJUlFfTVNJX0xJQlxcbiAgMTE6XFx0XFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbiAgMTI6XFx0XFx0c2VsZWN0IElPTU1VX0FQSVxcbiAgMTM6XFx0XFx0c2VsZWN0IElPTU1VX0lPVkFcXG4gIDE0OlxcdFxcdHNlbGVjdCBJT01NVV9TVkFcXG4gIDE1OlxcdFxcdHNlbGVjdCBJT01NVV9JT1BGXFxuICAxNjpcXHRcXHRzZWxlY3QgSU9NTVVGRF9EUklWRVIgaWYgSU9NTVVGRFxcbiAgMTc6XFx0XFx0c2VsZWN0IEdFTkVSSUNfUFRcXG4gIDE4OlxcdFxcdHNlbGVjdCBJT01NVV9QVFxcbiAgMTk6XFx0XFx0c2VsZWN0IElPTU1VX1BUX0FNRFYxXFxuICAyMDpcXHRcXHRzZWxlY3QgSU9NTVVfUFRfWDg2XzY0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE5OjA4LjExNzk2MDg4NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjkwNDI4MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIG1vZHVsZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXQncyBsb2NhdGVkIGluIGBkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnYCwgd2hpY2ggc3VnZ2VzdHMgaXQncyBBTUQtc3BlY2lmaWMgZm9yIElPTU1VIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBuYWlsIGRvd24gZXhhY3RseSB3aGF0J3MgcmVxdWlyZWQgdG8gYnVpbGQgYW5kIGVuYWJsZSB0aGlzIHRoaW5nLiBJdCBzZWVtcyBwcmV0dHkgc2VsZi1jb250YWluZWQsIG5vdCByZXF1aXJpbmcgYW55dGhpbmcgdHJ1bHkgKnN0cmljdCosIGJ1dCBJIHNob3VsZCBkb3VibGUgY2hlY2sgaWYgaXQgaW1wbGljaXRseSByZWxpZXMgb24gYFg4Nl82NGAgZ2l2ZW4gaXRzIGxvY2F0aW9uLCB0aG91Z2ggaXQgbWlnaHQgYmUgaW5jbHVkZWQgYnkgYSBtb3JlIGdlbmVyYWwgaW9tbXUgS2NvbmZpZy5cblxuTGV0J3Mgc3RhcnQgYnkgbGlzdGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgdGhpbmsgd2lsbCBiZSBuZWVkZWQuIEknbSBnb2luZyB0byBlbmFibGU6XG5cbiogICBgS1ZNX0FNRGBcbiogICBgS1ZNX0FNRF9TRVZgXG4qICAgYENSWVBUT19ERVZfQ0NQX0REYFxuKiAgIGBDUllQVE9fREVWX1NQX1BTUGBcbiogICBgQU1EX0lPTU1VYFxuXG5CdXQgaG9sZCBvbiwgYEtWTV9BTURgICpkb2VzKiBkZXBlbmQgb24gYEtWTWAuIFJpZ2h0LCB0aGF0J3MgY3J1Y2lhbC4gSSBjYW4ndCBvdmVybG9vayB0aGF0LiBTbywgSSBoYXZlIHRvIG1ha2Ugc3VyZSBgS1ZNYCBpcyBjb25maWd1cmVkLCB3aGljaCBJIHByb2JhYmx5IGFscmVhZHkgZGlkLiBOb3csIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBkZXBlbmRlbmNpZXMgZm9yIGBLVk1gLCBqdXN0IHRvIGJlIGNlcnRhaW4gSSBoYXZlbid0IG92ZXJsb29rZWQgYW55IG90aGVyIGltcGxpY2l0IHJlcXVpcmVtZW50cyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkIGJlZm9yZSBJIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE2MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE5OjEyLjQwODM5MjA1NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4NDAyNTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTk6MTIuNjE2ODAwOTk4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODIzNDAzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgS2VybmVsJ3MgVmlydHVhbGl6YXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBLVk1gIOKAkyBpdCdzIGRlZmluaXRlbHkgYSB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2d5LCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZXJlZm9yZSwgbXkgaW1tZWRpYXRlIGZvY3VzIGhhcyB0byBzaGlmdCB0byB0aGUgY29yZSBgVklSVFVBTElaQVRJT05gIGZyYW1ld29yayB3aXRoaW4gdGhlIGtlcm5lbC4gV2hlcmUgd291bGQgSSBleHBlY3QgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGF0PyBSaWdodCwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGVzIGFyZSB0aGUgcGxhY2UgdG8gc3RhcnQuIFNwZWNpZmljYWxseSwgSSdsbCBkcmlsbCBkb3duIGludG8gYGFyY2gveDg2L0tjb25maWdgIHRvIHNlZSBob3cgYFZJUlRVQUxJWkFUSU9OYCBpcyBoYW5kbGVkIHRoZXJlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLCB0aGUgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGxpZmVibG9vZCBvZiB0aGlzIHNvcnQgb2YgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxOToxNS42OTkxNzI5MDRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1Nzg1MzAzOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZJUlRVQUxJWkFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE5OjE1Ljk1NzAzNTAxMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTgxNjY5MjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgS2NvbmZpZyBMb2NhdGlvbnMgZm9yIFZJUlRVQUxJWkFUSU9OKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhlIGBWSVJUVUFMSVpBVElPTmAgb3B0aW9uIGlzIGRlZmluZWQgaW4gdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCB3b3VsZCBiZSB3aXRoaW4gdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZGlyZWN0b3J5LCBnaXZlbiB0aGF0IHdlIGFyZSB0YWxraW5nIGFib3V0IHZpcnR1YWxpemF0aW9uIG9uIHg4NiwgYW5kIEtWTSBpcyBhIGNvbW1vbiB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2d5LiBIb3dldmVyLCBteSBndXQgaXMgdGVsbGluZyBtZSBpdCBtaWdodCBhbHNvIHJlc2lkZSBpbiBhIGhpZ2hlci1sZXZlbCBgYXJjaC94ODYvS2NvbmZpZ2AgZmlsZSBvciBwZXJoYXBzIHNvbWV0aGluZyByZWxhdGVkIHRvIHZob3N0LCBzbyBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBpcyBhbHNvIGEgcG9zc2liaWxpdHkuIEl0IGNvdWxkIGV2ZW4gYmUgc3ByZWFkIGFjcm9zcyBtdWx0aXBsZSBmaWxlcy4gVGhlIGJlc3QgYXBwcm9hY2ggaXMgdG8gYmUgY29tcHJlaGVuc2l2ZS4gTGV0J3MgZmlyZSB1cCBhIGBncmVwYCBjb21tYW5kIHRvIHNlYXJjaCB0aGUgZW50aXJlIHNvdXJjZSB0cmVlIGZvciB0aGUgc3RyaW5nIGBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OYC4gVGhpcyB3aWxsIHF1aWNrbHkgcmV2ZWFsIGFsbCB0aGUgbG9jYXRpb25zIHdoZXJlIGl0J3MgZGVmaW5lZCBhbmQgaG9wZWZ1bGx5IHBpbnBvaW50IHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gZmlsZXMgSSBuZWVkIHRvIGV4YW1pbmUuIEknbGwgbmVlZCB0byBrbm93IHdoaWNoIGZpbGUgZGVmaW5lcyBpdCwgYW5kIGlkZWFsbHksIEknbGwgcmV2aWV3IGl0cyBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA4NywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE5OjIwLjUzODcwODMxOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA1OTYxMzI3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnPTY9c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNy1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctOS1cXHRib29sIFxcXCJWaXJ0dWFsaXphdGlvblxcXCJcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnPTY9c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTctXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctOS1cXHRib29sIFxcXCJWaXJ0dWFsaXphdGlvblxcXCJcXG4tLVxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZz01PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL21pcHMva3ZtL0tjb25maWctNi1cXG5hcmNoL21pcHMva3ZtL0tjb25maWc6NzptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTgtXFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Nj1zb3VyY2UgXFxcInZpcnQva3ZtL0tjb25maWdcXFwiXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTctXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05LVxcdGJvb2wgXFxcIlZpcnR1YWxpemF0aW9uXFxcIlxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZz02PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTctXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzo4Om1lbnVjb25maWcgVklSVFVBTElaQVRJT05cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTktXFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc9NT1zb3VyY2UgXFxcInZpcnQva3ZtL0tjb25maWdcXFwiXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjc6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy04LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTY9c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctOS1cXHRib29sIFxcXCJWaXJ0dWFsaXphdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTk6MjQuNTk4MzI3OTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM1NTY1MjM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBWaXJ0dWFsaXphdGlvbiBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGltcGxlbWVudGluZyBgVklSVFVBTElaQVRJT05gLiBUaW1lIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQncyBzZWUuLi4gSSdsbCBuZWVkIGBWSVJUVUFMSVpBVElPTmAgb2J2aW91c2x5LCBmb2xsb3dlZCBieSBgS1ZNYC4gTm93LCBzaW5jZSBJJ20gZGVhbGluZyB3aXRoIEFNRCBoYXJkd2FyZSwgSSBzaG91bGQgY29uc2lkZXIgYEtWTV9BTURgLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBgS1ZNX0FNRF9TRVZgIGZvciBzZWN1cmUgZW5jcnlwdGVkIHZpcnR1YWxpemF0aW9uLiBBbmQgbGV0J3Mgbm90IGZvcmdldCB0aGUgY3J5cHRvIGRldmljZSBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgYENSWVBUT19ERVZfQ0NQX0REYCBhbmQgYENSWVBUT19ERVZfU1BfUFNQYC4gRmluYWxseSwgZm9yIHByb3BlciBJT01NVSBzdXBwb3J0LCBJIHNob3VsZCBlbmFibGUgYEFNRF9JT01NVWAuXG5cblJpZ2h0LCB0aGF0J3MgdGhlIGNvcmUgc2V0LiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW4gb3JkZXIuIGBLVk1gIGl0c2VsZiBoYXMgYSBidW5jaCBvZiBwcmVyZXF1aXNpdGVzIOKAkyBgSElHSF9SRVNfVElNRVJTYCwgYFg4Nl9MT0NBTF9BUElDYCwgYFBSRUVNUFRfTk9USUZJRVJTYCwgYE1NVV9OT1RJRklFUmAsIGBIQVZFX0tWTWAsIGBFVkVOVEZEYCwgYW5kIGBJUlFfQllQQVNTX01BTkFHRVJgLiBNb3N0IG9mIHRoZXNlIHNob3VsZCBiZSBzdGFuZGFyZCBhbmQgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLCBJJ2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2U6IHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUuIFRoYXQnbGwgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgb24gd2hhdCdzIHJlcXVpcmVkIGZvciBhIGNsZWFuIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAxNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxOTozMC45NTM5ODM3NDRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9NU0lcXG4gIDQxOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXFxuICA0MjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fTk9fUE9MTFxcbiAgNDM6XFx0XFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXFxuICA0NDpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxuICA0NTpcXHRcXHRzZWxlY3QgS1ZNX1ZGSU9cXG4gIDQ2OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9QTV9OT1RJRklFUiBpZiBQTVxcbiAgNDc6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxuICA0ODpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbiAgNDk6XFx0XFx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXFxuICA1MDpcXHRcXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgS1ZNXFxuICA1MzpcXHRcXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbiAgNTQ6XFx0XFx0ZGVwZW5kcyBvbiBYODZfTE9DQUxfQVBJQ1xcbiAgNTU6XFx0XFx0aGVscFxcbiAgNTY6XFx0XFx0ICBTdXBwb3J0IGhvc3RpbmcgZnVsbHkgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMgdXNpbmcgaGFyZHdhcmVcXG4gIDU3OlxcdFxcdCAgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gIFlvdSB3aWxsIG5lZWQgYSBmYWlybHkgcmVjZW50XFxuICA1ODpcXHRcXHQgIHByb2Nlc3NvciBlcXVpcHBlZCB3aXRoIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuIFlvdSB3aWxsIGFsc29cXG4gIDU5OlxcdFxcdCAgbmVlZCB0byBzZWxlY3Qgb25lIG9yIG1vcmUgb2YgdGhlIHByb2Nlc3NvciBtb2R1bGVzIGJlbG93LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxOTozMC45NTQxNzM3NzRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2MTQ0OTI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gZ2V0dGluZyBgS1ZNYCB3b3JraW5nIG9wdGltYWxseSwgYW5kIGl0J3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBgWDg2X0xPQ0FMX0FQSUNgIGlzIGEgY29yZSBkZXBlbmRlbmN5LiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGZ1bmRhbWVudGFsIHRvIGhvdyB0aGUgQ1BVIGludGVyYWN0cyB3aXRoIGludGVycnVwdHMgYW5kIHZpcnR1YWxpemF0aW9uLiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBjb25maWdzIGVuYWJsZWQuIFRoYXQncyBgVklSVFVBTElaQVRJT05gLCBgS1ZNYCwgYEtWTV9BTURgLCBgS1ZNX0FNRF9TRVZgLCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBhbmQgYENSWVBUT19ERVZfU1BfUFNQYC4gVGhlIEFNRC1zcGVjaWZpYyBvbmVzIGFyZSBvYnZpb3VzbHkgY3J1Y2lhbCBmb3IgbXkgc2V0dXAsIGFuZCBgQU1EX0lPTU1VYCBpcyBhIG11c3QuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBzdXNwZWN0IHNvbWUgb2YgdGhlIGNyeXB0byBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBpbnRlci1yZWxhdGVkLiBJIHdhbnQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ1JZUFRPX0RFVl9DQ1BfRERgLiBMZXQgbWUgZGlnIGludG8gdGhvc2Ugbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg2MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE5OjM1LjIxNTYyNzExOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBDUFVfU1VQX0FNRCB8fCBBUk02NFxcbiAgIDU6XFx0XFx0ZGVmYXVsdCBtXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFByb3ZpZGVzIEFNRCBTZWN1cmUgUHJvY2Vzc29yIGRldmljZSBkcml2ZXIuXFxuICAgODpcXHRcXHQgIElmIHlvdSBjaG9vc2UgJ00nIGhlcmUsIHRoaXMgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNjcC5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIENSWVBUT19ERVZfU1BfQ0NQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjE5OjM1LjIxNTcyOTg0OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTUyOTc1NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFByb2Nlc3NvciBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHN5c3RlbSBjb25maWd1cmF0aW9uLiBUaGUgbG9naWMgaGluZ2VzIG9uIHRoZSBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlLiBJdCAqcmVhbGx5KiBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUgZGVhbGluZyB3aXRoIGFuIEFNRCBDUFUgb3IgYW4gQVJNNjQgb25lLiBUaGF0IGBDUFVfU1VQX0FNRCB8fCBBUk02NGAgY29uZGl0aW9uIGlzIHRoZSBrZXkuIEFuZCwgKm9mIGNvdXJzZSosIGBDUFVfU1VQX0FNRGAgaXMgcHJldHR5IG11Y2ggdGhlIGRlZmF1bHQgZm9yIGFueSBzdGFuZGFyZCB4ODYgc2V0dXAuIFdlIGNhbiBwcm9iYWJseSBtYWtlIHRoYXQgYXNzdW1wdGlvbi5cblxuTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgSU9NTVVzLiBJcyB0aGVyZSBhbnkgZGVwZW5kZW5jeSB0aWVkIHRvIGBBTURfSU9NTVVgIHRoYXQgbmVlZHMgdG8gYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uPyBJIHdvbmRlciBpZiB0aGVyZSBpcyBhbiBpbnRlcmFjdGlvbj8gSSBzaG91bGQgZXhwbG9yZSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM0MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTk6MzkuMTY4NzA4MTE5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCMgQU1EIElPTU1VIHN1cHBvcnRcXG4gICAzOlxcdGNvbmZpZyBBTURfSU9NTVVcXG4gICA0OlxcdFxcdGJvb2wgXFxcIkFNRCBJT01NVSBzdXBwb3J0XFxcIlxcbiAgIDU6XFx0XFx0c2VsZWN0IFNXSU9UTEJcXG4gICA2OlxcdFxcdHNlbGVjdCBQQ0lfTVNJXFxuICAgNzpcXHRcXHRzZWxlY3QgUENJX0FUU1xcbiAgIDg6XFx0XFx0c2VsZWN0IFBDSV9QUklcXG4gICA5OlxcdFxcdHNlbGVjdCBQQ0lfUEFTSURcXG4gIDEwOlxcdFxcdHNlbGVjdCBJUlFfTVNJX0xJQlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxOTozOS4xNjg4MDIzOTlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyNjUzMTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBhIEJvb2xlYW4gQ2hhbmdlKipcblxuT2theSwgc28gaXQncyBqdXN0IGEgYm9vbGVhbiwgaW5pdGlhbGx5LiBCdXQgYXMgd2Uga25vdywgZXZlbiBzZWVtaW5nbHkgc2ltcGxlIGNoYW5nZXMgY2FuIHJpcHBsZSBvdXR3YXJkcy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIHNjb3BlIG9mIHRoaXMgbW9kaWZpY2F0aW9uLiBJIG5lZWQgdG8gdHJhY2UgaXRzIHBhdGggdGhyb3VnaCB0aGUgY29kZS5cblxuVGhlIGZvY3VzIGlzIG9uIGhvdyB0aGlzIGJvb2wgYWZmZWN0cyB0aGUgYHNldl9kYmdfY3J5cHRgIGZhbWlseSwgc3BlY2lmaWNhbGx5IHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZnVuY3Rpb25zLiBJJ3ZlIGlkZW50aWZpZWQgYHNldl9kYmdfY3J5cHRfc2xvd19hbGxvY2AgYW5kIGBzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZWAsIGJvdGggbWFya2VkIGFzIHN0YXRpYywgYXMgdGhlIGtleSB0YXJnZXRzLiBUaGV5IGFyZSBjYWxsZWQgZnJvbSB0aGUgYWxzbyBzdGF0aWMgYHNldl9kYmdfZGVjcnlwdF9zbG93YCBhbmQgYHNldl9kYmdfZW5jcnlwdF9zbG93YC4gVGhvc2UgdHdvIGZ1bmN0aW9ucywgaW4gdHVybiwgYXJlIGNhbGxlZCBieSBgc2V2X2RiZ19jcnlwdGAsIHdoaWNoIGlzIGl0c2VsZiBzdGF0aWMuXG5cbk5vdyBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogYHNldl9kYmdfY3J5cHRgIGlzIGNhbGxlZCBieSBgc2V2X21lbV9lbmNfaW9jdGxgLiBUaGUgY3JpdGljYWwgcG9pbnQgaGVyZSBpcyB0aGF0IGBzZXZfbWVtX2VuY19pb2N0bGAgaXMgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vdCBzdGF0aWMuIFRoZXJlZm9yZSwgaXQncyB0aGUgZW50cnkgcG9pbnQgdG8gdGhpcyB3aG9sZSBjaGFpbi4gVGhlIGJvb2xlYW4gY2hhbmdlIHBvdGVudGlhbGx5IGFmZmVjdHMgZnVuY3Rpb25zIHRoYXQgYXJlIGF2YWlsYWJsZSB0byB1c2VycyBvZiB0aGUga2VybmVsIG1vZHVsZS5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG11c3QgdGhvcm91Z2hseSBleGFtaW5lIGBzZXZfbWVtX2VuY19pb2N0bGAgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBib29sZWFuIGFuZCBpdHMgcG90ZW50aWFsIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MTIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxOTo0My41OTUzNDcwOTlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMTYyMDgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfbWVtX2VuY19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjYzMj1zdGF0aWMgaW50IHNucF9lbmFibGVfY2VydHMoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjQxLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY0MjppbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxOTo0NC4zMDY5NzMwNzhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAwODEwMzM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlNFViBJT0NUTCBFbnRyeSBQb2ludCBJbnZlc3RpZ2F0aW9uKipcblxuUmlnaHQsIHNvIGBzZXZfbWVtX2VuY19pb2N0bGAgaXMgdGhlIGFzc3VtZWQgZW50cnkgcG9pbnQgZm9yIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgaW9jdGxzLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIHdlJ3JlIHN0YXJ0aW5nIHdpdGguIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IGlzIHRoaXMgKnRoZSogb25seSBlbnRyeSBwb2ludD8gQXJlIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIFNFViBpb2N0bCBoYW5kbGluZyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGRvIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbHRlcm5hdGl2ZXMgb3IgaWYgc29tZXRoaW5nIGlzIG1pc3NlZC4gTGV0IG1lIHBpdm90IHRvIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCBub3cgYW5kIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxOTo0OC4zMTUwODE2MDRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTAxOTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfbWVtX2VuY19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI2MzI9c3RhdGljIGludCBzbnBfZW5hYmxlX2NlcnRzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2NDI6aW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjQzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTMyNT1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQ0My1cXHQuZGV2X2dldF9hdHRyID0gc2V2X2Rldl9nZXRfYXR0cixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0NDQ6XFx0Lm1lbV9lbmNfaW9jdGwgPSBzZXZfbWVtX2VuY19pb2N0bCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NDUtXFx0Lm1lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD05Nzg9dm9pZCBzZXZfZXNfdW5tYXBfZ2hjYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk4MC0jaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODE6aW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTgyLWludCBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxOTo0OC41NTAxMDczNTRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxMjQ3MTYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEludmVzdGlnYXRpb24gaW50byB0aGUgU0VWIE1lbW9yeSBFbmNyeXB0aW9uIElPQ1RMKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIGluZGVlZCB0aGUgcHJpbWFyeSBmdW5jdGlvbiBJIG5lZWQgdG8gY29uY2VudHJhdGUgb24gaGVyZS4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCwgc28gdGhhdCBmZWVscyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIE5vdywgaG9sZCBvbiBhIHNlY29uZC4uLiB3aGF0J3MgdGhpcz8gYHNldl9kYmdfY3J5cHRgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgeWV0IGl0J3MgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRob3NlIGRlYnVnZ2luZyBvcGVyYXRpb25zLCBgS1ZNX1NFVl9EQkdfREVDUllQVGAgYW5kIGBLVk1fU0VWX0RCR19FTkNSWVBUYC4gVGhpcyBpcyBhIGJpdCB1bnVzdWFsLlxuXG5CdXQsIHNpbmNlIGBzZXZfbWVtX2VuY19pb2N0bGAgaXMgdGhlIG92ZXJhbGwgZW50cnkgcG9pbnQsIGl0IG1ha2VzIHNlbnNlIHRvIGtlZXAgaXQgYXMgbXkgbWFpbiBmb2N1cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55IG90aGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgbWVjaGFuaXNtLiBUaGUgbmV4dCBxdWVzdGlvbiB0byBhbnN3ZXIgaXMgd2hldGhlciBvciBub3QgYHNldl9kYmdfY3J5cHRgIGlzIGlubGluZWQuIFRoYXQgd2lsbCBpbXBhY3QgaG93IEkgYXBwcm9hY2ggdGhlIGFuYWx5c2lzLiBMZXQncyBsb29rIGludG8gdGhhdCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAwOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoxOTo1Mi4zNjI1ODIzODdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzkyNDA5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfZGJnX2NyeXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMjQwPXN0YXRpYyBpbnQgc2V2X2lzc3VlX2RiZ19jbWQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyY19wYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI1NS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEyNTY6c3RhdGljIHZvaWQgKnNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBfX3ZhLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI1Ny1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBsb25nICpwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI5Ni1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEyOTc6c3RhdGljIHZvaWQgc2V2X2RiZ19jcnlwdF9zbG93X2ZyZWUodm9pZCAqYnVmKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI5OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzMDU9c3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzEzLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMxNDpcXHRidWYgPSBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3JjX3AsIHNyYywgbGVuLCBcXHUwMDI2c3JjX3BhLCBcXHUwMDI2bnJfYnl0ZXMpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMxNS1cXHRpZiAoIWJ1ZilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMyNS1vdXQ6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzI2OlxcdHNldl9kYmdfY3J5cHRfc2xvd19mcmVlKGJ1Zik7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzI3LVxcdHJldHVybiByO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMzMwPXN0YXRpYyBpbnQgc2V2X2RiZ19lbmNyeXB0X3Nsb3coc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyYyxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMzOS1cXHQvKiBEZWNyeXB0IHRoZSBfZGVzdGluYXRpb25fIHRvIGRvIGEgUk1XIG9uIHBsYWludGV4dC4gKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEzNDA6XFx0YnVmID0gc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKGRzdF9wLCBkc3QsIGxlbiwgXFx1MDAyNmRzdF9wYSwgXFx1MDAyNm5yX2J5dGVzKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNDEtXFx0aWYgKCFidWYpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNTgtb3V0OlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTM1OTpcXHRzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZShidWYpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2MC1cXHRyZXR1cm4gcjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2Mi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEzNjM6c3RhdGljIGludCBzZXZfZGJnX2NyeXB0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM2NC1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGNtZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjY0Mj1pbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcwMC1cXHRjYXNlIEtWTV9TRVZfREJHX0VOQ1JZUFQ6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNzAxOlxcdFxcdHIgPSBzZXZfZGJnX2NyeXB0KGt2bSwgXFx1MDAyNnNldl9jbWQsIHNldl9jbWQuaWQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcwMi1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MTk6NTIuNTI2NTE1MDEzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4MTExMDIzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNIFNFViBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBzZXZfZGJnX2NyeXB0YCBpcyBzdGF0aWMgYnV0IG5vdCBpbmxpbmUuIEl0J3MgbGlrZWx5IHRoZSBjb21waWxlciB3aWxsIGlubGluZSBpdCwgc28gdGhhdCdzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQsIGFsdGhvdWdoIEkgd291bGRuJ3Qgd29ycnkgYWJvdXQgaXQgdG9vIG11Y2guIE15IG1haW4gZm9jdXMsIGhvd2V2ZXIsIGlzIG9uIGBzZXZfbWVtX2VuY19pb2N0bGAuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50LlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIGluZGVlZCB0aGUgKm9ubHkqIGlvY3RsIGhhbmRsZXIgZm9yIEtWTSBtZW1vcnkgZW5jcnlwdGlvbi4gWWVwLCBjb25maXJtZWQuIFRoYXQncyBnb29kLiBOb3csIGxldCdzIHNlZSB3aGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcmUuXG5cbkFscmlnaHQsIHNvIGBLVk1fQU1EX1NFVmAgZGVwZW5kcyBvbiBgS1ZNX0FNRGAgYW5kIGBYODZfNjRgLCB3aGljaCBpcyBleHBlY3RlZC4gYENSWVBUT19ERVZfU1BfUFNQYCBkZXBlbmRzIG9uIGBDUllQVE9fREVWX0NDUF9ERGAsIGBYODZfNjRgLCBhbmQgYEFNRF9JT01NVWAuIE5vdGhpbmcgb3V0IG9mIHRoZSBvcmRpbmFyeSBoZXJlOyBgWDg2XzY0YCBpcyBwcmV0dHkgbXVjaCBhIGdpdmVuLlxuXG5MZXQncyByZXZpZXcgdGhlIHJlcXVpcmVkIGNvbmZpZ3M6IGBWSVJUVUFMSVpBVElPTmAsIGBLVk1gLCBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGFuZCBgQU1EX0lPTU1VYC5cblxuSG9sZCBvbi4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gYEtWTV9BTURfU0VWYCBhY3R1YWxseSAqZGVwZW5kcyogb24gYCEoS1ZNX0FNRD15IFx1MDAyNlx1MDAyNiBDUllQVE9fREVWX0NDUF9ERD1tKWAuIE1lYW5pbmcsICppZiogYEtWTV9BTURgIGlzIGB5YCwgdGhlbiBgQ1JZUFRPX0RFVl9DQ1BfRERgICptdXN0KiBiZSBgeWAuIEdpdmVuIHRoZSBTeXprYWxsZXIgY29udGV4dCwgdGhpcyBtZWFucyB0aGF0IHRoZXNlIGNvbmZpZ3Mgd2lsbCBiZSBzZXQgdG8gYHlgIHNpbmNlIFN5emthbGxlciB0ZW5kcyB0byBlbmFibGUgZXZlcnl0aGluZyBpdCBjYW4sIHNvIGBDUllQVE9fREVWX0NDUF9ERGAgYW5kIGBDUllQVE9fREVWX1NQX1BTUGAgd2lsbCBlZmZlY3RpdmVseSBiZSBgeWAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogQ2FuIHdlIGhpdCBgc2V2X2RiZ19jcnlwdGAgZnJvbSBHQ0U/IFN5emthbGxlciBydW5zIG9uIEdDRSwgYW5kIEdDRSBoYXMgQU1EIGluc3RhbmNlcywgc28gaXQgKmNvdWxkKiBoYXZlIFNFViBzdXBwb3J0LiBPYnZpb3VzbHksIEtWTSBTRVYgcmVxdWlyZXMgaGFyZHdhcmUgc3VwcG9ydCB0byByZWFsbHkgd29yaywgYnV0IGV2ZW4gd2l0aG91dCBpdCwgd2UgY2FuIHN0aWxsIGxpa2VseSByZWFjaCB1cCB0byB0aGUgaGFyZHdhcmUgY2hlY2tzIHRocm91Z2ggdGhlIEtWTSBpb2N0bHMuIEknbSB3b25kZXJpbmcgaWYgYHNldl9tZW1fZW5jX2lvY3RsYCBkb2VzIGEgY2hlY2sgb24gYHNldl9ndWVzdChrdm0pYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGZpbmQgb3V0IG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzIzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjIwOjAxLjMzNzYyMDY0N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzA5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjQyLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjQyOlxcdGludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbjI2NDM6XFx0e1xcbjI2NDQ6XFx0XFx0c3RydWN0IGt2bV9zZXZfY21kIHNldl9jbWQ7XFxuMjY0NTpcXHRcXHRpbnQgcjtcXG4yNjQ2OlxcdFxcbjI2NDc6XFx0XFx0aWYgKCFzZXZfZW5hYmxlZClcXG4yNjQ4OlxcdFxcdFxcdHJldHVybiAtRU5PVFRZO1xcbjI2NDk6XFx0XFxuMjY1MDpcXHRcXHRpZiAoIWFyZ3ApXFxuMjY1MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yNjUyOlxcdFxcbjI2NTM6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZzZXZfY21kLCBhcmdwLCBzaXplb2Yoc3RydWN0IGt2bV9zZXZfY21kKSkpXFxuMjY1NDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yNjU1OlxcdFxcbjI2NTY6XFx0XFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZrdm0tXFx1MDAzZWxvY2spO1xcbjI2NTc6XFx0XFxuMjY1ODpcXHRcXHQvKiBPbmx5IHRoZSBlbmNfY29udGV4dF9vd25lciBoYW5kbGVzIHNvbWUgbWVtb3J5IGVuYyBvcGVyYXRpb25zLiAqL1xcbjI2NTk6XFx0XFx0aWYgKGlzX21pcnJvcmluZ19lbmNfY29udGV4dChrdm0pIFxcdTAwMjZcXHUwMDI2XFxuMjY2MDpcXHRcXHQgICAgIWlzX2NtZF9hbGxvd2VkX2Zyb21fbWlycm9yKHNldl9jbWQuaWQpKVxcbjI2NjE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjY2MjpcXHRcXG4yNjYzOlxcdFxcdC8qXFxuMjY2NDpcXHRcXHQgKiBPbmNlIEtWTV9TRVZfSU5JVDIgaW5pdGlhbGl6ZXMgYSBLVk0gaW5zdGFuY2UgYXMgYW4gU05QIGd1ZXN0LCBvbmx5XFxuMjY2NTpcXHRcXHQgKiBhbGxvdyB0aGUgdXNlIG9mIFNOUC1zcGVjaWZpYyBjb21tYW5kcy5cXG4yNjY2OlxcdFxcdCAqL1xcbjI2Njc6XFx0XFx0aWYgKHNldl9zbnBfZ3Vlc3Qoa3ZtKSBcXHUwMDI2XFx1MDAyNiBzZXZfY21kLmlkIFxcdTAwM2MgS1ZNX1NFVl9TTlBfTEFVTkNIX1NUQVJUKVxcbjI2Njg6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4yNjY5OlxcdFxcbjI2NzA6XFx0XFx0c3dpdGNoIChzZXZfY21kLmlkKSB7XFxuMjY3MTpcXHRcXHRjYXNlIEtWTV9TRVZfRVNfSU5JVDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6MjA6MDEuMzM4Mjk4MTI3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzE3NjU0MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipEZWJ1Z2dpbmcgdGhlIGBzZXZfZW5hYmxlZGAgVmFyaWFibGUqKlxuXG5Pa2F5LCB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIGNvbmZpcm1pbmcgdGhhdCBgc2V2X2VuYWJsZWRgIGlzIGNoZWNrZWQuIE5vdywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIG9yaWdpbiBvZiB0aGlzIHZhcmlhYmxlLiBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biB3aGVyZSBgc2V2X2VuYWJsZWRgIGlzIGFjdHVhbGx5IGJlaW5nIHNldC4gS25vd2luZyB3aGVyZSBpdCBnZXRzIGl0cyB2YWx1ZSBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgaG93IHRvIHRyb3VibGVzaG9vdCBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gaXQuIFVuZGVyc3RhbmRpbmcgaXRzIGRlZmluaXRpb24gaXMgdGhlIGtleSB0byByZXNvbHZpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4NTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjIwOjA1LjIxMDA2ODg2NFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMTYwODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldl9lbmFibGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01NC0vKiBlbmFibGUvZGlzYWJsZSBTRVYgc3VwcG9ydCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTU6c3RhdGljIGJvb2wgX19yb19hZnRlcl9pbml0IHNldl9lbmFibGVkID0gdHJ1ZTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjU2Om1vZHVsZV9wYXJhbV9uYW1lZChzZXYsIHNldl9lbmFibGVkLCBib29sLCAwNDQ0KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTU3LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjQyPWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjQ2LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY0NzpcXHRpZiAoIXNldl9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0OC1cXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzAyMD12b2lkIF9faW5pdCBzZXZfc2V0X2NwdV9jYXBzKHZvaWQpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMDIxLXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMwMjI6XFx0aWYgKHNldl9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzAyMy1cXHRcXHRrdm1fY3B1X2NhcF9zZXQoWDg2X0ZFQVRVUkVfU0VWKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA2ND12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzA3Mi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMwNzM6XFx0aWYgKCFzZXZfZW5hYmxlZCB8fCAhbnB0X2VuYWJsZWQgfHwgIW5yaXBzKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzA3NC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzE3MS1vdXQ6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMTcyOlxcdGlmIChzZXZfZW5hYmxlZCkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzE3My1cXHRcXHRpbml0X2FyZ3MucHJvYmUgPSB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjI3LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIyODpcXHRzZXZfZW5hYmxlZCA9IHNldl9zdXBwb3J0ZWQ7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjI5LVxcdHNldl9lc19lbmFibGVkID0gc2V2X2VzX3N1cHBvcnRlZDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzI0Mj12b2lkIHNldl9oYXJkd2FyZV91bnNldHVwKHZvaWQpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjQzLXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyNDQ6XFx0aWYgKCFzZXZfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNDUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMjU5PWludCBzZXZfY3B1X2luaXQoc3RydWN0IHN2bV9jcHVfZGF0YSAqc2QpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjYwLXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyNjE6XFx0aWYgKCFzZXZfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNjItXFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjIwOjA1LjM5MTIzODAyOVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDgyNzI0MTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlNFViBTdXBwb3J0IGFuZCBGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIGhlcmUncyB3aGF0IEkndmUgZ290LiBgc2V2X2VuYWJsZWRgIGlzIHNldCBiYXNlZCBvbiB3aGV0aGVyIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyBTRVYsIHdoaWNoIGlzIGRldGVybWluZWQgaW4gYHNldl9oYXJkd2FyZV9zZXR1cGAuIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IHN1cHBvcnQgU0VWLCBgc2V2X2VuYWJsZWRgIGlzIGZhbHNlLCBhbmQgdGhlIGBzZXZfbWVtX2VuY19pb2N0bGAgZnVuY3Rpb24gcmV0dXJucyBgLUVOT1RUWWAuIEJ1dCwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBTeXprYWxsZXIgKmRvZXMqIHJ1biBvbiBpbnN0YW5jZXMgdGhhdCBlaXRoZXIgZnVsbHkgc3VwcG9ydCBTRVYgb3IgYXQgbGVhc3QgaGF2ZSBTRVYgYXMgYSBrZXkga2VybmVsIGZlYXR1cmUgYWNjZXNzaWJsZSB3aGVuIHRoZSBoYXJkd2FyZSBpcyBwcmVzZW50LlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyB0b3VjaGVzIGNvcmUga2VybmVsIEtWTSBTRVYgbG9naWMsIGFuZCBiZWNhdXNlIGl0IGludGVyYWN0cyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiBhbiBpb2N0bCBoYW5kbGVyIChgc2V2X21lbV9lbmNfaW9jdGxgKSwgSSdtIGNvbmZpZGVudCB3ZSBuZWVkIHRvIGZ1enogdGhpcyEgSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdG8gYmUgY2VydGFpbi4gSSBrbm93IGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBBTURfSU9NTVVgLCBgS1ZNX0FNRGAsIGBLVk1gLCBhbmQgYFZJUlRVQUxJWkFUSU9OYCBhcmUgcmVsZXZhbnQuIFdhaXQsIGBLVk1fQU1EX1NFVmAgaXMgdGhlIHByaW1hcnkgb25lLCBpdCdzIHRoZSBtYWluIGNvbmZpZyBoZXJlLlxuXG5JJ2xsIGZvcm1hdCB0aGUgb3V0cHV0IHRvIGhpZ2hsaWdodCB0aGlzIGtleSBmdW5jdGlvbiBhbmQgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLiBUaGUgZm9jdXMgd2lsbCBiZSBvbiBgc2V2X21lbV9lbmNfaW9jdGxgLCBhbmQgdGhlIGVuYWJsZSBjb25maWdzIHdpbGwgYmUgYFZJUlRVQUxJWkFUSU9OYCwgYEtWTWAsIGBLVk1fQU1EYCwgYEtWTV9BTURfU0VWYCwgYENSWVBUT19ERVZfQ0NQX0REYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYW5kIGBBTURfSU9NTVVgLlxuXG5Ob3cgbGV0J3Mgc2VlLCB3aGF0IGFib3V0IG90aGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIFNFVj8gSSdtIGNoZWNraW5nIGlmIGBzZXZfZGJnX2NyeXB0YCBpcyBleHBvcnRlZC4gT2gsIGl0J3Mgc3RhdGljLiBXZWxsLCBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIGV4cG9ydGVkIChvciBhdCBsZWFzdCBub24tc3RhdGljKSwgd2hpY2ggaXMgZ29vZC4gQW55dGhpbmcgZWxzZT8gYHNldl9kYmdfZGVjcnlwdF9zbG93YCBhbmQgYHNldl9kYmdfZW5jcnlwdF9zbG93YCBhcmUgc3RhdGljLiBJJ2xsIHN0aWNrIHdpdGggZm9jdXNpbmcgb24gYHNldl9tZW1fZW5jX2lvY3RsYC5cblxuT2theSwgSSdtIHJldmlld2luZyB0aGUgY29kZSBzbmlwcGV0IEkgZm91bmQgYWdhaW46XG5gYGBjXG4rXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbitcdFx0cmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xuYGBgXG5BaCwgcmlnaHQsIHRoaXMgY29kZSB1c2VzIGBjY19wbGF0Zm9ybV9oYXNgLiBJJ2xsIGNoZWNrIHRvIHNlZSBpZiBgY2NfcGxhdGZvcm1faGFzYCByZWxpZXMgb24gYW55IHNwZWNpZmljIGNvbmZpZ3MuIEFscmlnaHQsIHNvIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUgaW5kaWNhdGVzIHRoYXQgYHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STWAgaXMgY29uZmlndXJlZCBmb3IgYEtWTV9BTURfU0VWYC4gU28sIHdlIHNob3VsZCBiZSBhbGwgZ29vZCFcblxuQWxyaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTE5LCJPdXRwdXRUb2tlbnMiOjIwMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzoyMDoxNC44NzM5NjU4MjVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzAzNjc1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCIsXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJDUllQVE9fREVWX0NDUF9ERFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgICBcIkFNRF9JT01NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNldl9tZW1fZW5jX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgaW4gS1ZNIFNFViBkZWJ1ZyBjcnlwdG9ncmFwaHkgZnVuY3Rpb25zIChzZXZfZGJnX2RlY3J5cHRfc2xvdyBhbmQgc2V2X2RiZ19lbmNyeXB0X3Nsb3cpLiBJdCBhbGxvY2F0ZXMgYSBmdWxsIHBhZ2UgaW5zdGVhZCBvZiB1c2luZyBrbWFsbG9jIHdoZW4gU0VWLVNOUCBpcyBhY3RpdmUgdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIGR1cmluZyBQU1AgZHJpdmVyIFJNUCB1cGRhdGVzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIChLVk1fU0VWX0RCR19ERUNSWVBUIGFuZCBLVk1fU0VWX0RCR19FTkNSWVBUKSB3aGVuIHJ1bm5pbmcgb24gc3VwcG9ydGVkIEFNRCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSVJUVUFMSVpBVElPTlwiLFxuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fQU1EX1NFVlwiLFxuICAgIFwiQ1JZUFRPX0RFVl9DQ1BfRERcIixcbiAgICBcIkNSWVBUT19ERVZfU1BfUFNQXCIsXG4gICAgXCJBTURfSU9NTVVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZXZfbWVtX2VuY19pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljIGluIEtWTSBTRVYgZGVidWcgY3J5cHRvZ3JhcGh5IGZ1bmN0aW9ucyAoc2V2X2RiZ19kZWNyeXB0X3Nsb3cgYW5kIHNldl9kYmdfZW5jcnlwdF9zbG93KS4gSXQgYWxsb2NhdGVzIGEgZnVsbCBwYWdlIGluc3RlYWQgb2YgdXNpbmcga21hbGxvYyB3aGVuIFNFVi1TTlAgaXMgYWN0aXZlIHRvIHByZXZlbnQgY29uY3VycmVudCBhY2Nlc3NlcyBkdXJpbmcgUFNQIGRyaXZlciBSTVAgdXBkYXRlcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyAoS1ZNX1NFVl9EQkdfREVDUllQVCBhbmQgS1ZNX1NFVl9EQkdfRU5DUllQVCkgd2hlbiBydW5uaW5nIG9uIHN1cHBvcnRlZCBBTUQgaGFyZHdhcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpszws[1] Phase: Succeeded StartedAt: 2026-07-25 03:20:28 +0000 UTC FinishedAt: 2026-07-25 03:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-25 03:20:29 +0000 UTC FinishedAt: 2026-07-25 03:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2] Phase: Succeeded StartedAt: 2026-07-25 03:20:29 +0000 UTC FinishedAt: 2026-07-25 05:27:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-25 03:20:29 +0000 UTC FinishedAt: 2026-07-25 05:27:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-25 03:20:29 +0000 UTC FinishedAt: 2026-07-25 03:20:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-25 03:20:29 +0000 UTC FinishedAt: 2026-07-25 03:20:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpszws/series-workflowpszws-convert-artifact-34195896/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-25 03:20:55 +0000 UTC FinishedAt: 2026-07-25 03:55:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-25 03:20:55 +0000 UTC FinishedAt: 2026-07-25 03:55:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6f4bcb6c-1dde-4ecb-810d-fbcd33d09fe5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpszws/series-workflowpszws-convert-artifact-34195896/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "c0084616-4380-4378-9445-19413263abb4", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpszws/series-workflowpszws-build-action-2419789678/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-25 03:20:55 +0000 UTC FinishedAt: 2026-07-25 03:55:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6f4bcb6c-1dde-4ecb-810d-fbcd33d09fe5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpszws/series-workflowpszws-convert-artifact-34195896/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "c0084616-4380-4378-9445-19413263abb4", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpszws/series-workflowpszws-build-action-2419789678/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-25 03:55:17 +0000 UTC FinishedAt: 2026-07-25 03:55:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-25 03:55:17 +0000 UTC FinishedAt: 2026-07-25 03:55:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-25 03:55:17 +0000 UTC FinishedAt: 2026-07-25 03:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-25 03:55:17 +0000 UTC FinishedAt: 2026-07-25 03:55:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpszws/series-workflowpszws-convert-artifact-1591193631/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-25 03:56:29 +0000 UTC FinishedAt: 2026-07-25 03:58:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-25 03:56:29 +0000 UTC FinishedAt: 2026-07-25 03:58:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c0084616-4380-4378-9445-19413263abb4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpszws/series-workflowpszws-build-action-2419789678/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-25 03:58:46 +0000 UTC FinishedAt: 2026-07-25 03:58:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-25 03:58:46 +0000 UTC FinishedAt: 2026-07-25 03:58:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-25 03:58:46 +0000 UTC FinishedAt: 2026-07-25 04:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-25 03:58:46 +0000 UTC FinishedAt: 2026-07-25 04:49:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6f4bcb6c-1dde-4ecb-810d-fbcd33d09fe5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpszws/series-workflowpszws-convert-artifact-1591193631/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "9edd2ba4-6187-4104-81c3-a1a0ed869831", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpszws/series-workflowpszws-build-action-3286467251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-25 03:58:46 +0000 UTC FinishedAt: 2026-07-25 04:49:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6f4bcb6c-1dde-4ecb-810d-fbcd33d09fe5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpszws/series-workflowpszws-convert-artifact-1591193631/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "9edd2ba4-6187-4104-81c3-a1a0ed869831", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpszws/series-workflowpszws-build-action-3286467251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-25 04:49:52 +0000 UTC FinishedAt: 2026-07-25 04:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-25 04:49:52 +0000 UTC FinishedAt: 2026-07-25 04:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-25 04:49:52 +0000 UTC FinishedAt: 2026-07-25 04:52:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-25 04:49:52 +0000 UTC FinishedAt: 2026-07-25 04:51:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9edd2ba4-6187-4104-81c3-a1a0ed869831,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpszws/series-workflowpszws-build-action-3286467251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-25 04:52:08 +0000 UTC FinishedAt: 2026-07-25 05:27:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-25 04:52:08 +0000 UTC FinishedAt: 2026-07-25 05:27:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*c0084616-4380-4378-9445-19413263abb4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9edd2ba4-6187-4104-81c3-a1a0ed869831,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpszws/series-workflowpszws-build-action-2419789678/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpszws/series-workflowpszws-build-action-3286467251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-25 04:52:08 +0000 UTC FinishedAt: 2026-07-25 04:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-25 04:52:08 +0000 UTC FinishedAt: 2026-07-25 04:52:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpszws/series-workflowpszws-convert-artifact-80776504/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-25 04:52:08 +0000 UTC FinishedAt: 2026-07-25 04:52:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-25 04:52:08 +0000 UTC FinishedAt: 2026-07-25 04:52:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-25 04:52:08 +0000 UTC FinishedAt: 2026-07-25 04:52:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-25 04:52:18 +0000 UTC FinishedAt: 2026-07-25 05:27:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpszws[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU"],"series_id":"3f5ca8b7-3b82-450f-964b-4559c438af07","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-25 04:52:18 +0000 UTC FinishedAt: 2026-07-25 05:27:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c0084616-4380-4378-9445-19413263abb4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9edd2ba4-6187-4104-81c3-a1a0ed869831,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpszws/series-workflowpszws-build-action-2419789678/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpszws/series-workflowpszws-build-action-3286467251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpszws/series-workflowpszws-convert-artifact-80776504/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}