Name: series-workflowspg9k Phase: Succeeded StartedAt: 2026-09-15 14:21:39 +0000 UTC FinishedAt: 2026-09-15 18:51:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[0] Phase: Succeeded StartedAt: 2026-09-15 14:21:39 +0000 UTC FinishedAt: 2026-09-15 15:07:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 14:21:39 +0000 UTC FinishedAt: 2026-09-15 15:07:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "SYSCTL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "SYSCTL" ], "series_id": "4307a5da-71ef-4975-8a48-ef102656adb4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vsock_net_child_mode_string", "__vsock_net_mode_string" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "base_tree": "net-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtTWVNDVEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcmIzM0OywKICAgICYjMzQ7X192c29ja19uZXRfbW9kZV9zdHJpbmcmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgc3RhY2sgdmFyaWFibGUgYG5ld19tb2RlYCBpbiBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKClgIGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCAoc3BlY2lmaWNhbGx5IGlmIGEgd3JpdGUgb2NjdXJyZWQgd2l0aCBgKmxlbnAgPT0gMGAsIGNhdXNpbmcgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKClgIHRvIHJldHVybiAwIHdpdGhvdXQgYXNzaWduaW5nIGAqbmV3X21vZGVgKS4gVGhlIHBhdGNoIGluaXRpYWxpemVzIGBuZXdfbW9kZWAgd2l0aCBgdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KWAgYmVmb3JlIHBhc3NpbmcgaXRzIHBvaW50ZXIuXG5cbkJlY2F1c2UgdGhpcyBjaGFuZ2UgcmVzb2x2ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLCBpdCBwb3NlcyBubyByaXNrIG9mIGludHJvZHVjaW5nIEtNU0FOLWRldGVjdGFibGUgYnVncy4gU3RhbmRhcmQgdGVzdGluZy9LQVNBTiBpcyBzdWZmaWNpZW50LCBhbmQgc3Bhd25pbmcgYSBkZWRpY2F0ZWQsIHJlc291cmNlLWludGVuc2l2ZSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKCkgaW4gbmV0L3Ztd192c29jay9hZl92c29jay5jIHRvIGluaXRpYWxpemUgdGhlIG5ld19tb2RlIHZhcmlhYmxlIGJlZm9yZSBwYXNzaW5nIGl0IHRvIF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKCksIHByZXZlbnRpbmcgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkIHdoZW4gd3JpdGluZyB0byAvcHJvYy9zeXMvbmV0L3Zzb2NrL2NoaWxkX25zX21vZGUgd2l0aCB6ZXJvIGxlbmd0aC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHN5c2N0bCBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNmJlMDllYTg0NTY1ODg4OGNjODU5MzViMjI1MzM0MDQzN2VlMzYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTQ6NDA6MjcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5pbmRleCA2MjJkYmQwNDY3OTk0Li42MTE2MzM1N2FlM2M0IDEwMDY0NFxuLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbkBAIC0yODc4LDYgJiM0MzsyODc4LDcgQEAgc3RhdGljIGludCB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbiBcdGludCByZXQ7XG4gXG4gXHRuZXQgPSBjb250YWluZXJfb2YodGFibGUtXHUwMDNlZGF0YSwgc3RydWN0IG5ldCwgdnNvY2suY2hpbGRfbnNfbW9kZSk7XG4mIzQzO1x0bmV3X21vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpO1xuIFxuIFx0cmV0ID0gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXG4gXHRcdFx0XHQgICAgICB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpLCBcdTAwMjZuZXdfbW9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1NZU0NUTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyYjMzQ7LAogICAgJiMzNDtfX3Zzb2NrX25ldF9tb2RlX3N0cmluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoKSBpbiBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3X21vZGUgdmFyaWFibGUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gX192c29ja19uZXRfbW9kZV9zdHJpbmcoKSwgcHJldmVudGluZyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWQgd2hlbiB3cml0aW5nIHRvIC9wcm9jL3N5cy9uZXQvdnNvY2svY2hpbGRfbnNfbW9kZSB3aXRoIHplcm8gbGVuZ3RoLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc3lzY3RsIGNvZGUgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI2YmUwOWVhODQ1NjU4ODg4Y2M4NTkzNWIyMjUzMzQwNDM3ZWUzNjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAxNDo0MDoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwppbmRleCA2MjJkYmQwNDY3OTk0Li42MTE2MzM1N2FlM2M0IDEwMDY0NAotLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCkBAIC0yODc4LDYgJiM0MzsyODc4LDcgQEAgc3RhdGljIGludCB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIAlpbnQgcmV0OwogCiAJbmV0ID0gY29udGFpbmVyX29mKHRhYmxlLSZndDtkYXRhLCBzdHJ1Y3QgbmV0LCB2c29jay5jaGlsZF9uc19tb2RlKTsKJiM0MzsJbmV3X21vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpOwogCiAJcmV0ID0gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsCiAJCQkJICAgICAgdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KSwgJmFtcDtuZXdfbW9kZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xMW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTExCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIHZzb2NrIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBkaWZmIHRoYXQgdG91Y2hlcyBgbmV0L3Ztd192c29jay9hZl92c29jay5jYC4gUmlnaHQgYXdheSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgVlNPQ0sgaW1wbGVtZW50YXRpb24uIFRoZSBodW5rIG1vZGlmaWVzIHRoZSBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI4NzguIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBpbnNwZWN0IHRoYXQgc2VjdGlvbiBvZiBjb2RlIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIHRoaW5ncy4gVGhlIGRpZmYgaW50cm9kdWNlcyBhIGBuZXdfbW9kZWAgdmFyaWFibGUgYW5kIGFzc2lnbnMgYSBuZXcgZnVuY3Rpb24gdG8gaXQgY2FsbGVkIGB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpYC4gSSBpbW1lZGlhdGVseSBoYXZlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIGhlcmUuIEkmIzM5O2xsIHByb2JhYmx5IG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgYW5kIG1heWJlIHRyYWNlIGhvdyBgdnNvY2tfbmV0X2NoaWxkX21vZGVgIGlzIHVzZWQgZWxzZXdoZXJlIGluIHRoZSBjb2RlYmFzZS4gTXkgdXN1YWwgYXBwcm9hY2ggd291bGQgYmUgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBJJiMzOTttIG9mZiB0byBkbyB0aGF0IG5vdy4gSSYjMzk7bGwgbmVlZCB0byBhc3Nlc3MgdGhlIG92ZXJhbGwgaW1wYWN0LCBvZiBjb3Vyc2UsIGFuZCBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIG9yIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9hZl92c29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODYwOlx0XHRcdFx0XHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbjI4NjE6XHR7XG4yODYyOlx0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4yODYzOlx0XG4yODY0Olx0XHRpZiAod3JpdGUpXG4yODY1Olx0XHRcdHJldHVybiAtRVBFUk07XG4yODY2Olx0XG4yODY3Olx0XHRuZXQgPSBjb250YWluZXJfb2YodGFibGUtXHUwMDNlZGF0YSwgc3RydWN0IG5ldCwgdnNvY2subW9kZSk7XG4yODY4Olx0XG4yODY5Olx0XHRyZXR1cm4gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXG4yODcwOlx0XHRcdFx0XHQgICAgICAgdnNvY2tfbmV0X21vZGUobmV0KSwgTlVMTCk7XG4yODcxOlx0fVxuMjg3MjpcdFxuMjg3MzpcdHN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4yODc0Olx0XHRcdFx0XHQgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbjI4NzU6XHR7XG4yODc2Olx0XHRlbnVtIHZzb2NrX25ldF9tb2RlIG5ld19tb2RlO1xuMjg3NzpcdFx0c3RydWN0IG5ldCAqbmV0O1xuMjg3ODpcdFx0aW50IHJldDtcbjI4Nzk6XHRcbjI4ODA6XHRcdG5ldCA9IGNvbnRhaW5lcl9vZih0YWJsZS1cdTAwM2VkYXRhLCBzdHJ1Y3QgbmV0LCB2c29jay5jaGlsZF9uc19tb2RlKTtcbjI4ODE6XHRcdG5ld19tb2RlID0gdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KTtcbjI4ODI6XHRcbjI4ODM6XHRcdHJldCA9IF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zLFxuMjg4NDpcdFx0XHRcdFx0ICAgICAgdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KSwgXHUwMDI2bmV3X21vZGUpO1xuMjg4NTpcdFx0aWYgKHJldClcbjI4ODY6XHRcdFx0cmV0dXJuIHJldDtcbjI4ODc6XHRcbjI4ODg6XHRcdGlmICh3cml0ZSkge1xuMjg4OTpcdFx0XHQvKiBQcmV2ZW50IGEgXCYjMzQ7bG9jYWxcJiMzNDsgbmFtZXNwYWNlIGZyb20gZXNjYWxhdGluZyB0byBcJiMzNDtnbG9iYWxcJiMzNDssXG4yODkwOlx0XHRcdCAqIHdoaWNoIHdvdWxkIGdpdmUgbmVzdGVkIG5hbWVzcGFjZXMgYWNjZXNzIHRvIGdsb2JhbCBDSURzLlxuMjg5MTpcdFx0XHQgKi9cbjI4OTI6XHRcdFx0aWYgKHZzb2NrX25ldF9tb2RlKG5ldCkgPT0gVlNPQ0tfTkVUX01PREVfTE9DQUwgXHUwMDI2XHUwMDI2XG4yODkzOlx0XHRcdCAgICBuZXdfbW9kZSA9PSBWU09DS19ORVRfTU9ERV9HTE9CQUwpXG4yODk0Olx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjI4OTU6XHRcbjI4OTY6XHRcdFx0aWYgKCF2c29ja19uZXRfc2V0X2NoaWxkX21vZGUobmV0LCBuZXdfbW9kZSkpXG4yODk3Olx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjI4OTg6XHRcdH1cbjI4OTk6XHRcbjI5MDA6XHRcdHJldHVybiAwO1xuMjkwMTpcdH1cbjI5MDI6XHRcbjI5MDM6XHRzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xuMjkwNDpcdFx0e1xuMjkwNTpcdFx0XHQucHJvY25hbWVcdD0gXCYjMzQ7bnNfbW9kZVwmIzM0OyxcbjI5MDY6XHRcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC52c29jay5tb2RlLFxuMjkwNzpcdFx0XHQubWF4bGVuXHRcdD0gVlNPQ0tfTkVUX01PREVfU1RSX01BWCxcbjI5MDg6XHRcdFx0Lm1vZGVcdFx0PSAwNDQ0LFxuMjkwOTpcdFx0XHQucHJvY19oYW5kbGVyXHQ9IHZzb2NrX25ldF9tb2RlX3N0cmluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyODkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaWdnaW5nIERlZXBlciBpbnRvIHZzb2NrIE5ldHdvcmtpbmcqKgoKQWxyaWdodCwgSSYjMzk7bSBhbHJlYWR5IGRlZXAgaW4gdGhpcyBgdnNvY2tgIGNvZGUsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gZnVsbHkgZ3Jhc3BpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGBuZXdfbW9kZWAgdmFyaWFibGUuIFRoZSBkb2N1bWVudGF0aW9uIG1lbnRpb25zIGhvdyBpdCYjMzk7cyB1c2VkLCBidXQgSSBuZWVkIHRvIHNlZSBpdCBpbiBhY3Rpb24sIHRvby4gSSB3YW50IHRvIGluc3BlY3QgaG93IGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AgYWN0dWFsbHkgbGV2ZXJhZ2VzIGBuZXdfbW9kZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgbW9kZSBjaGFuZ2VzIGFuZCBob3cgdGhlIHVuZGVybHlpbmcgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvbiB0aGlzLiBJIGJldCB0aGVyZSYjMzk7cyBzb21lIGludGVyZXN0aW5nIGxvZ2ljIGVtYmVkZGVkIGluIGhvdyBgbmV3X21vZGVgIHRyYW5zbGF0ZXMgaW50byBuZXR3b3JrIGJlaGF2aW9yLCBhbmQgdGhpcyBgX192c29ja19uZXRfbW9kZV9zdHJpbmdgIGZ1bmN0aW9uIHNlZW1zIGxpa2UgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhbmQgdGhlIG92ZXJhbGwgZGVzaWduLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IHdvcmsgdG9nZXRoZXIgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IG5ldHdvcmsgbW9kZSBpcyBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4MzA6XHRcdFx0XHRwID0gVlNPQ0tfTkVUX01PREVfU1RSX0xPQ0FMO1xuMjgzMTpcdFx0XHRcdGJyZWFrO1xuMjgzMjpcdFx0XHRkZWZhdWx0OlxuMjgzMzpcdFx0XHRcdFdBUk5fT05DRSh0cnVlLCBcJiMzNDtuZXRucyBoYXMgaW52YWxpZCB2c29jayBtb2RlXCYjMzQ7KTtcbjI4MzQ6XHRcdFx0XHQqbGVucCA9IDA7XG4yODM1Olx0XHRcdFx0cmV0dXJuIDA7XG4yODM2Olx0XHRcdH1cbjI4Mzc6XHRcbjI4Mzg6XHRcdFx0c3Ryc2NweShkYXRhLCBwLCBzaXplb2YoZGF0YSkpO1xuMjgzOTpcdFx0XHR0bXAubWF4bGVuID0gc3RybGVuKHApO1xuMjg0MDpcdFx0fVxuMjg0MTpcdFxuMjg0MjpcdFx0cmV0ID0gcHJvY19kb3N0cmluZyhcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xuMjg0MzpcdFx0aWYgKHJldCB8fCAhd3JpdGUpXG4yODQ0Olx0XHRcdHJldHVybiByZXQ7XG4yODQ1Olx0XG4yODQ2Olx0XHRpZiAoKmxlbnAgXHUwMDNlPSBzaXplb2YoZGF0YSkpXG4yODQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg0ODpcdFxuMjg0OTpcdFx0aWYgKCFzdHJuY21wKGRhdGEsIFZTT0NLX05FVF9NT0RFX1NUUl9HTE9CQUwsIHNpemVvZihkYXRhKSkpXG4yODUwOlx0XHRcdCpuZXdfbW9kZSA9IFZTT0NLX05FVF9NT0RFX0dMT0JBTDtcbjI4NTE6XHRcdGVsc2UgaWYgKCFzdHJuY21wKGRhdGEsIFZTT0NLX05FVF9NT0RFX1NUUl9MT0NBTCwgc2l6ZW9mKGRhdGEpKSlcbjI4NTI6XHRcdFx0Km5ld19tb2RlID0gVlNPQ0tfTkVUX01PREVfTE9DQUw7XG4yODUzOlx0XHRlbHNlXG4yODU0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg1NTpcdFxuMjg1NjpcdFx0cmV0dXJuIDA7XG4yODU3Olx0fVxuMjg1ODpcdFxuMjg1OTpcdHN0YXRpYyBpbnQgdnNvY2tfbmV0X21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4yODYwOlx0XHRcdFx0XHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbjI4NjE6XHR7XG4yODYyOlx0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4yODYzOlx0XG4yODY0Olx0XHRpZiAod3JpdGUpXG4yODY1Olx0XHRcdHJldHVybiAtRVBFUk07XG4yODY2Olx0XG4yODY3Olx0XHRuZXQgPSBjb250YWluZXJfb2YodGFibGUtXHUwMDNlZGF0YSwgc3RydWN0IG5ldCwgdnNvY2subW9kZSk7XG4yODY4Olx0XG4yODY5Olx0XHRyZXR1cm4gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE2MwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc29tZXRoaW5nIGp1bXBzIG91dCBhdCBtZTogYG5ld19tb2RlYCB3aXRoaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2Agd2FzIHRvdGFsbHkgdW5pbml0aWFsaXplZCBiZWZvcmUgdGhpcyBwYXRjaC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYnVnIHdhaXRpbmcgdG8gaGFwcGVuISBOb3csIGxldCBtZSBzZWUuLi4gV2FpdCBhIG1pbnV0ZSwgaW4gYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nYCwgaWYgYHdyaXRlYCBpcyBmYWxzZSwgaXQgKnJldHVybnMqIGJlZm9yZSBhY3R1YWxseSBzZXR0aW5nIGAqbmV3X21vZGVgLiBCdXQgdGhlbiwgaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AsIHRoZSBjb2RlIGV4cGxpY2l0bHkgKmNoZWNrcyogYGlmICh3cml0ZSlgLiBUaGlzIGlzIG1ha2luZyBtZSBzdGFydCB0byBxdWVzdGlvbiB0aGUgb3ZlcmFsbCBsb2dpYyBoZXJlLgoKSG9sZCBvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhleSBhZGRlZCBgbmV3X21vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpO2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgY3J1Y2lhbCBhZGRpdGlvbi4gQ2xlYXJseSwgc29tZXRoaW5nIHdhcyBmdW5kYW1lbnRhbGx5IHdyb25nIHRoYXQgbmVlZGVkIHRvIGJlIGFkZHJlc3NlZCBoZXJlLiBJIG5lZWQgc29tZSBjb250ZXh0LiBBbHJpZ2h0LCB0aW1lIHRvIGdvIGRpZ2dpbmcuIEkmIzM5O2xsIGNoZWNrIHRoZSBgZ2l0IGxvZ2Agb3IgY29tbWl0IG1lc3NhZ2UuIEhvcGVmdWxseSwgdGhlIGF1dGhvciBwcm92aWRlZCBzb21lIGhlbHBmdWwgZXhwbGFuYXRpb24uIElmIHRoYXQmIzM5O3Mgbm90IGVub3VnaCwgSSYjMzk7bGwgbmVlZCB0byBnbyBkZWVwZXIgaW50byBgX192c29ja19uZXRfbW9kZV9zdHJpbmdgIHRvIHNlZSB3aGF0IEkmIzM5O20gbWlzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svYWZfdnNvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgxMDpcdFx0Y2hhciBkYXRhW1ZTT0NLX05FVF9NT0RFX1NUUl9NQVhdID0gezB9O1xuMjgxMTpcdFx0c3RydWN0IGN0bF90YWJsZSB0bXA7XG4yODEyOlx0XHRpbnQgcmV0O1xuMjgxMzpcdFxuMjgxNDpcdFx0aWYgKCF0YWJsZS1cdTAwM2VkYXRhIHx8ICF0YWJsZS1cdTAwM2VtYXhsZW4gfHwgISpsZW5wKSB7XG4yODE1Olx0XHRcdCpsZW5wID0gMDtcbjI4MTY6XHRcdFx0cmV0dXJuIDA7XG4yODE3Olx0XHR9XG4yODE4Olx0XG4yODE5Olx0XHR0bXAgPSAqdGFibGU7XG4yODIwOlx0XHR0bXAuZGF0YSA9IGRhdGE7XG4yODIxOlx0XG4yODIyOlx0XHRpZiAoIXdyaXRlKSB7XG4yODIzOlx0XHRcdGNvbnN0IGNoYXIgKnA7XG4yODI0Olx0XG4yODI1Olx0XHRcdHN3aXRjaCAobW9kZSkge1xuMjgyNjpcdFx0XHRjYXNlIFZTT0NLX05FVF9NT0RFX0dMT0JBTDpcbjI4Mjc6XHRcdFx0XHRwID0gVlNPQ0tfTkVUX01PREVfU1RSX0dMT0JBTDtcbjI4Mjg6XHRcdFx0XHRicmVhaztcbjI4Mjk6XHRcdFx0Y2FzZSBWU09DS19ORVRfTU9ERV9MT0NBTDpcbjI4MzA6XHRcdFx0XHRwID0gVlNPQ0tfTkVUX01PREVfU1RSX0xPQ0FMO1xuMjgzMTpcdFx0XHRcdGJyZWFrO1xuMjgzMjpcdFx0XHRkZWZhdWx0OlxuMjgzMzpcdFx0XHRcdFdBUk5fT05DRSh0cnVlLCBcJiMzNDtuZXRucyBoYXMgaW52YWxpZCB2c29jayBtb2RlXCYjMzQ7KTtcbjI4MzQ6XHRcdFx0XHQqbGVucCA9IDA7XG4yODM1Olx0XHRcdFx0cmV0dXJuIDA7XG4yODM2Olx0XHRcdH1cbjI4Mzc6XHRcbjI4Mzg6XHRcdFx0c3Ryc2NweShkYXRhLCBwLCBzaXplb2YoZGF0YSkpO1xuMjgzOTpcdFx0XHR0bXAubWF4bGVuID0gc3RybGVuKHApO1xuMjg0MDpcdFx0fVxuMjg0MTpcdFxuMjg0MjpcdFx0cmV0ID0gcHJvY19kb3N0cmluZyhcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xuMjg0MzpcdFx0aWYgKHJldCB8fCAhd3JpdGUpXG4yODQ0Olx0XHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA4MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoIEZ1enppbmc/KioKCk9rYXksIHNvIEkmIzM5O3ZlIHNwb3R0ZWQgYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBpc3N1ZS4gTGluZSAyODE0IGNhdWdodCBteSBleWU6IHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgY2hlY2sgZm9yIGAqbGVucGAgaW4gdGhlIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AgZnVuY3Rpb24uIElmIGAqbGVucGAgaXMgemVybyB3aGVuIGB3cml0ZWAgaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgd2l0aG91dCBzZXR0aW5nIGAqbmV3X21vZGVgLiBMYXRlciwgaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AsIGBuZXdfbW9kZWAgaXMgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZC4gS01TQU4gb3IgdGhlIGNvbXBpbGVyIHdvdWxkIGRlZmluaXRlbHkgZmxhZyB0aGF0LiBGaXhpbmcgaXQgYnkgaW5pdGlhbGl6aW5nIGBuZXdfbW9kZWAgaXMgdGhlIHdheSB0byBnby4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogZG9lcyB0aGlzIHBhdGNoIHdhcnJhbnQgZnV6emluZyBhY2NvcmRpbmcgdG8gdGhvc2UgY3JpdGVyaWE/ICBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bjogVGhlIGdvYWwgaXMgdG8gY2F0Y2ggY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIGFueSBuZXdseSBleHBvc2VkIGJ1Z3MuIFdlJiMzOTtyZSBsb29raW5nIGF0ICYjMzQ7cmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSYjMzQ7IHNwZWNpZmljYWxseS4KClRoZSBjcml0ZXJpYSBzYXkgKm5vdCogdG8gZnV6ejogbW9kaWZpY2F0aW9ucyB0byBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgdXNlci1zcGFjZSB0b29scywgbG9nZ2luZyB0aGF0IGRvZXNuJiMzOTt0IGFmZmVjdCBjb250cm9sIGZsb3csIGJ1aWxkIHN5c3RlbSBjaGFuZ2VzIHRoYXQgZG9uJiMzOTt0IGNoYW5nZSBDIGxvZ2ljLCBoYXJkd2FyZSB0aGF0JiMzOTtzIG5vdCBlbXVsYXRlZCwgb3IgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLgoKQnV0IHRoZXkgKmRvKiBzYXkgdG8gZnV6ejogY29yZSBzdWJzeXN0ZW1zIGxpa2UgbmV0d29ya2luZywgcmVmYWN0b3JpbmdzIG9mIHJlYWNoYWJsZSBjb2RlLCBydW50aW1lIGFzc2VydGlvbnMsIGFuZCByZWFjaGFibGUgZHJpdmVycy9wcm90b2NvbHMuCgpUaGlzIHBhdGNoIHRvdWNoZXMgYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AsIHdoaWNoIGlzIGNvcmUgbmV0d29ya2luZyDigJMgc3BlY2lmaWNhbGx5LCB2c29jayBzb2NrZXQgYW5kIHN5c2N0bCBoYW5kbGluZy4gICpJcyogaXQgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gIFllcyEgIFRoZSBgdnNvY2tfdGFibGVgIGlzIHJlZ2lzdGVyZWQgdmlhIHN5c2N0bCBhbmQgcHJvY2ZzIGF0IGAvcHJvYy9zeXMvbmV0L3Zzb2NrLy4uLmAsIHdoaWNoICppcyogcmVhY2hhYmxlLiBUaGlzIG1lYW5zIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2c29ja190YWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNDc9RVhQT1JUX1NZTUJPTF9HUEwodnNvY2tfY29ubmVjdGVkX3RhYmxlKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNDg6REVGSU5FX1NQSU5MT0NLKHZzb2NrX3RhYmxlX2xvY2spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjI0OTpFWFBPUlRfU1lNQk9MX0dQTCh2c29ja190YWJsZV9sb2NrKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTAtXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTM0Mj1zdGF0aWMgdm9pZCB2c29ja19pbnNlcnRfdW5ib3VuZChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM0My17XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzQ0Olx0c3Bpbl9sb2NrX2JoKFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTM0NS1cdF9fdnNvY2tfaW5zZXJ0X2JvdW5kKHZzb2NrX3VuYm91bmRfc29ja2V0cywgdnNrKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozNDY6XHRzcGluX3VubG9ja19iaChcdTAwMjZ2c29ja190YWJsZV9sb2NrKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNDctfVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0zNDk9dm9pZCB2c29ja19pbnNlcnRfY29ubmVjdGVkKHN0cnVjdCB2c29ja19zb2NrICp2c2spXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM1My1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozNTQ6XHRzcGluX2xvY2tfYmgoXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzU1LVx0X192c29ja19pbnNlcnRfY29ubmVjdGVkKGxpc3QsIHZzayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzU2Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzU3LX1cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzYwPXZvaWQgdnNvY2tfcmVtb3ZlX2JvdW5kKHN0cnVjdCB2c29ja19zb2NrICp2c2spXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzYxLXtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozNjI6XHRzcGluX2xvY2tfYmgoXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzYzLVx0aWYgKF9fdnNvY2tfaW5fYm91bmRfdGFibGUodnNrKSlcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNjQtXHRcdF9fdnNvY2tfcmVtb3ZlX2JvdW5kKHZzayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzY1Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzY2LX1cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzY5PXZvaWQgdnNvY2tfcmVtb3ZlX2Nvbm5lY3RlZChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM3MC17XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzcxOlx0c3Bpbl9sb2NrX2JoKFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTM3Mi1cdGlmIChfX3Zzb2NrX2luX2Nvbm5lY3RlZF90YWJsZSh2c2spKVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM3My1cdFx0X192c29ja19yZW1vdmVfY29ubmVjdGVkKHZzayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mzc0Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzc1LX1cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzgzPXN0cnVjdCBzb2NrICp2c29ja19maW5kX2JvdW5kX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICphZGRyLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zODctXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mzg4Olx0c3Bpbl9sb2NrX2JoKFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTM4OS1cdHNrID0gX192c29ja19maW5kX2JvdW5kX3NvY2tldF9uZXQoYWRkciwgbmV0KTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzkyLVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjM5MzpcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTM5NC1cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9NDE1PXN0cnVjdCBzb2NrICp2c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXRfbmV0KHN0cnVjdCBzb2NrYWRkcl92bSAqc3JjLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00MjAtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6NDIxOlx0c3Bpbl9sb2NrX2JoKFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTQyMi1cdHNrID0gX192c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXRfbmV0KHNyYywgZHN0LCBuZXQpO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00MjUtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6NDI2Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNDI3LVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz00NTQ9dm9pZCB2c29ja19mb3JfZWFjaF9jb25uZWN0ZWRfc29ja2V0KHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNDU4LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjQ1OTpcdHNwaW5fbG9ja19iaChcdTAwMjZ2c29ja190YWJsZV9sb2NrKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00NjAtXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTQ3MS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo0NzI6XHRzcGluX3VubG9ja19iaChcdTAwMjZ2c29ja190YWJsZV9sb2NrKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00NzMtfVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz04Njk9c3RhdGljIGludCBfX3Zzb2NrX2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTg4OC1cdGNhc2UgU09DS19TRVFQQUNLRVQ6XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6ODg5Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtODkwLVx0XHRyZXR2YWwgPSBfX3Zzb2NrX2JpbmRfY29ubmVjdGlibGUodnNrLCBhZGRyKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo4OTE6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTg5Mi1cdFx0YnJlYWs7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI4NzM9c3RhdGljIGludCB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkwMi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTAzOnN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkwNC1cdHtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjkyOT1zdGF0aWMgaW50IF9fbmV0X2luaXQgdnNvY2tfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkzMy1cdGlmIChuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTM0Olx0XHR0YWJsZSA9IHZzb2NrX3RhYmxlO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MzUtXHR9IGVsc2Uge1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjI5MzY6XHRcdHRhYmxlID0ga21lbWR1cCh2c29ja190YWJsZSwgc2l6ZW9mKHZzb2NrX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkzNy1cdFx0aWYgKCF0YWJsZSlcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjk0NS1cdG5ldC1cdTAwM2V2c29jay5zeXNjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwmIzM0O25ldC92c29ja1wmIzM0OywgdGFibGUsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjk0NjpcdFx0XHRcdFx0XHQgICAgICAgQVJSQVlfU0laRSh2c29ja190YWJsZSkpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NDctXHRpZiAoIW5ldC1cdTAwM2V2c29jay5zeXNjdGxfaGRyKVxuLS1cbm5ldC92bXdfdnNvY2svZGlhZy5jPTE0PXN0YXRpYyBpbnQgc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdm13X3Zzb2NrL2RpYWcuYy0yOS1cdC8qIExvY2sgb3JkZXIgZGljdGF0ZXMgdGhhdCBza19sb2NrIGlzIGFjcXVpcmVkIGJlZm9yZVxubmV0L3Ztd192c29jay9kaWFnLmM6MzA6XHQgKiB2c29ja190YWJsZV9sb2NrLCBzbyB3ZSBjYW5ub3QgbG9jayBoZXJlLiAgU2ltcGx5IGRvbiYjMzk7dCB0YWtlXG5uZXQvdm13X3Zzb2NrL2RpYWcuYzozMTpcdCAqIHNrX2xvY2s7IHNrIGlzIGd1YXJhbnRlZWQgdG8gc3RheSBhbGl2ZSBzaW5jZSB2c29ja190YWJsZV9sb2NrIGlzXG5uZXQvdm13X3Zzb2NrL2RpYWcuYy0zMi1cdCAqIGhlbGQuXG4tLVxubmV0L3Ztd192c29jay9kaWFnLmM9NDg9c3RhdGljIGludCB2c29ja19kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC92bXdfdnNvY2svZGlhZy5jLTY3LVxubmV0L3Ztd192c29jay9kaWFnLmM6Njg6XHRzcGluX2xvY2tfYmgoXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XG5uZXQvdm13X3Zzb2NrL2RpYWcuYy02OS1cbi0tXG5uZXQvdm13X3Zzb2NrL2RpYWcuYy0xMzEtZG9uZTpcbm5ldC92bXdfdnNvY2svZGlhZy5jOjEzMjpcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xubmV0L3Ztd192c29jay9kaWFnLmMtMTMzLVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTQxMz1zdGF0aWMgdm9pZCB2aXJ0aW9fdnNvY2tfcmVzZXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNDE1LVx0Lyogdm1jaV90cmFuc3BvcnQuYyBkb2VzbiYjMzk7dCB0YWtlIHNrX2xvY2sgaGVyZSBlaXRoZXIuICBBdCBsZWFzdCB3ZSYjMzk7cmVcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjQxNjpcdCAqIHVuZGVyIHZzb2NrX3RhYmxlX2xvY2sgc28gdGhlIHNvY2sgY2Fubm90IGRpc2FwcGVhciB3aGlsZSB3ZSYjMzk7cmVcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQxNy1cdCAqIGV4ZWN1dGluZy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMTAKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipEZWx2aW5nIGludG8gdnNvY2sgTmFtZXNwYWNlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgdnNvY2tgIGhhbmRsZXMgbmFtZXNwYWNlcy4gTXkgaW5pdGlhbCBwb2ludCBvZiByZWZlcmVuY2UgaXMgdGhlIGB2c29ja190YWJsZWAgZGF0YSBzdHJ1Y3R1cmUsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBmaWVsZHMgYGNoaWxkX25zX21vZGVgIGFuZCBgbnNfbW9kZWAuIFRob3NlIGFyZSB0aGUga2V5IGluZGljYXRvcnMgb2Ygd2hhdCBuYW1lc3BhY2VzIGFyZSBpbnZvbHZlZCBhbmQgaG93LgoKVG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24sIEnigJltIHplcm9pbmcgaW4gb24gbGluZXMgMjkwMyB0aHJvdWdoIDI5MzAgb2YgYGFmX3Zzb2NrLmNgLiBUaGF04oCZcyB3aGVyZSB0aGUgbmFtZXNwYWNlIG1vZGUgbG9naWMgaXMgbGlrZWx5IGltcGxlbWVudGVkIGluIG1vcmUgZGV0YWlsIGFuZCBJIHNob3VsZCBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZSBtb2RlcyBhcmUgc2V0LCBob3cgdGhleSBpbnRlcmFjdCwgYW5kIHdoYXQgc2l0dWF0aW9ucyB0cmlnZ2VyIHBhcnRpY3VsYXIgYmVoYXZpb3JzLiBJIGV4cGVjdCB0byBzZWUgdGhlIGtleSBjaGVja3MgYW5kIGNvbmRpdGlvbmFscyBnb3Zlcm5pbmcgdGhlIG5hbWVzcGFjZSB0cmFuc2l0aW9ucyBvciBsaW1pdGF0aW9ucy4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlYWwgbWFnaWMgKG9yIHBvdGVudGlhbCBnb3RjaGFzISkgYXJlIGhhcHBlbmluZy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svYWZfdnNvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MDMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjkwMzpcdHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XG4yOTA0Olx0XHR7XG4yOTA1Olx0XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtuc19tb2RlXCYjMzQ7LFxuMjkwNjpcdFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LnZzb2NrLm1vZGUsXG4yOTA3Olx0XHRcdC5tYXhsZW5cdFx0PSBWU09DS19ORVRfTU9ERV9TVFJfTUFYLFxuMjkwODpcdFx0XHQubW9kZVx0XHQ9IDA0NDQsXG4yOTA5Olx0XHRcdC5wcm9jX2hhbmRsZXJcdD0gdnNvY2tfbmV0X21vZGVfc3RyaW5nXG4yOTEwOlx0XHR9LFxuMjkxMTpcdFx0e1xuMjkxMjpcdFx0XHQucHJvY25hbWVcdD0gXCYjMzQ7Y2hpbGRfbnNfbW9kZVwmIzM0OyxcbjI5MTM6XHRcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC52c29jay5jaGlsZF9uc19tb2RlLFxuMjkxNDpcdFx0XHQubWF4bGVuXHRcdD0gVlNPQ0tfTkVUX01PREVfU1RSX01BWCxcbjI5MTU6XHRcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuMjkxNjpcdFx0XHQucHJvY19oYW5kbGVyXHQ9IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ1xuMjkxNzpcdFx0fSxcbjI5MTg6XHRcdHtcbjI5MTk6XHRcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O2cyaF9mYWxsYmFja1wmIzM0OyxcbjI5MjA6XHRcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC52c29jay5nMmhfZmFsbGJhY2ssXG4yOTIxOlx0XHRcdC5tYXhsZW5cdFx0PSBzaXplb2YoaW50KSxcbjI5MjI6XHRcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuMjkyMzpcdFx0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG9pbnR2ZWNfbWlubWF4LFxuMjkyNDpcdFx0XHQuZXh0cmExXHRcdD0gU1lTQ1RMX1pFUk8sXG4yOTI1Olx0XHRcdC5leHRyYTJcdFx0PSBTWVNDVExfT05FLFxuMjkyNjpcdFx0fSxcbjI5Mjc6XHR9O1xuMjkyODpcdFxuMjkyOTpcdHN0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxuMjkzMDpcdHtcbjI5MzE6XHRcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuMjkzMjpcdFxuMjkzMzpcdFx0aWYgKG5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkge1xuMjkzNDpcdFx0XHR0YWJsZSA9IHZzb2NrX3RhYmxlO1xuMjkzNTpcdFx0fSBlbHNlIHtcbjI5MzY6XHRcdFx0dGFibGUgPSBrbWVtZHVwKHZzb2NrX3RhYmxlLCBzaXplb2YodnNvY2tfdGFibGUpLCBHRlBfS0VSTkVMKTtcbjI5Mzc6XHRcdFx0aWYgKCF0YWJsZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwODcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uY2VybnMgUmVnYXJkaW5nIGAvcHJvYy9zeXMvbmV0L3Zzb2NrL2NoaWxkX25zX21vZGVgKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBpbW1lZGlhdGVseSBjb25jZXJuaW5nOiBJIHNlZSB0aGF0IGAvcHJvYy9zeXMvbmV0L3Zzb2NrL2NoaWxkX25zX21vZGVgIGlzIHdyaXRhYmxlIGFuZCBoYXMgbW9kZSAwNjQ0LiBUaGF0JiMzOTtzIGEgaHVnZSByZWQgZmxhZyByaWdodCBvZmYgdGhlIGJhdC4gVGhlIGZhY3QgdGhhdCB1c2Vyc3BhY2UgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhpcyBzeXNjdGwgaXMgcHJvYmxlbWF0aWMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGNvbnRleHQuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hlbiB1c2Vyc3BhY2Ugd3JpdGVzIHRvIGAvcHJvYy9zeXMvbmV0L3Zzb2NrL2NoaWxkX25zX21vZGVgLCBpdCB0cmlnZ2VycyBhIGRpcmVjdCBjYWxsIHRvIGB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdgLiBBbmQgdGhhdCYjMzk7cy4uLiB0aGF0JiMzOTtzIGEgZGlyZWN0IGVudHJ5IHBvaW50IGludG8gdGhlIGNvcmUgdnNvY2sgbmV0d29ya2luZyBjb2RlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIHBhdGggdGhhdCYjMzk7cyBlYXNpbHkgYWNjZXNzaWJsZSBmcm9tIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQsIGNyaXRpY2FsbHksIGZyb20gc3l6a2FsbGVyIGZ1enppbmcuCgpNeSBwcmltYXJ5IGNvbmNlcm4gcmlnaHQgbm93IGlzIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYCBmdW5jdGlvbiBpdHNlbGYuIE1vZGlmeWluZyB0aGUgY29uZmlndXJhdGlvbiB2aWEgdGhpcyBzeXNjdGwgaXMgZXNzZW50aWFsbHkgY2hhbmdpbmcgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgbmV0d29ya2luZy92c29jayBjb3JlLCBhbmQgdGhhdCBvcGVucyB0aGUgZG9vciB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIGEgdmVjdG9yIHRvIHBvdGVudGlhbGx5IGV4cGxvaXQgYW55IGJ1Z3MsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpTbywgbGV0JiMzOTtzIHN0b3AgYW5kIHZlcmlmeSB3aGF0IEtjb25maWcgZW5hYmxlcyBgYWZfdnNvY2suY2AgYW5kIHRha2UgYSBkZWVwIGJyZWF0aC4gVGltZSBmb3Igc29tZSBtb3JlIGludmVzdGlnYXRpb24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FmX3Zzb2NrXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svTWFrZWZpbGU9OD1vYmotJChDT05GSUdfVlNPQ0tFVFNfTE9PUEJBQ0spICYjNDM7PSB2c29ja19sb29wYmFjay5vXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTktXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjEwOnZzb2NrLXkgJiM0Mzs9IGFmX3Zzb2NrLm8gYWZfdnNvY2tfdGFwLm8gdnNvY2tfYWRkci5vXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTExLXZzb2NrLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdnNvY2tfYnBmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2OTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyB0aGUgdnNvY2sgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBuZXQvdm13X3Zzb2NrL01ha2VmaWxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhpcyB2c29jayBtb2R1bGUsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgcXVpY2sgc2tpbSBvZiB0aGUgZmlyc3QgMTUgbGluZXMuIFRoaXMgdXN1YWxseSBnaXZlcyBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGNvcmUgdmFyaWFibGVzLCBpbmNsdWRlZCBkaXJlY3RvcmllcywgYW5kIGFueSBpbW1lZGlhdGUgZmxhZ3MgdGhhdCBhcmUgc2V0LiBJIGV4cGVjdCB0byBzZWUgdGhlIHR5cGljYWwga2VybmVsIG1vZHVsZSBzZXR1cDogcHJvYmFibHkgc2V0dGluZyB1cCBgb2JqLW1gLCBtYXliZSBzb21lIGluY2x1ZGUgcGF0aHMsIGFuZCBkZWZpbml0aW9ucyBmb3Igc291cmNlIGZpbGVzLiBBbnl0aGluZyB1bnVzdWFsLCBsaWtlIHNwZWNpZmljIGNvbXBpbGVyIGZsYWdzIG9yIGNvbmRpdGlvbmFsIGxvZ2ljLCB3aWxsIGltbWVkaWF0ZWx5IGNhdGNoIG15IGV5ZSBhbmQgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0b2JqLSQoQ09ORklHX1ZTT0NLRVRTKSAmIzQzOz0gdnNvY2sub1xuICAgMzpcdG9iai0kKENPTkZJR19WU09DS0VUU19ESUFHKSAmIzQzOz0gdnNvY2tfZGlhZy5vXG4gICA0Olx0b2JqLSQoQ09ORklHX1ZNV0FSRV9WTUNJX1ZTT0NLRVRTKSAmIzQzOz0gdm13X3Zzb2NrX3ZtY2lfdHJhbnNwb3J0Lm9cbiAgIDU6XHRvYmotJChDT05GSUdfVklSVElPX1ZTT0NLRVRTKSAmIzQzOz0gdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnQub1xuICAgNjpcdG9iai0kKENPTkZJR19WSVJUSU9fVlNPQ0tFVFNfQ09NTU9OKSAmIzQzOz0gdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLm9cbiAgIDc6XHRvYmotJChDT05GSUdfSFlQRVJWX1ZTT0NLRVRTKSAmIzQzOz0gaHZfc29jay5vXG4gICA4Olx0b2JqLSQoQ09ORklHX1ZTT0NLRVRTX0xPT1BCQUNLKSAmIzQzOz0gdnNvY2tfbG9vcGJhY2sub1xuICAgOTpcdFxuICAxMDpcdHZzb2NrLXkgJiM0Mzs9IGFmX3Zzb2NrLm8gYWZfdnNvY2tfdGFwLm8gdnNvY2tfYWRkci5vXG4gIDExOlx0dnNvY2stJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSB2c29ja19icGYub1xuICAxMjpcdFxuICAxMzpcdHZzb2NrX2RpYWcteSAmIzQzOz0gZGlhZy5vXG4gIDE0Olx0XG4gIDE1Olx0dm13X3Zzb2NrX3ZtY2lfdHJhbnNwb3J0LXkgJiM0Mzs9IHZtY2lfdHJhbnNwb3J0Lm8gdm1jaV90cmFuc3BvcnRfbm90aWZ5Lm8gXFxcbiAgMTY6XHRcdHZtY2lfdHJhbnNwb3J0X25vdGlmeV9xc3RhdGUub1xuICAxNzpcdFxuICAxODpcdHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0LXkgJiM0Mzs9IHZpcnRpb190cmFuc3BvcnQub1xuICAxOTpcdFxuICAyMDpcdHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi15ICYjNDM7PSB2aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzM2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSB2c29jayBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBDT05GSUdfVlNPQ0tFVFNgIGlzIHJlc3BvbnNpYmxlIGZvciBjb21waWxpbmcgYHZzb2NrLm9gLCBhbmQgdGhhdCBpbiB0dXJuIHB1bGxzIGluIGBhZl92c29jay5vYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19WU09DS0VUU2AgdG8gc2VlIHdoYXQgZWxzZSBtaWdodCBiZSByZXF1aXJlZCBvciBwb3RlbnRpYWxseSBpbXBhY3RpbmcgdGhpcyBtb2R1bGUuIExldCYjMzk7cyBkaXZlIGludG8gYG5ldC92bXdfdnNvY2svS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGRldGFpbHMgdGVsbCB1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBWc29jayBwcm90b2NvbFxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgVlNPQ0tFVFNcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0IHByb3RvY29sXCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFZpcnR1YWwgU29ja2V0IFByb3RvY29sIGlzIGEgc29ja2V0IHByb3RvY29sIHNpbWlsYXIgdG8gVENQL0lQXG4gIDEwOlx0XHQgIGFsbG93aW5nIGNvbW11bmljYXRpb24gYmV0d2VlbiBWaXJ0dWFsIE1hY2hpbmVzIGFuZCBoeXBlcnZpc29yXG4gIDExOlx0XHQgIG9yIGhvc3QuXG4gIDEyOlx0XG4gIDEzOlx0XHQgIFlvdSBzaG91bGQgYWxzbyBzZWxlY3Qgb25lIG9yIG1vcmUgaHlwZXJ2aXNvci1zcGVjaWZpYyB0cmFuc3BvcnRzXG4gIDE0Olx0XHQgIGJlbG93LlxuICAxNTpcdFxuICAxNjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDE3Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHZzb2NrLiBJZiB1bnN1cmUsIHNheSBOLlxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBWU09DS0VUU19ESUFHXG4gIDIwOlx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgMjE6XHRcdGRlcGVuZHMgb24gVlNPQ0tFVFNcbiAgMjI6XHRcdGRlZmF1bHQgeVxuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBTdXBwb3J0IGZvciBQRl9WU09DSyBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXG4gIDI1Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDI2Olx0XG4gIDI3Olx0XHQgIEVuYWJsZSB0aGlzIG1vZHVsZSBzbyB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIGNhbiBxdWVyeSBvcGVuIHNvY2tldHMuXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXG4gIDMwOlx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldHMgbG9vcGJhY2sgdHJhbnNwb3J0XCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIFZTT0NLRVRTXG4gIDMyOlx0XHRkZWZhdWx0IHlcbiAgMzM6XHRcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG4gIDM0Olx0XHRoZWxwXG4gIDM1Olx0XHQgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBsb29wYmFjayB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0cyxcbiAgMzY6XHRcdCAgdXNpbmcgdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLlxuICAzNzpcdFxuICAzODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDM5Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHZzb2NrX2xvb3BiYWNrLiBJZiB1bnN1cmUsIHNheSBOLlxuICA0MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAyNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIEhpZXJhcmNoeSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYHNvdXJjZSAmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZyYjMzQ7YCBsaW5lIGxpdmVzIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIHN5c3RlbS4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gc3RhcnQgYXQgdGhlIHRvcCwgb3IgYXQgbGVhc3QgYSByZWFzb25hYmx5IGhpZ2gtbGV2ZWwgS2NvbmZpZyBmaWxlLiBJJiMzOTtsbCBjaGVjayBgbmV0L0tjb25maWdgIGZpcnN0LiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnQgZm9yIGFueXRoaW5nIG5ldHdvcmstcmVsYXRlZC4gSG9wZWZ1bGx5LCB0aGlzIHBhcmVudCBLY29uZmlnIGZpbGUgd2lsbCBkaXJlY3RseSBpbmNsdWRlIHRoZSB2bXdfdnNvY2sgS2NvbmZpZywgb3IgYXQgbGVhc3QgZ2l2ZSBtZSBhIHBvaW50ZXIgdG8gdGhlIHJlbGV2YW50IHNlY3Rpb24gd2l0aGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuLi4gYW5kIGhvdyBmYXIgSSBuZWVkIHRvIGdvIHRvIHRyYWNlIHRoaXMgZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm13X3Zzb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yNzQ9c291cmNlIFwmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNzU6c291cmNlIFwmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctMjc2LXNvdXJjZSBcJiMzNDtuZXQvbmV0bGluay9LY29uZmlnXCYjMzQ7XG4tLVxubmV0L01ha2VmaWxlPTY0PW9iai0kKENPTkZJR19PUEVOVlNXSVRDSClcdCYjNDM7PSBvcGVudnN3aXRjaC9cbm5ldC9NYWtlZmlsZTo2NTpvYmotJChDT05GSUdfVlNPQ0tFVFMpXHQmIzQzOz0gdm13X3Zzb2NrL1xubmV0L01ha2VmaWxlLTY2LW9iai0kKENPTkZJR19NUExTKVx0XHQmIzQzOz0gbXBscy9cbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWc9Mjk9Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTM1LVx0ICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgbG9vcGJhY2sgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHMsXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6MzY6XHQgIHVzaW5nIHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5cbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zNy1cbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWc9NDE9Y29uZmlnIFZNV0FSRV9WTUNJX1ZTT0NLRVRTXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTUwLVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NTE6XHQgIHdpbGwgYmUgY2FsbGVkIHZtd192c29ja192bWNpX3RyYW5zcG9ydC4gSWYgdW5zdXJlLCBzYXkgTi5cbm5ldC92bXdfdnNvY2svS2NvbmZpZy01Mi1cbm5ldC92bXdfdnNvY2svS2NvbmZpZz01Mz1jb25maWcgVklSVElPX1ZTT0NLRVRTXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTYzLVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbm5ldC92bXdfdnNvY2svS2NvbmZpZzo2NDpcdCAgY2FsbGVkIHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0LiBJZiB1bnN1cmUsIHNheSBOLlxubmV0L3Ztd192c29jay9LY29uZmlnLTY1LVxubmV0L3Ztd192c29jay9LY29uZmlnPTY2PWNvbmZpZyBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTcwLVx0ICB0aGUgdmlydGlvX3Zzb2NrLiAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxubmV0L3Ztd192c29jay9LY29uZmlnOjcxOlx0ICB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydF9jb21tb24uXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNzItXG4tLVxubmV0L3Ztd192c29jay9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19WU09DS0VUU19ESUFHKSAmIzQzOz0gdnNvY2tfZGlhZy5vXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1ZNV0FSRV9WTUNJX1ZTT0NLRVRTKSAmIzQzOz0gdm13X3Zzb2NrX3ZtY2lfdHJhbnNwb3J0Lm9cbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6NTpvYmotJChDT05GSUdfVklSVElPX1ZTT0NLRVRTKSAmIzQzOz0gdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnQub1xubmV0L3Ztd192c29jay9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19WSVJUSU9fVlNPQ0tFVFNfQ09NTU9OKSAmIzQzOz0gdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLm9cbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtNy1vYmotJChDT05GSUdfSFlQRVJWX1ZTT0NLRVRTKSAmIzQzOz0gaHZfc29jay5vXG4tLVxubmV0L3Ztd192c29jay9NYWtlZmlsZT0xMz12c29ja19kaWFnLXkgJiM0Mzs9IGRpYWcub1xubmV0L3Ztd192c29jay9NYWtlZmlsZS0xNC1cbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6MTU6dm13X3Zzb2NrX3ZtY2lfdHJhbnNwb3J0LXkgJiM0Mzs9IHZtY2lfdHJhbnNwb3J0Lm8gdm1jaV90cmFuc3BvcnRfbm90aWZ5Lm8gXFxcbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtMTYtXHR2bWNpX3RyYW5zcG9ydF9ub3RpZnlfcXN0YXRlLm9cbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtMTctXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjE4OnZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0LXkgJiM0Mzs9IHZpcnRpb190cmFuc3BvcnQub1xubmV0L3Ztd192c29jay9NYWtlZmlsZS0xOS1cbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6MjA6dm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLXkgJiM0Mzs9IHZpcnRpb190cmFuc3BvcnRfY29tbW9uLm9cbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtMjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjMxCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSB2c29ja2V0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYENPTkZJR19WU09DS0VUU2Agc2l0cyBpbm5vY3VvdXNseSBlbm91Z2gsIHJpZ2h0IHRoZXJlIHVuZGVyIGBuZXQvYC4gTm90aGluZyBvYnZpb3VzbHkgaG9sZGluZyBpdCBiYWNrLCBubyB3ZWlyZCBkZXBlbmRlbmNpZXMgdG8gdHJpcCBvdmVyLiBCdXQgd2FpdCwgYSBuYWdnaW5nIHRob3VnaHQg4oCTIHdoYXQgYWJvdXQgc3lzY3RsPyBDb3VsZCB0aGVyZSBiZSBzb21lIGludGVyYWN0aW9uLCBzb21lIGNvbmRpdGlvbiBJJiMzOTttIG1pc3Npbmc/IEkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIGB2c29ja19zeXNjdGxfcmVnaXN0ZXJgIGZ1bmN0aW9uLCB3aGVyZSBzeXNjdGwgcGFyYW1ldGVycyBhcmUgZGVmaW5lZCwgaXMgZ3VhcmRlZCBieSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBvciBuZXR3b3JrIG9wZXJhdGlvbiBjaGVja3MuIExldCYjMzk7cyBkaWcgaW50byB0aGUgYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aGF0IGB2c29ja19zeXNjdGxfcmVnaXN0ZXJgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpZiB0aGVyZSBhcmUgYW55IGdvdGNoYXMgaW4gdGhpcyBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTI4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5Mjg6XHRcbjI5Mjk6XHRzdGF0aWMgaW50IF9fbmV0X2luaXQgdnNvY2tfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbjI5MzA6XHR7XG4yOTMxOlx0XHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbjI5MzI6XHRcbjI5MzM6XHRcdGlmIChuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbjI5MzQ6XHRcdFx0dGFibGUgPSB2c29ja190YWJsZTtcbjI5MzU6XHRcdH0gZWxzZSB7XG4yOTM2Olx0XHRcdHRhYmxlID0ga21lbWR1cCh2c29ja190YWJsZSwgc2l6ZW9mKHZzb2NrX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4yOTM3Olx0XHRcdGlmICghdGFibGUpXG4yOTM4Olx0XHRcdFx0Z290byBlcnJfYWxsb2M7XG4yOTM5Olx0XG4yOTQwOlx0XHRcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNldnNvY2subW9kZTtcbjI5NDE6XHRcdFx0dGFibGVbMV0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V2c29jay5jaGlsZF9uc19tb2RlO1xuMjk0MjpcdFx0XHR0YWJsZVsyXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXZzb2NrLmcyaF9mYWxsYmFjaztcbjI5NDM6XHRcdH1cbjI5NDQ6XHRcbjI5NDU6XHRcdG5ldC1cdTAwM2V2c29jay5zeXNjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwmIzM0O25ldC92c29ja1wmIzM0OywgdGFibGUsXG4yOTQ2Olx0XHRcdFx0XHRcdFx0ICAgICAgIEFSUkFZX1NJWkUodnNvY2tfdGFibGUpKTtcbjI5NDc6XHRcdGlmICghbmV0LVx1MDAzZXZzb2NrLnN5c2N0bF9oZHIpXG4yOTQ4Olx0XHRcdGdvdG8gZXJyX3JlZztcbjI5NDk6XHRcbjI5NTA6XHRcdHJldHVybiAwO1xuMjk1MTpcdFxuMjk1MjpcdGVycl9yZWc6XG4yOTUzOlx0XHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSlcbjI5NTQ6XHRcdFx0a2ZyZWUodGFibGUpO1xuMjk1NTpcdGVycl9hbGxvYzpcbjI5NTY6XHRcdHJldHVybiAtRU5PTUVNO1xuMjk1NzpcdH1cbjI5NTg6XHRcbjI5NTk6XHRzdGF0aWMgdm9pZCB2c29ja19zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXG4yOTYwOlx0e1xuMjk2MTpcdFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4yOTYyOlx0XG4yOTYzOlx0XHR0YWJsZSA9IG5ldC1cdTAwM2V2c29jay5zeXNjdGxfaGRyLVx1MDAzZWN0bF90YWJsZV9hcmc7XG4yOTY0Olx0XHR1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUobmV0LVx1MDAzZXZzb2NrLnN5c2N0bF9oZHIpO1xuMjk2NTpcdFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpXG4yOTY2Olx0XHRcdGtmcmVlKHRhYmxlKTtcbjI5Njc6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTEzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYSBuZXR3b3JraW5nIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIHZzb2NrIFN5c2N0bCBSZWdpc3RyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGB2c29ja19zeXNjdGxfcmVnaXN0ZXJgIGZ1bmN0aW9uIGxpdmVzLiBHaXZlbiB0aGUgY29udGV4dCwgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSBpdCYjMzk7cyBuZXN0bGVkIHdpdGhpbiB0aGUgdnNvY2sgbmV0d29yayBvcGVyYXRpb25zIHN0cnVjdHVyZSwgcHJvYmFibHkgc29tZXRoaW5nIGxpa2UgYHZzb2NrX25ldF9vcHNgLiBJJiMzOTtsbCB3YW50IHRvIHZlcmlmeSB0aGF0LiBNeSBndXQgc2F5cyB0byBsb29rIHNvbWV3aGVyZSBhcm91bmQgbGluZXMgMjk2OCB0byAzMDAwIOKAkyB0aGF0IHNvdW5kcyBsaWtlIGEgcmVhc29uYWJsZSByYW5nZSBmb3IgdGhpcyBraW5kIG9mIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svYWZfdnNvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5NjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjk2ODpcdFxuMjk2OTpcdHN0YXRpYyB2b2lkIHZzb2NrX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbjI5NzA6XHR7XG4yOTcxOlx0XHRpZiAobmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKVxuMjk3MjpcdFx0XHRuZXQtXHUwMDNldnNvY2subW9kZSA9IFZTT0NLX05FVF9NT0RFX0dMT0JBTDtcbjI5NzM6XHRcdGVsc2VcbjI5NzQ6XHRcdFx0bmV0LVx1MDAzZXZzb2NrLm1vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zKTtcbjI5NzU6XHRcbjI5NzY6XHRcdG5ldC1cdTAwM2V2c29jay5jaGlsZF9uc19tb2RlID0gbmV0LVx1MDAzZXZzb2NrLm1vZGU7XG4yOTc3Olx0XHRuZXQtXHUwMDNldnNvY2suY2hpbGRfbnNfbW9kZV9sb2NrZWQgPSAwO1xuMjk3ODpcdFx0bmV0LVx1MDAzZXZzb2NrLmcyaF9mYWxsYmFjayA9IDE7XG4yOTc5Olx0fVxuMjk4MDpcdFxuMjk4MTpcdHN0YXRpYyBfX25ldF9pbml0IGludCB2c29ja19zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuMjk4MjpcdHtcbjI5ODM6XHRcdHZzb2NrX25ldF9pbml0KG5ldCk7XG4yOTg0Olx0XG4yOTg1Olx0XHRpZiAodnNvY2tfc3lzY3RsX3JlZ2lzdGVyKG5ldCkpXG4yOTg2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjk4NzpcdFxuMjk4ODpcdFx0cmV0dXJuIDA7XG4yOTg5Olx0fVxuMjk5MDpcdFxuMjk5MTpcdHN0YXRpYyBfX25ldF9leGl0IHZvaWQgdnNvY2tfc3lzY3RsX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbjI5OTI6XHR7XG4yOTkzOlx0XHR2c29ja19zeXNjdGxfdW5yZWdpc3RlcihuZXQpO1xuMjk5NDpcdH1cbjI5OTU6XHRcbjI5OTY6XHRzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHZzb2NrX3N5c2N0bF9vcHMgPSB7XG4yOTk3Olx0XHQuaW5pdCA9IHZzb2NrX3N5c2N0bF9pbml0X25ldCxcbjI5OTg6XHRcdC5leGl0ID0gdnNvY2tfc3lzY3RsX2V4aXRfbmV0LFxuMjk5OTpcdH07XG4zMDAwOlx0XG4zMDAxOlx0c3RhdGljIGludCBfX2luaXQgdnNvY2tfaW5pdCh2b2lkKVxuMzAwMjpcdHtcbjMwMDM6XHRcdGludCBlcnIgPSAwO1xuMzAwNDpcdFxuMzAwNTpcdFx0dnNvY2tfaW5pdF90YWJsZXMoKTtcbjMwMDY6XHRcbjMwMDc6XHRcdHZzb2NrX3Byb3RvLm93bmVyID0gVEhJU19NT0RVTEU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTE0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSB2c29jayBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoZSB2c29jayBpbml0aWFsaXphdGlvbiwgYHZzb2NrX2luaXQoKWAgY2FsbHMgYHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmFtcDt2c29ja19zeXNjdGxfb3BzKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0RvIHdlIG5lZWQgdGhlIGBDT05GSUdfTkVUX1NZU0NUTGAgb3B0aW9uIGVuYWJsZWQgZm9yIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/JiMzNDsgSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gYSByZWxhdGVkIGNvbnRleHQsIGFuZCBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgIGlzIGltcGxlbWVudGVkIGFuZCB1c2VkLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaCBvZiB0aGUgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ2lzdGVyX25ldF9zeXNjdGxfc3omIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9NTE4PXN0cnVjdCBjdGxfdGFibGU7XG4tLVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTUyMC0jZGVmaW5lIHJlZ2lzdGVyX25ldF9zeXNjdGwobmV0LCBwYXRoLCB0YWJsZSlcdFxcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6NTIxOlx0cmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIHBhdGgsIHRhYmxlLCBBUlJBWV9TSVpFKHRhYmxlKSlcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC01MjItI2lmZGVmIENPTkZJR19TWVNDVExcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaD01MjM9aW50IG5ldF9zeXNjdGxfaW5pdCh2b2lkKTtcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDo1MjQ6c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJlZ2lzdGVyX25ldF9zeXNjdGxfc3ooc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTUyNS1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpO1xuLS1cbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaD01Mjg9c3RhdGljIGlubGluZSBpbnQgbmV0X3N5c2N0bF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDo1Mjk6c3RhdGljIGlubGluZSBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtNTMwLVx0Y29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIHNpemVfdCB0YWJsZV9zaXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ4MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFuYWx5c2lzOiB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBDT05GSUdfU1lTQ1RMYCBhbmQgYENPTkZJR19WU09DS0VUU2AgYXJlIHJlcXVpcmVkLCBzbyB0aGUgcHJlcmVxdWlzaXRlcyBhcmUgdGhlcmUuIFRoaXMgY2hhbmdlIGlzIGluIGBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNgLCBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AuCgpUaGUgY29kZSBtb2RpZmllcyB0aGUgc3lzY3RsIGhhbmRsZXIgZm9yIHRoZSB2c29jayBuZXRucyBtb2RlLiBBbnkgcHJvY2VzcyBjYW4gcmVhZCBvciB3cml0ZSB0byBgL3Byb2Mvc3lzL25ldC92c29jay9jaGlsZF9uc19tb2RlYCwgbWFraW5nIHRoaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhhdCYjMzk7cyBnb29kLCB0aGF0JiMzOTtzIHRoZSBwcmltYXJ5IGh1cmRsZSBmb3IgZnV6emluZy4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogc2hvdWxkIHdlIGZ1enogaXQ/IExldCYjMzk7cyBjaGVjayB0aGUgZ3VpZGVsaW5lcy4gVGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgZmFsbCB1bmRlciBhbnkgb2YgdGhlICYjMzQ7bmVnYXRpdmUgY3JpdGVyaWEuJiMzNDsgSXQmIzM5O3Mgbm90IGRvY3VtZW50YXRpb24sIGEgYnVpbGQgc3lzdGVtIGNoYW5nZSB0aGF0IGRvZXNuJiMzOTt0IGFmZmVjdCBjb21waWxlZCBDIGxvZ2ljLCB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgZHJpdmVyIHRlYXJkb3duLiBJdCYjMzk7cyBhbHNvIG5vdCBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aC4gVGhpcyBpcyB0b3VjaGluZyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGluIGNvcmUgbmV0d29ya2luZywgYW5kIHRoZSBwYXRjaCBtb2RpZmllcyBhIHN5c2N0bCBoYW5kbGVyIChgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYCkuIEZ1cnRoZXJtb3JlLCBpdCBpbml0aWFsaXplcyBhIGxvY2FsIHZhcmlhYmxlIGBuZXdfbW9kZWAgZGlmZmVyZW50bHkuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyB0aGUgdmFsdWUgb2YgYG5ld19tb2RlYCB3aGVuIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AgZG9lcyBub3Qgc2V0IGl0IChlLmcuLCB3aGVuIHdyaXRpbmcgMCBieXRlcykuCgpUaGUgcGF0Y2ggY2xlYXJseSB0b3VjaGVzIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlLCBzbyB0aGUgYW5zd2VyIGlzICp5ZXMqLiBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuCgpOb3csIGZvciBgRm9jdXNTeW1ib2xzYC4gVGhlIHByaW1hcnkgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQgaXMgYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AuIEJ1dCB3aGF0IGFib3V0IGl0cyBjYWxsZXJzIG9yIHJlbGF0ZWQgZnVuY3Rpb25zPyBIb2xkIG9uLi4uIGlzIGB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdgIHN0YXRpYyBhbmQgaW5saW5lZD8gTm8sIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmVmZXJlbmNlZCBieSBwb2ludGVyIHdpdGhpbiB0aGUgYHByb2NfaGFuZGxlcmAgb2YgdGhlIHN5c2N0bCB0YWJsZSBlbnRyeS4gVGhlIGNvbXBpbGVyICp3aWxsKiBnZW5lcmF0ZSBhIHN5bWJvbCBmb3IgaXQuIExldCYjMzk7cyBzZWUgaWYgdGhlIG90aGVyIHN5bWJvbHMgYXJlIHRoZXJlLCB0b28sIHN1Y2ggYXMgYHZzb2NrX25ldF9jaGlsZF9tb2RlYCBhbmQgYHZzb2NrX25ldF9zZXRfY2hpbGRfbW9kZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zzb2NrX25ldF9jaGlsZF9tb2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9hZl92c29jay5jPTI4NTk9c3RhdGljIGludCB2c29ja19uZXRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg3Mi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODczOnN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg3NC1cdFx0XHRcdCAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODgwLVx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsIHZzb2NrLmNoaWxkX25zX21vZGUpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4ODE6XHRuZXdfbW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg4Mi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODgzLVx0cmV0ID0gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjg4NDpcdFx0XHRcdCAgICAgIHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCksIFx1MDAyNm5ld19tb2RlKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODg1LVx0aWYgKHJldClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjkwMz1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTE1LVx0XHQubW9kZVx0XHQ9IDA2NDQsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjkxNjpcdFx0LnByb2NfaGFuZGxlclx0PSB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTE3LVx0fSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjk2OT1zdGF0aWMgdm9pZCB2c29ja19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NzMtXHRlbHNlXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjk3NDpcdFx0bmV0LVx1MDAzZXZzb2NrLm1vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTc1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk2NgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlRyYWNpbmcgdGhlIHZzb2NrX25ldF9jaGlsZF9tb2RlIERlZmluaXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdoZXJlIGlzIGB2c29ja19uZXRfY2hpbGRfbW9kZWAgZGVmaW5lZD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyBkZWNsYXJlZCBhbmQgaW5pdGlhbGl6ZWQgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBmdW5jdGlvbiBhbmQgaG93IGl0IGltcGFjdHMgdGhlIGxhcmdlciBzeXN0ZW0uIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gZGVidWdnaW5nIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGUgcHJvZ3JhbSwgb3IgZXZlbiBqdXN0IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwcm9ncmFtLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHRyYWNpbmcgdGhhdCB2YXJpYWJsZSBkb3duIGFuZCB1bmRlcnN0YW5kaW5nIGV2ZXJ5dGhpbmcgYWJvdXQgaXRzIHVzYWdlLCBhbmQgaXRzIGVmZmVjdHMgb24gdGhlIHByb2dyYW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zzb2NrX25ldF9jaGlsZF9tb2RlXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmg9Mjg5PXN0YXRpYyBpbmxpbmUgYm9vbCB2c29ja19uZXRfc2V0X2NoaWxkX21vZGUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbmluY2x1ZGUvbmV0L2FmX3Zzb2NrLmgtMzAzLVxuaW5jbHVkZS9uZXQvYWZfdnNvY2suaDozMDQ6c3RhdGljIGlubGluZSBlbnVtIHZzb2NrX25ldF9tb2RlIHZzb2NrX25ldF9jaGlsZF9tb2RlKHN0cnVjdCBuZXQgKm5ldClcbmluY2x1ZGUvbmV0L2FmX3Zzb2NrLmgtMzA1LXtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjg3Mz1zdGF0aWMgaW50IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODgwLVx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsIHZzb2NrLmNoaWxkX25zX21vZGUpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4ODE6XHRuZXdfbW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg4Mi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODgzLVx0cmV0ID0gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjg4NDpcdFx0XHRcdCAgICAgIHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCksIFx1MDAyNm5ld19tb2RlKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODg1LVx0aWYgKHJldClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjk2OT1zdGF0aWMgdm9pZCB2c29ja19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NzMtXHRlbHNlXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjk3NDpcdFx0bmV0LVx1MDAzZXZzb2NrLm1vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTc1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTY1MAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgYHZzb2NrX25ldF9jaGlsZF9tb2RlYCoqCgpPa2F5LCBzbyBgdnNvY2tfbmV0X2NoaWxkX21vZGVgIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgaW5saW5lIHdpdGhpbiBgaW5jbHVkZS9uZXQvYWZfdnNvY2suaGAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIHZzb2NrIG5ldCBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyBpcyByZWxhdGVkIHRvIGhvdyB0aGUgdnNvY2sgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBjaGlsZCBuZXR3b3JrIG5hbWVzcGFjZXMgb3IgY29uZmlndXJhdGlvbnMuCgpOb3csIHdoYXQgYWJvdXQgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nYD8gVGhhdCYjMzk7cyBhbm90aGVyIHBvdGVudGlhbCBwaWVjZSBvZiB0aGUgcHV6emxlIEkgbmVlZCB0byBjb25zaWRlci4gSSBzaG91bGQgcHJvYmFibHkgdHJhY2sgZG93biB3aGVyZSB0aGF0JiMzOTtzIGRlZmluZWQgb3IgdXNlZCB0byBzZWUgaG93IGl0JiMzOTtzIGxpbmtlZC4KCkxldCBtZSBjaGVjayBsaW5lIDI4MDAgb2YgYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgdnNvY2sgaW1wbGVtZW50YXRpb24gYW5kIGhvdyBpdCBtYW5hZ2VzIG5ldHdvcmsgbW9kZXMuIEhvcGVmdWxseSwgdGhhdCBsb2NhdGlvbiB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gdGhlc2UgdmFyaWFibGVzLCBpbmNsdWRpbmcgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhleSBhcmUgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4MDA6XHRzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgdnNvY2tfZGV2aWNlID0ge1xuMjgwMTpcdFx0Lm5hbWVcdFx0PSBcJiMzNDt2c29ja1wmIzM0OyxcbjI4MDI6XHRcdC5mb3BzXHRcdD0gXHUwMDI2dnNvY2tfZGV2aWNlX29wcyxcbjI4MDM6XHR9O1xuMjgwNDpcdFxuMjgwNTpcdHN0YXRpYyBpbnQgX192c29ja19uZXRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbjI4MDY6XHRcdFx0XHRcdCAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MsXG4yODA3Olx0XHRcdFx0XHQgICBlbnVtIHZzb2NrX25ldF9tb2RlIG1vZGUsXG4yODA4Olx0XHRcdFx0XHQgICBlbnVtIHZzb2NrX25ldF9tb2RlICpuZXdfbW9kZSlcbjI4MDk6XHR7XG4yODEwOlx0XHRjaGFyIGRhdGFbVlNPQ0tfTkVUX01PREVfU1RSX01BWF0gPSB7MH07XG4yODExOlx0XHRzdHJ1Y3QgY3RsX3RhYmxlIHRtcDtcbjI4MTI6XHRcdGludCByZXQ7XG4yODEzOlx0XG4yODE0Olx0XHRpZiAoIXRhYmxlLVx1MDAzZWRhdGEgfHwgIXRhYmxlLVx1MDAzZW1heGxlbiB8fCAhKmxlbnApIHtcbjI4MTU6XHRcdFx0KmxlbnAgPSAwO1xuMjgxNjpcdFx0XHRyZXR1cm4gMDtcbjI4MTc6XHRcdH1cbjI4MTg6XHRcbjI4MTk6XHRcdHRtcCA9ICp0YWJsZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIFZTb2NrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIFZTb2NrIHNpdHVhdGlvbiwgYW5kIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGtlZXAgaW4gbWluZCBhcmUgYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AgYW5kIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gcGljdHVyZS4gSSBrbm93IHRoaXMgc3R1ZmYsIGJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiwgc28gSSB3aWxsIHN0YXJ0IGJ5IGNoZWNraW5nIGZvciBhbnkgbWlzc2luZyBjb25maWd1cmF0aW9uIGJpdHMuCgpGaXJzdCBzdG9wIGlzIHRoZSBgbmV0L3Ztd192c29jay9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjZW50cmFsIG9wdGlvbiwgYW5kIHRoZXJlIGl0IGlzOiBgY29uZmlnIFZTT0NLRVRTIHRyaXN0YXRlICYjMzQ7VmlydHVhbCBTb2NrZXQgcHJvdG9jb2wmIzM0O2AuIEdvb2QsIHRoYXQgY29uZmlybXMgdGhlIGNvcmUgY29tcG9uZW50LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMsIHRvby4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoZSBzeXNjdGwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1NZU0NUTGAgaXMgZW5hYmxlZCwgYmVjYXVzZSBWU29jayBsaWtlbHkgZXhwb3NlcyBzb21lIHR1bmFibGUgcGFyYW1ldGVycy4KCkZpbmFsbHksIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSB0b3Agb2YgYGFmX3Zzb2NrLmNgIGl0c2VsZi4gVGhlIGluY2x1ZGVzIGFuZCBpbml0aWFsIGRlZmluaXRpb25zIHRoZXJlIG9mdGVuIHByb3ZpZGUgYSBxdWljayBvdmVydmlldyBvZiBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBJIG1pZ2h0IGhhdmUgbWlzc2VkLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LypcbiAgIDM6XHQgKiBWTXdhcmUgdlNvY2tldHMgRHJpdmVyXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBWTXdhcmUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAgIDY6XHQgKi9cbiAgIDc6XHRcbiAgIDg6XHQvKiBJbXBsZW1lbnRhdGlvbiBub3RlczpcbiAgIDk6XHQgKlxuICAxMDpcdCAqIC0gVGhlcmUgYXJlIHR3byBraW5kcyBvZiBzb2NrZXRzOiB0aG9zZSBjcmVhdGVkIGJ5IHVzZXIgYWN0aW9uIChzdWNoIGFzXG4gIDExOlx0ICogY2FsbGluZyBzb2NrZXQoMikpIGFuZCB0aG9zZSBjcmVhdGVkIGJ5IGluY29taW5nIGNvbm5lY3Rpb24gcmVxdWVzdCBwYWNrZXRzLlxuICAxMjpcdCAqXG4gIDEzOlx0ICogLSBUaGVyZSBhcmUgdHdvIFwmIzM0O2dsb2JhbFwmIzM0OyB0YWJsZXMsIG9uZSBmb3IgYm91bmQgc29ja2V0cyAoc29ja2V0cyB0aGF0IGhhdmVcbiAgMTQ6XHQgKiBzcGVjaWZpZWQgYW4gYWRkcmVzcyB0aGF0IHRoZXkgYXJlIHJlc3BvbnNpYmxlIGZvcikgYW5kIG9uZSBmb3IgY29ubmVjdGVkXG4gIDE1Olx0ICogc29ja2V0cyAoc29ja2V0cyB0aGF0IGhhdmUgZXN0YWJsaXNoZWQgYSBjb25uZWN0aW9uIHdpdGggYW5vdGhlciBzb2NrZXQpLlxuICAxNjpcdCAqIFRoZXNlIHRhYmxlcyBhcmUgXCYjMzQ7Z2xvYmFsXCYjMzQ7IGluIHRoYXQgYWxsIHNvY2tldHMgb24gdGhlIHN5c3RlbSBhcmUgcGxhY2VkXG4gIDE3Olx0ICogd2l0aGluIHRoZW0uIC0gTm90ZSwgdGhvdWdoLCB0aGF0IHRoZSBib3VuZCB0YWJsZSBjb250YWlucyBhbiBleHRyYSBlbnRyeVxuICAxODpcdCAqIGZvciBhIGxpc3Qgb2YgdW5ib3VuZCBzb2NrZXRzIGFuZCBTT0NLX0RHUkFNIHNvY2tldHMgd2lsbCBhbHdheXMgcmVtYWluIGluXG4gIDE5Olx0ICogdGhhdCBsaXN0LiBUaGUgYm91bmQgdGFibGUgaXMgdXNlZCBzb2xlbHkgZm9yIGxvb2t1cCBvZiBzb2NrZXRzIHdoZW4gcGFja2V0c1xuICAyMDpcdCAqIGFyZSByZWNlaXZlZCBhbmQgdGhhdCYjMzk7cyBub3QgbmVjZXNzYXJ5IGZvciBTT0NLX0RHUkFNIHNvY2tldHMgc2luY2Ugd2UgY3JlYXRlXG4gIDIxOlx0ICogYSBkYXRhZ3JhbSBoYW5kbGUgZm9yIGVhY2ggYW5kIG5lZWQgbm90IHBlcmZvcm0gYSBsb29rdXAuICBLZWVwaW5nIFNPQ0tfREdSQU1cbiAgMjI6XHQgKiBzb2NrZXRzIG91dCBvZiB0aGUgYm91bmQgaGFzaCBidWNrZXRzIHdpbGwgcmVkdWNlIHRoZSBjaGFuY2Ugb2YgY29sbGlzaW9uc1xuICAyMzpcdCAqIHdoZW4gbG9va2luZyBmb3IgU09DS19TVFJFQU0gc29ja2V0cyBhbmQgcHJldmVudHMgdXMgZnJvbSBoYXZpbmcgdG8gY2hlY2sgdGhlXG4gIDI0Olx0ICogc29ja2V0IHR5cGUgaW4gdGhlIGhhc2ggdGFibGUgbG9va3Vwcy5cbiAgMjU6XHQgKlxuICAyNjpcdCAqIC0gU29ja2V0cyBjcmVhdGVkIGJ5IHVzZXIgYWN0aW9uIHdpbGwgZWl0aGVyIGJlIFwmIzM0O2NsaWVudFwmIzM0OyBzb2NrZXRzIHRoYXRcbiAgMjc6XHQgKiBpbml0aWF0ZSBhIGNvbm5lY3Rpb24gb3IgXCYjMzQ7c2VydmVyXCYjMzQ7IHNvY2tldHMgdGhhdCBsaXN0ZW4gZm9yIGNvbm5lY3Rpb25zOyB3ZSBkb1xuICAyODpcdCAqIG5vdCBzdXBwb3J0IHNpbXVsdGFuZW91cyBjb25uZWN0cyAodHdvIFwmIzM0O2NsaWVudFwmIzM0OyBzb2NrZXRzIGNvbm5lY3RpbmcpLlxuICAyOTpcdCAqXG4gIDMwOlx0ICogLSBcJiMzNDtTZXJ2ZXJcJiMzNDsgc29ja2V0cyBhcmUgcmVmZXJyZWQgdG8gYXMgbGlzdGVuZXIgc29ja2V0cyB0aHJvdWdob3V0IHRoaXNcbiAgMzE6XHQgKiBpbXBsZW1lbnRhdGlvbiBiZWNhdXNlIHRoZXkgYXJlIGluIHRoZSBUQ1BfTElTVEVOIHN0YXRlLiAgV2hlbiBhXG4gIDMyOlx0ICogY29ubmVjdGlvbiByZXF1ZXN0IGlzIHJlY2VpdmVkICh0aGUgc2Vjb25kIGtpbmQgb2Ygc29ja2V0IG1lbnRpb25lZCBhYm92ZSksXG4gIDMzOlx0ICogd2UgY3JlYXRlIGEgbmV3IHNvY2tldCBhbmQgcmVmZXIgdG8gaXQgYXMgYSBwZW5kaW5nIHNvY2tldC4gIFRoZXNlIHBlbmRpbmdcbiAgMzQ6XHQgKiBzb2NrZXRzIGFyZSBwbGFjZWQgb24gdGhlIHBlbmRpbmcgY29ubmVjdGlvbiBsaXN0IG9mIHRoZSBsaXN0ZW5lciBzb2NrZXQuXG4gIDM1Olx0ICogV2hlbiBmdXR1cmUgcGFja2V0cyBhcmUgcmVjZWl2ZWQgZm9yIHRoZSBhZGRyZXNzIHRoZSBsaXN0ZW5lciBzb2NrZXQgaXNcbiAgMzY6XHQgKiBib3VuZCB0bywgd2UgY2hlY2sgaWYgdGhlIHNvdXJjZSBvZiB0aGUgcGFja2V0IGlzIGZyb20gb25lIHRoYXQgaGFzIGFuXG4gIDM3Olx0ICogZXhpc3RpbmcgcGVuZGluZyBjb25uZWN0aW9uLiAgSWYgaXQgZG9lcywgd2UgcHJvY2VzcyB0aGUgcGFja2V0IGZvciB0aGVcbiAgMzg6XHQgKiBwZW5kaW5nIHNvY2tldC4gIFdoZW4gdGhhdCBzb2NrZXQgcmVhY2hlcyB0aGUgY29ubmVjdGVkIHN0YXRlLCBpdCBpcyByZW1vdmVkXG4gIDM5Olx0ICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0JiMzOTtzIHBlbmRpbmcgbGlzdCBhbmQgZW5xdWV1ZWQgaW4gdGhlIGxpc3RlbmVyXG4gIDQwOlx0ICogc29ja2V0JiMzOTtzIGFjY2VwdCBxdWV1ZS4gIENhbGxlcnMgb2YgYWNjZXB0KDIpIHdpbGwgYWNjZXB0IGNvbm5lY3RlZCBzb2NrZXRzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDQ3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgdnNvY2sgUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHZzb2NrLCBhbmQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwZXItbmV0IHN1YnN5c3RlbSByZWdpc3RyYXRpb24uIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGRpcmVjdGx5IGF0IHRoZSBzb3VyY2UgY29kZSDigJMgc3BlY2lmaWNhbGx5IGBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNgLiBJIGtub3cgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBBRl9WU09DSyBmdW5jdGlvbmFsaXR5IGlzIGRlZmluZWQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLCBuYXR1cmFsbHksIHNvIHRoZSBhcmVhIGFyb3VuZCBgcmVnaXN0ZXJfcGVybmV0X3N1YnN5c2AgaXMgd2hlcmUgSSYjMzk7bGwgYmUgY29uY2VudHJhdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHZzb2NrIGZhbWlseSBob29rcyBpbnRvIHRoZSBuZXR3b3JraW5nIHN0YWNrIGF0IHRoZSBwZXItbmV0IG5hbWVzcGFjZSBsZXZlbC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIHRoYXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvcnJlY3QgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29udGVudGlvbiBwb2ludHMsIG9yIHZlcmlmeSB0aGUgaW50ZW5kZWQgYmVoYXZpb3Igb2YgdGhlIHN1YnN5c3RlbSYjMzk7cyBsaWZlY3ljbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zzb2NrX3N5c2N0bF9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjk5MT1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHZzb2NrX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5OTUtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjk5NjpzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHZzb2NrX3N5c2N0bF9vcHMgPSB7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjk5Ny1cdC5pbml0ID0gdnNvY2tfc3lzY3RsX2luaXRfbmV0LFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0zMDAxPXN0YXRpYyBpbnQgX19pbml0IHZzb2NrX2luaXQodm9pZClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzAyNy1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozMDI4Olx0aWYgKHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2dnNvY2tfc3lzY3RsX29wcykpIHtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMDI5LVx0XHRlcnIgPSAtRU5PTUVNO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0zMDQ3PXN0YXRpYyB2b2lkIF9fZXhpdCB2c29ja19leGl0KHZvaWQpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwNTEtXHRwcm90b191bnJlZ2lzdGVyKFx1MDAyNnZzb2NrX3Byb3RvKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozMDUyOlx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNnZzb2NrX3N5c2N0bF9vcHMpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwNTMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjEwMgoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiAzOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFZTT0NLRVRTIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIHplcm9lZCBpbiBvbiB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGhlcmUuIGBDT05GSUdfVlNPQ0tFVFNgIGlzIHRoZSBwcmltYXJ5IG9uZSwgbmF0dXJhbGx5LiBUaGVuLCBgQ09ORklHX1NZU0NUTGAgaXMgcmVxdWlyZWQgZm9yIHRoZSBzeXNjdGwgc3VwcG9ydCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkIG9uIGFtZDY0IHN5c3RlbXMgYW5kIGZvciBzeXprYWxsZXIuCgpOb3csIEkgbmVlZGVkIHRvIGNvbmZpcm0gd2hldGhlciBgQ09ORklHX05FVGAgaXMgcmVxdWlyZWQuIFNpbmNlIGBWU09DS0VUU2AgbGl2ZXMgdW5kZXIgYG5ldC9gLCBpdCBtYWRlIHNlbnNlIHRvIGNoZWNrLiBMb29raW5nIGF0IGBuZXQvdm13X3Zzb2NrL0tjb25maWdgLCBzcGVjaWZpY2FsbHksIGxpbmUgNiBjb25maXJtcyB0aGF0IGBWU09DS0VUU2AgKmlzKiBpbmNsdWRlZCB3aGVuIGBDT05GSUdfTkVUYCBpcyBlbmFibGVkLiBTbywgYFZTT0NLRVRTYCBhbmQgYFNZU0NUTGAgYXJlIHRoZSBtYWluIHRoaW5ncyBJIG5lZWQgdG8gZm9jdXMgb24uCgpOZXh0LCBJIGRpZCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBGb2N1c1N5bWJvbHMuIEkgaWRlbnRpZmllZCBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYCBhbmQgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nYC4gTG9va3MgbGlrZSB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgb25seSBtb2RpZnlpbmcgYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AsIHdoaWNoIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gcmVhZGluZyBhbmQgd3JpdGluZyBgL3Byb2Mvc3lzL25ldC92c29jay9jaGlsZF9uc19tb2RlYC4KCkZpbmFsbHksIEkgY2hlY2tlZCBXb3J0aEZ1enppbmcuIFRoZSBwYXRjaCBpcyBpbml0aWFsaXppbmcgYG5ld19tb2RlYCB3aXRoaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AuIENydWNpYWxseSwgdGhpcyBtb2RpZmllcyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYGFmX3Zzb2NrYC4gQWNjb3JkaW5nIHRvIG15IGNyaXRlcmlhLCBhbnkgbG9naWMgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBxdWFsaWZ5LiBTZWN0aW9uIDMgaXMgY2xlYXIgb24gdGhhdC4gUGx1cywgaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBtZWV0IGFueSBvZiB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgaW4gU2VjdGlvbiAyLgoKRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtTWVNDVEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcmIzM0OywKICAgICYjMzQ7X192c29ja19uZXRfbW9kZV9zdHJpbmcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKCkgaW4gbmV0L3Ztd192c29jay9hZl92c29jay5jIHRvIGluaXRpYWxpemUgdGhlIG5ld19tb2RlIHZhcmlhYmxlIGJlZm9yZSBwYXNzaW5nIGl0IHRvIF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKCksIHByZXZlbnRpbmcgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkIHdoZW4gd3JpdGluZyB0byAvcHJvYy9zeXMvbmV0L3Zzb2NrL2NoaWxkX25zX21vZGUgd2l0aCB6ZXJvIGxlbmd0aC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHN5c2N0bCBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1NZU0NUTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyYjMzQ7LAogICAgJiMzNDtfX3Zzb2NrX25ldF9tb2RlX3N0cmluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoKSBpbiBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3X21vZGUgdmFyaWFibGUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gX192c29ja19uZXRfbW9kZV9zdHJpbmcoKSwgcHJldmVudGluZyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWQgd2hlbiB3cml0aW5nIHRvIC9wcm9jL3N5cy9uZXQvdnNvY2svY2hpbGRfbnNfbW9kZSB3aXRoIHplcm8gbGVuZ3RoLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc3lzY3RsIGNvZGUgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT45bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIHRoZSBzdGFjayB2YXJpYWJsZSBgbmV3X21vZGVgIGluIGB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoKWAgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkIChzcGVjaWZpY2FsbHkgaWYgYSB3cml0ZSBvY2N1cnJlZCB3aXRoIGAqbGVucCA9PSAwYCwgY2F1c2luZyBgX192c29ja19uZXRfbW9kZV9zdHJpbmcoKWAgdG8gcmV0dXJuIDAgd2l0aG91dCBhc3NpZ25pbmcgYCpuZXdfbW9kZWApLiBUaGUgcGF0Y2ggaW5pdGlhbGl6ZXMgYG5ld19tb2RlYCB3aXRoIGB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpYCBiZWZvcmUgcGFzc2luZyBpdHMgcG9pbnRlci5cblxuQmVjYXVzZSB0aGlzIGNoYW5nZSByZXNvbHZlcyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWQgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgb3IgZXhwb3NpbmcgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMsIGl0IHBvc2VzIG5vIHJpc2sgb2YgaW50cm9kdWNpbmcgS01TQU4tZGV0ZWN0YWJsZSBidWdzLiBTdGFuZGFyZCB0ZXN0aW5nL0tBU0FOIGlzIHN1ZmZpY2llbnQsIGFuZCBzcGF3bmluZyBhIGRlZGljYXRlZCwgcmVzb3VyY2UtaW50ZW5zaXZlIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjZiZTA5ZWE4NDU2NTg4ODhjYzg1OTM1YjIyNTMzNDA0MzdlZTM2MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDE0OjQwOjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCmluZGV4IDYyMmRiZDA0Njc5OTQuLjYxMTYzMzU3YWUzYzQgMTAwNjQ0Ci0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKQEAgLTI4NzgsNiAmIzQzOzI4NzgsNyBAQCBzdGF0aWMgaW50IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAogCWludCByZXQ7CiAKIAluZXQgPSBjb250YWluZXJfb2YodGFibGUtJmd0O2RhdGEsIHN0cnVjdCBuZXQsIHZzb2NrLmNoaWxkX25zX21vZGUpOwomIzQzOwluZXdfbW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCk7CiAKIAlyZXQgPSBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcywKIAkJCQkgICAgICB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpLCAmYW1wO25ld19tb2RlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBKdXN0aWZpY2F0aW9uOiB2bXdfdnNvY2sgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIHNlZSBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoIHNldHRpbmcgdXAgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGZpcnN0IGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgdGFyZ2V0ZWQgY2hhbmdlLCBzbyB3ZSBuZWVkIHRvIGRldGVybWluZSB0aGUgcG90ZW50aWFsIHJpc2suIEkmIzM5O20gbG9va2luZyBhdCBhIGRpZmYgd2l0aGluIGBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNgLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGxpbmUgMjg3OC4gVGhlIGRpZmYgc2hvd3MgYSBuZXcgbGluZSBgbmV3X21vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpO2AgaGFzIGJlZW4gYWRkZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsY3VsYXRpbmcgYSBgbmV3X21vZGVgIHZhcmlhYmxlIHVzaW5nIHRoZSBmdW5jdGlvbiBgdnNvY2tfbmV0X2NoaWxkX21vZGVgLiBUaGUgc3Vycm91bmRpbmcgY29kZSBpbnZvbHZlcyBhIGBjdGxfdGFibGVgIGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byBhIGNoaWxkIG5hbWVzcGFjZSBtb2RlIHN0cmluZy4gSSYjMzk7bGwgbmVlZCB0byByZWFkIHRoZSBjb2RlIGFyb3VuZCB0aGlzIGFkZGl0aW9uIG1vcmUgY2xvc2VseSwgc28gSSBzaG91bGQgZmlyZSB1cCBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgbGluZXMgaW4gdGhlIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdnNvY2tfbmV0X2NoaWxkX21vZGVgIGlzIGRvaW5nIHdpdGggdGhlIGBuZXRgIHN0cnVjdCwgYW5kIGhvdyB0aGF0IG5ldyB2YWx1ZSBpbnRlcmFjdHMgd2l0aCB0aGUgY29udHJvbCB0YWJsZSBzZXR1cC4gRGVwZW5kaW5nIG9uIGhvdyB0aG9zZSBmdW5jdGlvbnMgYXJlIGludGVyYWN0aW5nLCBhbmQgdGhlIGRhdGEgdGhleSBhcmUgd29ya2luZyB3aXRoLCB0aGlzIGNvdWxkIHZlcnkgd2VsbCBiZSBzb21ldGhpbmcgdGhhdCB3b3VsZCBiZW5lZml0IGZyb20gZnV6emluZyB3aXRoIEtNU0FOLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svYWZfdnNvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjg2MDpcdFx0XHRcdFx0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4yODYxOlx0e1xuMjg2MjpcdFx0c3RydWN0IG5ldCAqbmV0O1xuMjg2MzpcdFxuMjg2NDpcdFx0aWYgKHdyaXRlKVxuMjg2NTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMjg2NjpcdFxuMjg2NzpcdFx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsIHZzb2NrLm1vZGUpO1xuMjg2ODpcdFxuMjg2OTpcdFx0cmV0dXJuIF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zLFxuMjg3MDpcdFx0XHRcdFx0ICAgICAgIHZzb2NrX25ldF9tb2RlKG5ldCksIE5VTEwpO1xuMjg3MTpcdH1cbjI4NzI6XHRcbjI4NzM6XHRzdGF0aWMgaW50IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuMjg3NDpcdFx0XHRcdFx0ICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4yODc1Olx0e1xuMjg3NjpcdFx0ZW51bSB2c29ja19uZXRfbW9kZSBuZXdfbW9kZTtcbjI4Nzc6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbjI4Nzg6XHRcdGludCByZXQ7XG4yODc5Olx0XG4yODgwOlx0XHRuZXQgPSBjb250YWluZXJfb2YodGFibGUtXHUwMDNlZGF0YSwgc3RydWN0IG5ldCwgdnNvY2suY2hpbGRfbnNfbW9kZSk7XG4yODgxOlx0XHRuZXdfbW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCk7XG4yODgyOlx0XG4yODgzOlx0XHRyZXQgPSBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyxcbjI4ODQ6XHRcdFx0XHRcdCAgICAgIHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCksIFx1MDAyNm5ld19tb2RlKTtcbjI4ODU6XHRcdGlmIChyZXQpXG4yODg2Olx0XHRcdHJldHVybiByZXQ7XG4yODg3Olx0XG4yODg4Olx0XHRpZiAod3JpdGUpIHtcbjI4ODk6XHRcdFx0LyogUHJldmVudCBhIFwmIzM0O2xvY2FsXCYjMzQ7IG5hbWVzcGFjZSBmcm9tIGVzY2FsYXRpbmcgdG8gXCYjMzQ7Z2xvYmFsXCYjMzQ7LFxuMjg5MDpcdFx0XHQgKiB3aGljaCB3b3VsZCBnaXZlIG5lc3RlZCBuYW1lc3BhY2VzIGFjY2VzcyB0byBnbG9iYWwgQ0lEcy5cbjI4OTE6XHRcdFx0ICovXG4yODkyOlx0XHRcdGlmICh2c29ja19uZXRfbW9kZShuZXQpID09IFZTT0NLX05FVF9NT0RFX0xPQ0FMIFx1MDAyNlx1MDAyNlxuMjg5MzpcdFx0XHQgICAgbmV3X21vZGUgPT0gVlNPQ0tfTkVUX01PREVfR0xPQkFMKVxuMjg5NDpcdFx0XHRcdHJldHVybiAtRVBFUk07XG4yODk1Olx0XG4yODk2Olx0XHRcdGlmICghdnNvY2tfbmV0X3NldF9jaGlsZF9tb2RlKG5ldCwgbmV3X21vZGUpKVxuMjg5NzpcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4yODk4Olx0XHR9XG4yODk5Olx0XG4yOTAwOlx0XHRyZXR1cm4gMDtcbjI5MDE6XHR9XG4yOTAyOlx0XG4yOTAzOlx0c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdnNvY2tfdGFibGVbXSA9IHtcbjI5MDQ6XHRcdHtcbjI5MDU6XHRcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O25zX21vZGVcJiMzNDssXG4yOTA2Olx0XHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQudnNvY2subW9kZSxcbjI5MDc6XHRcdFx0Lm1heGxlblx0XHQ9IFZTT0NLX05FVF9NT0RFX1NUUl9NQVgsXG4yOTA4Olx0XHRcdC5tb2RlXHRcdD0gMDQ0NCxcbjI5MDk6XHRcdFx0LnByb2NfaGFuZGxlclx0PSB2c29ja19uZXRfbW9kZV9zdHJpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU1MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGlzIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bGwgZm9jdXMgb24gbGluZXMgMjgyMCB0aHJvdWdoIDI4NjUsIGFzIHRoYXQgc2VlbXMgbGlrZSB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiBjb2RlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggaG93IHRoZSB2c29jayBjb25uZWN0aW9uIGlzIGNvbmZpZ3VyZWQgb3IgcHJlc2VudGVkLiBJJiMzOTtsbCBwYXkgYXR0ZW50aW9uIHRvIGFueSBzdHJpbmcgbWFuaXB1bGF0aW9uIG9yIG5ldHdvcmstcmVsYXRlZCBwYXJhbWV0ZXJzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgZGVidWdnaW5nIGluZm8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9hZl92c29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODIwOlx0XHR0bXAuZGF0YSA9IGRhdGE7XG4yODIxOlx0XG4yODIyOlx0XHRpZiAoIXdyaXRlKSB7XG4yODIzOlx0XHRcdGNvbnN0IGNoYXIgKnA7XG4yODI0Olx0XG4yODI1Olx0XHRcdHN3aXRjaCAobW9kZSkge1xuMjgyNjpcdFx0XHRjYXNlIFZTT0NLX05FVF9NT0RFX0dMT0JBTDpcbjI4Mjc6XHRcdFx0XHRwID0gVlNPQ0tfTkVUX01PREVfU1RSX0dMT0JBTDtcbjI4Mjg6XHRcdFx0XHRicmVhaztcbjI4Mjk6XHRcdFx0Y2FzZSBWU09DS19ORVRfTU9ERV9MT0NBTDpcbjI4MzA6XHRcdFx0XHRwID0gVlNPQ0tfTkVUX01PREVfU1RSX0xPQ0FMO1xuMjgzMTpcdFx0XHRcdGJyZWFrO1xuMjgzMjpcdFx0XHRkZWZhdWx0OlxuMjgzMzpcdFx0XHRcdFdBUk5fT05DRSh0cnVlLCBcJiMzNDtuZXRucyBoYXMgaW52YWxpZCB2c29jayBtb2RlXCYjMzQ7KTtcbjI4MzQ6XHRcdFx0XHQqbGVucCA9IDA7XG4yODM1Olx0XHRcdFx0cmV0dXJuIDA7XG4yODM2Olx0XHRcdH1cbjI4Mzc6XHRcbjI4Mzg6XHRcdFx0c3Ryc2NweShkYXRhLCBwLCBzaXplb2YoZGF0YSkpO1xuMjgzOTpcdFx0XHR0bXAubWF4bGVuID0gc3RybGVuKHApO1xuMjg0MDpcdFx0fVxuMjg0MTpcdFxuMjg0MjpcdFx0cmV0ID0gcHJvY19kb3N0cmluZyhcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xuMjg0MzpcdFx0aWYgKHJldCB8fCAhd3JpdGUpXG4yODQ0Olx0XHRcdHJldHVybiByZXQ7XG4yODQ1Olx0XG4yODQ2Olx0XHRpZiAoKmxlbnAgXHUwMDNlPSBzaXplb2YoZGF0YSkpXG4yODQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg0ODpcdFxuMjg0OTpcdFx0aWYgKCFzdHJuY21wKGRhdGEsIFZTT0NLX05FVF9NT0RFX1NUUl9HTE9CQUwsIHNpemVvZihkYXRhKSkpXG4yODUwOlx0XHRcdCpuZXdfbW9kZSA9IFZTT0NLX05FVF9NT0RFX0dMT0JBTDtcbjI4NTE6XHRcdGVsc2UgaWYgKCFzdHJuY21wKGRhdGEsIFZTT0NLX05FVF9NT0RFX1NUUl9MT0NBTCwgc2l6ZW9mKGRhdGEpKSlcbjI4NTI6XHRcdFx0Km5ld19tb2RlID0gVlNPQ0tfTkVUX01PREVfTE9DQUw7XG4yODUzOlx0XHRlbHNlXG4yODU0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg1NTpcdFxuMjg1NjpcdFx0cmV0dXJuIDA7XG4yODU3Olx0fVxuMjg1ODpcdFxuMjg1OTpcdHN0YXRpYyBpbnQgdnNvY2tfbmV0X21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4yODYwOlx0XHRcdFx0XHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbjI4NjE6XHR7XG4yODYyOlx0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4yODYzOlx0XG4yODY0Olx0XHRpZiAod3JpdGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNzMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSB2c29jayBOZXR3b3JrIE1vZGUgU3RyaW5nKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nYC4gSSBrbm93IHRoaXMgaXMgYSBrZXkgdmFyaWFibGUgcmVsYXRlZCB0byB0aGUgdnNvY2sgaW1wbGVtZW50YXRpb24sIHNvIHVuZGVyc3RhbmRpbmcgaXQgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgYW5kIGhvdyBpdOKAmXMgdXNlZC4KCkxldCYjMzk7cyBzdGFydCBieSBleGFtaW5pbmcgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHN0cmluZywgc3BlY2lmaWNhbGx5IGxpbmVzIDI4MDAgdGhyb3VnaCAyODI1LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIGNvbnRleHQuIEkmIzM5O2xsIGV4cGVjdCB0byBzZWUgaG93IHRoZSBzdHJpbmcmIzM5O3Mgc3RydWN0dXJlIGlzIGRlZmluZWQgYW5kIHdoaWNoIGVsZW1lbnRzIGFyZSBpbXBvcnRhbnQuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IG5ldHdvcmsgbW9kZXMgYXJlIHJlcHJlc2VudGVkLCBhbmQgd2hhdCBpbmZvcm1hdGlvbiBpcyBlbmNvZGVkIHdpdGhpbiB0aGUgc3RyaW5nIGl0c2VsZi4gVGhpcyBzZWN0aW9uIGxpa2VseSBjb250YWlucyB0aGUgZnVuZGFtZW50YWwgc2V0dXAsIGFuZCBzaG91bGQgcmV2ZWFsIGhvdyBtb2RlcyBhcmUgZGVmaW5lZCBpbiB0aGUgdnNvY2sgc3Vic3lzdGVtLiBJJiMzOTttIGtlZW4gdG8gZ3Jhc3AgdGhlIG51YW5jZXMgaW4gdGhpcyBjcnVjaWFsIGRhdGEgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svYWZfdnNvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgwMDpcdHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB2c29ja19kZXZpY2UgPSB7XG4yODAxOlx0XHQubmFtZVx0XHQ9IFwmIzM0O3Zzb2NrXCYjMzQ7LFxuMjgwMjpcdFx0LmZvcHNcdFx0PSBcdTAwMjZ2c29ja19kZXZpY2Vfb3BzLFxuMjgwMzpcdH07XG4yODA0Olx0XG4yODA1Olx0c3RhdGljIGludCBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuMjgwNjpcdFx0XHRcdFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyxcbjI4MDc6XHRcdFx0XHRcdCAgIGVudW0gdnNvY2tfbmV0X21vZGUgbW9kZSxcbjI4MDg6XHRcdFx0XHRcdCAgIGVudW0gdnNvY2tfbmV0X21vZGUgKm5ld19tb2RlKVxuMjgwOTpcdHtcbjI4MTA6XHRcdGNoYXIgZGF0YVtWU09DS19ORVRfTU9ERV9TVFJfTUFYXSA9IHswfTtcbjI4MTE6XHRcdHN0cnVjdCBjdGxfdGFibGUgdG1wO1xuMjgxMjpcdFx0aW50IHJldDtcbjI4MTM6XHRcbjI4MTQ6XHRcdGlmICghdGFibGUtXHUwMDNlZGF0YSB8fCAhdGFibGUtXHUwMDNlbWF4bGVuIHx8ICEqbGVucCkge1xuMjgxNTpcdFx0XHQqbGVucCA9IDA7XG4yODE2Olx0XHRcdHJldHVybiAwO1xuMjgxNzpcdFx0fVxuMjgxODpcdFxuMjgxOTpcdFx0dG1wID0gKnRhYmxlO1xuMjgyMDpcdFx0dG1wLmRhdGEgPSBkYXRhO1xuMjgyMTpcdFxuMjgyMjpcdFx0aWYgKCF3cml0ZSkge1xuMjgyMzpcdFx0XHRjb25zdCBjaGFyICpwO1xuMjgyNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDM4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgdnNvY2sgUGF0Y2ggZm9yIEtNU0FOIE5lZWRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIG1ldGljdWxvdXNseSB0cmFjZSB0aGUgY29udHJvbCBmbG93IGFuZCBwb3RlbnRpYWwgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwYXRjaC4gRmlyc3QsIEkgc2VlIHRoZSBjb2RlIHNuaXBwZXQgaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AgYW5kIGltbWVkaWF0ZWx5IHplcm8gaW4gb24gdGhlIGBuZXdfbW9kZWAgdmFyaWFibGUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBpZiBpdCYjMzk7cyBpbml0aWFsaXplZCAqYmVmb3JlKiB0aGUgcGF0Y2ggaXMgYXBwbGllZC4gVGhlIHN1YnNlcXVlbnQgY29kZSBhbmQgY29uZGl0aW9uYWwgc3RhdGVtZW50cywgZXNwZWNpYWxseSB0aGUgaW50ZXJhY3Rpb24gd2l0aCBgX192c29ja19uZXRfbW9kZV9zdHJpbmdgLCBhcmUgYSByZWQgZmxhZyDigJMgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhlcmUgY2FuIGxlYWQgdG8gc3VidGxlLCBoYXJkLXRvLWRlYnVnIGlzc3VlcywgZXhhY3RseSB3aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoLgoKSSB0aGVuIHdlbnQgdGhyb3VnaCBhbmQgcmV2aWV3ZWQgdGhlIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AgZnVuY3Rpb24uIEkgc2VlIHRoZSBwb3RlbnRpYWwgZm9yIGBsZW5wYCB0byBiZSB6ZXJvLCBhbmQgd2hlbiB3cml0ZSBpcyBhbHNvIHRydWUsIHRoZSByZXR1cm4gaGFwcGVucyB3aXRob3V0IGV2ZXIgc2V0dGluZyBgbmV3X21vZGVgLiBCaW5nbyEgVGhpcyBsb29rcyBsaWtlIGEgY2xhc3NpYyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWQsIGEgS01TQU4gbmlnaHRtYXJlLiBUaGUgcGF0Y2gsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGNvcnJlY3RseSBhZGRyZXNzZXMgdGhpcyBieSBpbml0aWFsaXppbmcgYG5ld19tb2RlYCByaWdodCBhd2F5LiBTbyBpdCAqZml4ZXMqIHRoZSBidWcsIHRoZSBLTVNBTiByaXNrIGlzIHJlc29sdmVkLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhlIHBhdGNoICppbnRyb2R1Y2UqIGFueSBuZXcgS01TQU4gcmlza3M/IExldCYjMzk7cyBjYXJlZnVsbHkgY29uc2lkZXIgdGhlIGNyaXRlcmlhLiBEb2VzIGl0IHRvdWNoIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U/IE5vLiBEb2VzIGl0IGludHJvZHVjZSBuZXcgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBBYnNvbHV0ZWx5IG5vdCwgaXQmIzM5O3MgdGhlIG9wcG9zaXRlLiBEb2VzIGl0IGNoYW5nZSBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbj8gTm8sIGl0IGluaXRpYWxpemVzIGEgdmFyaWFibGUgdGhhdCB3YXNuJiMzOTt0IGluaXRpYWxpemVkIGVhcmxpZXIuIERvZXMgaXQgbW9kaWZ5IGJvdW5kcyBjaGVja3M/IE5vLgoKVGhlIGtleSBpcyB0aGF0IHRoZSBwYXRjaCAqY29ycmVjdHMqIGFuIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdHkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG9uZXMuIFRoZSBwdXJwb3NlIG9mIEtNU0FOIGlzIHRvIGZpbmQgc3VjaCBpc3N1ZXMsIG5vdCBuZWNlc3NhcmlseSB0byB2ZXJpZnkgdGhhdCBhIGZpeCBpcyBjb21wbGV0ZS4gS01TQU4gbWF5IGJlIG92ZXJraWxsIGluIHRoaXMgc2NlbmFyaW8uIEFjY29yZGluZyB0byB0aGUgc3RhdGVkIHJ1bGVzLCBydW5uaW5nIEtNU0FOIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHJpc2tzLCB3aGljaCBpdCBkb2VzbiYjMzk7dC4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoIGVsaW1pbmF0ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eSByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBvbmUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9hZl92c29jay5jPTI4NTk9c3RhdGljIGludCB2c29ja19uZXRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg3Mi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODczOnN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg3NC1cdFx0XHRcdCAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yOTAzPXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MTUtXHRcdC5tb2RlXHRcdD0gMDY0NCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTE2Olx0XHQucHJvY19oYW5kbGVyXHQ9IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MTctXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQ3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBhIGB2c29ja19uZXRgIE1vZGUgVHJhbnNpdGlvbioqCgpBbHJpZ2h0LCBJIHNlZSBhIGxpbmUgaGVyZTogYG5ld19tb2RlID0gdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KTtgLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMsICYjMzQ7SG1tLCB3aGF0JiMzOTtzIGB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpYCBhY3R1YWxseSAqZG9pbmcqPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbW9kZSB0cmFuc2l0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgdnNvY2tfbmV0X2NoaWxkX21vZGVgIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCYjMzk7cyByZXR1cm5pbmcgYW5kIHdoYXQgdGhlIG92ZXJhbGwgZWZmZWN0IHdpbGwgYmUgb24gdGhlIGBuZXRgIG9iamVjdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlJiMzOTtzIG9wZXJhdGlvbmFsIHNlbWFudGljcyB0byBjb250aW51ZS4gTGV0JiMzOTtzIHRyYWNlIGJhY2sgdG8gdGhhdCBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2c29ja19uZXRfY2hpbGRfbW9kZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9hZl92c29jay5oPTI4OT1zdGF0aWMgaW5saW5lIGJvb2wgdnNvY2tfbmV0X3NldF9jaGlsZF9tb2RlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5pbmNsdWRlL25ldC9hZl92c29jay5oLTMwMy1cbmluY2x1ZGUvbmV0L2FmX3Zzb2NrLmg6MzA0OnN0YXRpYyBpbmxpbmUgZW51bSB2c29ja19uZXRfbW9kZSB2c29ja19uZXRfY2hpbGRfbW9kZShzdHJ1Y3QgbmV0ICpuZXQpXG5pbmNsdWRlL25ldC9hZl92c29jay5oLTMwNS17XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI4NTk9c3RhdGljIGludCB2c29ja19uZXRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg3Mi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODczOnN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg3NC1cdFx0XHRcdCAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODgwLVx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsIHZzb2NrLmNoaWxkX25zX21vZGUpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4ODE6XHRuZXdfbW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg4Mi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODgzLVx0cmV0ID0gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjg4NDpcdFx0XHRcdCAgICAgIHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCksIFx1MDAyNm5ld19tb2RlKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODg1LVx0aWYgKHJldClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjkwMz1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTE1LVx0XHQubW9kZVx0XHQ9IDA2NDQsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjkxNjpcdFx0LnByb2NfaGFuZGxlclx0PSB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTE3LVx0fSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjk2OT1zdGF0aWMgdm9pZCB2c29ja19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NzMtXHRlbHNlXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjk3NDpcdFx0bmV0LVx1MDAzZXZzb2NrLm1vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTc1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDI5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSB2c29jayBIZWFkZXIqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgdnNvY2sgaW1wbGVtZW50YXRpb24sIGFuZCB0aGUgYGluY2x1ZGUvbmV0L2FmX3Zzb2NrLmhgIGhlYWRlciBmaWxlIGlzIHRoZSBsb2dpY2FsIGZpcnN0IHN0b3AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcmVnaW9uIGFyb3VuZCBsaW5lIDMwNC4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBpbmRpY2F0b3Igb2Ygc29tZXRoaW5nIHJlbGF0ZWQgdG8gc29ja2V0IGNyZWF0aW9uLCBjb25uZWN0aW9uIG1hbmFnZW1lbnQsIG9yIHBlcmhhcHMgc29tZSBrZXkgc3RydWN0dXJlIGRlZmluaXRpb24uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IGp1bXBzIG91dCBhdCBtZS4gVGhpcyBpcyBnb2luZyB0byBiZSBteSBkaXZlLWluIHBvaW50LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgc29tZXRoaW5nIHRoYXQgd2lsbCBzdGFydCBtZSBvbiB0aGUgcmlnaHQgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9hZl92c29jay5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTA6XHRcdFx0XHRcdFx0ICAgIGVudW0gdnNvY2tfbmV0X21vZGUgbW9kZSlcbiAyOTE6XHR7XG4gMjkyOlx0XHRpbnQgbmV3X2xvY2tlZCA9IG1vZGUgJiM0MzsgMTtcbiAyOTM6XHRcdGludCBvbGRfbG9ja2VkID0gMDsgLyogdW5sb2NrZWQgKi9cbiAyOTQ6XHRcbiAyOTU6XHRcdGlmICh0cnlfY21weGNoZyhcdTAwMjZuZXQtXHUwMDNldnNvY2suY2hpbGRfbnNfbW9kZV9sb2NrZWQsXG4gMjk2Olx0XHRcdFx0XHUwMDI2b2xkX2xvY2tlZCwgbmV3X2xvY2tlZCkpIHtcbiAyOTc6XHRcdFx0V1JJVEVfT05DRShuZXQtXHUwMDNldnNvY2suY2hpbGRfbnNfbW9kZSwgbW9kZSk7XG4gMjk4Olx0XHRcdHJldHVybiB0cnVlO1xuIDI5OTpcdFx0fVxuIDMwMDpcdFxuIDMwMTpcdFx0cmV0dXJuIG9sZF9sb2NrZWQgPT0gbmV3X2xvY2tlZDtcbiAzMDI6XHR9XG4gMzAzOlx0XG4gMzA0Olx0c3RhdGljIGlubGluZSBlbnVtIHZzb2NrX25ldF9tb2RlIHZzb2NrX25ldF9jaGlsZF9tb2RlKHN0cnVjdCBuZXQgKm5ldClcbiAzMDU6XHR7XG4gMzA2Olx0XHRyZXR1cm4gUkVBRF9PTkNFKG5ldC1cdTAwM2V2c29jay5jaGlsZF9uc19tb2RlKTtcbiAzMDc6XHR9XG4gMzA4Olx0XG4gMzA5Olx0LyogUmV0dXJuIHRydWUgaWYgdHdvIG5hbWVzcGFjZXMgcGFzcyB0aGUgbW9kZSBydWxlcy4gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UuXG4gMzEwOlx0ICpcbiAzMTE6XHQgKiBBIE5VTEwgbmFtZXNwYWNlIGlzIHRyZWF0ZWQgYXMgVlNPQ0tfTkVUX01PREVfR0xPQkFMLlxuIDMxMjpcdCAqXG4gMzEzOlx0ICogUmVhZCBtb3JlIGFib3V0IG1vZGVzIGluIHRoZSBjb21tZW50IGhlYWRlciBvZiBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMuXG4gMzE0Olx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MzUKCQkJCQkJCW91dHB1dDogMTkzCgkJCQkJCQl0aG91Z2h0czogMjEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBhIHZzb2NrIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AuIEJlZm9yZSB0aGUgY2hhbmdlLCB0aGUgY29kZSBkZWNsYXJlZCBgbmV3X21vZGVgIG9uIHRoZSBzdGFjaywgYnV0IGRpZG4mIzM5O3QgaW5pdGlhbGl6ZSBpdC4gSW4gY2VydGFpbiBzY2VuYXJpb3MsIHNwZWNpZmljYWxseSB3aGVuIHRoZSB3cml0ZSBzaXplIChgKmxlbnBgKSB3YXMgemVybywgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nYCBtaWdodCBub3Qgd3JpdGUgdG8gYG5ld19tb2RlYC4gVGhpcyBtZWFudCB0aGF0IGxhdGVyLCB0aGUgZnVuY3Rpb24gY291bGQgcmVhZCBhbiB1bmluaXRpYWxpemVkIHZhbHVlIGZyb20gYG5ld19tb2RlYCBpbiB0aGUgYGlmYCBjb25kaXRpb25zLCBhbmQgS01TQU4gd291bGQgcmlnaHRmdWxseSBmbGFnIHRoaXMuCgpUaGlzIHBhdGNoIGZpeGVzIHRoYXQgZXhhY3QgaXNzdWUgYnkgaW5pdGlhbGl6aW5nIGBuZXdfbW9kZWAgd2l0aCBhIGNhbGwgdG8gYHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldClgLiBOb3csIGBuZXdfbW9kZWAgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQgYmVmb3JlIGl0JiMzOTtzIHVzZWQuCgpUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBjaGFuZ2UganVzdGlmeSBLTVNBTiBmdXp6aW5nPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgbm8sIGJ1dCBsZXQmIzM5O3MgYmUgYWJzb2x1dGVseSBzdXJlLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogS01TQU4gaXMgb25seSBuZWVkZWQgaWYgdGhlICpjb2RlIGNoYW5nZXMqIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBLTVNBTiAqc3BlY2lmaWNhbGx5KiBjYW4gZGV0ZWN0IGFuZCBLQVNBTiBjYW4mIzM5O3QuCgpOb3csIGRvZXMgdGhlIHBhdGNoIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzPyBBYnNvbHV0ZWx5IG5vdC4gSXQmIzM5O3MgaW5pdGlhbGl6aW5nIGEgc3RhY2sgdmFyaWFibGUgYmVmb3JlIHVzZS4gSXQmIzM5O3MgKmZpeGluZyogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgbm90IGNyZWF0aW5nIG9uZS4gSXQmIzM5O3Mgbm90IG1vZGlmeWluZyBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBvciBhbHRlcmluZyBhbnkgYnVmZmVyIGxlbmd0aHMgb3IgYm91bmRzIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gSW4gZmFjdCwgaXQgKmNsb3NlcyogYW4gZXhpc3RpbmcgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWsuIEFsbCBzdGFjayBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCBub3cuCgpUaGUgcGF0Y2ggY29uc2lzdHMgb2YgYSBzaW5nbGUgbGluZTogYG5ld19tb2RlID0gdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KTtgLiBUaGlzIGxpbmUgaW50cm9kdWNlcyBubyBuZXcgcmlzay4gYHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldClgIGlzIHJldHVybmluZyB0aGUgY3VycmVudCBtb2RlLCB3aGljaCBpcyBpbml0aWFsaXplZCBpbiBgdnNvY2tfbmV0X2luaXRgLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gUnVubmluZyBLTVNBTiB3b3VsZCBiZSBvdmVya2lsbCBpbiB0aGlzIHNpdHVhdGlvbi4gS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHN0YW5kYXJkIHRlc3RpbmcuCgpNeSBmaW5hbCBhbmFseXNpcyBpczoKCiogICAqKk5lZWRzS01TQU4gPSBmYWxzZSoqCiogICAqKktNU0FOUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpbml0aWFsaXplcyB0aGUgbG9jYWwgc3RhY2sgdmFyaWFibGUgYG5ld19tb2RlYCBpbiBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKClgIHRvIGB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpYC4gUHJldmlvdXNseSwgaWYgYCpsZW5wYCB3YXMgMCB3aGVuIHdyaXRpbmcgdG8gYC9wcm9jL3N5cy9uZXQvdnNvY2svY2hpbGRfbnNfbW9kZWAsIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZygpYCBtaWdodCByZXR1cm4gMCB3aXRob3V0IHdyaXRpbmcgdG8gYCpuZXdfbW9kZWAsIGxlYXZpbmcgYG5ld19tb2RlYCB1bmluaXRpYWxpemVkLiBUaGlzIGNvdWxkIGxlYWQgdG8gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgZW5zdXJpbmcgYG5ld19tb2RlYCBpcyAqYWx3YXlzKiBpbml0aWFsaXplZC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGxlYWsga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMvcGFkZGluZy4gQmVjYXVzZSB0aGUgcGF0Y2ggcmVzb2x2ZXMgYW4gdW5pbml0aWFsaXplZCByZWFkIGFuZCBkb2VzIG5vdCBjcmVhdGUgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzLCBzcGF3bmluZyBhbiBleHBlbnNpdmUgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgdGhlIHN0YWNrIHZhcmlhYmxlIGBuZXdfbW9kZWAgaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZygpYCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgKHNwZWNpZmljYWxseSBpZiBhIHdyaXRlIG9jY3VycmVkIHdpdGggYCpsZW5wID09IDBgLCBjYXVzaW5nIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZygpYCB0byByZXR1cm4gMCB3aXRob3V0IGFzc2lnbmluZyBgKm5ld19tb2RlYCkuIFRoZSBwYXRjaCBpbml0aWFsaXplcyBgbmV3X21vZGVgIHdpdGggYHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldClgIGJlZm9yZSBwYXNzaW5nIGl0cyBwb2ludGVyLlxuXG5CZWNhdXNlIHRoaXMgY2hhbmdlIHJlc29sdmVzIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZCByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBvciBleHBvc2luZyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIHN0cnVjdCBwYWRkaW5nIGlzc3VlcywgaXQgcG9zZXMgbm8gcmlzayBvZiBpbnRyb2R1Y2luZyBLTVNBTi1kZXRlY3RhYmxlIGJ1Z3MuIFN0YW5kYXJkIHRlc3RpbmcvS0FTQU4gaXMgc3VmZmljaWVudCwgYW5kIHNwYXduaW5nIGEgZGVkaWNhdGVkLCByZXNvdXJjZS1pbnRlbnNpdmUgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgc3RhY2sgdmFyaWFibGUgYG5ld19tb2RlYCBpbiBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKClgIGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCAoc3BlY2lmaWNhbGx5IGlmIGEgd3JpdGUgb2NjdXJyZWQgd2l0aCBgKmxlbnAgPT0gMGAsIGNhdXNpbmcgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKClgIHRvIHJldHVybiAwIHdpdGhvdXQgYXNzaWduaW5nIGAqbmV3X21vZGVgKS4gVGhlIHBhdGNoIGluaXRpYWxpemVzIGBuZXdfbW9kZWAgd2l0aCBgdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KWAgYmVmb3JlIHBhc3NpbmcgaXRzIHBvaW50ZXIuXG5cbkJlY2F1c2UgdGhpcyBjaGFuZ2UgcmVzb2x2ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLCBpdCBwb3NlcyBubyByaXNrIG9mIGludHJvZHVjaW5nIEtNU0FOLWRldGVjdGFibGUgYnVncy4gU3RhbmRhcmQgdGVzdGluZy9LQVNBTiBpcyBzdWZmaWNpZW50LCBhbmQgc3Bhd25pbmcgYSBkZWRpY2F0ZWQsIHJlc291cmNlLWludGVuc2l2ZSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NDA6MjguMDk5NDA2NDQyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMTAxMjczNDgzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiU1lTQ1RMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nXCIsXG4gICAgXCJfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgdGhlIHN0YWNrIHZhcmlhYmxlIGBuZXdfbW9kZWAgaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZygpYCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgKHNwZWNpZmljYWxseSBpZiBhIHdyaXRlIG9jY3VycmVkIHdpdGggYCpsZW5wID09IDBgLCBjYXVzaW5nIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZygpYCB0byByZXR1cm4gMCB3aXRob3V0IGFzc2lnbmluZyBgKm5ld19tb2RlYCkuIFRoZSBwYXRjaCBpbml0aWFsaXplcyBgbmV3X21vZGVgIHdpdGggYHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldClgIGJlZm9yZSBwYXNzaW5nIGl0cyBwb2ludGVyLlxcblxcbkJlY2F1c2UgdGhpcyBjaGFuZ2UgcmVzb2x2ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLCBpdCBwb3NlcyBubyByaXNrIG9mIGludHJvZHVjaW5nIEtNU0FOLWRldGVjdGFibGUgYnVncy4gU3RhbmRhcmQgdGVzdGluZy9LQVNBTiBpcyBzdWZmaWNpZW50LCBhbmQgc3Bhd25pbmcgYSBkZWRpY2F0ZWQsIHJlc291cmNlLWludGVuc2l2ZSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoKSBpbiBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3X21vZGUgdmFyaWFibGUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gX192c29ja19uZXRfbW9kZV9zdHJpbmcoKSwgcHJldmVudGluZyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWQgd2hlbiB3cml0aW5nIHRvIC9wcm9jL3N5cy9uZXQvdnNvY2svY2hpbGRfbnNfbW9kZSB3aXRoIHplcm8gbGVuZ3RoLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc3lzY3RsIGNvZGUgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NDA6MjguMDk5NDE1NDkyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzY4NzkzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNmJlMDllYTg0NTY1ODg4OGNjODU5MzViMjI1MzM0MDQzN2VlMzYzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDE0OjQwOjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xcbmluZGV4IDYyMmRiZDA0Njc5OTQuLjYxMTYzMzU3YWUzYzQgMTAwNjQ0XFxuLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jXFxuKysrIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXFxuQEAgLTI4NzgsNiArMjg3OCw3IEBAIHN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRuZXQgPSBjb250YWluZXJfb2YodGFibGUtXFx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsIHZzb2NrLmNoaWxkX25zX21vZGUpO1xcbitcXHRuZXdfbW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCk7XFxuIFxcbiBcXHRyZXQgPSBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KSwgXFx1MDAyNm5ld19tb2RlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NDA6MjguNjM3MDc3NDIxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMDI5MTE2NDUwOTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJTWVNDVExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdcIixcbiAgICBcIl9fdnNvY2tfbmV0X21vZGVfc3RyaW5nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKCkgaW4gbmV0L3Ztd192c29jay9hZl92c29jay5jIHRvIGluaXRpYWxpemUgdGhlIG5ld19tb2RlIHZhcmlhYmxlIGJlZm9yZSBwYXNzaW5nIGl0IHRvIF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKCksIHByZXZlbnRpbmcgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkIHdoZW4gd3JpdGluZyB0byAvcHJvYy9zeXMvbmV0L3Zzb2NrL2NoaWxkX25zX21vZGUgd2l0aCB6ZXJvIGxlbmd0aC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHN5c2N0bCBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjZiZTA5ZWE4NDU2NTg4ODhjYzg1OTM1YjIyNTMzNDA0MzdlZTM2M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDE0OjQwOjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5pbmRleCA2MjJkYmQwNDY3OTk0Li42MTE2MzM1N2FlM2M0IDEwMDY0NFxuLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jXG4rKysgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbkBAIC0yODc4LDYgKzI4NzgsNyBAQCBzdGF0aWMgaW50IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuIFx0aW50IHJldDtcbiBcbiBcdG5ldCA9IGNvbnRhaW5lcl9vZih0YWJsZS1cdTAwM2VkYXRhLCBzdHJ1Y3QgbmV0LCB2c29jay5jaGlsZF9uc19tb2RlKTtcbitcdG5ld19tb2RlID0gdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KTtcbiBcbiBcdHJldCA9IF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zLFxuIFx0XHRcdFx0ICAgICAgdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KSwgXHUwMDI2bmV3X21vZGUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NDA6MjguNjM3MDc4OTUxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzA5NzU2NDMxNjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIHZzb2NrIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgZGlmZiB0aGF0IHRvdWNoZXMgYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AuIFJpZ2h0IGF3YXksIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgVlNPQ0sgaW1wbGVtZW50YXRpb24uIFRoZSBodW5rIG1vZGlmaWVzIHRoZSBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI4NzguIEknbSBnb2luZyB0byBoYXZlIHRvIGluc3BlY3QgdGhhdCBzZWN0aW9uIG9mIGNvZGUgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhpbmdzLiBUaGUgZGlmZiBpbnRyb2R1Y2VzIGEgYG5ld19tb2RlYCB2YXJpYWJsZSBhbmQgYXNzaWducyBhIG5ldyBmdW5jdGlvbiB0byBpdCBjYWxsZWQgYHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldClgLiBJIGltbWVkaWF0ZWx5IGhhdmUgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcyBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCBoZXJlLiBJJ2xsIHByb2JhYmx5IG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgYW5kIG1heWJlIHRyYWNlIGhvdyBgdnNvY2tfbmV0X2NoaWxkX21vZGVgIGlzIHVzZWQgZWxzZXdoZXJlIGluIHRoZSBjb2RlYmFzZS4gTXkgdXN1YWwgYXBwcm9hY2ggd291bGQgYmUgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBJJ20gb2ZmIHRvIGRvIHRoYXQgbm93LiBJJ2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBvdmVyYWxsIGltcGFjdCwgb2YgY291cnNlLCBhbmQgZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBvciBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkxMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjUyOjE4LjM5MzUxNDU5M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMDE3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg2MDpcXHRcXHRcXHRcXHRcXHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4yODYxOlxcdHtcXG4yODYyOlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4yODYzOlxcdFxcbjI4NjQ6XFx0XFx0aWYgKHdyaXRlKVxcbjI4NjU6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4yODY2OlxcdFxcbjI4Njc6XFx0XFx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVxcdTAwM2VkYXRhLCBzdHJ1Y3QgbmV0LCB2c29jay5tb2RlKTtcXG4yODY4OlxcdFxcbjI4Njk6XFx0XFx0cmV0dXJuIF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zLFxcbjI4NzA6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHZzb2NrX25ldF9tb2RlKG5ldCksIE5VTEwpO1xcbjI4NzE6XFx0fVxcbjI4NzI6XFx0XFxuMjg3MzpcXHRzdGF0aWMgaW50IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbjI4NzQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuMjg3NTpcXHR7XFxuMjg3NjpcXHRcXHRlbnVtIHZzb2NrX25ldF9tb2RlIG5ld19tb2RlO1xcbjI4Nzc6XFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbjI4Nzg6XFx0XFx0aW50IHJldDtcXG4yODc5OlxcdFxcbjI4ODA6XFx0XFx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVxcdTAwM2VkYXRhLCBzdHJ1Y3QgbmV0LCB2c29jay5jaGlsZF9uc19tb2RlKTtcXG4yODgxOlxcdFxcdG5ld19tb2RlID0gdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KTtcXG4yODgyOlxcdFxcbjI4ODM6XFx0XFx0cmV0ID0gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxuMjg4NDpcXHRcXHRcXHRcXHRcXHQgICAgICB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpLCBcXHUwMDI2bmV3X21vZGUpO1xcbjI4ODU6XFx0XFx0aWYgKHJldClcXG4yODg2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjg4NzpcXHRcXG4yODg4OlxcdFxcdGlmICh3cml0ZSkge1xcbjI4ODk6XFx0XFx0XFx0LyogUHJldmVudCBhIFxcXCJsb2NhbFxcXCIgbmFtZXNwYWNlIGZyb20gZXNjYWxhdGluZyB0byBcXFwiZ2xvYmFsXFxcIixcXG4yODkwOlxcdFxcdFxcdCAqIHdoaWNoIHdvdWxkIGdpdmUgbmVzdGVkIG5hbWVzcGFjZXMgYWNjZXNzIHRvIGdsb2JhbCBDSURzLlxcbjI4OTE6XFx0XFx0XFx0ICovXFxuMjg5MjpcXHRcXHRcXHRpZiAodnNvY2tfbmV0X21vZGUobmV0KSA9PSBWU09DS19ORVRfTU9ERV9MT0NBTCBcXHUwMDI2XFx1MDAyNlxcbjI4OTM6XFx0XFx0XFx0ICAgIG5ld19tb2RlID09IFZTT0NLX05FVF9NT0RFX0dMT0JBTClcXG4yODk0OlxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMjg5NTpcXHRcXG4yODk2OlxcdFxcdFxcdGlmICghdnNvY2tfbmV0X3NldF9jaGlsZF9tb2RlKG5ldCwgbmV3X21vZGUpKVxcbjI4OTc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yODk4OlxcdFxcdH1cXG4yODk5OlxcdFxcbjI5MDA6XFx0XFx0cmV0dXJuIDA7XFxuMjkwMTpcXHR9XFxuMjkwMjpcXHRcXG4yOTAzOlxcdHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XFxuMjkwNDpcXHRcXHR7XFxuMjkwNTpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJuc19tb2RlXFxcIixcXG4yOTA2OlxcdFxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2aW5pdF9uZXQudnNvY2subW9kZSxcXG4yOTA3OlxcdFxcdFxcdC5tYXhsZW5cXHRcXHQ9IFZTT0NLX05FVF9NT0RFX1NUUl9NQVgsXFxuMjkwODpcXHRcXHRcXHQubW9kZVxcdFxcdD0gMDQ0NCxcXG4yOTA5OlxcdFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHZzb2NrX25ldF9tb2RlX3N0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1MjoxOC4zOTM4NDc4NzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzA3ODA3NDM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBEZWVwZXIgaW50byB2c29jayBOZXR3b3JraW5nKipcblxuQWxyaWdodCwgSSdtIGFscmVhZHkgZGVlcCBpbiB0aGlzIGB2c29ja2AgY29kZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGZ1bGx5IGdyYXNwaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBgbmV3X21vZGVgIHZhcmlhYmxlLiBUaGUgZG9jdW1lbnRhdGlvbiBtZW50aW9ucyBob3cgaXQncyB1c2VkLCBidXQgSSBuZWVkIHRvIHNlZSBpdCBpbiBhY3Rpb24sIHRvby4gSSB3YW50IHRvIGluc3BlY3QgaG93IGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AgYWN0dWFsbHkgbGV2ZXJhZ2VzIGBuZXdfbW9kZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgbW9kZSBjaGFuZ2VzIGFuZCBob3cgdGhlIHVuZGVybHlpbmcgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvbiB0aGlzLiBJIGJldCB0aGVyZSdzIHNvbWUgaW50ZXJlc3RpbmcgbG9naWMgZW1iZWRkZWQgaW4gaG93IGBuZXdfbW9kZWAgdHJhbnNsYXRlcyBpbnRvIG5ldHdvcmsgYmVoYXZpb3IsIGFuZCB0aGlzIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AgZnVuY3Rpb24gc2VlbXMgbGlrZSBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHBvdGVudGlhbCBlZGdlIGNhc2VzIGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24uIExldCdzIHNlZSBob3cgdGhleSB3b3JrIHRvZ2V0aGVyIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBuZXR3b3JrIG1vZGUgaXMgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mjg5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1Mjo0MS40NzE5MjUzNjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTExODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Ztd192c29jay9hZl92c29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4MzA6XFx0XFx0XFx0XFx0cCA9IFZTT0NLX05FVF9NT0RFX1NUUl9MT0NBTDtcXG4yODMxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4MzI6XFx0XFx0XFx0ZGVmYXVsdDpcXG4yODMzOlxcdFxcdFxcdFxcdFdBUk5fT05DRSh0cnVlLCBcXFwibmV0bnMgaGFzIGludmFsaWQgdnNvY2sgbW9kZVxcXCIpO1xcbjI4MzQ6XFx0XFx0XFx0XFx0KmxlbnAgPSAwO1xcbjI4MzU6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjgzNjpcXHRcXHRcXHR9XFxuMjgzNzpcXHRcXG4yODM4OlxcdFxcdFxcdHN0cnNjcHkoZGF0YSwgcCwgc2l6ZW9mKGRhdGEpKTtcXG4yODM5OlxcdFxcdFxcdHRtcC5tYXhsZW4gPSBzdHJsZW4ocCk7XFxuMjg0MDpcXHRcXHR9XFxuMjg0MTpcXHRcXG4yODQyOlxcdFxcdHJldCA9IHByb2NfZG9zdHJpbmcoXFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxuMjg0MzpcXHRcXHRpZiAocmV0IHx8ICF3cml0ZSlcXG4yODQ0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjg0NTpcXHRcXG4yODQ2OlxcdFxcdGlmICgqbGVucCBcXHUwMDNlPSBzaXplb2YoZGF0YSkpXFxuMjg0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yODQ4OlxcdFxcbjI4NDk6XFx0XFx0aWYgKCFzdHJuY21wKGRhdGEsIFZTT0NLX05FVF9NT0RFX1NUUl9HTE9CQUwsIHNpemVvZihkYXRhKSkpXFxuMjg1MDpcXHRcXHRcXHQqbmV3X21vZGUgPSBWU09DS19ORVRfTU9ERV9HTE9CQUw7XFxuMjg1MTpcXHRcXHRlbHNlIGlmICghc3RybmNtcChkYXRhLCBWU09DS19ORVRfTU9ERV9TVFJfTE9DQUwsIHNpemVvZihkYXRhKSkpXFxuMjg1MjpcXHRcXHRcXHQqbmV3X21vZGUgPSBWU09DS19ORVRfTU9ERV9MT0NBTDtcXG4yODUzOlxcdFxcdGVsc2VcXG4yODU0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI4NTU6XFx0XFxuMjg1NjpcXHRcXHRyZXR1cm4gMDtcXG4yODU3OlxcdH1cXG4yODU4OlxcdFxcbjI4NTk6XFx0c3RhdGljIGludCB2c29ja19uZXRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4yODYwOlxcdFxcdFxcdFxcdFxcdCB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbjI4NjE6XFx0e1xcbjI4NjI6XFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbjI4NjM6XFx0XFxuMjg2NDpcXHRcXHRpZiAod3JpdGUpXFxuMjg2NTpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjI4NjY6XFx0XFxuMjg2NzpcXHRcXHRuZXQgPSBjb250YWluZXJfb2YodGFibGUtXFx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsIHZzb2NrLm1vZGUpO1xcbjI4Njg6XFx0XFxuMjg2OTpcXHRcXHRyZXR1cm4gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjUyOjQxLjQ3MjExOTgzN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1MTU4MDgyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVjZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzb21ldGhpbmcganVtcHMgb3V0IGF0IG1lOiBgbmV3X21vZGVgIHdpdGhpbiBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYCB3YXMgdG90YWxseSB1bmluaXRpYWxpemVkIGJlZm9yZSB0aGlzIHBhdGNoLiBUaGF0J3MgYSBjbGFzc2ljIGJ1ZyB3YWl0aW5nIHRvIGhhcHBlbiEgTm93LCBsZXQgbWUgc2VlLi4uIFdhaXQgYSBtaW51dGUsIGluIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AsIGlmIGB3cml0ZWAgaXMgZmFsc2UsIGl0ICpyZXR1cm5zKiBiZWZvcmUgYWN0dWFsbHkgc2V0dGluZyBgKm5ld19tb2RlYC4gQnV0IHRoZW4sIGluIGB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdgLCB0aGUgY29kZSBleHBsaWNpdGx5ICpjaGVja3MqIGBpZiAod3JpdGUpYC4gVGhpcyBpcyBtYWtpbmcgbWUgc3RhcnQgdG8gcXVlc3Rpb24gdGhlIG92ZXJhbGwgbG9naWMgaGVyZS5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhleSBhZGRlZCBgbmV3X21vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpO2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgY3J1Y2lhbCBhZGRpdGlvbi4gQ2xlYXJseSwgc29tZXRoaW5nIHdhcyBmdW5kYW1lbnRhbGx5IHdyb25nIHRoYXQgbmVlZGVkIHRvIGJlIGFkZHJlc3NlZCBoZXJlLiBJIG5lZWQgc29tZSBjb250ZXh0LiBBbHJpZ2h0LCB0aW1lIHRvIGdvIGRpZ2dpbmcuIEknbGwgY2hlY2sgdGhlIGBnaXQgbG9nYCBvciBjb21taXQgbWVzc2FnZS4gSG9wZWZ1bGx5LCB0aGUgYXV0aG9yIHByb3ZpZGVkIHNvbWUgaGVscGZ1bCBleHBsYW5hdGlvbi4gSWYgdGhhdCdzIG5vdCBlbm91Z2gsIEknbGwgbmVlZCB0byBnbyBkZWVwZXIgaW50byBgX192c29ja19uZXRfbW9kZV9zdHJpbmdgIHRvIHNlZSB3aGF0IEknbSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTYzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTI6NDQuOTg3OTMyNjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTcwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Ztd192c29jay9hZl92c29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4MTA6XFx0XFx0Y2hhciBkYXRhW1ZTT0NLX05FVF9NT0RFX1NUUl9NQVhdID0gezB9O1xcbjI4MTE6XFx0XFx0c3RydWN0IGN0bF90YWJsZSB0bXA7XFxuMjgxMjpcXHRcXHRpbnQgcmV0O1xcbjI4MTM6XFx0XFxuMjgxNDpcXHRcXHRpZiAoIXRhYmxlLVxcdTAwM2VkYXRhIHx8ICF0YWJsZS1cXHUwMDNlbWF4bGVuIHx8ICEqbGVucCkge1xcbjI4MTU6XFx0XFx0XFx0KmxlbnAgPSAwO1xcbjI4MTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjgxNzpcXHRcXHR9XFxuMjgxODpcXHRcXG4yODE5OlxcdFxcdHRtcCA9ICp0YWJsZTtcXG4yODIwOlxcdFxcdHRtcC5kYXRhID0gZGF0YTtcXG4yODIxOlxcdFxcbjI4MjI6XFx0XFx0aWYgKCF3cml0ZSkge1xcbjI4MjM6XFx0XFx0XFx0Y29uc3QgY2hhciAqcDtcXG4yODI0OlxcdFxcbjI4MjU6XFx0XFx0XFx0c3dpdGNoIChtb2RlKSB7XFxuMjgyNjpcXHRcXHRcXHRjYXNlIFZTT0NLX05FVF9NT0RFX0dMT0JBTDpcXG4yODI3OlxcdFxcdFxcdFxcdHAgPSBWU09DS19ORVRfTU9ERV9TVFJfR0xPQkFMO1xcbjI4Mjg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjgyOTpcXHRcXHRcXHRjYXNlIFZTT0NLX05FVF9NT0RFX0xPQ0FMOlxcbjI4MzA6XFx0XFx0XFx0XFx0cCA9IFZTT0NLX05FVF9NT0RFX1NUUl9MT0NBTDtcXG4yODMxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4MzI6XFx0XFx0XFx0ZGVmYXVsdDpcXG4yODMzOlxcdFxcdFxcdFxcdFdBUk5fT05DRSh0cnVlLCBcXFwibmV0bnMgaGFzIGludmFsaWQgdnNvY2sgbW9kZVxcXCIpO1xcbjI4MzQ6XFx0XFx0XFx0XFx0KmxlbnAgPSAwO1xcbjI4MzU6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjgzNjpcXHRcXHRcXHR9XFxuMjgzNzpcXHRcXG4yODM4OlxcdFxcdFxcdHN0cnNjcHkoZGF0YSwgcCwgc2l6ZW9mKGRhdGEpKTtcXG4yODM5OlxcdFxcdFxcdHRtcC5tYXhsZW4gPSBzdHJsZW4ocCk7XFxuMjg0MDpcXHRcXHR9XFxuMjg0MTpcXHRcXG4yODQyOlxcdFxcdHJldCA9IHByb2NfZG9zdHJpbmcoXFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxuMjg0MzpcXHRcXHRpZiAocmV0IHx8ICF3cml0ZSlcXG4yODQ0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjUyOjQ0Ljk4ODI1NTI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzI5MjgyMDM3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoIEZ1enppbmc/KipcblxuT2theSwgc28gSSd2ZSBzcG90dGVkIGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgaXNzdWUuIExpbmUgMjgxNCBjYXVnaHQgbXkgZXllOiB0aGVyZSdzIGEgY29uZGl0aW9uYWwgY2hlY2sgZm9yIGAqbGVucGAgaW4gdGhlIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AgZnVuY3Rpb24uIElmIGAqbGVucGAgaXMgemVybyB3aGVuIGB3cml0ZWAgaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgd2l0aG91dCBzZXR0aW5nIGAqbmV3X21vZGVgLiBMYXRlciwgaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AsIGBuZXdfbW9kZWAgaXMgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZC4gS01TQU4gb3IgdGhlIGNvbXBpbGVyIHdvdWxkIGRlZmluaXRlbHkgZmxhZyB0aGF0LiBGaXhpbmcgaXQgYnkgaW5pdGlhbGl6aW5nIGBuZXdfbW9kZWAgaXMgdGhlIHdheSB0byBnby5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBkb2VzIHRoaXMgcGF0Y2ggd2FycmFudCBmdXp6aW5nIGFjY29yZGluZyB0byB0aG9zZSBjcml0ZXJpYT8gIExldCdzIGJyZWFrIGl0IGRvd246IFRoZSBnb2FsIGlzIHRvIGNhdGNoIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBvciBhbnkgbmV3bHkgZXhwb3NlZCBidWdzLiBXZSdyZSBsb29raW5nIGF0IFwicmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZVwiIHNwZWNpZmljYWxseS5cblxuVGhlIGNyaXRlcmlhIHNheSAqbm90KiB0byBmdXp6OiBtb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCB1c2VyLXNwYWNlIHRvb2xzLCBsb2dnaW5nIHRoYXQgZG9lc24ndCBhZmZlY3QgY29udHJvbCBmbG93LCBidWlsZCBzeXN0ZW0gY2hhbmdlcyB0aGF0IGRvbid0IGNoYW5nZSBDIGxvZ2ljLCBoYXJkd2FyZSB0aGF0J3Mgbm90IGVtdWxhdGVkLCBvciB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuXG5cbkJ1dCB0aGV5ICpkbyogc2F5IHRvIGZ1eno6IGNvcmUgc3Vic3lzdGVtcyBsaWtlIG5ldHdvcmtpbmcsIHJlZmFjdG9yaW5ncyBvZiByZWFjaGFibGUgY29kZSwgcnVudGltZSBhc3NlcnRpb25zLCBhbmQgcmVhY2hhYmxlIGRyaXZlcnMvcHJvdG9jb2xzLlxuXG5UaGlzIHBhdGNoIHRvdWNoZXMgYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AsIHdoaWNoIGlzIGNvcmUgbmV0d29ya2luZyDigJMgc3BlY2lmaWNhbGx5LCB2c29jayBzb2NrZXQgYW5kIHN5c2N0bCBoYW5kbGluZy4gICpJcyogaXQgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gIFllcyEgIFRoZSBgdnNvY2tfdGFibGVgIGlzIHJlZ2lzdGVyZWQgdmlhIHN5c2N0bCBhbmQgcHJvY2ZzIGF0IGAvcHJvYy9zeXMvbmV0L3Zzb2NrLy4uLmAsIHdoaWNoICppcyogcmVhY2hhYmxlLiBUaGlzIG1lYW5zIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDgxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjUzOjE3LjkxNjQ2MTQ5N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4MjY5NDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZzb2NrX3RhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC92bXdfdnNvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNDc9RVhQT1JUX1NZTUJPTF9HUEwodnNvY2tfY29ubmVjdGVkX3RhYmxlKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQ4OkRFRklORV9TUElOTE9DSyh2c29ja190YWJsZV9sb2NrKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQ5OkVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX3RhYmxlX2xvY2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTAtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzQyPXN0YXRpYyB2b2lkIHZzb2NrX2luc2VydF91bmJvdW5kKHN0cnVjdCB2c29ja19zb2NrICp2c2spXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM0My17XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjM0NDpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNDUtXFx0X192c29ja19pbnNlcnRfYm91bmQodnNvY2tfdW5ib3VuZF9zb2NrZXRzLCB2c2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozNDY6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNDctfVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTM0OT12b2lkIHZzb2NrX2luc2VydF9jb25uZWN0ZWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaylcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNTMtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjM1NDpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNTUtXFx0X192c29ja19pbnNlcnRfY29ubmVjdGVkKGxpc3QsIHZzayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjM1NjpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM1Ny19XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzYwPXZvaWQgdnNvY2tfcmVtb3ZlX2JvdW5kKHN0cnVjdCB2c29ja19zb2NrICp2c2spXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM2MS17XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjM2MjpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNjMtXFx0aWYgKF9fdnNvY2tfaW5fYm91bmRfdGFibGUodnNrKSlcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzY0LVxcdFxcdF9fdnNvY2tfcmVtb3ZlX2JvdW5kKHZzayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjM2NTpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM2Ni19XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzY5PXZvaWQgdnNvY2tfcmVtb3ZlX2Nvbm5lY3RlZChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNzAte1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozNzE6XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ2c29ja190YWJsZV9sb2NrKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzcyLVxcdGlmIChfX3Zzb2NrX2luX2Nvbm5lY3RlZF90YWJsZSh2c2spKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNzMtXFx0XFx0X192c29ja19yZW1vdmVfY29ubmVjdGVkKHZzayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjM3NDpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM3NS19XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzgzPXN0cnVjdCBzb2NrICp2c29ja19maW5kX2JvdW5kX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICphZGRyLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM4Ny1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mzg4OlxcdHNwaW5fbG9ja19iaChcXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM4OS1cXHRzayA9IF9fdnNvY2tfZmluZF9ib3VuZF9zb2NrZXRfbmV0KGFkZHIsIG5ldCk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzkyLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozOTM6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zOTQtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9NDE1PXN0cnVjdCBzb2NrICp2c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXRfbmV0KHN0cnVjdCBzb2NrYWRkcl92bSAqc3JjLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTQyMC1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6NDIxOlxcdHNwaW5fbG9ja19iaChcXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTQyMi1cXHRzayA9IF9fdnNvY2tfZmluZF9jb25uZWN0ZWRfc29ja2V0X25ldChzcmMsIGRzdCwgbmV0KTtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00MjUtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjQyNjpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTQyNy1cXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz00NTQ9dm9pZCB2c29ja19mb3JfZWFjaF9jb25uZWN0ZWRfc29ja2V0KHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00NTgtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjQ1OTpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00NjAtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNDcxLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo0NzI6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00NzMtfVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTg2OT1zdGF0aWMgaW50IF9fdnNvY2tfYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcilcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy04ODgtXFx0Y2FzZSBTT0NLX1NFUVBBQ0tFVDpcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6ODg5OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTg5MC1cXHRcXHRyZXR2YWwgPSBfX3Zzb2NrX2JpbmRfY29ubmVjdGlibGUodnNrLCBhZGRyKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6ODkxOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ2c29ja190YWJsZV9sb2NrKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtODkyLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI4NzM9c3RhdGljIGludCB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTAyLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTAzOnN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MDQtXFx0e1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI5Mjk9c3RhdGljIGludCBfX25ldF9pbml0IHZzb2NrX3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkzMy1cXHRpZiAobmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSkge1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTM0OlxcdFxcdHRhYmxlID0gdnNvY2tfdGFibGU7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MzUtXFx0fSBlbHNlIHtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjkzNjpcXHRcXHR0YWJsZSA9IGttZW1kdXAodnNvY2tfdGFibGUsIHNpemVvZih2c29ja190YWJsZSksIEdGUF9LRVJORUwpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTM3LVxcdFxcdGlmICghdGFibGUpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjk0NS1cXHRuZXQtXFx1MDAzZXZzb2NrLnN5c2N0bF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXFxcIm5ldC92c29ja1xcXCIsIHRhYmxlLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTQ2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBBUlJBWV9TSVpFKHZzb2NrX3RhYmxlKSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NDctXFx0aWYgKCFuZXQtXFx1MDAzZXZzb2NrLnN5c2N0bF9oZHIpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2RpYWcuYz0xND1zdGF0aWMgaW50IHNrX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2RpYWcuYy0yOS1cXHQvKiBMb2NrIG9yZGVyIGRpY3RhdGVzIHRoYXQgc2tfbG9jayBpcyBhY3F1aXJlZCBiZWZvcmVcXG5uZXQvdm13X3Zzb2NrL2RpYWcuYzozMDpcXHQgKiB2c29ja190YWJsZV9sb2NrLCBzbyB3ZSBjYW5ub3QgbG9jayBoZXJlLiAgU2ltcGx5IGRvbid0IHRha2VcXG5uZXQvdm13X3Zzb2NrL2RpYWcuYzozMTpcXHQgKiBza19sb2NrOyBzayBpcyBndWFyYW50ZWVkIHRvIHN0YXkgYWxpdmUgc2luY2UgdnNvY2tfdGFibGVfbG9jayBpc1xcbm5ldC92bXdfdnNvY2svZGlhZy5jLTMyLVxcdCAqIGhlbGQuXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2RpYWcuYz00OD1zdGF0aWMgaW50IHZzb2NrX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2RpYWcuYy02Ny1cXG5uZXQvdm13X3Zzb2NrL2RpYWcuYzo2ODpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xcbm5ldC92bXdfdnNvY2svZGlhZy5jLTY5LVxcbi0tXFxubmV0L3Ztd192c29jay9kaWFnLmMtMTMxLWRvbmU6XFxubmV0L3Ztd192c29jay9kaWFnLmM6MTMyOlxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ2c29ja190YWJsZV9sb2NrKTtcXG5uZXQvdm13X3Zzb2NrL2RpYWcuYy0xMzMtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz00MTM9c3RhdGljIHZvaWQgdmlydGlvX3Zzb2NrX3Jlc2V0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNDE1LVxcdC8qIHZtY2lfdHJhbnNwb3J0LmMgZG9lc24ndCB0YWtlIHNrX2xvY2sgaGVyZSBlaXRoZXIuICBBdCBsZWFzdCB3ZSdyZVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjQxNjpcXHQgKiB1bmRlciB2c29ja190YWJsZV9sb2NrIHNvIHRoZSBzb2NrIGNhbm5vdCBkaXNhcHBlYXIgd2hpbGUgd2UncmVcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy00MTctXFx0ICogZXhlY3V0aW5nLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1MzoxOC40MzQ3MzYxNTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzAxMzQ0NDEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipEZWx2aW5nIGludG8gdnNvY2sgTmFtZXNwYWNlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYHZzb2NrYCBoYW5kbGVzIG5hbWVzcGFjZXMuIE15IGluaXRpYWwgcG9pbnQgb2YgcmVmZXJlbmNlIGlzIHRoZSBgdnNvY2tfdGFibGVgIGRhdGEgc3RydWN0dXJlLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgZmllbGRzIGBjaGlsZF9uc19tb2RlYCBhbmQgYG5zX21vZGVgLiBUaG9zZSBhcmUgdGhlIGtleSBpbmRpY2F0b3JzIG9mIHdoYXQgbmFtZXNwYWNlcyBhcmUgaW52b2x2ZWQgYW5kIGhvdy5cblxuVG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24sIEnigJltIHplcm9pbmcgaW4gb24gbGluZXMgMjkwMyB0aHJvdWdoIDI5MzAgb2YgYGFmX3Zzb2NrLmNgLiBUaGF04oCZcyB3aGVyZSB0aGUgbmFtZXNwYWNlIG1vZGUgbG9naWMgaXMgbGlrZWx5IGltcGxlbWVudGVkIGluIG1vcmUgZGV0YWlsIGFuZCBJIHNob3VsZCBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZSBtb2RlcyBhcmUgc2V0LCBob3cgdGhleSBpbnRlcmFjdCwgYW5kIHdoYXQgc2l0dWF0aW9ucyB0cmlnZ2VyIHBhcnRpY3VsYXIgYmVoYXZpb3JzLiBJIGV4cGVjdCB0byBzZWUgdGhlIGtleSBjaGVja3MgYW5kIGNvbmRpdGlvbmFscyBnb3Zlcm5pbmcgdGhlIG5hbWVzcGFjZSB0cmFuc2l0aW9ucyBvciBsaW1pdGF0aW9ucy4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlYWwgbWFnaWMgKG9yIHBvdGVudGlhbCBnb3RjaGFzISkgYXJlIGhhcHBlbmluZy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjEwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTM6MjUuNDQ4MTgzMTk0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5ODE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwMyxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjkwMzpcXHRzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xcbjI5MDQ6XFx0XFx0e1xcbjI5MDU6XFx0XFx0XFx0LnByb2NuYW1lXFx0PSBcXFwibnNfbW9kZVxcXCIsXFxuMjkwNjpcXHRcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LnZzb2NrLm1vZGUsXFxuMjkwNzpcXHRcXHRcXHQubWF4bGVuXFx0XFx0PSBWU09DS19ORVRfTU9ERV9TVFJfTUFYLFxcbjI5MDg6XFx0XFx0XFx0Lm1vZGVcXHRcXHQ9IDA0NDQsXFxuMjkwOTpcXHRcXHRcXHQucHJvY19oYW5kbGVyXFx0PSB2c29ja19uZXRfbW9kZV9zdHJpbmdcXG4yOTEwOlxcdFxcdH0sXFxuMjkxMTpcXHRcXHR7XFxuMjkxMjpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJjaGlsZF9uc19tb2RlXFxcIixcXG4yOTEzOlxcdFxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2aW5pdF9uZXQudnNvY2suY2hpbGRfbnNfbW9kZSxcXG4yOTE0OlxcdFxcdFxcdC5tYXhsZW5cXHRcXHQ9IFZTT0NLX05FVF9NT0RFX1NUUl9NQVgsXFxuMjkxNTpcXHRcXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG4yOTE2OlxcdFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ1xcbjI5MTc6XFx0XFx0fSxcXG4yOTE4OlxcdFxcdHtcXG4yOTE5OlxcdFxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcImcyaF9mYWxsYmFja1xcXCIsXFxuMjkyMDpcXHRcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LnZzb2NrLmcyaF9mYWxsYmFjayxcXG4yOTIxOlxcdFxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihpbnQpLFxcbjI5MjI6XFx0XFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuMjkyMzpcXHRcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvaW50dmVjX21pbm1heCxcXG4yOTI0OlxcdFxcdFxcdC5leHRyYTFcXHRcXHQ9IFNZU0NUTF9aRVJPLFxcbjI5MjU6XFx0XFx0XFx0LmV4dHJhMlxcdFxcdD0gU1lTQ1RMX09ORSxcXG4yOTI2OlxcdFxcdH0sXFxuMjkyNzpcXHR9O1xcbjI5Mjg6XFx0XFxuMjkyOTpcXHRzdGF0aWMgaW50IF9fbmV0X2luaXQgdnNvY2tfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcXG4yOTMwOlxcdHtcXG4yOTMxOlxcdFxcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xcbjI5MzI6XFx0XFxuMjkzMzpcXHRcXHRpZiAobmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSkge1xcbjI5MzQ6XFx0XFx0XFx0dGFibGUgPSB2c29ja190YWJsZTtcXG4yOTM1OlxcdFxcdH0gZWxzZSB7XFxuMjkzNjpcXHRcXHRcXHR0YWJsZSA9IGttZW1kdXAodnNvY2tfdGFibGUsIHNpemVvZih2c29ja190YWJsZSksIEdGUF9LRVJORUwpO1xcbjI5Mzc6XFx0XFx0XFx0aWYgKCF0YWJsZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTM6MjUuNDQ4NDg0Nzg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4OTg5NzQyMzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmNlcm5zIFJlZ2FyZGluZyBgL3Byb2Mvc3lzL25ldC92c29jay9jaGlsZF9uc19tb2RlYCoqXG5cbk9rYXksIGhlcmUncyB3aGF0J3MgaW1tZWRpYXRlbHkgY29uY2VybmluZzogSSBzZWUgdGhhdCBgL3Byb2Mvc3lzL25ldC92c29jay9jaGlsZF9uc19tb2RlYCBpcyB3cml0YWJsZSBhbmQgaGFzIG1vZGUgMDY0NC4gVGhhdCdzIGEgaHVnZSByZWQgZmxhZyByaWdodCBvZmYgdGhlIGJhdC4gVGhlIGZhY3QgdGhhdCB1c2Vyc3BhY2UgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhpcyBzeXNjdGwgaXMgcHJvYmxlbWF0aWMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGVuIHVzZXJzcGFjZSB3cml0ZXMgdG8gYC9wcm9jL3N5cy9uZXQvdnNvY2svY2hpbGRfbnNfbW9kZWAsIGl0IHRyaWdnZXJzIGEgZGlyZWN0IGNhbGwgdG8gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AuIEFuZCB0aGF0J3MuLi4gdGhhdCdzIGEgZGlyZWN0IGVudHJ5IHBvaW50IGludG8gdGhlIGNvcmUgdnNvY2sgbmV0d29ya2luZyBjb2RlLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgcGF0aCB0aGF0J3MgZWFzaWx5IGFjY2Vzc2libGUgZnJvbSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kLCBjcml0aWNhbGx5LCBmcm9tIHN5emthbGxlciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gcmlnaHQgbm93IGlzIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYCBmdW5jdGlvbiBpdHNlbGYuIE1vZGlmeWluZyB0aGUgY29uZmlndXJhdGlvbiB2aWEgdGhpcyBzeXNjdGwgaXMgZXNzZW50aWFsbHkgY2hhbmdpbmcgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgbmV0d29ya2luZy92c29jayBjb3JlLCBhbmQgdGhhdCBvcGVucyB0aGUgZG9vciB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIGEgdmVjdG9yIHRvIHBvdGVudGlhbGx5IGV4cGxvaXQgYW55IGJ1Z3MsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblNvLCBsZXQncyBzdG9wIGFuZCB2ZXJpZnkgd2hhdCBLY29uZmlnIGVuYWJsZXMgYGFmX3Zzb2NrLmNgIGFuZCB0YWtlIGEgZGVlcCBicmVhdGguIFRpbWUgZm9yIHNvbWUgbW9yZSBpbnZlc3RpZ2F0aW9uIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA4NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjUzOjU0LjQzODIzMDI0MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU5MDA0ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZfdnNvY2tcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Ztd192c29jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay9NYWtlZmlsZT04PW9iai0kKENPTkZJR19WU09DS0VUU19MT09QQkFDSykgKz0gdnNvY2tfbG9vcGJhY2sub1xcbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtOS1cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjEwOnZzb2NrLXkgKz0gYWZfdnNvY2subyBhZl92c29ja190YXAubyB2c29ja19hZGRyLm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTExLXZzb2NrLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB2c29ja19icGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1Mzo1NC41MzQxMzU5NjNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE3NDcxMDE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgdGhlIHZzb2NrIE1ha2VmaWxlKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBuZXQvdm13X3Zzb2NrL01ha2VmaWxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhpcyB2c29jayBtb2R1bGUsIHNvIGxldCdzIHN0YXJ0IHdpdGggYSBxdWljayBza2ltIG9mIHRoZSBmaXJzdCAxNSBsaW5lcy4gVGhpcyB1c3VhbGx5IGdpdmVzIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgY29yZSB2YXJpYWJsZXMsIGluY2x1ZGVkIGRpcmVjdG9yaWVzLCBhbmQgYW55IGltbWVkaWF0ZSBmbGFncyB0aGF0IGFyZSBzZXQuIEkgZXhwZWN0IHRvIHNlZSB0aGUgdHlwaWNhbCBrZXJuZWwgbW9kdWxlIHNldHVwOiBwcm9iYWJseSBzZXR0aW5nIHVwIGBvYmotbWAsIG1heWJlIHNvbWUgaW5jbHVkZSBwYXRocywgYW5kIGRlZmluaXRpb25zIGZvciBzb3VyY2UgZmlsZXMuIEFueXRoaW5nIHVudXN1YWwsIGxpa2Ugc3BlY2lmaWMgY29tcGlsZXIgZmxhZ3Mgb3IgY29uZGl0aW9uYWwgbG9naWMsIHdpbGwgaW1tZWRpYXRlbHkgY2F0Y2ggbXkgZXllIGFuZCB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY5MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjUzOjU2LjcwODg0ODg3M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0b2JqLSQoQ09ORklHX1ZTT0NLRVRTKSArPSB2c29jay5vXFxuICAgMzpcXHRvYmotJChDT05GSUdfVlNPQ0tFVFNfRElBRykgKz0gdnNvY2tfZGlhZy5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfVk1XQVJFX1ZNQ0lfVlNPQ0tFVFMpICs9IHZtd192c29ja192bWNpX3RyYW5zcG9ydC5vXFxuICAgNTpcXHRvYmotJChDT05GSUdfVklSVElPX1ZTT0NLRVRTKSArPSB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydC5vXFxuICAgNjpcXHRvYmotJChDT05GSUdfVklSVElPX1ZTT0NLRVRTX0NPTU1PTikgKz0gdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19IWVBFUlZfVlNPQ0tFVFMpICs9IGh2X3NvY2sub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX1ZTT0NLRVRTX0xPT1BCQUNLKSArPSB2c29ja19sb29wYmFjay5vXFxuICAgOTpcXHRcXG4gIDEwOlxcdHZzb2NrLXkgKz0gYWZfdnNvY2subyBhZl92c29ja190YXAubyB2c29ja19hZGRyLm9cXG4gIDExOlxcdHZzb2NrLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB2c29ja19icGYub1xcbiAgMTI6XFx0XFxuICAxMzpcXHR2c29ja19kaWFnLXkgKz0gZGlhZy5vXFxuICAxNDpcXHRcXG4gIDE1OlxcdHZtd192c29ja192bWNpX3RyYW5zcG9ydC15ICs9IHZtY2lfdHJhbnNwb3J0Lm8gdm1jaV90cmFuc3BvcnRfbm90aWZ5Lm8gXFxcXFxcbiAgMTY6XFx0XFx0dm1jaV90cmFuc3BvcnRfbm90aWZ5X3FzdGF0ZS5vXFxuICAxNzpcXHRcXG4gIDE4OlxcdHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0LXkgKz0gdmlydGlvX3RyYW5zcG9ydC5vXFxuICAxOTpcXHRcXG4gIDIwOlxcdHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi15ICs9IHZpcnRpb190cmFuc3BvcnRfY29tbW9uLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTM6NTYuNzA4OTQ2NDEzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc1NjU3NzQ1OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSB2c29jayBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYENPTkZJR19WU09DS0VUU2AgaXMgcmVzcG9uc2libGUgZm9yIGNvbXBpbGluZyBgdnNvY2sub2AsIGFuZCB0aGF0IGluIHR1cm4gcHVsbHMgaW4gYGFmX3Zzb2NrLm9gLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX1ZTT0NLRVRTYCB0byBzZWUgd2hhdCBlbHNlIG1pZ2h0IGJlIHJlcXVpcmVkIG9yIHBvdGVudGlhbGx5IGltcGFjdGluZyB0aGlzIG1vZHVsZS4gTGV0J3MgZGl2ZSBpbnRvIGBuZXQvdm13X3Zzb2NrL0tjb25maWdgIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBkZXRhaWxzIHRlbGwgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzM2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1NDowNC4yNzQ3MjU4ODNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC92bXdfdnNvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBWc29jayBwcm90b2NvbFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgVlNPQ0tFVFNcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldCBwcm90b2NvbFxcXCJcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgVmlydHVhbCBTb2NrZXQgUHJvdG9jb2wgaXMgYSBzb2NrZXQgcHJvdG9jb2wgc2ltaWxhciB0byBUQ1AvSVBcXG4gIDEwOlxcdFxcdCAgYWxsb3dpbmcgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIFZpcnR1YWwgTWFjaGluZXMgYW5kIGh5cGVydmlzb3JcXG4gIDExOlxcdFxcdCAgb3IgaG9zdC5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBZb3Ugc2hvdWxkIGFsc28gc2VsZWN0IG9uZSBvciBtb3JlIGh5cGVydmlzb3Itc3BlY2lmaWMgdHJhbnNwb3J0c1xcbiAgMTQ6XFx0XFx0ICBiZWxvdy5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICAxNzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHZzb2NrLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgVlNPQ0tFVFNfRElBR1xcbiAgMjA6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4gIDIxOlxcdFxcdGRlcGVuZHMgb24gVlNPQ0tFVFNcXG4gIDIyOlxcdFxcdGRlZmF1bHQgeVxcbiAgMjM6XFx0XFx0aGVscFxcbiAgMjQ6XFx0XFx0ICBTdXBwb3J0IGZvciBQRl9WU09DSyBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXFxuICAyNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICAyNjpcXHRcXG4gIDI3OlxcdFxcdCAgRW5hYmxlIHRoaXMgbW9kdWxlIHNvIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgY2FuIHF1ZXJ5IG9wZW4gc29ja2V0cy5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXFxuICAzMDpcXHRcXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXRzIGxvb3BiYWNrIHRyYW5zcG9ydFxcXCJcXG4gIDMxOlxcdFxcdGRlcGVuZHMgb24gVlNPQ0tFVFNcXG4gIDMyOlxcdFxcdGRlZmF1bHQgeVxcbiAgMzM6XFx0XFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cXG4gIDM0OlxcdFxcdGhlbHBcXG4gIDM1OlxcdFxcdCAgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIGxvb3BiYWNrIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzLFxcbiAgMzY6XFx0XFx0ICB1c2luZyB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydF9jb21tb24uXFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMzk6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB2c29ja19sb29wYmFjay4gSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1NDowNC4yNzQ5MDQ3MzNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTYxMzAyODE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgSGllcmFyY2h5KipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBzb3VyY2UgXCJuZXQvdm13X3Zzb2NrL0tjb25maWdcImAgbGluZSBsaXZlcyBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIHN5c3RlbS4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gc3RhcnQgYXQgdGhlIHRvcCwgb3IgYXQgbGVhc3QgYSByZWFzb25hYmx5IGhpZ2gtbGV2ZWwgS2NvbmZpZyBmaWxlLiBJJ2xsIGNoZWNrIGBuZXQvS2NvbmZpZ2AgZmlyc3QuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgYW55dGhpbmcgbmV0d29yay1yZWxhdGVkLiBIb3BlZnVsbHksIHRoaXMgcGFyZW50IEtjb25maWcgZmlsZSB3aWxsIGRpcmVjdGx5IGluY2x1ZGUgdGhlIHZtd192c29jayBLY29uZmlnLCBvciBhdCBsZWFzdCBnaXZlIG1lIGEgcG9pbnRlciB0byB0aGUgcmVsZXZhbnQgc2VjdGlvbiB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHdoZXJlIGl0J3MgZGVmaW5lZC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4uLiBhbmQgaG93IGZhciBJIG5lZWQgdG8gZ28gdG8gdHJhY2UgdGhpcyBkb3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAyNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTQ6MDkuODg3OTM1NjY3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM0MTYyODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm13X3Zzb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9Mjc0PXNvdXJjZSBcXFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6Mjc1OnNvdXJjZSBcXFwibmV0L3Ztd192c29jay9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTI3Ni1zb3VyY2UgXFxcIm5ldC9uZXRsaW5rL0tjb25maWdcXFwiXFxuLS1cXG5uZXQvTWFrZWZpbGU9NjQ9b2JqLSQoQ09ORklHX09QRU5WU1dJVENIKVxcdCs9IG9wZW52c3dpdGNoL1xcbm5ldC9NYWtlZmlsZTo2NTpvYmotJChDT05GSUdfVlNPQ0tFVFMpXFx0Kz0gdm13X3Zzb2NrL1xcbm5ldC9NYWtlZmlsZS02Ni1vYmotJChDT05GSUdfTVBMUylcXHRcXHQrPSBtcGxzL1xcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnPTI5PWNvbmZpZyBWU09DS0VUU19MT09QQkFDS1xcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTM1LVxcdCAgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIGxvb3BiYWNrIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzLFxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzozNjpcXHQgIHVzaW5nIHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMzctXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc9NDE9Y29uZmlnIFZNV0FSRV9WTUNJX1ZTT0NLRVRTXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTAtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxubmV0L3Ztd192c29jay9LY29uZmlnOjUxOlxcdCAgd2lsbCBiZSBjYWxsZWQgdm13X3Zzb2NrX3ZtY2lfdHJhbnNwb3J0LiBJZiB1bnN1cmUsIHNheSBOLlxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy01Mi1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc9NTM9Y29uZmlnIFZJUlRJT19WU09DS0VUU1xcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTYzLVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxubmV0L3Ztd192c29jay9LY29uZmlnOjY0OlxcdCAgY2FsbGVkIHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0LiBJZiB1bnN1cmUsIHNheSBOLlxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy02NS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc9NjY9Y29uZmlnIFZJUlRJT19WU09DS0VUU19DT01NT05cXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03MC1cXHQgIHRoZSB2aXJ0aW9fdnNvY2suICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxubmV0L3Ztd192c29jay9LY29uZmlnOjcxOlxcdCAgdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLlxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03Mi1cXG4tLVxcbm5ldC92bXdfdnNvY2svTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfVlNPQ0tFVFNfRElBRykgKz0gdnNvY2tfZGlhZy5vXFxubmV0L3Ztd192c29jay9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19WTVdBUkVfVk1DSV9WU09DS0VUUykgKz0gdm13X3Zzb2NrX3ZtY2lfdHJhbnNwb3J0Lm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1ZJUlRJT19WU09DS0VUUykgKz0gdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnQub1xcbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6NjpvYmotJChDT05GSUdfVklSVElPX1ZTT0NLRVRTX0NPTU1PTikgKz0gdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX0hZUEVSVl9WU09DS0VUUykgKz0gaHZfc29jay5vXFxuLS1cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlPTEzPXZzb2NrX2RpYWcteSArPSBkaWFnLm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTE0LVxcbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6MTU6dm13X3Zzb2NrX3ZtY2lfdHJhbnNwb3J0LXkgKz0gdm1jaV90cmFuc3BvcnQubyB2bWNpX3RyYW5zcG9ydF9ub3RpZnkubyBcXFxcXFxubmV0L3Ztd192c29jay9NYWtlZmlsZS0xNi1cXHR2bWNpX3RyYW5zcG9ydF9ub3RpZnlfcXN0YXRlLm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTE3LVxcbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6MTg6dm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnQteSArPSB2aXJ0aW9fdHJhbnNwb3J0Lm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTE5LVxcbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6MjA6dm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLXkgKz0gdmlydGlvX3RyYW5zcG9ydF9jb21tb24ub1xcbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtMjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU0OjEwLjAyMTM1OTIyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMzI5MzI3MjYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIHZzb2NrZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBDT05GSUdfVlNPQ0tFVFNgIHNpdHMgaW5ub2N1b3VzbHkgZW5vdWdoLCByaWdodCB0aGVyZSB1bmRlciBgbmV0L2AuIE5vdGhpbmcgb2J2aW91c2x5IGhvbGRpbmcgaXQgYmFjaywgbm8gd2VpcmQgZGVwZW5kZW5jaWVzIHRvIHRyaXAgb3Zlci4gQnV0IHdhaXQsIGEgbmFnZ2luZyB0aG91Z2h0IOKAkyB3aGF0IGFib3V0IHN5c2N0bD8gQ291bGQgdGhlcmUgYmUgc29tZSBpbnRlcmFjdGlvbiwgc29tZSBjb25kaXRpb24gSSdtIG1pc3Npbmc/IEkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIGB2c29ja19zeXNjdGxfcmVnaXN0ZXJgIGZ1bmN0aW9uLCB3aGVyZSBzeXNjdGwgcGFyYW1ldGVycyBhcmUgZGVmaW5lZCwgaXMgZ3VhcmRlZCBieSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBvciBuZXR3b3JrIG9wZXJhdGlvbiBjaGVja3MuIExldCdzIGRpZyBpbnRvIHRoZSBgbmV0L3Ztd192c29jay9hZl92c29jay5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIHRoYXQgYHZzb2NrX3N5c2N0bF9yZWdpc3RlcmAgZnVuY3Rpb24uIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaWYgdGhlcmUgYXJlIGFueSBnb3RjaGFzIGluIHRoaXMgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjMxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTQ6MjMuMzE0NjM0Mzc5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkyOCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjkyODpcXHRcXG4yOTI5OlxcdHN0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxcbjI5MzA6XFx0e1xcbjI5MzE6XFx0XFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XFxuMjkzMjpcXHRcXG4yOTMzOlxcdFxcdGlmIChuZXRfZXEobmV0LCBcXHUwMDI2aW5pdF9uZXQpKSB7XFxuMjkzNDpcXHRcXHRcXHR0YWJsZSA9IHZzb2NrX3RhYmxlO1xcbjI5MzU6XFx0XFx0fSBlbHNlIHtcXG4yOTM2OlxcdFxcdFxcdHRhYmxlID0ga21lbWR1cCh2c29ja190YWJsZSwgc2l6ZW9mKHZzb2NrX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XFxuMjkzNzpcXHRcXHRcXHRpZiAoIXRhYmxlKVxcbjI5Mzg6XFx0XFx0XFx0XFx0Z290byBlcnJfYWxsb2M7XFxuMjkzOTpcXHRcXG4yOTQwOlxcdFxcdFxcdHRhYmxlWzBdLmRhdGEgPSBcXHUwMDI2bmV0LVxcdTAwM2V2c29jay5tb2RlO1xcbjI5NDE6XFx0XFx0XFx0dGFibGVbMV0uZGF0YSA9IFxcdTAwMjZuZXQtXFx1MDAzZXZzb2NrLmNoaWxkX25zX21vZGU7XFxuMjk0MjpcXHRcXHRcXHR0YWJsZVsyXS5kYXRhID0gXFx1MDAyNm5ldC1cXHUwMDNldnNvY2suZzJoX2ZhbGxiYWNrO1xcbjI5NDM6XFx0XFx0fVxcbjI5NDQ6XFx0XFxuMjk0NTpcXHRcXHRuZXQtXFx1MDAzZXZzb2NrLnN5c2N0bF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXFxcIm5ldC92c29ja1xcXCIsIHRhYmxlLFxcbjI5NDY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIEFSUkFZX1NJWkUodnNvY2tfdGFibGUpKTtcXG4yOTQ3OlxcdFxcdGlmICghbmV0LVxcdTAwM2V2c29jay5zeXNjdGxfaGRyKVxcbjI5NDg6XFx0XFx0XFx0Z290byBlcnJfcmVnO1xcbjI5NDk6XFx0XFxuMjk1MDpcXHRcXHRyZXR1cm4gMDtcXG4yOTUxOlxcdFxcbjI5NTI6XFx0ZXJyX3JlZzpcXG4yOTUzOlxcdFxcdGlmICghbmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSlcXG4yOTU0OlxcdFxcdFxcdGtmcmVlKHRhYmxlKTtcXG4yOTU1OlxcdGVycl9hbGxvYzpcXG4yOTU2OlxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjI5NTc6XFx0fVxcbjI5NTg6XFx0XFxuMjk1OTpcXHRzdGF0aWMgdm9pZCB2c29ja19zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXFxuMjk2MDpcXHR7XFxuMjk2MTpcXHRcXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcXG4yOTYyOlxcdFxcbjI5NjM6XFx0XFx0dGFibGUgPSBuZXQtXFx1MDAzZXZzb2NrLnN5c2N0bF9oZHItXFx1MDAzZWN0bF90YWJsZV9hcmc7XFxuMjk2NDpcXHRcXHR1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUobmV0LVxcdTAwM2V2c29jay5zeXNjdGxfaGRyKTtcXG4yOTY1OlxcdFxcdGlmICghbmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSlcXG4yOTY2OlxcdFxcdFxcdGtmcmVlKHRhYmxlKTtcXG4yOTY3OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTQ6MjMuMzE0ODUzMzg5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwOTc2OTU2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhIG5ldHdvcmtpbmcgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSB2c29jayBTeXNjdGwgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgYHZzb2NrX3N5c2N0bF9yZWdpc3RlcmAgZnVuY3Rpb24gbGl2ZXMuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCdzIGhpZ2hseSBsaWtlbHkgaXQncyBuZXN0bGVkIHdpdGhpbiB0aGUgdnNvY2sgbmV0d29yayBvcGVyYXRpb25zIHN0cnVjdHVyZSwgcHJvYmFibHkgc29tZXRoaW5nIGxpa2UgYHZzb2NrX25ldF9vcHNgLiBJJ2xsIHdhbnQgdG8gdmVyaWZ5IHRoYXQuIE15IGd1dCBzYXlzIHRvIGxvb2sgc29tZXdoZXJlIGFyb3VuZCBsaW5lcyAyOTY4IHRvIDMwMDAg4oCTIHRoYXQgc291bmRzIGxpa2UgYSByZWFzb25hYmxlIHJhbmdlIGZvciB0aGlzIGtpbmQgb2YgY29uZmlndXJhdGlvbi4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTEzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1NDoyNi40MTI1NTE3NDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC92bXdfdnNvY2svYWZfdnNvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTY4LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTY4OlxcdFxcbjI5Njk6XFx0c3RhdGljIHZvaWQgdnNvY2tfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbjI5NzA6XFx0e1xcbjI5NzE6XFx0XFx0aWYgKG5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpXFxuMjk3MjpcXHRcXHRcXHRuZXQtXFx1MDAzZXZzb2NrLm1vZGUgPSBWU09DS19ORVRfTU9ERV9HTE9CQUw7XFxuMjk3MzpcXHRcXHRlbHNlXFxuMjk3NDpcXHRcXHRcXHRuZXQtXFx1MDAzZXZzb2NrLm1vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnMpO1xcbjI5NzU6XFx0XFxuMjk3NjpcXHRcXHRuZXQtXFx1MDAzZXZzb2NrLmNoaWxkX25zX21vZGUgPSBuZXQtXFx1MDAzZXZzb2NrLm1vZGU7XFxuMjk3NzpcXHRcXHRuZXQtXFx1MDAzZXZzb2NrLmNoaWxkX25zX21vZGVfbG9ja2VkID0gMDtcXG4yOTc4OlxcdFxcdG5ldC1cXHUwMDNldnNvY2suZzJoX2ZhbGxiYWNrID0gMTtcXG4yOTc5OlxcdH1cXG4yOTgwOlxcdFxcbjI5ODE6XFx0c3RhdGljIF9fbmV0X2luaXQgaW50IHZzb2NrX3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuMjk4MjpcXHR7XFxuMjk4MzpcXHRcXHR2c29ja19uZXRfaW5pdChuZXQpO1xcbjI5ODQ6XFx0XFxuMjk4NTpcXHRcXHRpZiAodnNvY2tfc3lzY3RsX3JlZ2lzdGVyKG5ldCkpXFxuMjk4NjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yOTg3OlxcdFxcbjI5ODg6XFx0XFx0cmV0dXJuIDA7XFxuMjk4OTpcXHR9XFxuMjk5MDpcXHRcXG4yOTkxOlxcdHN0YXRpYyBfX25ldF9leGl0IHZvaWQgdnNvY2tfc3lzY3RsX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4yOTkyOlxcdHtcXG4yOTkzOlxcdFxcdHZzb2NrX3N5c2N0bF91bnJlZ2lzdGVyKG5ldCk7XFxuMjk5NDpcXHR9XFxuMjk5NTpcXHRcXG4yOTk2OlxcdHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgdnNvY2tfc3lzY3RsX29wcyA9IHtcXG4yOTk3OlxcdFxcdC5pbml0ID0gdnNvY2tfc3lzY3RsX2luaXRfbmV0LFxcbjI5OTg6XFx0XFx0LmV4aXQgPSB2c29ja19zeXNjdGxfZXhpdF9uZXQsXFxuMjk5OTpcXHR9O1xcbjMwMDA6XFx0XFxuMzAwMTpcXHRzdGF0aWMgaW50IF9faW5pdCB2c29ja19pbml0KHZvaWQpXFxuMzAwMjpcXHR7XFxuMzAwMzpcXHRcXHRpbnQgZXJyID0gMDtcXG4zMDA0OlxcdFxcbjMwMDU6XFx0XFx0dnNvY2tfaW5pdF90YWJsZXMoKTtcXG4zMDA2OlxcdFxcbjMwMDc6XFx0XFx0dnNvY2tfcHJvdG8ub3duZXIgPSBUSElTX01PRFVMRTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTQ6MjYuNDEyNzYxNTI2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk0OTU2NjUxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSB2c29jayBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlIHZzb2NrIGluaXRpYWxpemF0aW9uLCBgdnNvY2tfaW5pdCgpYCBjYWxscyBgcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZ2c29ja19zeXNjdGxfb3BzKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkRvIHdlIG5lZWQgdGhlIGBDT05GSUdfTkVUX1NZU0NUTGAgb3B0aW9uIGVuYWJsZWQgZm9yIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/XCIgSXQncyBhIGtleSBmdW5jdGlvbiBpbiBhIHJlbGF0ZWQgY29udGV4dCwgYW5kIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgY2xlYXIuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCBpcyBpbXBsZW1lbnRlZCBhbmQgdXNlZC4gTGV0J3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaCBvZiB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTE0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1NDozNS45MDg0Mjk1MjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMzU3NjE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaD01MTg9c3RydWN0IGN0bF90YWJsZTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC01MjAtI2RlZmluZSByZWdpc3Rlcl9uZXRfc3lzY3RsKG5ldCwgcGF0aCwgdGFibGUpXFx0XFxcXFxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDo1MjE6XFx0cmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIHBhdGgsIHRhYmxlLCBBUlJBWV9TSVpFKHRhYmxlKSlcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtNTIyLSNpZmRlZiBDT05GSUdfU1lTQ1RMXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTUyMz1pbnQgbmV0X3N5c2N0bF9pbml0KHZvaWQpO1xcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDo1MjQ6c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJlZ2lzdGVyX25ldF9zeXNjdGxfc3ooc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLFxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC01MjUtXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTUyOD1zdGF0aWMgaW5saW5lIGludCBuZXRfc3lzY3RsX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDo1Mjk6c3RhdGljIGlubGluZSBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTUzMC1cXHRjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU0OjM2LjYxMjU3Njk2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3NTQ3MzUzNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBbmFseXNpczogdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYENPTkZJR19TWVNDVExgIGFuZCBgQ09ORklHX1ZTT0NLRVRTYCBhcmUgcmVxdWlyZWQsIHNvIHRoZSBwcmVyZXF1aXNpdGVzIGFyZSB0aGVyZS4gVGhpcyBjaGFuZ2UgaXMgaW4gYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AsIHNwZWNpZmljYWxseSB0b3VjaGluZyBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYC5cblxuVGhlIGNvZGUgbW9kaWZpZXMgdGhlIHN5c2N0bCBoYW5kbGVyIGZvciB0aGUgdnNvY2sgbmV0bnMgbW9kZS4gQW55IHByb2Nlc3MgY2FuIHJlYWQgb3Igd3JpdGUgdG8gYC9wcm9jL3N5cy9uZXQvdnNvY2svY2hpbGRfbnNfbW9kZWAsIG1ha2luZyB0aGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoYXQncyBnb29kLCB0aGF0J3MgdGhlIHByaW1hcnkgaHVyZGxlIGZvciBmdXp6aW5nLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IHNob3VsZCB3ZSBmdXp6IGl0PyBMZXQncyBjaGVjayB0aGUgZ3VpZGVsaW5lcy4gVGhpcyBjaGFuZ2UgZG9lc24ndCBmYWxsIHVuZGVyIGFueSBvZiB0aGUgXCJuZWdhdGl2ZSBjcml0ZXJpYS5cIiBJdCdzIG5vdCBkb2N1bWVudGF0aW9uLCBhIGJ1aWxkIHN5c3RlbSBjaGFuZ2UgdGhhdCBkb2Vzbid0IGFmZmVjdCBjb21waWxlZCBDIGxvZ2ljLCB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgZHJpdmVyIHRlYXJkb3duLiBJdCdzIGFsc28gbm90IGFuIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoLiBUaGlzIGlzIHRvdWNoaW5nIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gY29yZSBuZXR3b3JraW5nLCBhbmQgdGhlIHBhdGNoIG1vZGlmaWVzIGEgc3lzY3RsIGhhbmRsZXIgKGB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdgKS4gRnVydGhlcm1vcmUsIGl0IGluaXRpYWxpemVzIGEgbG9jYWwgdmFyaWFibGUgYG5ld19tb2RlYCBkaWZmZXJlbnRseS4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIHRoZSB2YWx1ZSBvZiBgbmV3X21vZGVgIHdoZW4gYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nYCBkb2VzIG5vdCBzZXQgaXQgKGUuZy4sIHdoZW4gd3JpdGluZyAwIGJ5dGVzKS5cblxuVGhlIHBhdGNoIGNsZWFybHkgdG91Y2hlcyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSwgc28gdGhlIGFuc3dlciBpcyAqeWVzKi4gYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLlxuXG5Ob3csIGZvciBgRm9jdXNTeW1ib2xzYC4gVGhlIHByaW1hcnkgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQgaXMgYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AuIEJ1dCB3aGF0IGFib3V0IGl0cyBjYWxsZXJzIG9yIHJlbGF0ZWQgZnVuY3Rpb25zPyBIb2xkIG9uLi4uIGlzIGB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdgIHN0YXRpYyBhbmQgaW5saW5lZD8gTm8sIGl0IGxvb2tzIGxpa2UgaXQncyByZWZlcmVuY2VkIGJ5IHBvaW50ZXIgd2l0aGluIHRoZSBgcHJvY19oYW5kbGVyYCBvZiB0aGUgc3lzY3RsIHRhYmxlIGVudHJ5LiBUaGUgY29tcGlsZXIgKndpbGwqIGdlbmVyYXRlIGEgc3ltYm9sIGZvciBpdC4gTGV0J3Mgc2VlIGlmIHRoZSBvdGhlciBzeW1ib2xzIGFyZSB0aGVyZSwgdG9vLCBzdWNoIGFzIGB2c29ja19uZXRfY2hpbGRfbW9kZWAgYW5kIGB2c29ja19uZXRfc2V0X2NoaWxkX21vZGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ4MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTQ6NDQuMTU5OTMzNDIxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjA5NjUwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2c29ja19uZXRfY2hpbGRfbW9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjg1OT1zdGF0aWMgaW50IHZzb2NrX25ldF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4NzItXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4NzM6c3RhdGljIGludCB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg3NC1cXHRcXHRcXHRcXHQgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODgwLVxcdG5ldCA9IGNvbnRhaW5lcl9vZih0YWJsZS1cXHUwMDNlZGF0YSwgc3RydWN0IG5ldCwgdnNvY2suY2hpbGRfbnNfbW9kZSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4ODE6XFx0bmV3X21vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODgyLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODgzLVxcdHJldCA9IF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODg0OlxcdFxcdFxcdFxcdCAgICAgIHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCksIFxcdTAwMjZuZXdfbW9kZSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4ODUtXFx0aWYgKHJldClcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yOTAzPXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkxNS1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjkxNjpcXHRcXHQucHJvY19oYW5kbGVyXFx0PSB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkxNy1cXHR9LFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI5Njk9c3RhdGljIHZvaWQgdnNvY2tfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NzMtXFx0ZWxzZVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTc0OlxcdFxcdG5ldC1cXHUwMDNldnNvY2subW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKGN1cnJlbnQtXFx1MDAzZW5zcHJveHktXFx1MDAzZW5ldF9ucyk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NzUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU0OjQ0LjIyNjAzNDY5NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTM5NDI0NTE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqVHJhY2luZyB0aGUgdnNvY2tfbmV0X2NoaWxkX21vZGUgRGVmaW5pdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHdoZXJlIGlzIGB2c29ja19uZXRfY2hpbGRfbW9kZWAgZGVmaW5lZD9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gS25vd2luZyB3aGVyZSBpdCdzIGRlY2xhcmVkIGFuZCBpbml0aWFsaXplZCBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgbGFyZ2VyIHN5c3RlbS4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBkZWJ1Z2dpbmcgb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBwcm9ncmFtLCBvciBldmVuIGp1c3QgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHByb2dyYW0uIEknbSBnb2luZyB0byBzdGFydCB0cmFjaW5nIHRoYXQgdmFyaWFibGUgZG93biBhbmQgdW5kZXJzdGFuZGluZyBldmVyeXRoaW5nIGFib3V0IGl0cyB1c2FnZSwgYW5kIGl0cyBlZmZlY3RzIG9uIHRoZSBwcm9ncmFtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk2NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU0OjU5LjYyMDI4MjA4OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzNjY5NDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2c29ja19uZXRfY2hpbGRfbW9kZVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2FmX3Zzb2NrLmg9Mjg5PXN0YXRpYyBpbmxpbmUgYm9vbCB2c29ja19uZXRfc2V0X2NoaWxkX21vZGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxuaW5jbHVkZS9uZXQvYWZfdnNvY2suaC0zMDMtXFxuaW5jbHVkZS9uZXQvYWZfdnNvY2suaDozMDQ6c3RhdGljIGlubGluZSBlbnVtIHZzb2NrX25ldF9tb2RlIHZzb2NrX25ldF9jaGlsZF9tb2RlKHN0cnVjdCBuZXQgKm5ldClcXG5pbmNsdWRlL25ldC9hZl92c29jay5oLTMwNS17XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjg3Mz1zdGF0aWMgaW50IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4ODAtXFx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVxcdTAwM2VkYXRhLCBzdHJ1Y3QgbmV0LCB2c29jay5jaGlsZF9uc19tb2RlKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjg4MTpcXHRuZXdfbW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4ODItXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4ODMtXFx0cmV0ID0gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4ODQ6XFx0XFx0XFx0XFx0ICAgICAgdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KSwgXFx1MDAyNm5ld19tb2RlKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg4NS1cXHRpZiAocmV0KVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI5Njk9c3RhdGljIHZvaWQgdnNvY2tfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NzMtXFx0ZWxzZVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTc0OlxcdFxcdG5ldC1cXHUwMDNldnNvY2subW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKGN1cnJlbnQtXFx1MDAzZW5zcHJveHktXFx1MDAzZW5ldF9ucyk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NzUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU1OjAxLjk1Njk4MzMyNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTM2OTc2NjI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGB2c29ja19uZXRfY2hpbGRfbW9kZWAqKlxuXG5Pa2F5LCBzbyBgdnNvY2tfbmV0X2NoaWxkX21vZGVgIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgaW5saW5lIHdpdGhpbiBgaW5jbHVkZS9uZXQvYWZfdnNvY2suaGAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgdnNvY2sgbmV0IGluZnJhc3RydWN0dXJlLiBJJ20gd29uZGVyaW5nIGlmIHRoaXMgaXMgcmVsYXRlZCB0byBob3cgdGhlIHZzb2NrIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgY2hpbGQgbmV0d29yayBuYW1lc3BhY2VzIG9yIGNvbmZpZ3VyYXRpb25zLlxuXG5Ob3csIHdoYXQgYWJvdXQgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nYD8gVGhhdCdzIGFub3RoZXIgcG90ZW50aWFsIHBpZWNlIG9mIHRoZSBwdXp6bGUgSSBuZWVkIHRvIGNvbnNpZGVyLiBJIHNob3VsZCBwcm9iYWJseSB0cmFjayBkb3duIHdoZXJlIHRoYXQncyBkZWZpbmVkIG9yIHVzZWQgdG8gc2VlIGhvdyBpdCdzIGxpbmtlZC5cblxuTGV0IG1lIGNoZWNrIGxpbmUgMjgwMCBvZiBgbmV0L3Ztd192c29jay9hZl92c29jay5jYC4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZSB2c29jayBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0IG1hbmFnZXMgbmV0d29yayBtb2Rlcy4gSG9wZWZ1bGx5LCB0aGF0IGxvY2F0aW9uIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgcmVsYXRlZCB0byB0aGVzZSB2YXJpYWJsZXMsIGluY2x1ZGluZyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGV5IGFyZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTY1MCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU1OjMxLjMyNjc1MjM4NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Ztd192c29jay9hZl92c29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4MDA6XFx0c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHZzb2NrX2RldmljZSA9IHtcXG4yODAxOlxcdFxcdC5uYW1lXFx0XFx0PSBcXFwidnNvY2tcXFwiLFxcbjI4MDI6XFx0XFx0LmZvcHNcXHRcXHQ9IFxcdTAwMjZ2c29ja19kZXZpY2Vfb3BzLFxcbjI4MDM6XFx0fTtcXG4yODA0OlxcdFxcbjI4MDU6XFx0c3RhdGljIGludCBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbjI4MDY6XFx0XFx0XFx0XFx0XFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyxcXG4yODA3OlxcdFxcdFxcdFxcdFxcdCAgIGVudW0gdnNvY2tfbmV0X21vZGUgbW9kZSxcXG4yODA4OlxcdFxcdFxcdFxcdFxcdCAgIGVudW0gdnNvY2tfbmV0X21vZGUgKm5ld19tb2RlKVxcbjI4MDk6XFx0e1xcbjI4MTA6XFx0XFx0Y2hhciBkYXRhW1ZTT0NLX05FVF9NT0RFX1NUUl9NQVhdID0gezB9O1xcbjI4MTE6XFx0XFx0c3RydWN0IGN0bF90YWJsZSB0bXA7XFxuMjgxMjpcXHRcXHRpbnQgcmV0O1xcbjI4MTM6XFx0XFxuMjgxNDpcXHRcXHRpZiAoIXRhYmxlLVxcdTAwM2VkYXRhIHx8ICF0YWJsZS1cXHUwMDNlbWF4bGVuIHx8ICEqbGVucCkge1xcbjI4MTU6XFx0XFx0XFx0KmxlbnAgPSAwO1xcbjI4MTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjgxNzpcXHRcXHR9XFxuMjgxODpcXHRcXG4yODE5OlxcdFxcdHRtcCA9ICp0YWJsZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTU6MzEuMzI2ODk0NzE1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQzMzA5MjExNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIFZTb2NrIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBWU29jayBzaXR1YXRpb24sIGFuZCB0aGUga2V5IGZ1bmN0aW9ucyB0byBrZWVwIGluIG1pbmQgYXJlIGB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdgIGFuZCBgX192c29ja19uZXRfbW9kZV9zdHJpbmdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZnVsbCBjb25maWd1cmF0aW9uIHBpY3R1cmUuIEkga25vdyB0aGlzIHN0dWZmLCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4sIHNvIEkgd2lsbCBzdGFydCBieSBjaGVja2luZyBmb3IgYW55IG1pc3NpbmcgY29uZmlndXJhdGlvbiBiaXRzLlxuXG5GaXJzdCBzdG9wIGlzIHRoZSBgbmV0L3Ztd192c29jay9LY29uZmlnYCBmaWxlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNlbnRyYWwgb3B0aW9uLCBhbmQgdGhlcmUgaXQgaXM6IGBjb25maWcgVlNPQ0tFVFMgdHJpc3RhdGUgXCJWaXJ0dWFsIFNvY2tldCBwcm90b2NvbFwiYC4gR29vZCwgdGhhdCBjb25maXJtcyB0aGUgY29yZSBjb21wb25lbnQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgZGVwZW5kZW5jaWVzLCB0b28uXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhlIHN5c2N0bCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfU1lTQ1RMYCBpcyBlbmFibGVkLCBiZWNhdXNlIFZTb2NrIGxpa2VseSBleHBvc2VzIHNvbWUgdHVuYWJsZSBwYXJhbWV0ZXJzLlxuXG5GaW5hbGx5LCBJJ2xsIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSB0b3Agb2YgYGFmX3Zzb2NrLmNgIGl0c2VsZi4gVGhlIGluY2x1ZGVzIGFuZCBpbml0aWFsIGRlZmluaXRpb25zIHRoZXJlIG9mdGVuIHByb3ZpZGUgYSBxdWljayBvdmVydmlldyBvZiBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBJIG1pZ2h0IGhhdmUgbWlzc2VkLiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1NTozNS42NTc4MTg1MzdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC92bXdfdnNvY2svYWZfdnNvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBWTXdhcmUgdlNvY2tldHMgRHJpdmVyXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgVk13YXJlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXFxuICAgNjpcXHQgKi9cXG4gICA3OlxcdFxcbiAgIDg6XFx0LyogSW1wbGVtZW50YXRpb24gbm90ZXM6XFxuICAgOTpcXHQgKlxcbiAgMTA6XFx0ICogLSBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIHNvY2tldHM6IHRob3NlIGNyZWF0ZWQgYnkgdXNlciBhY3Rpb24gKHN1Y2ggYXNcXG4gIDExOlxcdCAqIGNhbGxpbmcgc29ja2V0KDIpKSBhbmQgdGhvc2UgY3JlYXRlZCBieSBpbmNvbWluZyBjb25uZWN0aW9uIHJlcXVlc3QgcGFja2V0cy5cXG4gIDEyOlxcdCAqXFxuICAxMzpcXHQgKiAtIFRoZXJlIGFyZSB0d28gXFxcImdsb2JhbFxcXCIgdGFibGVzLCBvbmUgZm9yIGJvdW5kIHNvY2tldHMgKHNvY2tldHMgdGhhdCBoYXZlXFxuICAxNDpcXHQgKiBzcGVjaWZpZWQgYW4gYWRkcmVzcyB0aGF0IHRoZXkgYXJlIHJlc3BvbnNpYmxlIGZvcikgYW5kIG9uZSBmb3IgY29ubmVjdGVkXFxuICAxNTpcXHQgKiBzb2NrZXRzIChzb2NrZXRzIHRoYXQgaGF2ZSBlc3RhYmxpc2hlZCBhIGNvbm5lY3Rpb24gd2l0aCBhbm90aGVyIHNvY2tldCkuXFxuICAxNjpcXHQgKiBUaGVzZSB0YWJsZXMgYXJlIFxcXCJnbG9iYWxcXFwiIGluIHRoYXQgYWxsIHNvY2tldHMgb24gdGhlIHN5c3RlbSBhcmUgcGxhY2VkXFxuICAxNzpcXHQgKiB3aXRoaW4gdGhlbS4gLSBOb3RlLCB0aG91Z2gsIHRoYXQgdGhlIGJvdW5kIHRhYmxlIGNvbnRhaW5zIGFuIGV4dHJhIGVudHJ5XFxuICAxODpcXHQgKiBmb3IgYSBsaXN0IG9mIHVuYm91bmQgc29ja2V0cyBhbmQgU09DS19ER1JBTSBzb2NrZXRzIHdpbGwgYWx3YXlzIHJlbWFpbiBpblxcbiAgMTk6XFx0ICogdGhhdCBsaXN0LiBUaGUgYm91bmQgdGFibGUgaXMgdXNlZCBzb2xlbHkgZm9yIGxvb2t1cCBvZiBzb2NrZXRzIHdoZW4gcGFja2V0c1xcbiAgMjA6XFx0ICogYXJlIHJlY2VpdmVkIGFuZCB0aGF0J3Mgbm90IG5lY2Vzc2FyeSBmb3IgU09DS19ER1JBTSBzb2NrZXRzIHNpbmNlIHdlIGNyZWF0ZVxcbiAgMjE6XFx0ICogYSBkYXRhZ3JhbSBoYW5kbGUgZm9yIGVhY2ggYW5kIG5lZWQgbm90IHBlcmZvcm0gYSBsb29rdXAuICBLZWVwaW5nIFNPQ0tfREdSQU1cXG4gIDIyOlxcdCAqIHNvY2tldHMgb3V0IG9mIHRoZSBib3VuZCBoYXNoIGJ1Y2tldHMgd2lsbCByZWR1Y2UgdGhlIGNoYW5jZSBvZiBjb2xsaXNpb25zXFxuICAyMzpcXHQgKiB3aGVuIGxvb2tpbmcgZm9yIFNPQ0tfU1RSRUFNIHNvY2tldHMgYW5kIHByZXZlbnRzIHVzIGZyb20gaGF2aW5nIHRvIGNoZWNrIHRoZVxcbiAgMjQ6XFx0ICogc29ja2V0IHR5cGUgaW4gdGhlIGhhc2ggdGFibGUgbG9va3Vwcy5cXG4gIDI1OlxcdCAqXFxuICAyNjpcXHQgKiAtIFNvY2tldHMgY3JlYXRlZCBieSB1c2VyIGFjdGlvbiB3aWxsIGVpdGhlciBiZSBcXFwiY2xpZW50XFxcIiBzb2NrZXRzIHRoYXRcXG4gIDI3OlxcdCAqIGluaXRpYXRlIGEgY29ubmVjdGlvbiBvciBcXFwic2VydmVyXFxcIiBzb2NrZXRzIHRoYXQgbGlzdGVuIGZvciBjb25uZWN0aW9uczsgd2UgZG9cXG4gIDI4OlxcdCAqIG5vdCBzdXBwb3J0IHNpbXVsdGFuZW91cyBjb25uZWN0cyAodHdvIFxcXCJjbGllbnRcXFwiIHNvY2tldHMgY29ubmVjdGluZykuXFxuICAyOTpcXHQgKlxcbiAgMzA6XFx0ICogLSBcXFwiU2VydmVyXFxcIiBzb2NrZXRzIGFyZSByZWZlcnJlZCB0byBhcyBsaXN0ZW5lciBzb2NrZXRzIHRocm91Z2hvdXQgdGhpc1xcbiAgMzE6XFx0ICogaW1wbGVtZW50YXRpb24gYmVjYXVzZSB0aGV5IGFyZSBpbiB0aGUgVENQX0xJU1RFTiBzdGF0ZS4gIFdoZW4gYVxcbiAgMzI6XFx0ICogY29ubmVjdGlvbiByZXF1ZXN0IGlzIHJlY2VpdmVkICh0aGUgc2Vjb25kIGtpbmQgb2Ygc29ja2V0IG1lbnRpb25lZCBhYm92ZSksXFxuICAzMzpcXHQgKiB3ZSBjcmVhdGUgYSBuZXcgc29ja2V0IGFuZCByZWZlciB0byBpdCBhcyBhIHBlbmRpbmcgc29ja2V0LiAgVGhlc2UgcGVuZGluZ1xcbiAgMzQ6XFx0ICogc29ja2V0cyBhcmUgcGxhY2VkIG9uIHRoZSBwZW5kaW5nIGNvbm5lY3Rpb24gbGlzdCBvZiB0aGUgbGlzdGVuZXIgc29ja2V0LlxcbiAgMzU6XFx0ICogV2hlbiBmdXR1cmUgcGFja2V0cyBhcmUgcmVjZWl2ZWQgZm9yIHRoZSBhZGRyZXNzIHRoZSBsaXN0ZW5lciBzb2NrZXQgaXNcXG4gIDM2OlxcdCAqIGJvdW5kIHRvLCB3ZSBjaGVjayBpZiB0aGUgc291cmNlIG9mIHRoZSBwYWNrZXQgaXMgZnJvbSBvbmUgdGhhdCBoYXMgYW5cXG4gIDM3OlxcdCAqIGV4aXN0aW5nIHBlbmRpbmcgY29ubmVjdGlvbi4gIElmIGl0IGRvZXMsIHdlIHByb2Nlc3MgdGhlIHBhY2tldCBmb3IgdGhlXFxuICAzODpcXHQgKiBwZW5kaW5nIHNvY2tldC4gIFdoZW4gdGhhdCBzb2NrZXQgcmVhY2hlcyB0aGUgY29ubmVjdGVkIHN0YXRlLCBpdCBpcyByZW1vdmVkXFxuICAzOTpcXHQgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQncyBwZW5kaW5nIGxpc3QgYW5kIGVucXVldWVkIGluIHRoZSBsaXN0ZW5lclxcbiAgNDA6XFx0ICogc29ja2V0J3MgYWNjZXB0IHF1ZXVlLiAgQ2FsbGVycyBvZiBhY2NlcHQoMikgd2lsbCBhY2NlcHQgY29ubmVjdGVkIHNvY2tldHNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTU6MzUuNjU4MDI1MTE3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1MDc4NzU4Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB2c29jayBSZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHZzb2NrLCBhbmQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwZXItbmV0IHN1YnN5c3RlbSByZWdpc3RyYXRpb24uIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgZGlyZWN0bHkgYXQgdGhlIHNvdXJjZSBjb2RlIOKAkyBzcGVjaWZpY2FsbHkgYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AuIEkga25vdyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgQUZfVlNPQ0sgZnVuY3Rpb25hbGl0eSBpcyBkZWZpbmVkLiBJJ20gZm9jdXNpbmcgb24gdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLCBuYXR1cmFsbHksIHNvIHRoZSBhcmVhIGFyb3VuZCBgcmVnaXN0ZXJfcGVybmV0X3N1YnN5c2AgaXMgd2hlcmUgSSdsbCBiZSBjb25jZW50cmF0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgdnNvY2sgZmFtaWx5IGhvb2tzIGludG8gdGhlIG5ldHdvcmtpbmcgc3RhY2sgYXQgdGhlIHBlci1uZXQgbmFtZXNwYWNlIGxldmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gdGhhdCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29ycmVjdCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb250ZW50aW9uIHBvaW50cywgb3IgdmVyaWZ5IHRoZSBpbnRlbmRlZCBiZWhhdmlvciBvZiB0aGUgc3Vic3lzdGVtJ3MgbGlmZWN5Y2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ0NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTY6MDAuNzM2ODA5NzI3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Nzg1MTc4NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnNvY2tfc3lzY3RsX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjk5MT1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHZzb2NrX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjk5NS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjk5NjpzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHZzb2NrX3N5c2N0bF9vcHMgPSB7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5OTctXFx0LmluaXQgPSB2c29ja19zeXNjdGxfaW5pdF9uZXQsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzAwMT1zdGF0aWMgaW50IF9faW5pdCB2c29ja19pbml0KHZvaWQpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzAyNy1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzAyODpcXHRpZiAocmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2dnNvY2tfc3lzY3RsX29wcykpIHtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzAyOS1cXHRcXHRlcnIgPSAtRU5PTUVNO1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTMwNDc9c3RhdGljIHZvaWQgX19leGl0IHZzb2NrX2V4aXQodm9pZClcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMDUxLVxcdHByb3RvX3VucmVnaXN0ZXIoXFx1MDAyNnZzb2NrX3Byb3RvKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzA1MjpcXHR1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXFx1MDAyNnZzb2NrX3N5c2N0bF9vcHMpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMDUzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTY6MDEuMzE1MzM4MTMzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk2MzE0NzEwNjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBWU09DS0VUUyBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgemVyb2VkIGluIG9uIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaGVyZS4gYENPTkZJR19WU09DS0VUU2AgaXMgdGhlIHByaW1hcnkgb25lLCBuYXR1cmFsbHkuIFRoZW4sIGBDT05GSUdfU1lTQ1RMYCBpcyByZXF1aXJlZCBmb3IgdGhlIHN5c2N0bCBzdXBwb3J0LCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgb24gYW1kNjQgc3lzdGVtcyBhbmQgZm9yIHN5emthbGxlci5cblxuTm93LCBJIG5lZWRlZCB0byBjb25maXJtIHdoZXRoZXIgYENPTkZJR19ORVRgIGlzIHJlcXVpcmVkLiBTaW5jZSBgVlNPQ0tFVFNgIGxpdmVzIHVuZGVyIGBuZXQvYCwgaXQgbWFkZSBzZW5zZSB0byBjaGVjay4gTG9va2luZyBhdCBgbmV0L3Ztd192c29jay9LY29uZmlnYCwgc3BlY2lmaWNhbGx5LCBsaW5lIDYgY29uZmlybXMgdGhhdCBgVlNPQ0tFVFNgICppcyogaW5jbHVkZWQgd2hlbiBgQ09ORklHX05FVGAgaXMgZW5hYmxlZC4gU28sIGBWU09DS0VUU2AgYW5kIGBTWVNDVExgIGFyZSB0aGUgbWFpbiB0aGluZ3MgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5OZXh0LCBJIGRpZCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBGb2N1c1N5bWJvbHMuIEkgaWRlbnRpZmllZCBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYCBhbmQgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nYC4gTG9va3MgbGlrZSB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgb25seSBtb2RpZnlpbmcgYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AsIHdoaWNoIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gcmVhZGluZyBhbmQgd3JpdGluZyBgL3Byb2Mvc3lzL25ldC92c29jay9jaGlsZF9uc19tb2RlYC5cblxuRmluYWxseSwgSSBjaGVja2VkIFdvcnRoRnV6emluZy4gVGhlIHBhdGNoIGlzIGluaXRpYWxpemluZyBgbmV3X21vZGVgIHdpdGhpbiBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYC4gQ3J1Y2lhbGx5LCB0aGlzIG1vZGlmaWVzIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBgYWZfdnNvY2tgLiBBY2NvcmRpbmcgdG8gbXkgY3JpdGVyaWEsIGFueSBsb2dpYyBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHF1YWxpZnkuIFNlY3Rpb24gMyBpcyBjbGVhciBvbiB0aGF0LiBQbHVzLCBpdCBkb2Vzbid0IHNlZW0gdG8gbWVldCBhbnkgb2YgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGluIFNlY3Rpb24gMi5cblxuRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJ20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxMDIsIk91dHB1dFRva2VucyI6MTYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU3OjM3LjYzMDA1MTcwNVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzQ3MTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlNZU0NUTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ1wiLFxuICAgIFwiX192c29ja19uZXRfbW9kZV9zdHJpbmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoKSBpbiBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3X21vZGUgdmFyaWFibGUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gX192c29ja19uZXRfbW9kZV9zdHJpbmcoKSwgcHJldmVudGluZyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWQgd2hlbiB3cml0aW5nIHRvIC9wcm9jL3N5cy9uZXQvdnNvY2svY2hpbGRfbnNfbW9kZSB3aXRoIHplcm8gbGVuZ3RoLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc3lzY3RsIGNvZGUgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiU1lTQ1RMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nXCIsXG4gICAgXCJfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZygpIGluIG5ldC92bXdfdnNvY2svYWZfdnNvY2suYyB0byBpbml0aWFsaXplIHRoZSBuZXdfbW9kZSB2YXJpYWJsZSBiZWZvcmUgcGFzc2luZyBpdCB0byBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZygpLCBwcmV2ZW50aW5nIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZCB3aGVuIHdyaXRpbmcgdG8gL3Byb2Mvc3lzL25ldC92c29jay9jaGlsZF9uc19tb2RlIHdpdGggemVybyBsZW5ndGguIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgbmV0d29ya2luZyBzeXNjdGwgY29kZSB0aGF0IGNhbiBiZSBleGVyY2lzZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1NzozNy43NTM1MzQ5NzRaIiwiU2VxIjozOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MTM1ODU5NjkyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU3OjM3Ljc1NDM3OTMwNVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU4MTM1Nzc0Nzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgdGhlIHN0YWNrIHZhcmlhYmxlIGBuZXdfbW9kZWAgaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZygpYCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgKHNwZWNpZmljYWxseSBpZiBhIHdyaXRlIG9jY3VycmVkIHdpdGggYCpsZW5wID09IDBgLCBjYXVzaW5nIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZygpYCB0byByZXR1cm4gMCB3aXRob3V0IGFzc2lnbmluZyBgKm5ld19tb2RlYCkuIFRoZSBwYXRjaCBpbml0aWFsaXplcyBgbmV3X21vZGVgIHdpdGggYHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldClgIGJlZm9yZSBwYXNzaW5nIGl0cyBwb2ludGVyLlxcblxcbkJlY2F1c2UgdGhpcyBjaGFuZ2UgcmVzb2x2ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLCBpdCBwb3NlcyBubyByaXNrIG9mIGludHJvZHVjaW5nIEtNU0FOLWRldGVjdGFibGUgYnVncy4gU3RhbmRhcmQgdGVzdGluZy9LQVNBTiBpcyBzdWZmaWNpZW50LCBhbmQgc3Bhd25pbmcgYSBkZWRpY2F0ZWQsIHJlc291cmNlLWludGVuc2l2ZSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNmJlMDllYTg0NTY1ODg4OGNjODU5MzViMjI1MzM0MDQzN2VlMzYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTQ6NDA6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbmluZGV4IDYyMmRiZDA0Njc5OTQuLjYxMTYzMzU3YWUzYzQgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbisrKyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuQEAgLTI4NzgsNiArMjg3OCw3IEBAIHN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4gXHRpbnQgcmV0O1xuIFxuIFx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsIHZzb2NrLmNoaWxkX25zX21vZGUpO1xuK1x0bmV3X21vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpO1xuIFxuIFx0cmV0ID0gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXG4gXHRcdFx0XHQgICAgICB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpLCBcdTAwMjZuZXdfbW9kZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1NzozNy43NTQzODE0OTVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjkxNjEwODkwOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBKdXN0aWZpY2F0aW9uOiB2bXdfdnNvY2sgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBzZWUgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aCBzZXR0aW5nIHVwIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBhIHJlbGF0aXZlbHkgdGFyZ2V0ZWQgY2hhbmdlLCBzbyB3ZSBuZWVkIHRvIGRldGVybWluZSB0aGUgcG90ZW50aWFsIHJpc2suIEknbSBsb29raW5nIGF0IGEgZGlmZiB3aXRoaW4gYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgbGluZSAyODc4LiBUaGUgZGlmZiBzaG93cyBhIG5ldyBsaW5lIGBuZXdfbW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCk7YCBoYXMgYmVlbiBhZGRlZC4gSXQgbG9va3MgbGlrZSBpdCdzIGNhbGN1bGF0aW5nIGEgYG5ld19tb2RlYCB2YXJpYWJsZSB1c2luZyB0aGUgZnVuY3Rpb24gYHZzb2NrX25ldF9jaGlsZF9tb2RlYC4gVGhlIHN1cnJvdW5kaW5nIGNvZGUgaW52b2x2ZXMgYSBgY3RsX3RhYmxlYCBhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBjaGlsZCBuYW1lc3BhY2UgbW9kZSBzdHJpbmcuIEknbGwgbmVlZCB0byByZWFkIHRoZSBjb2RlIGFyb3VuZCB0aGlzIGFkZGl0aW9uIG1vcmUgY2xvc2VseSwgc28gSSBzaG91bGQgZmlyZSB1cCBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgbGluZXMgaW4gdGhlIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdnNvY2tfbmV0X2NoaWxkX21vZGVgIGlzIGRvaW5nIHdpdGggdGhlIGBuZXRgIHN0cnVjdCwgYW5kIGhvdyB0aGF0IG5ldyB2YWx1ZSBpbnRlcmFjdHMgd2l0aCB0aGUgY29udHJvbCB0YWJsZSBzZXR1cC4gRGVwZW5kaW5nIG9uIGhvdyB0aG9zZSBmdW5jdGlvbnMgYXJlIGludGVyYWN0aW5nLCBhbmQgdGhlIGRhdGEgdGhleSBhcmUgd29ya2luZyB3aXRoLCB0aGlzIGNvdWxkIHZlcnkgd2VsbCBiZSBzb21ldGhpbmcgdGhhdCB3b3VsZCBiZW5lZml0IGZyb20gZnV6emluZyB3aXRoIEtNU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTg6MDYuOTE1NDczODczWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjExMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg2MDpcXHRcXHRcXHRcXHRcXHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4yODYxOlxcdHtcXG4yODYyOlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4yODYzOlxcdFxcbjI4NjQ6XFx0XFx0aWYgKHdyaXRlKVxcbjI4NjU6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4yODY2OlxcdFxcbjI4Njc6XFx0XFx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVxcdTAwM2VkYXRhLCBzdHJ1Y3QgbmV0LCB2c29jay5tb2RlKTtcXG4yODY4OlxcdFxcbjI4Njk6XFx0XFx0cmV0dXJuIF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zLFxcbjI4NzA6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHZzb2NrX25ldF9tb2RlKG5ldCksIE5VTEwpO1xcbjI4NzE6XFx0fVxcbjI4NzI6XFx0XFxuMjg3MzpcXHRzdGF0aWMgaW50IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbjI4NzQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuMjg3NTpcXHR7XFxuMjg3NjpcXHRcXHRlbnVtIHZzb2NrX25ldF9tb2RlIG5ld19tb2RlO1xcbjI4Nzc6XFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbjI4Nzg6XFx0XFx0aW50IHJldDtcXG4yODc5OlxcdFxcbjI4ODA6XFx0XFx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVxcdTAwM2VkYXRhLCBzdHJ1Y3QgbmV0LCB2c29jay5jaGlsZF9uc19tb2RlKTtcXG4yODgxOlxcdFxcdG5ld19tb2RlID0gdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KTtcXG4yODgyOlxcdFxcbjI4ODM6XFx0XFx0cmV0ID0gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxuMjg4NDpcXHRcXHRcXHRcXHRcXHQgICAgICB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpLCBcXHUwMDI2bmV3X21vZGUpO1xcbjI4ODU6XFx0XFx0aWYgKHJldClcXG4yODg2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjg4NzpcXHRcXG4yODg4OlxcdFxcdGlmICh3cml0ZSkge1xcbjI4ODk6XFx0XFx0XFx0LyogUHJldmVudCBhIFxcXCJsb2NhbFxcXCIgbmFtZXNwYWNlIGZyb20gZXNjYWxhdGluZyB0byBcXFwiZ2xvYmFsXFxcIixcXG4yODkwOlxcdFxcdFxcdCAqIHdoaWNoIHdvdWxkIGdpdmUgbmVzdGVkIG5hbWVzcGFjZXMgYWNjZXNzIHRvIGdsb2JhbCBDSURzLlxcbjI4OTE6XFx0XFx0XFx0ICovXFxuMjg5MjpcXHRcXHRcXHRpZiAodnNvY2tfbmV0X21vZGUobmV0KSA9PSBWU09DS19ORVRfTU9ERV9MT0NBTCBcXHUwMDI2XFx1MDAyNlxcbjI4OTM6XFx0XFx0XFx0ICAgIG5ld19tb2RlID09IFZTT0NLX05FVF9NT0RFX0dMT0JBTClcXG4yODk0OlxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMjg5NTpcXHRcXG4yODk2OlxcdFxcdFxcdGlmICghdnNvY2tfbmV0X3NldF9jaGlsZF9tb2RlKG5ldCwgbmV3X21vZGUpKVxcbjI4OTc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yODk4OlxcdFxcdH1cXG4yODk5OlxcdFxcbjI5MDA6XFx0XFx0cmV0dXJuIDA7XFxuMjkwMTpcXHR9XFxuMjkwMjpcXHRcXG4yOTAzOlxcdHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XFxuMjkwNDpcXHRcXHR7XFxuMjkwNTpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJuc19tb2RlXFxcIixcXG4yOTA2OlxcdFxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2aW5pdF9uZXQudnNvY2subW9kZSxcXG4yOTA3OlxcdFxcdFxcdC5tYXhsZW5cXHRcXHQ9IFZTT0NLX05FVF9NT0RFX1NUUl9NQVgsXFxuMjkwODpcXHRcXHRcXHQubW9kZVxcdFxcdD0gMDQ0NCxcXG4yOTA5OlxcdFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHZzb2NrX25ldF9tb2RlX3N0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1ODowNi45MTU2NzI3MTRaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTY4MTcyNzIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBjdXJpb3VzIGFib3V0IHRoaXMgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJJ2xsIGZvY3VzIG9uIGxpbmVzIDI4MjAgdGhyb3VnaCAyODY1LCBhcyB0aGF0IHNlZW1zIGxpa2UgdGhlIHJlbGV2YW50IHNlY3Rpb24gb2YgY29kZS4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggaG93IHRoZSB2c29jayBjb25uZWN0aW9uIGlzIGNvbmZpZ3VyZWQgb3IgcHJlc2VudGVkLiBJJ2xsIHBheSBhdHRlbnRpb24gdG8gYW55IHN0cmluZyBtYW5pcHVsYXRpb24gb3IgbmV0d29yay1yZWxhdGVkIHBhcmFtZXRlcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0J3MgcmVzcG9uc2libGUgZm9yIGRlYnVnZ2luZyBpbmZvLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTUxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1ODowOC41OTc0MDMwNDhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC92bXdfdnNvY2svYWZfdnNvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODIwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODIwOlxcdFxcdHRtcC5kYXRhID0gZGF0YTtcXG4yODIxOlxcdFxcbjI4MjI6XFx0XFx0aWYgKCF3cml0ZSkge1xcbjI4MjM6XFx0XFx0XFx0Y29uc3QgY2hhciAqcDtcXG4yODI0OlxcdFxcbjI4MjU6XFx0XFx0XFx0c3dpdGNoIChtb2RlKSB7XFxuMjgyNjpcXHRcXHRcXHRjYXNlIFZTT0NLX05FVF9NT0RFX0dMT0JBTDpcXG4yODI3OlxcdFxcdFxcdFxcdHAgPSBWU09DS19ORVRfTU9ERV9TVFJfR0xPQkFMO1xcbjI4Mjg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjgyOTpcXHRcXHRcXHRjYXNlIFZTT0NLX05FVF9NT0RFX0xPQ0FMOlxcbjI4MzA6XFx0XFx0XFx0XFx0cCA9IFZTT0NLX05FVF9NT0RFX1NUUl9MT0NBTDtcXG4yODMxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4MzI6XFx0XFx0XFx0ZGVmYXVsdDpcXG4yODMzOlxcdFxcdFxcdFxcdFdBUk5fT05DRSh0cnVlLCBcXFwibmV0bnMgaGFzIGludmFsaWQgdnNvY2sgbW9kZVxcXCIpO1xcbjI4MzQ6XFx0XFx0XFx0XFx0KmxlbnAgPSAwO1xcbjI4MzU6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjgzNjpcXHRcXHRcXHR9XFxuMjgzNzpcXHRcXG4yODM4OlxcdFxcdFxcdHN0cnNjcHkoZGF0YSwgcCwgc2l6ZW9mKGRhdGEpKTtcXG4yODM5OlxcdFxcdFxcdHRtcC5tYXhsZW4gPSBzdHJsZW4ocCk7XFxuMjg0MDpcXHRcXHR9XFxuMjg0MTpcXHRcXG4yODQyOlxcdFxcdHJldCA9IHByb2NfZG9zdHJpbmcoXFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxuMjg0MzpcXHRcXHRpZiAocmV0IHx8ICF3cml0ZSlcXG4yODQ0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjg0NTpcXHRcXG4yODQ2OlxcdFxcdGlmICgqbGVucCBcXHUwMDNlPSBzaXplb2YoZGF0YSkpXFxuMjg0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yODQ4OlxcdFxcbjI4NDk6XFx0XFx0aWYgKCFzdHJuY21wKGRhdGEsIFZTT0NLX05FVF9NT0RFX1NUUl9HTE9CQUwsIHNpemVvZihkYXRhKSkpXFxuMjg1MDpcXHRcXHRcXHQqbmV3X21vZGUgPSBWU09DS19ORVRfTU9ERV9HTE9CQUw7XFxuMjg1MTpcXHRcXHRlbHNlIGlmICghc3RybmNtcChkYXRhLCBWU09DS19ORVRfTU9ERV9TVFJfTE9DQUwsIHNpemVvZihkYXRhKSkpXFxuMjg1MjpcXHRcXHRcXHQqbmV3X21vZGUgPSBWU09DS19ORVRfTU9ERV9MT0NBTDtcXG4yODUzOlxcdFxcdGVsc2VcXG4yODU0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI4NTU6XFx0XFxuMjg1NjpcXHRcXHRyZXR1cm4gMDtcXG4yODU3OlxcdH1cXG4yODU4OlxcdFxcbjI4NTk6XFx0c3RhdGljIGludCB2c29ja19uZXRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4yODYwOlxcdFxcdFxcdFxcdFxcdCB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbjI4NjE6XFx0e1xcbjI4NjI6XFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbjI4NjM6XFx0XFxuMjg2NDpcXHRcXHRpZiAod3JpdGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU4OjA4LjU5NzY5Nzk0OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDIwMzAzMDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB2c29jayBOZXR3b3JrIE1vZGUgU3RyaW5nKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AuIEkga25vdyB0aGlzIGlzIGEga2V5IHZhcmlhYmxlIHJlbGF0ZWQgdG8gdGhlIHZzb2NrIGltcGxlbWVudGF0aW9uLCBzbyB1bmRlcnN0YW5kaW5nIGl0IGlzIGNydWNpYWwuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGFuZCBob3cgaXTigJlzIHVzZWQuXG5cbkxldCdzIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgc3RyaW5nLCBzcGVjaWZpY2FsbHkgbGluZXMgMjgwMCB0aHJvdWdoIDI4MjUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgY29udGV4dC4gSSdsbCBleHBlY3QgdG8gc2VlIGhvdyB0aGUgc3RyaW5nJ3Mgc3RydWN0dXJlIGlzIGRlZmluZWQgYW5kIHdoaWNoIGVsZW1lbnRzIGFyZSBpbXBvcnRhbnQuIEknbSBsb29raW5nIGZvciBjbHVlcyBhYm91dCBob3cgbmV0d29yayBtb2RlcyBhcmUgcmVwcmVzZW50ZWQsIGFuZCB3aGF0IGluZm9ybWF0aW9uIGlzIGVuY29kZWQgd2l0aGluIHRoZSBzdHJpbmcgaXRzZWxmLiBUaGlzIHNlY3Rpb24gbGlrZWx5IGNvbnRhaW5zIHRoZSBmdW5kYW1lbnRhbCBzZXR1cCwgYW5kIHNob3VsZCByZXZlYWwgaG93IG1vZGVzIGFyZSBkZWZpbmVkIGluIHRoZSB2c29jayBzdWJzeXN0ZW0uIEknbSBrZWVuIHRvIGdyYXNwIHRoZSBudWFuY2VzIGluIHRoaXMgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3MywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTg6MTEuMDE4MDAzMDQzWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgwMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjgwMDpcXHRzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgdnNvY2tfZGV2aWNlID0ge1xcbjI4MDE6XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJ2c29ja1xcXCIsXFxuMjgwMjpcXHRcXHQuZm9wc1xcdFxcdD0gXFx1MDAyNnZzb2NrX2RldmljZV9vcHMsXFxuMjgwMzpcXHR9O1xcbjI4MDQ6XFx0XFxuMjgwNTpcXHRzdGF0aWMgaW50IF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuMjgwNjpcXHRcXHRcXHRcXHRcXHQgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zLFxcbjI4MDc6XFx0XFx0XFx0XFx0XFx0ICAgZW51bSB2c29ja19uZXRfbW9kZSBtb2RlLFxcbjI4MDg6XFx0XFx0XFx0XFx0XFx0ICAgZW51bSB2c29ja19uZXRfbW9kZSAqbmV3X21vZGUpXFxuMjgwOTpcXHR7XFxuMjgxMDpcXHRcXHRjaGFyIGRhdGFbVlNPQ0tfTkVUX01PREVfU1RSX01BWF0gPSB7MH07XFxuMjgxMTpcXHRcXHRzdHJ1Y3QgY3RsX3RhYmxlIHRtcDtcXG4yODEyOlxcdFxcdGludCByZXQ7XFxuMjgxMzpcXHRcXG4yODE0OlxcdFxcdGlmICghdGFibGUtXFx1MDAzZWRhdGEgfHwgIXRhYmxlLVxcdTAwM2VtYXhsZW4gfHwgISpsZW5wKSB7XFxuMjgxNTpcXHRcXHRcXHQqbGVucCA9IDA7XFxuMjgxNjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yODE3OlxcdFxcdH1cXG4yODE4OlxcdFxcbjI4MTk6XFx0XFx0dG1wID0gKnRhYmxlO1xcbjI4MjA6XFx0XFx0dG1wLmRhdGEgPSBkYXRhO1xcbjI4MjE6XFx0XFxuMjgyMjpcXHRcXHRpZiAoIXdyaXRlKSB7XFxuMjgyMzpcXHRcXHRcXHRjb25zdCBjaGFyICpwO1xcbjI4MjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU4OjExLjAxODIxNzA3M1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4OTk2OTA4MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSB2c29jayBQYXRjaCBmb3IgS01TQU4gTmVlZHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIG1ldGljdWxvdXNseSB0cmFjZSB0aGUgY29udHJvbCBmbG93IGFuZCBwb3RlbnRpYWwgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwYXRjaC4gRmlyc3QsIEkgc2VlIHRoZSBjb2RlIHNuaXBwZXQgaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AgYW5kIGltbWVkaWF0ZWx5IHplcm8gaW4gb24gdGhlIGBuZXdfbW9kZWAgdmFyaWFibGUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBpZiBpdCdzIGluaXRpYWxpemVkICpiZWZvcmUqIHRoZSBwYXRjaCBpcyBhcHBsaWVkLiBUaGUgc3Vic2VxdWVudCBjb2RlIGFuZCBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBlc3BlY2lhbGx5IHRoZSBpbnRlcmFjdGlvbiB3aXRoIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AsIGFyZSBhIHJlZCBmbGFnIOKAkyB1bmluaXRpYWxpemVkIG1lbW9yeSB0aGVyZSBjYW4gbGVhZCB0byBzdWJ0bGUsIGhhcmQtdG8tZGVidWcgaXNzdWVzLCBleGFjdGx5IHdoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2guXG5cbkkgdGhlbiB3ZW50IHRocm91Z2ggYW5kIHJldmlld2VkIHRoZSBgX192c29ja19uZXRfbW9kZV9zdHJpbmdgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgcG90ZW50aWFsIGZvciBgbGVucGAgdG8gYmUgemVybywgYW5kIHdoZW4gd3JpdGUgaXMgYWxzbyB0cnVlLCB0aGUgcmV0dXJuIGhhcHBlbnMgd2l0aG91dCBldmVyIHNldHRpbmcgYG5ld19tb2RlYC4gQmluZ28hIFRoaXMgbG9va3MgbGlrZSBhIGNsYXNzaWMgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkLCBhIEtNU0FOIG5pZ2h0bWFyZS4gVGhlIHBhdGNoLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBjb3JyZWN0bHkgYWRkcmVzc2VzIHRoaXMgYnkgaW5pdGlhbGl6aW5nIGBuZXdfbW9kZWAgcmlnaHQgYXdheS4gU28gaXQgKmZpeGVzKiB0aGUgYnVnLCB0aGUgS01TQU4gcmlzayBpcyByZXNvbHZlZC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhlIHBhdGNoICppbnRyb2R1Y2UqIGFueSBuZXcgS01TQU4gcmlza3M/IExldCdzIGNhcmVmdWxseSBjb25zaWRlciB0aGUgY3JpdGVyaWEuIERvZXMgaXQgdG91Y2ggc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZT8gTm8uIERvZXMgaXQgaW50cm9kdWNlIG5ldyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IEFic29sdXRlbHkgbm90LCBpdCdzIHRoZSBvcHBvc2l0ZS4gRG9lcyBpdCBjaGFuZ2UgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24/IE5vLCBpdCBpbml0aWFsaXplcyBhIHZhcmlhYmxlIHRoYXQgd2Fzbid0IGluaXRpYWxpemVkIGVhcmxpZXIuIERvZXMgaXQgbW9kaWZ5IGJvdW5kcyBjaGVja3M/IE5vLlxuXG5UaGUga2V5IGlzIHRoYXQgdGhlIHBhdGNoICpjb3JyZWN0cyogYW4gZXhpc3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgb25lcy4gVGhlIHB1cnBvc2Ugb2YgS01TQU4gaXMgdG8gZmluZCBzdWNoIGlzc3Vlcywgbm90IG5lY2Vzc2FyaWx5IHRvIHZlcmlmeSB0aGF0IGEgZml4IGlzIGNvbXBsZXRlLiBLTVNBTiBtYXkgYmUgb3ZlcmtpbGwgaW4gdGhpcyBzY2VuYXJpby4gQWNjb3JkaW5nIHRvIHRoZSBzdGF0ZWQgcnVsZXMsIHJ1bm5pbmcgS01TQU4gb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgcmlza3MsIHdoaWNoIGl0IGRvZXNuJ3QuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoIGVsaW1pbmF0ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eSByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBvbmUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMzgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTg6MjAuMDE1MTI3OTE5WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzE4MjY1NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjg1OT1zdGF0aWMgaW50IHZzb2NrX25ldF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4NzItXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4NzM6c3RhdGljIGludCB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg3NC1cXHRcXHRcXHRcXHQgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yOTAzPXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkxNS1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjkxNjpcXHRcXHQucHJvY19oYW5kbGVyXFx0PSB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkxNy1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1ODoyMi43MzMzOTk5MjFaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA5MDU4NTk0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBhIGB2c29ja19uZXRgIE1vZGUgVHJhbnNpdGlvbioqXG5cbkFscmlnaHQsIEkgc2VlIGEgbGluZSBoZXJlOiBgbmV3X21vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpO2AuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgXCJIbW0sIHdoYXQncyBgdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KWAgYWN0dWFsbHkgKmRvaW5nKj9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJ3MgcHVycG9zZSB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbW9kZSB0cmFuc2l0aW9uLiBJJ2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGB2c29ja19uZXRfY2hpbGRfbW9kZWAgdG8gZmlndXJlIG91dCB3aGF0IGl0J3MgcmV0dXJuaW5nIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGVmZmVjdCB3aWxsIGJlIG9uIHRoZSBgbmV0YCBvYmplY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29kZSdzIG9wZXJhdGlvbmFsIHNlbWFudGljcyB0byBjb250aW51ZS4gTGV0J3MgdHJhY2UgYmFjayB0byB0aGF0IGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNDcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1ODoyNC44MjM5ODg5N1oiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNzkzNTg1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2c29ja19uZXRfY2hpbGRfbW9kZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9hZl92c29jay5oPTI4OT1zdGF0aWMgaW5saW5lIGJvb2wgdnNvY2tfbmV0X3NldF9jaGlsZF9tb2RlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbmluY2x1ZGUvbmV0L2FmX3Zzb2NrLmgtMzAzLVxcbmluY2x1ZGUvbmV0L2FmX3Zzb2NrLmg6MzA0OnN0YXRpYyBpbmxpbmUgZW51bSB2c29ja19uZXRfbW9kZSB2c29ja19uZXRfY2hpbGRfbW9kZShzdHJ1Y3QgbmV0ICpuZXQpXFxuaW5jbHVkZS9uZXQvYWZfdnNvY2suaC0zMDUte1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI4NTk9c3RhdGljIGludCB2c29ja19uZXRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODcyLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODczOnN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4NzQtXFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg4MC1cXHRuZXQgPSBjb250YWluZXJfb2YodGFibGUtXFx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsIHZzb2NrLmNoaWxkX25zX21vZGUpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODgxOlxcdG5ld19tb2RlID0gdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg4Mi1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg4My1cXHRyZXQgPSBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjg4NDpcXHRcXHRcXHRcXHQgICAgICB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpLCBcXHUwMDI2bmV3X21vZGUpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODg1LVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjkwMz1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MTUtXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI5MTY6XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MTctXFx0fSxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yOTY5PXN0YXRpYyB2b2lkIHZzb2NrX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTczLVxcdGVsc2VcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjk3NDpcXHRcXHRuZXQtXFx1MDAzZXZzb2NrLm1vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnMpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTc1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1ODoyNi45NjE5MzA4NTVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjUxMzc3MDM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB2c29jayBIZWFkZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSB2c29jayBpbXBsZW1lbnRhdGlvbiwgYW5kIHRoZSBgaW5jbHVkZS9uZXQvYWZfdnNvY2suaGAgaGVhZGVyIGZpbGUgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RvcC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHJlZ2lvbiBhcm91bmQgbGluZSAzMDQuIFRoYXQncyB1c3VhbGx5IGEgZ29vZCBpbmRpY2F0b3Igb2Ygc29tZXRoaW5nIHJlbGF0ZWQgdG8gc29ja2V0IGNyZWF0aW9uLCBjb25uZWN0aW9uIG1hbmFnZW1lbnQsIG9yIHBlcmhhcHMgc29tZSBrZXkgc3RydWN0dXJlIGRlZmluaXRpb24uIEknbSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQganVtcHMgb3V0IGF0IG1lLiBUaGlzIGlzIGdvaW5nIHRvIGJlIG15IGRpdmUtaW4gcG9pbnQuIEknbSBleHBlY3RpbmcgdG8gc2VlIHNvbWV0aGluZyB0aGF0IHdpbGwgc3RhcnQgbWUgb24gdGhlIHJpZ2h0IHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1ODoyOS40NzU3MDQ2MzFaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MzYwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9hZl92c29jay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgZW51bSB2c29ja19uZXRfbW9kZSBtb2RlKVxcbiAyOTE6XFx0e1xcbiAyOTI6XFx0XFx0aW50IG5ld19sb2NrZWQgPSBtb2RlICsgMTtcXG4gMjkzOlxcdFxcdGludCBvbGRfbG9ja2VkID0gMDsgLyogdW5sb2NrZWQgKi9cXG4gMjk0OlxcdFxcbiAyOTU6XFx0XFx0aWYgKHRyeV9jbXB4Y2hnKFxcdTAwMjZuZXQtXFx1MDAzZXZzb2NrLmNoaWxkX25zX21vZGVfbG9ja2VkLFxcbiAyOTY6XFx0XFx0XFx0XFx0XFx1MDAyNm9sZF9sb2NrZWQsIG5ld19sb2NrZWQpKSB7XFxuIDI5NzpcXHRcXHRcXHRXUklURV9PTkNFKG5ldC1cXHUwMDNldnNvY2suY2hpbGRfbnNfbW9kZSwgbW9kZSk7XFxuIDI5ODpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjk5OlxcdFxcdH1cXG4gMzAwOlxcdFxcbiAzMDE6XFx0XFx0cmV0dXJuIG9sZF9sb2NrZWQgPT0gbmV3X2xvY2tlZDtcXG4gMzAyOlxcdH1cXG4gMzAzOlxcdFxcbiAzMDQ6XFx0c3RhdGljIGlubGluZSBlbnVtIHZzb2NrX25ldF9tb2RlIHZzb2NrX25ldF9jaGlsZF9tb2RlKHN0cnVjdCBuZXQgKm5ldClcXG4gMzA1OlxcdHtcXG4gMzA2OlxcdFxcdHJldHVybiBSRUFEX09OQ0UobmV0LVxcdTAwM2V2c29jay5jaGlsZF9uc19tb2RlKTtcXG4gMzA3OlxcdH1cXG4gMzA4OlxcdFxcbiAzMDk6XFx0LyogUmV0dXJuIHRydWUgaWYgdHdvIG5hbWVzcGFjZXMgcGFzcyB0aGUgbW9kZSBydWxlcy4gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UuXFxuIDMxMDpcXHQgKlxcbiAzMTE6XFx0ICogQSBOVUxMIG5hbWVzcGFjZSBpcyB0cmVhdGVkIGFzIFZTT0NLX05FVF9NT0RFX0dMT0JBTC5cXG4gMzEyOlxcdCAqXFxuIDMxMzpcXHQgKiBSZWFkIG1vcmUgYWJvdXQgbW9kZXMgaW4gdGhlIGNvbW1lbnQgaGVhZGVyIG9mIG5ldC92bXdfdnNvY2svYWZfdnNvY2suYy5cXG4gMzE0OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1ODoyOS40Nzc4ODI4OTNaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTI5NjM0MjIyNTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIGEgdnNvY2sgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AuIEJlZm9yZSB0aGUgY2hhbmdlLCB0aGUgY29kZSBkZWNsYXJlZCBgbmV3X21vZGVgIG9uIHRoZSBzdGFjaywgYnV0IGRpZG4ndCBpbml0aWFsaXplIGl0LiBJbiBjZXJ0YWluIHNjZW5hcmlvcywgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIHdyaXRlIHNpemUgKGAqbGVucGApIHdhcyB6ZXJvLCBgX192c29ja19uZXRfbW9kZV9zdHJpbmdgIG1pZ2h0IG5vdCB3cml0ZSB0byBgbmV3X21vZGVgLiBUaGlzIG1lYW50IHRoYXQgbGF0ZXIsIHRoZSBmdW5jdGlvbiBjb3VsZCByZWFkIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUgZnJvbSBgbmV3X21vZGVgIGluIHRoZSBgaWZgIGNvbmRpdGlvbnMsIGFuZCBLTVNBTiB3b3VsZCByaWdodGZ1bGx5IGZsYWcgdGhpcy5cblxuVGhpcyBwYXRjaCBmaXhlcyB0aGF0IGV4YWN0IGlzc3VlIGJ5IGluaXRpYWxpemluZyBgbmV3X21vZGVgIHdpdGggYSBjYWxsIHRvIGB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpYC4gTm93LCBgbmV3X21vZGVgIGlzICphbHdheXMqIGluaXRpYWxpemVkIGJlZm9yZSBpdCdzIHVzZWQuXG5cblRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGNoYW5nZSBqdXN0aWZ5IEtNU0FOIGZ1enppbmc/IE15IGluaXRpYWwgdGhvdWdodCBpcyBubywgYnV0IGxldCdzIGJlIGFic29sdXRlbHkgc3VyZS4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IEtNU0FOIGlzIG9ubHkgbmVlZGVkIGlmIHRoZSAqY29kZSBjaGFuZ2VzKiBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gKnNwZWNpZmljYWxseSogY2FuIGRldGVjdCBhbmQgS0FTQU4gY2FuJ3QuXG5cbk5vdywgZG9lcyB0aGUgcGF0Y2ggaW50cm9kdWNlIGFueSBuZXcgcmlza3M/IEFic29sdXRlbHkgbm90LiBJdCdzIGluaXRpYWxpemluZyBhIHN0YWNrIHZhcmlhYmxlIGJlZm9yZSB1c2UuIEl0J3MgKmZpeGluZyogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgbm90IGNyZWF0aW5nIG9uZS4gSXQncyBub3QgbW9kaWZ5aW5nIGFueSBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyaW5nIGFueSBidWZmZXIgbGVuZ3RocyBvciBib3VuZHMgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBJbiBmYWN0LCBpdCAqY2xvc2VzKiBhbiBleGlzdGluZyBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVhay4gQWxsIHN0YWNrIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIG5vdy5cblxuVGhlIHBhdGNoIGNvbnNpc3RzIG9mIGEgc2luZ2xlIGxpbmU6IGBuZXdfbW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCk7YC4gVGhpcyBsaW5lIGludHJvZHVjZXMgbm8gbmV3IHJpc2suIGB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpYCBpcyByZXR1cm5pbmcgdGhlIGN1cnJlbnQgbW9kZSwgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgaW4gYHZzb2NrX25ldF9pbml0YC5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gUnVubmluZyBLTVNBTiB3b3VsZCBiZSBvdmVya2lsbCBpbiB0aGlzIHNpdHVhdGlvbi4gS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHN0YW5kYXJkIHRlc3RpbmcuXG5cbk15IGZpbmFsIGFuYWx5c2lzIGlzOlxuXG4qICAgKipOZWVkc0tNU0FOID0gZmFsc2UqKlxuKiAgICoqS01TQU5SZWFzb25pbmc6KiogVGhlIHBhdGNoIGluaXRpYWxpemVzIHRoZSBsb2NhbCBzdGFjayB2YXJpYWJsZSBgbmV3X21vZGVgIGluIGB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoKWAgdG8gYHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldClgLiBQcmV2aW91c2x5LCBpZiBgKmxlbnBgIHdhcyAwIHdoZW4gd3JpdGluZyB0byBgL3Byb2Mvc3lzL25ldC92c29jay9jaGlsZF9uc19tb2RlYCwgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKClgIG1pZ2h0IHJldHVybiAwIHdpdGhvdXQgd3JpdGluZyB0byBgKm5ld19tb2RlYCwgbGVhdmluZyBgbmV3X21vZGVgIHVuaW5pdGlhbGl6ZWQuIFRoaXMgY291bGQgbGVhZCB0byBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBlbnN1cmluZyBgbmV3X21vZGVgIGlzICphbHdheXMqIGluaXRpYWxpemVkLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgbGVhayBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy9wYWRkaW5nLiBCZWNhdXNlIHRoZSBwYXRjaCByZXNvbHZlcyBhbiB1bmluaXRpYWxpemVkIHJlYWQgYW5kIGRvZXMgbm90IGNyZWF0ZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMsIHNwYXduaW5nIGFuIGV4cGVuc2l2ZSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjM1LCJPdXRwdXRUb2tlbnMiOjE5MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTowNzoxOS4xMTIxMDg4OTVaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIHRoZSBzdGFjayB2YXJpYWJsZSBgbmV3X21vZGVgIGluIGB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoKWAgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkIChzcGVjaWZpY2FsbHkgaWYgYSB3cml0ZSBvY2N1cnJlZCB3aXRoIGAqbGVucCA9PSAwYCwgY2F1c2luZyBgX192c29ja19uZXRfbW9kZV9zdHJpbmcoKWAgdG8gcmV0dXJuIDAgd2l0aG91dCBhc3NpZ25pbmcgYCpuZXdfbW9kZWApLiBUaGUgcGF0Y2ggaW5pdGlhbGl6ZXMgYG5ld19tb2RlYCB3aXRoIGB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpYCBiZWZvcmUgcGFzc2luZyBpdHMgcG9pbnRlci5cXG5cXG5CZWNhdXNlIHRoaXMgY2hhbmdlIHJlc29sdmVzIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZCByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBvciBleHBvc2luZyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIHN0cnVjdCBwYWRkaW5nIGlzc3VlcywgaXQgcG9zZXMgbm8gcmlzayBvZiBpbnRyb2R1Y2luZyBLTVNBTi1kZXRlY3RhYmxlIGJ1Z3MuIFN0YW5kYXJkIHRlc3RpbmcvS0FTQU4gaXMgc3VmZmljaWVudCwgYW5kIHNwYXduaW5nIGEgZGVkaWNhdGVkLCByZXNvdXJjZS1pbnRlbnNpdmUgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgdGhlIHN0YWNrIHZhcmlhYmxlIGBuZXdfbW9kZWAgaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZygpYCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgKHNwZWNpZmljYWxseSBpZiBhIHdyaXRlIG9jY3VycmVkIHdpdGggYCpsZW5wID09IDBgLCBjYXVzaW5nIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZygpYCB0byByZXR1cm4gMCB3aXRob3V0IGFzc2lnbmluZyBgKm5ld19tb2RlYCkuIFRoZSBwYXRjaCBpbml0aWFsaXplcyBgbmV3X21vZGVgIHdpdGggYHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldClgIGJlZm9yZSBwYXNzaW5nIGl0cyBwb2ludGVyLlxcblxcbkJlY2F1c2UgdGhpcyBjaGFuZ2UgcmVzb2x2ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLCBpdCBwb3NlcyBubyByaXNrIG9mIGludHJvZHVjaW5nIEtNU0FOLWRldGVjdGFibGUgYnVncy4gU3RhbmRhcmQgdGVzdGluZy9LQVNBTiBpcyBzdWZmaWNpZW50LCBhbmQgc3Bhd25pbmcgYSBkZWRpY2F0ZWQsIHJlc291cmNlLWludGVuc2l2ZSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowspg9k[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 14:21:39 +0000 UTC FinishedAt: 2026-09-15 15:07:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "SYSCTL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "SYSCTL" ], "series_id": "4307a5da-71ef-4975-8a48-ef102656adb4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vsock_net_child_mode_string", "__vsock_net_mode_string" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "base_tree": "net-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtTWVNDVEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcmIzM0OywKICAgICYjMzQ7X192c29ja19uZXRfbW9kZV9zdHJpbmcmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgc3RhY2sgdmFyaWFibGUgYG5ld19tb2RlYCBpbiBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKClgIGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCAoc3BlY2lmaWNhbGx5IGlmIGEgd3JpdGUgb2NjdXJyZWQgd2l0aCBgKmxlbnAgPT0gMGAsIGNhdXNpbmcgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKClgIHRvIHJldHVybiAwIHdpdGhvdXQgYXNzaWduaW5nIGAqbmV3X21vZGVgKS4gVGhlIHBhdGNoIGluaXRpYWxpemVzIGBuZXdfbW9kZWAgd2l0aCBgdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KWAgYmVmb3JlIHBhc3NpbmcgaXRzIHBvaW50ZXIuXG5cbkJlY2F1c2UgdGhpcyBjaGFuZ2UgcmVzb2x2ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLCBpdCBwb3NlcyBubyByaXNrIG9mIGludHJvZHVjaW5nIEtNU0FOLWRldGVjdGFibGUgYnVncy4gU3RhbmRhcmQgdGVzdGluZy9LQVNBTiBpcyBzdWZmaWNpZW50LCBhbmQgc3Bhd25pbmcgYSBkZWRpY2F0ZWQsIHJlc291cmNlLWludGVuc2l2ZSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKCkgaW4gbmV0L3Ztd192c29jay9hZl92c29jay5jIHRvIGluaXRpYWxpemUgdGhlIG5ld19tb2RlIHZhcmlhYmxlIGJlZm9yZSBwYXNzaW5nIGl0IHRvIF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKCksIHByZXZlbnRpbmcgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkIHdoZW4gd3JpdGluZyB0byAvcHJvYy9zeXMvbmV0L3Zzb2NrL2NoaWxkX25zX21vZGUgd2l0aCB6ZXJvIGxlbmd0aC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHN5c2N0bCBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNmJlMDllYTg0NTY1ODg4OGNjODU5MzViMjI1MzM0MDQzN2VlMzYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTQ6NDA6MjcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5pbmRleCA2MjJkYmQwNDY3OTk0Li42MTE2MzM1N2FlM2M0IDEwMDY0NFxuLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbkBAIC0yODc4LDYgJiM0MzsyODc4LDcgQEAgc3RhdGljIGludCB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbiBcdGludCByZXQ7XG4gXG4gXHRuZXQgPSBjb250YWluZXJfb2YodGFibGUtXHUwMDNlZGF0YSwgc3RydWN0IG5ldCwgdnNvY2suY2hpbGRfbnNfbW9kZSk7XG4mIzQzO1x0bmV3X21vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpO1xuIFxuIFx0cmV0ID0gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXG4gXHRcdFx0XHQgICAgICB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpLCBcdTAwMjZuZXdfbW9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1NZU0NUTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyYjMzQ7LAogICAgJiMzNDtfX3Zzb2NrX25ldF9tb2RlX3N0cmluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoKSBpbiBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3X21vZGUgdmFyaWFibGUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gX192c29ja19uZXRfbW9kZV9zdHJpbmcoKSwgcHJldmVudGluZyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWQgd2hlbiB3cml0aW5nIHRvIC9wcm9jL3N5cy9uZXQvdnNvY2svY2hpbGRfbnNfbW9kZSB3aXRoIHplcm8gbGVuZ3RoLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc3lzY3RsIGNvZGUgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI2YmUwOWVhODQ1NjU4ODg4Y2M4NTkzNWIyMjUzMzQwNDM3ZWUzNjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAxNDo0MDoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwppbmRleCA2MjJkYmQwNDY3OTk0Li42MTE2MzM1N2FlM2M0IDEwMDY0NAotLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCkBAIC0yODc4LDYgJiM0MzsyODc4LDcgQEAgc3RhdGljIGludCB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIAlpbnQgcmV0OwogCiAJbmV0ID0gY29udGFpbmVyX29mKHRhYmxlLSZndDtkYXRhLCBzdHJ1Y3QgbmV0LCB2c29jay5jaGlsZF9uc19tb2RlKTsKJiM0MzsJbmV3X21vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpOwogCiAJcmV0ID0gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsCiAJCQkJICAgICAgdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KSwgJmFtcDtuZXdfbW9kZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xMW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTExCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIHZzb2NrIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBkaWZmIHRoYXQgdG91Y2hlcyBgbmV0L3Ztd192c29jay9hZl92c29jay5jYC4gUmlnaHQgYXdheSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgVlNPQ0sgaW1wbGVtZW50YXRpb24uIFRoZSBodW5rIG1vZGlmaWVzIHRoZSBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI4NzguIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBpbnNwZWN0IHRoYXQgc2VjdGlvbiBvZiBjb2RlIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIHRoaW5ncy4gVGhlIGRpZmYgaW50cm9kdWNlcyBhIGBuZXdfbW9kZWAgdmFyaWFibGUgYW5kIGFzc2lnbnMgYSBuZXcgZnVuY3Rpb24gdG8gaXQgY2FsbGVkIGB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpYC4gSSBpbW1lZGlhdGVseSBoYXZlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIGhlcmUuIEkmIzM5O2xsIHByb2JhYmx5IG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgYW5kIG1heWJlIHRyYWNlIGhvdyBgdnNvY2tfbmV0X2NoaWxkX21vZGVgIGlzIHVzZWQgZWxzZXdoZXJlIGluIHRoZSBjb2RlYmFzZS4gTXkgdXN1YWwgYXBwcm9hY2ggd291bGQgYmUgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBJJiMzOTttIG9mZiB0byBkbyB0aGF0IG5vdy4gSSYjMzk7bGwgbmVlZCB0byBhc3Nlc3MgdGhlIG92ZXJhbGwgaW1wYWN0LCBvZiBjb3Vyc2UsIGFuZCBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIG9yIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9hZl92c29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODYwOlx0XHRcdFx0XHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbjI4NjE6XHR7XG4yODYyOlx0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4yODYzOlx0XG4yODY0Olx0XHRpZiAod3JpdGUpXG4yODY1Olx0XHRcdHJldHVybiAtRVBFUk07XG4yODY2Olx0XG4yODY3Olx0XHRuZXQgPSBjb250YWluZXJfb2YodGFibGUtXHUwMDNlZGF0YSwgc3RydWN0IG5ldCwgdnNvY2subW9kZSk7XG4yODY4Olx0XG4yODY5Olx0XHRyZXR1cm4gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXG4yODcwOlx0XHRcdFx0XHQgICAgICAgdnNvY2tfbmV0X21vZGUobmV0KSwgTlVMTCk7XG4yODcxOlx0fVxuMjg3MjpcdFxuMjg3MzpcdHN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4yODc0Olx0XHRcdFx0XHQgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbjI4NzU6XHR7XG4yODc2Olx0XHRlbnVtIHZzb2NrX25ldF9tb2RlIG5ld19tb2RlO1xuMjg3NzpcdFx0c3RydWN0IG5ldCAqbmV0O1xuMjg3ODpcdFx0aW50IHJldDtcbjI4Nzk6XHRcbjI4ODA6XHRcdG5ldCA9IGNvbnRhaW5lcl9vZih0YWJsZS1cdTAwM2VkYXRhLCBzdHJ1Y3QgbmV0LCB2c29jay5jaGlsZF9uc19tb2RlKTtcbjI4ODE6XHRcdG5ld19tb2RlID0gdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KTtcbjI4ODI6XHRcbjI4ODM6XHRcdHJldCA9IF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zLFxuMjg4NDpcdFx0XHRcdFx0ICAgICAgdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KSwgXHUwMDI2bmV3X21vZGUpO1xuMjg4NTpcdFx0aWYgKHJldClcbjI4ODY6XHRcdFx0cmV0dXJuIHJldDtcbjI4ODc6XHRcbjI4ODg6XHRcdGlmICh3cml0ZSkge1xuMjg4OTpcdFx0XHQvKiBQcmV2ZW50IGEgXCYjMzQ7bG9jYWxcJiMzNDsgbmFtZXNwYWNlIGZyb20gZXNjYWxhdGluZyB0byBcJiMzNDtnbG9iYWxcJiMzNDssXG4yODkwOlx0XHRcdCAqIHdoaWNoIHdvdWxkIGdpdmUgbmVzdGVkIG5hbWVzcGFjZXMgYWNjZXNzIHRvIGdsb2JhbCBDSURzLlxuMjg5MTpcdFx0XHQgKi9cbjI4OTI6XHRcdFx0aWYgKHZzb2NrX25ldF9tb2RlKG5ldCkgPT0gVlNPQ0tfTkVUX01PREVfTE9DQUwgXHUwMDI2XHUwMDI2XG4yODkzOlx0XHRcdCAgICBuZXdfbW9kZSA9PSBWU09DS19ORVRfTU9ERV9HTE9CQUwpXG4yODk0Olx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjI4OTU6XHRcbjI4OTY6XHRcdFx0aWYgKCF2c29ja19uZXRfc2V0X2NoaWxkX21vZGUobmV0LCBuZXdfbW9kZSkpXG4yODk3Olx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjI4OTg6XHRcdH1cbjI4OTk6XHRcbjI5MDA6XHRcdHJldHVybiAwO1xuMjkwMTpcdH1cbjI5MDI6XHRcbjI5MDM6XHRzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xuMjkwNDpcdFx0e1xuMjkwNTpcdFx0XHQucHJvY25hbWVcdD0gXCYjMzQ7bnNfbW9kZVwmIzM0OyxcbjI5MDY6XHRcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC52c29jay5tb2RlLFxuMjkwNzpcdFx0XHQubWF4bGVuXHRcdD0gVlNPQ0tfTkVUX01PREVfU1RSX01BWCxcbjI5MDg6XHRcdFx0Lm1vZGVcdFx0PSAwNDQ0LFxuMjkwOTpcdFx0XHQucHJvY19oYW5kbGVyXHQ9IHZzb2NrX25ldF9tb2RlX3N0cmluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyODkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaWdnaW5nIERlZXBlciBpbnRvIHZzb2NrIE5ldHdvcmtpbmcqKgoKQWxyaWdodCwgSSYjMzk7bSBhbHJlYWR5IGRlZXAgaW4gdGhpcyBgdnNvY2tgIGNvZGUsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gZnVsbHkgZ3Jhc3BpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGBuZXdfbW9kZWAgdmFyaWFibGUuIFRoZSBkb2N1bWVudGF0aW9uIG1lbnRpb25zIGhvdyBpdCYjMzk7cyB1c2VkLCBidXQgSSBuZWVkIHRvIHNlZSBpdCBpbiBhY3Rpb24sIHRvby4gSSB3YW50IHRvIGluc3BlY3QgaG93IGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AgYWN0dWFsbHkgbGV2ZXJhZ2VzIGBuZXdfbW9kZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgbW9kZSBjaGFuZ2VzIGFuZCBob3cgdGhlIHVuZGVybHlpbmcgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvbiB0aGlzLiBJIGJldCB0aGVyZSYjMzk7cyBzb21lIGludGVyZXN0aW5nIGxvZ2ljIGVtYmVkZGVkIGluIGhvdyBgbmV3X21vZGVgIHRyYW5zbGF0ZXMgaW50byBuZXR3b3JrIGJlaGF2aW9yLCBhbmQgdGhpcyBgX192c29ja19uZXRfbW9kZV9zdHJpbmdgIGZ1bmN0aW9uIHNlZW1zIGxpa2UgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhbmQgdGhlIG92ZXJhbGwgZGVzaWduLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IHdvcmsgdG9nZXRoZXIgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IG5ldHdvcmsgbW9kZSBpcyBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4MzA6XHRcdFx0XHRwID0gVlNPQ0tfTkVUX01PREVfU1RSX0xPQ0FMO1xuMjgzMTpcdFx0XHRcdGJyZWFrO1xuMjgzMjpcdFx0XHRkZWZhdWx0OlxuMjgzMzpcdFx0XHRcdFdBUk5fT05DRSh0cnVlLCBcJiMzNDtuZXRucyBoYXMgaW52YWxpZCB2c29jayBtb2RlXCYjMzQ7KTtcbjI4MzQ6XHRcdFx0XHQqbGVucCA9IDA7XG4yODM1Olx0XHRcdFx0cmV0dXJuIDA7XG4yODM2Olx0XHRcdH1cbjI4Mzc6XHRcbjI4Mzg6XHRcdFx0c3Ryc2NweShkYXRhLCBwLCBzaXplb2YoZGF0YSkpO1xuMjgzOTpcdFx0XHR0bXAubWF4bGVuID0gc3RybGVuKHApO1xuMjg0MDpcdFx0fVxuMjg0MTpcdFxuMjg0MjpcdFx0cmV0ID0gcHJvY19kb3N0cmluZyhcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xuMjg0MzpcdFx0aWYgKHJldCB8fCAhd3JpdGUpXG4yODQ0Olx0XHRcdHJldHVybiByZXQ7XG4yODQ1Olx0XG4yODQ2Olx0XHRpZiAoKmxlbnAgXHUwMDNlPSBzaXplb2YoZGF0YSkpXG4yODQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg0ODpcdFxuMjg0OTpcdFx0aWYgKCFzdHJuY21wKGRhdGEsIFZTT0NLX05FVF9NT0RFX1NUUl9HTE9CQUwsIHNpemVvZihkYXRhKSkpXG4yODUwOlx0XHRcdCpuZXdfbW9kZSA9IFZTT0NLX05FVF9NT0RFX0dMT0JBTDtcbjI4NTE6XHRcdGVsc2UgaWYgKCFzdHJuY21wKGRhdGEsIFZTT0NLX05FVF9NT0RFX1NUUl9MT0NBTCwgc2l6ZW9mKGRhdGEpKSlcbjI4NTI6XHRcdFx0Km5ld19tb2RlID0gVlNPQ0tfTkVUX01PREVfTE9DQUw7XG4yODUzOlx0XHRlbHNlXG4yODU0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg1NTpcdFxuMjg1NjpcdFx0cmV0dXJuIDA7XG4yODU3Olx0fVxuMjg1ODpcdFxuMjg1OTpcdHN0YXRpYyBpbnQgdnNvY2tfbmV0X21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4yODYwOlx0XHRcdFx0XHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbjI4NjE6XHR7XG4yODYyOlx0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4yODYzOlx0XG4yODY0Olx0XHRpZiAod3JpdGUpXG4yODY1Olx0XHRcdHJldHVybiAtRVBFUk07XG4yODY2Olx0XG4yODY3Olx0XHRuZXQgPSBjb250YWluZXJfb2YodGFibGUtXHUwMDNlZGF0YSwgc3RydWN0IG5ldCwgdnNvY2subW9kZSk7XG4yODY4Olx0XG4yODY5Olx0XHRyZXR1cm4gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE2MwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc29tZXRoaW5nIGp1bXBzIG91dCBhdCBtZTogYG5ld19tb2RlYCB3aXRoaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2Agd2FzIHRvdGFsbHkgdW5pbml0aWFsaXplZCBiZWZvcmUgdGhpcyBwYXRjaC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYnVnIHdhaXRpbmcgdG8gaGFwcGVuISBOb3csIGxldCBtZSBzZWUuLi4gV2FpdCBhIG1pbnV0ZSwgaW4gYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nYCwgaWYgYHdyaXRlYCBpcyBmYWxzZSwgaXQgKnJldHVybnMqIGJlZm9yZSBhY3R1YWxseSBzZXR0aW5nIGAqbmV3X21vZGVgLiBCdXQgdGhlbiwgaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AsIHRoZSBjb2RlIGV4cGxpY2l0bHkgKmNoZWNrcyogYGlmICh3cml0ZSlgLiBUaGlzIGlzIG1ha2luZyBtZSBzdGFydCB0byBxdWVzdGlvbiB0aGUgb3ZlcmFsbCBsb2dpYyBoZXJlLgoKSG9sZCBvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhleSBhZGRlZCBgbmV3X21vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpO2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgY3J1Y2lhbCBhZGRpdGlvbi4gQ2xlYXJseSwgc29tZXRoaW5nIHdhcyBmdW5kYW1lbnRhbGx5IHdyb25nIHRoYXQgbmVlZGVkIHRvIGJlIGFkZHJlc3NlZCBoZXJlLiBJIG5lZWQgc29tZSBjb250ZXh0LiBBbHJpZ2h0LCB0aW1lIHRvIGdvIGRpZ2dpbmcuIEkmIzM5O2xsIGNoZWNrIHRoZSBgZ2l0IGxvZ2Agb3IgY29tbWl0IG1lc3NhZ2UuIEhvcGVmdWxseSwgdGhlIGF1dGhvciBwcm92aWRlZCBzb21lIGhlbHBmdWwgZXhwbGFuYXRpb24uIElmIHRoYXQmIzM5O3Mgbm90IGVub3VnaCwgSSYjMzk7bGwgbmVlZCB0byBnbyBkZWVwZXIgaW50byBgX192c29ja19uZXRfbW9kZV9zdHJpbmdgIHRvIHNlZSB3aGF0IEkmIzM5O20gbWlzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svYWZfdnNvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgxMDpcdFx0Y2hhciBkYXRhW1ZTT0NLX05FVF9NT0RFX1NUUl9NQVhdID0gezB9O1xuMjgxMTpcdFx0c3RydWN0IGN0bF90YWJsZSB0bXA7XG4yODEyOlx0XHRpbnQgcmV0O1xuMjgxMzpcdFxuMjgxNDpcdFx0aWYgKCF0YWJsZS1cdTAwM2VkYXRhIHx8ICF0YWJsZS1cdTAwM2VtYXhsZW4gfHwgISpsZW5wKSB7XG4yODE1Olx0XHRcdCpsZW5wID0gMDtcbjI4MTY6XHRcdFx0cmV0dXJuIDA7XG4yODE3Olx0XHR9XG4yODE4Olx0XG4yODE5Olx0XHR0bXAgPSAqdGFibGU7XG4yODIwOlx0XHR0bXAuZGF0YSA9IGRhdGE7XG4yODIxOlx0XG4yODIyOlx0XHRpZiAoIXdyaXRlKSB7XG4yODIzOlx0XHRcdGNvbnN0IGNoYXIgKnA7XG4yODI0Olx0XG4yODI1Olx0XHRcdHN3aXRjaCAobW9kZSkge1xuMjgyNjpcdFx0XHRjYXNlIFZTT0NLX05FVF9NT0RFX0dMT0JBTDpcbjI4Mjc6XHRcdFx0XHRwID0gVlNPQ0tfTkVUX01PREVfU1RSX0dMT0JBTDtcbjI4Mjg6XHRcdFx0XHRicmVhaztcbjI4Mjk6XHRcdFx0Y2FzZSBWU09DS19ORVRfTU9ERV9MT0NBTDpcbjI4MzA6XHRcdFx0XHRwID0gVlNPQ0tfTkVUX01PREVfU1RSX0xPQ0FMO1xuMjgzMTpcdFx0XHRcdGJyZWFrO1xuMjgzMjpcdFx0XHRkZWZhdWx0OlxuMjgzMzpcdFx0XHRcdFdBUk5fT05DRSh0cnVlLCBcJiMzNDtuZXRucyBoYXMgaW52YWxpZCB2c29jayBtb2RlXCYjMzQ7KTtcbjI4MzQ6XHRcdFx0XHQqbGVucCA9IDA7XG4yODM1Olx0XHRcdFx0cmV0dXJuIDA7XG4yODM2Olx0XHRcdH1cbjI4Mzc6XHRcbjI4Mzg6XHRcdFx0c3Ryc2NweShkYXRhLCBwLCBzaXplb2YoZGF0YSkpO1xuMjgzOTpcdFx0XHR0bXAubWF4bGVuID0gc3RybGVuKHApO1xuMjg0MDpcdFx0fVxuMjg0MTpcdFxuMjg0MjpcdFx0cmV0ID0gcHJvY19kb3N0cmluZyhcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xuMjg0MzpcdFx0aWYgKHJldCB8fCAhd3JpdGUpXG4yODQ0Olx0XHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA4MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoIEZ1enppbmc/KioKCk9rYXksIHNvIEkmIzM5O3ZlIHNwb3R0ZWQgYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBpc3N1ZS4gTGluZSAyODE0IGNhdWdodCBteSBleWU6IHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgY2hlY2sgZm9yIGAqbGVucGAgaW4gdGhlIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AgZnVuY3Rpb24uIElmIGAqbGVucGAgaXMgemVybyB3aGVuIGB3cml0ZWAgaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgd2l0aG91dCBzZXR0aW5nIGAqbmV3X21vZGVgLiBMYXRlciwgaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AsIGBuZXdfbW9kZWAgaXMgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZC4gS01TQU4gb3IgdGhlIGNvbXBpbGVyIHdvdWxkIGRlZmluaXRlbHkgZmxhZyB0aGF0LiBGaXhpbmcgaXQgYnkgaW5pdGlhbGl6aW5nIGBuZXdfbW9kZWAgaXMgdGhlIHdheSB0byBnby4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogZG9lcyB0aGlzIHBhdGNoIHdhcnJhbnQgZnV6emluZyBhY2NvcmRpbmcgdG8gdGhvc2UgY3JpdGVyaWE/ICBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bjogVGhlIGdvYWwgaXMgdG8gY2F0Y2ggY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIGFueSBuZXdseSBleHBvc2VkIGJ1Z3MuIFdlJiMzOTtyZSBsb29raW5nIGF0ICYjMzQ7cmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSYjMzQ7IHNwZWNpZmljYWxseS4KClRoZSBjcml0ZXJpYSBzYXkgKm5vdCogdG8gZnV6ejogbW9kaWZpY2F0aW9ucyB0byBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgdXNlci1zcGFjZSB0b29scywgbG9nZ2luZyB0aGF0IGRvZXNuJiMzOTt0IGFmZmVjdCBjb250cm9sIGZsb3csIGJ1aWxkIHN5c3RlbSBjaGFuZ2VzIHRoYXQgZG9uJiMzOTt0IGNoYW5nZSBDIGxvZ2ljLCBoYXJkd2FyZSB0aGF0JiMzOTtzIG5vdCBlbXVsYXRlZCwgb3IgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLgoKQnV0IHRoZXkgKmRvKiBzYXkgdG8gZnV6ejogY29yZSBzdWJzeXN0ZW1zIGxpa2UgbmV0d29ya2luZywgcmVmYWN0b3JpbmdzIG9mIHJlYWNoYWJsZSBjb2RlLCBydW50aW1lIGFzc2VydGlvbnMsIGFuZCByZWFjaGFibGUgZHJpdmVycy9wcm90b2NvbHMuCgpUaGlzIHBhdGNoIHRvdWNoZXMgYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AsIHdoaWNoIGlzIGNvcmUgbmV0d29ya2luZyDigJMgc3BlY2lmaWNhbGx5LCB2c29jayBzb2NrZXQgYW5kIHN5c2N0bCBoYW5kbGluZy4gICpJcyogaXQgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gIFllcyEgIFRoZSBgdnNvY2tfdGFibGVgIGlzIHJlZ2lzdGVyZWQgdmlhIHN5c2N0bCBhbmQgcHJvY2ZzIGF0IGAvcHJvYy9zeXMvbmV0L3Zzb2NrLy4uLmAsIHdoaWNoICppcyogcmVhY2hhYmxlLiBUaGlzIG1lYW5zIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2c29ja190YWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNDc9RVhQT1JUX1NZTUJPTF9HUEwodnNvY2tfY29ubmVjdGVkX3RhYmxlKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNDg6REVGSU5FX1NQSU5MT0NLKHZzb2NrX3RhYmxlX2xvY2spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjI0OTpFWFBPUlRfU1lNQk9MX0dQTCh2c29ja190YWJsZV9sb2NrKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTAtXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTM0Mj1zdGF0aWMgdm9pZCB2c29ja19pbnNlcnRfdW5ib3VuZChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM0My17XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzQ0Olx0c3Bpbl9sb2NrX2JoKFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTM0NS1cdF9fdnNvY2tfaW5zZXJ0X2JvdW5kKHZzb2NrX3VuYm91bmRfc29ja2V0cywgdnNrKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozNDY6XHRzcGluX3VubG9ja19iaChcdTAwMjZ2c29ja190YWJsZV9sb2NrKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNDctfVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0zNDk9dm9pZCB2c29ja19pbnNlcnRfY29ubmVjdGVkKHN0cnVjdCB2c29ja19zb2NrICp2c2spXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM1My1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozNTQ6XHRzcGluX2xvY2tfYmgoXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzU1LVx0X192c29ja19pbnNlcnRfY29ubmVjdGVkKGxpc3QsIHZzayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzU2Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzU3LX1cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzYwPXZvaWQgdnNvY2tfcmVtb3ZlX2JvdW5kKHN0cnVjdCB2c29ja19zb2NrICp2c2spXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzYxLXtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozNjI6XHRzcGluX2xvY2tfYmgoXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzYzLVx0aWYgKF9fdnNvY2tfaW5fYm91bmRfdGFibGUodnNrKSlcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNjQtXHRcdF9fdnNvY2tfcmVtb3ZlX2JvdW5kKHZzayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzY1Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzY2LX1cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzY5PXZvaWQgdnNvY2tfcmVtb3ZlX2Nvbm5lY3RlZChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM3MC17XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzcxOlx0c3Bpbl9sb2NrX2JoKFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTM3Mi1cdGlmIChfX3Zzb2NrX2luX2Nvbm5lY3RlZF90YWJsZSh2c2spKVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM3My1cdFx0X192c29ja19yZW1vdmVfY29ubmVjdGVkKHZzayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mzc0Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzc1LX1cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzgzPXN0cnVjdCBzb2NrICp2c29ja19maW5kX2JvdW5kX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICphZGRyLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zODctXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mzg4Olx0c3Bpbl9sb2NrX2JoKFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTM4OS1cdHNrID0gX192c29ja19maW5kX2JvdW5kX3NvY2tldF9uZXQoYWRkciwgbmV0KTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzkyLVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjM5MzpcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTM5NC1cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9NDE1PXN0cnVjdCBzb2NrICp2c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXRfbmV0KHN0cnVjdCBzb2NrYWRkcl92bSAqc3JjLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00MjAtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6NDIxOlx0c3Bpbl9sb2NrX2JoKFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTQyMi1cdHNrID0gX192c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXRfbmV0KHNyYywgZHN0LCBuZXQpO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00MjUtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6NDI2Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNDI3LVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz00NTQ9dm9pZCB2c29ja19mb3JfZWFjaF9jb25uZWN0ZWRfc29ja2V0KHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNDU4LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjQ1OTpcdHNwaW5fbG9ja19iaChcdTAwMjZ2c29ja190YWJsZV9sb2NrKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00NjAtXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTQ3MS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo0NzI6XHRzcGluX3VubG9ja19iaChcdTAwMjZ2c29ja190YWJsZV9sb2NrKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00NzMtfVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz04Njk9c3RhdGljIGludCBfX3Zzb2NrX2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTg4OC1cdGNhc2UgU09DS19TRVFQQUNLRVQ6XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6ODg5Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtODkwLVx0XHRyZXR2YWwgPSBfX3Zzb2NrX2JpbmRfY29ubmVjdGlibGUodnNrLCBhZGRyKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo4OTE6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTg5Mi1cdFx0YnJlYWs7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI4NzM9c3RhdGljIGludCB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkwMi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTAzOnN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkwNC1cdHtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjkyOT1zdGF0aWMgaW50IF9fbmV0X2luaXQgdnNvY2tfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkzMy1cdGlmIChuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTM0Olx0XHR0YWJsZSA9IHZzb2NrX3RhYmxlO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MzUtXHR9IGVsc2Uge1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjI5MzY6XHRcdHRhYmxlID0ga21lbWR1cCh2c29ja190YWJsZSwgc2l6ZW9mKHZzb2NrX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkzNy1cdFx0aWYgKCF0YWJsZSlcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjk0NS1cdG5ldC1cdTAwM2V2c29jay5zeXNjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwmIzM0O25ldC92c29ja1wmIzM0OywgdGFibGUsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjk0NjpcdFx0XHRcdFx0XHQgICAgICAgQVJSQVlfU0laRSh2c29ja190YWJsZSkpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NDctXHRpZiAoIW5ldC1cdTAwM2V2c29jay5zeXNjdGxfaGRyKVxuLS1cbm5ldC92bXdfdnNvY2svZGlhZy5jPTE0PXN0YXRpYyBpbnQgc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdm13X3Zzb2NrL2RpYWcuYy0yOS1cdC8qIExvY2sgb3JkZXIgZGljdGF0ZXMgdGhhdCBza19sb2NrIGlzIGFjcXVpcmVkIGJlZm9yZVxubmV0L3Ztd192c29jay9kaWFnLmM6MzA6XHQgKiB2c29ja190YWJsZV9sb2NrLCBzbyB3ZSBjYW5ub3QgbG9jayBoZXJlLiAgU2ltcGx5IGRvbiYjMzk7dCB0YWtlXG5uZXQvdm13X3Zzb2NrL2RpYWcuYzozMTpcdCAqIHNrX2xvY2s7IHNrIGlzIGd1YXJhbnRlZWQgdG8gc3RheSBhbGl2ZSBzaW5jZSB2c29ja190YWJsZV9sb2NrIGlzXG5uZXQvdm13X3Zzb2NrL2RpYWcuYy0zMi1cdCAqIGhlbGQuXG4tLVxubmV0L3Ztd192c29jay9kaWFnLmM9NDg9c3RhdGljIGludCB2c29ja19kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC92bXdfdnNvY2svZGlhZy5jLTY3LVxubmV0L3Ztd192c29jay9kaWFnLmM6Njg6XHRzcGluX2xvY2tfYmgoXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XG5uZXQvdm13X3Zzb2NrL2RpYWcuYy02OS1cbi0tXG5uZXQvdm13X3Zzb2NrL2RpYWcuYy0xMzEtZG9uZTpcbm5ldC92bXdfdnNvY2svZGlhZy5jOjEzMjpcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xubmV0L3Ztd192c29jay9kaWFnLmMtMTMzLVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTQxMz1zdGF0aWMgdm9pZCB2aXJ0aW9fdnNvY2tfcmVzZXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNDE1LVx0Lyogdm1jaV90cmFuc3BvcnQuYyBkb2VzbiYjMzk7dCB0YWtlIHNrX2xvY2sgaGVyZSBlaXRoZXIuICBBdCBsZWFzdCB3ZSYjMzk7cmVcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjQxNjpcdCAqIHVuZGVyIHZzb2NrX3RhYmxlX2xvY2sgc28gdGhlIHNvY2sgY2Fubm90IGRpc2FwcGVhciB3aGlsZSB3ZSYjMzk7cmVcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQxNy1cdCAqIGV4ZWN1dGluZy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMTAKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipEZWx2aW5nIGludG8gdnNvY2sgTmFtZXNwYWNlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgdnNvY2tgIGhhbmRsZXMgbmFtZXNwYWNlcy4gTXkgaW5pdGlhbCBwb2ludCBvZiByZWZlcmVuY2UgaXMgdGhlIGB2c29ja190YWJsZWAgZGF0YSBzdHJ1Y3R1cmUsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBmaWVsZHMgYGNoaWxkX25zX21vZGVgIGFuZCBgbnNfbW9kZWAuIFRob3NlIGFyZSB0aGUga2V5IGluZGljYXRvcnMgb2Ygd2hhdCBuYW1lc3BhY2VzIGFyZSBpbnZvbHZlZCBhbmQgaG93LgoKVG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24sIEnigJltIHplcm9pbmcgaW4gb24gbGluZXMgMjkwMyB0aHJvdWdoIDI5MzAgb2YgYGFmX3Zzb2NrLmNgLiBUaGF04oCZcyB3aGVyZSB0aGUgbmFtZXNwYWNlIG1vZGUgbG9naWMgaXMgbGlrZWx5IGltcGxlbWVudGVkIGluIG1vcmUgZGV0YWlsIGFuZCBJIHNob3VsZCBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZSBtb2RlcyBhcmUgc2V0LCBob3cgdGhleSBpbnRlcmFjdCwgYW5kIHdoYXQgc2l0dWF0aW9ucyB0cmlnZ2VyIHBhcnRpY3VsYXIgYmVoYXZpb3JzLiBJIGV4cGVjdCB0byBzZWUgdGhlIGtleSBjaGVja3MgYW5kIGNvbmRpdGlvbmFscyBnb3Zlcm5pbmcgdGhlIG5hbWVzcGFjZSB0cmFuc2l0aW9ucyBvciBsaW1pdGF0aW9ucy4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlYWwgbWFnaWMgKG9yIHBvdGVudGlhbCBnb3RjaGFzISkgYXJlIGhhcHBlbmluZy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svYWZfdnNvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MDMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjkwMzpcdHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XG4yOTA0Olx0XHR7XG4yOTA1Olx0XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtuc19tb2RlXCYjMzQ7LFxuMjkwNjpcdFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LnZzb2NrLm1vZGUsXG4yOTA3Olx0XHRcdC5tYXhsZW5cdFx0PSBWU09DS19ORVRfTU9ERV9TVFJfTUFYLFxuMjkwODpcdFx0XHQubW9kZVx0XHQ9IDA0NDQsXG4yOTA5Olx0XHRcdC5wcm9jX2hhbmRsZXJcdD0gdnNvY2tfbmV0X21vZGVfc3RyaW5nXG4yOTEwOlx0XHR9LFxuMjkxMTpcdFx0e1xuMjkxMjpcdFx0XHQucHJvY25hbWVcdD0gXCYjMzQ7Y2hpbGRfbnNfbW9kZVwmIzM0OyxcbjI5MTM6XHRcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC52c29jay5jaGlsZF9uc19tb2RlLFxuMjkxNDpcdFx0XHQubWF4bGVuXHRcdD0gVlNPQ0tfTkVUX01PREVfU1RSX01BWCxcbjI5MTU6XHRcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuMjkxNjpcdFx0XHQucHJvY19oYW5kbGVyXHQ9IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ1xuMjkxNzpcdFx0fSxcbjI5MTg6XHRcdHtcbjI5MTk6XHRcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O2cyaF9mYWxsYmFja1wmIzM0OyxcbjI5MjA6XHRcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC52c29jay5nMmhfZmFsbGJhY2ssXG4yOTIxOlx0XHRcdC5tYXhsZW5cdFx0PSBzaXplb2YoaW50KSxcbjI5MjI6XHRcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuMjkyMzpcdFx0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG9pbnR2ZWNfbWlubWF4LFxuMjkyNDpcdFx0XHQuZXh0cmExXHRcdD0gU1lTQ1RMX1pFUk8sXG4yOTI1Olx0XHRcdC5leHRyYTJcdFx0PSBTWVNDVExfT05FLFxuMjkyNjpcdFx0fSxcbjI5Mjc6XHR9O1xuMjkyODpcdFxuMjkyOTpcdHN0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxuMjkzMDpcdHtcbjI5MzE6XHRcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuMjkzMjpcdFxuMjkzMzpcdFx0aWYgKG5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkge1xuMjkzNDpcdFx0XHR0YWJsZSA9IHZzb2NrX3RhYmxlO1xuMjkzNTpcdFx0fSBlbHNlIHtcbjI5MzY6XHRcdFx0dGFibGUgPSBrbWVtZHVwKHZzb2NrX3RhYmxlLCBzaXplb2YodnNvY2tfdGFibGUpLCBHRlBfS0VSTkVMKTtcbjI5Mzc6XHRcdFx0aWYgKCF0YWJsZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwODcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uY2VybnMgUmVnYXJkaW5nIGAvcHJvYy9zeXMvbmV0L3Zzb2NrL2NoaWxkX25zX21vZGVgKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBpbW1lZGlhdGVseSBjb25jZXJuaW5nOiBJIHNlZSB0aGF0IGAvcHJvYy9zeXMvbmV0L3Zzb2NrL2NoaWxkX25zX21vZGVgIGlzIHdyaXRhYmxlIGFuZCBoYXMgbW9kZSAwNjQ0LiBUaGF0JiMzOTtzIGEgaHVnZSByZWQgZmxhZyByaWdodCBvZmYgdGhlIGJhdC4gVGhlIGZhY3QgdGhhdCB1c2Vyc3BhY2UgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhpcyBzeXNjdGwgaXMgcHJvYmxlbWF0aWMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGNvbnRleHQuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hlbiB1c2Vyc3BhY2Ugd3JpdGVzIHRvIGAvcHJvYy9zeXMvbmV0L3Zzb2NrL2NoaWxkX25zX21vZGVgLCBpdCB0cmlnZ2VycyBhIGRpcmVjdCBjYWxsIHRvIGB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdgLiBBbmQgdGhhdCYjMzk7cy4uLiB0aGF0JiMzOTtzIGEgZGlyZWN0IGVudHJ5IHBvaW50IGludG8gdGhlIGNvcmUgdnNvY2sgbmV0d29ya2luZyBjb2RlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIHBhdGggdGhhdCYjMzk7cyBlYXNpbHkgYWNjZXNzaWJsZSBmcm9tIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQsIGNyaXRpY2FsbHksIGZyb20gc3l6a2FsbGVyIGZ1enppbmcuCgpNeSBwcmltYXJ5IGNvbmNlcm4gcmlnaHQgbm93IGlzIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYCBmdW5jdGlvbiBpdHNlbGYuIE1vZGlmeWluZyB0aGUgY29uZmlndXJhdGlvbiB2aWEgdGhpcyBzeXNjdGwgaXMgZXNzZW50aWFsbHkgY2hhbmdpbmcgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgbmV0d29ya2luZy92c29jayBjb3JlLCBhbmQgdGhhdCBvcGVucyB0aGUgZG9vciB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIGEgdmVjdG9yIHRvIHBvdGVudGlhbGx5IGV4cGxvaXQgYW55IGJ1Z3MsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpTbywgbGV0JiMzOTtzIHN0b3AgYW5kIHZlcmlmeSB3aGF0IEtjb25maWcgZW5hYmxlcyBgYWZfdnNvY2suY2AgYW5kIHRha2UgYSBkZWVwIGJyZWF0aC4gVGltZSBmb3Igc29tZSBtb3JlIGludmVzdGlnYXRpb24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FmX3Zzb2NrXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svTWFrZWZpbGU9OD1vYmotJChDT05GSUdfVlNPQ0tFVFNfTE9PUEJBQ0spICYjNDM7PSB2c29ja19sb29wYmFjay5vXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTktXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjEwOnZzb2NrLXkgJiM0Mzs9IGFmX3Zzb2NrLm8gYWZfdnNvY2tfdGFwLm8gdnNvY2tfYWRkci5vXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTExLXZzb2NrLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdnNvY2tfYnBmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2OTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyB0aGUgdnNvY2sgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBuZXQvdm13X3Zzb2NrL01ha2VmaWxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhpcyB2c29jayBtb2R1bGUsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgcXVpY2sgc2tpbSBvZiB0aGUgZmlyc3QgMTUgbGluZXMuIFRoaXMgdXN1YWxseSBnaXZlcyBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGNvcmUgdmFyaWFibGVzLCBpbmNsdWRlZCBkaXJlY3RvcmllcywgYW5kIGFueSBpbW1lZGlhdGUgZmxhZ3MgdGhhdCBhcmUgc2V0LiBJIGV4cGVjdCB0byBzZWUgdGhlIHR5cGljYWwga2VybmVsIG1vZHVsZSBzZXR1cDogcHJvYmFibHkgc2V0dGluZyB1cCBgb2JqLW1gLCBtYXliZSBzb21lIGluY2x1ZGUgcGF0aHMsIGFuZCBkZWZpbml0aW9ucyBmb3Igc291cmNlIGZpbGVzLiBBbnl0aGluZyB1bnVzdWFsLCBsaWtlIHNwZWNpZmljIGNvbXBpbGVyIGZsYWdzIG9yIGNvbmRpdGlvbmFsIGxvZ2ljLCB3aWxsIGltbWVkaWF0ZWx5IGNhdGNoIG15IGV5ZSBhbmQgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0b2JqLSQoQ09ORklHX1ZTT0NLRVRTKSAmIzQzOz0gdnNvY2sub1xuICAgMzpcdG9iai0kKENPTkZJR19WU09DS0VUU19ESUFHKSAmIzQzOz0gdnNvY2tfZGlhZy5vXG4gICA0Olx0b2JqLSQoQ09ORklHX1ZNV0FSRV9WTUNJX1ZTT0NLRVRTKSAmIzQzOz0gdm13X3Zzb2NrX3ZtY2lfdHJhbnNwb3J0Lm9cbiAgIDU6XHRvYmotJChDT05GSUdfVklSVElPX1ZTT0NLRVRTKSAmIzQzOz0gdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnQub1xuICAgNjpcdG9iai0kKENPTkZJR19WSVJUSU9fVlNPQ0tFVFNfQ09NTU9OKSAmIzQzOz0gdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLm9cbiAgIDc6XHRvYmotJChDT05GSUdfSFlQRVJWX1ZTT0NLRVRTKSAmIzQzOz0gaHZfc29jay5vXG4gICA4Olx0b2JqLSQoQ09ORklHX1ZTT0NLRVRTX0xPT1BCQUNLKSAmIzQzOz0gdnNvY2tfbG9vcGJhY2sub1xuICAgOTpcdFxuICAxMDpcdHZzb2NrLXkgJiM0Mzs9IGFmX3Zzb2NrLm8gYWZfdnNvY2tfdGFwLm8gdnNvY2tfYWRkci5vXG4gIDExOlx0dnNvY2stJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSB2c29ja19icGYub1xuICAxMjpcdFxuICAxMzpcdHZzb2NrX2RpYWcteSAmIzQzOz0gZGlhZy5vXG4gIDE0Olx0XG4gIDE1Olx0dm13X3Zzb2NrX3ZtY2lfdHJhbnNwb3J0LXkgJiM0Mzs9IHZtY2lfdHJhbnNwb3J0Lm8gdm1jaV90cmFuc3BvcnRfbm90aWZ5Lm8gXFxcbiAgMTY6XHRcdHZtY2lfdHJhbnNwb3J0X25vdGlmeV9xc3RhdGUub1xuICAxNzpcdFxuICAxODpcdHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0LXkgJiM0Mzs9IHZpcnRpb190cmFuc3BvcnQub1xuICAxOTpcdFxuICAyMDpcdHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi15ICYjNDM7PSB2aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzM2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSB2c29jayBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBDT05GSUdfVlNPQ0tFVFNgIGlzIHJlc3BvbnNpYmxlIGZvciBjb21waWxpbmcgYHZzb2NrLm9gLCBhbmQgdGhhdCBpbiB0dXJuIHB1bGxzIGluIGBhZl92c29jay5vYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19WU09DS0VUU2AgdG8gc2VlIHdoYXQgZWxzZSBtaWdodCBiZSByZXF1aXJlZCBvciBwb3RlbnRpYWxseSBpbXBhY3RpbmcgdGhpcyBtb2R1bGUuIExldCYjMzk7cyBkaXZlIGludG8gYG5ldC92bXdfdnNvY2svS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGRldGFpbHMgdGVsbCB1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBWc29jayBwcm90b2NvbFxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgVlNPQ0tFVFNcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0IHByb3RvY29sXCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFZpcnR1YWwgU29ja2V0IFByb3RvY29sIGlzIGEgc29ja2V0IHByb3RvY29sIHNpbWlsYXIgdG8gVENQL0lQXG4gIDEwOlx0XHQgIGFsbG93aW5nIGNvbW11bmljYXRpb24gYmV0d2VlbiBWaXJ0dWFsIE1hY2hpbmVzIGFuZCBoeXBlcnZpc29yXG4gIDExOlx0XHQgIG9yIGhvc3QuXG4gIDEyOlx0XG4gIDEzOlx0XHQgIFlvdSBzaG91bGQgYWxzbyBzZWxlY3Qgb25lIG9yIG1vcmUgaHlwZXJ2aXNvci1zcGVjaWZpYyB0cmFuc3BvcnRzXG4gIDE0Olx0XHQgIGJlbG93LlxuICAxNTpcdFxuICAxNjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDE3Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHZzb2NrLiBJZiB1bnN1cmUsIHNheSBOLlxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBWU09DS0VUU19ESUFHXG4gIDIwOlx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgMjE6XHRcdGRlcGVuZHMgb24gVlNPQ0tFVFNcbiAgMjI6XHRcdGRlZmF1bHQgeVxuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBTdXBwb3J0IGZvciBQRl9WU09DSyBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXG4gIDI1Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDI2Olx0XG4gIDI3Olx0XHQgIEVuYWJsZSB0aGlzIG1vZHVsZSBzbyB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIGNhbiBxdWVyeSBvcGVuIHNvY2tldHMuXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXG4gIDMwOlx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldHMgbG9vcGJhY2sgdHJhbnNwb3J0XCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIFZTT0NLRVRTXG4gIDMyOlx0XHRkZWZhdWx0IHlcbiAgMzM6XHRcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG4gIDM0Olx0XHRoZWxwXG4gIDM1Olx0XHQgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBsb29wYmFjayB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0cyxcbiAgMzY6XHRcdCAgdXNpbmcgdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLlxuICAzNzpcdFxuICAzODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDM5Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHZzb2NrX2xvb3BiYWNrLiBJZiB1bnN1cmUsIHNheSBOLlxuICA0MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAyNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIEhpZXJhcmNoeSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYHNvdXJjZSAmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZyYjMzQ7YCBsaW5lIGxpdmVzIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIHN5c3RlbS4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gc3RhcnQgYXQgdGhlIHRvcCwgb3IgYXQgbGVhc3QgYSByZWFzb25hYmx5IGhpZ2gtbGV2ZWwgS2NvbmZpZyBmaWxlLiBJJiMzOTtsbCBjaGVjayBgbmV0L0tjb25maWdgIGZpcnN0LiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnQgZm9yIGFueXRoaW5nIG5ldHdvcmstcmVsYXRlZC4gSG9wZWZ1bGx5LCB0aGlzIHBhcmVudCBLY29uZmlnIGZpbGUgd2lsbCBkaXJlY3RseSBpbmNsdWRlIHRoZSB2bXdfdnNvY2sgS2NvbmZpZywgb3IgYXQgbGVhc3QgZ2l2ZSBtZSBhIHBvaW50ZXIgdG8gdGhlIHJlbGV2YW50IHNlY3Rpb24gd2l0aGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuLi4gYW5kIGhvdyBmYXIgSSBuZWVkIHRvIGdvIHRvIHRyYWNlIHRoaXMgZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm13X3Zzb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yNzQ9c291cmNlIFwmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNzU6c291cmNlIFwmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctMjc2LXNvdXJjZSBcJiMzNDtuZXQvbmV0bGluay9LY29uZmlnXCYjMzQ7XG4tLVxubmV0L01ha2VmaWxlPTY0PW9iai0kKENPTkZJR19PUEVOVlNXSVRDSClcdCYjNDM7PSBvcGVudnN3aXRjaC9cbm5ldC9NYWtlZmlsZTo2NTpvYmotJChDT05GSUdfVlNPQ0tFVFMpXHQmIzQzOz0gdm13X3Zzb2NrL1xubmV0L01ha2VmaWxlLTY2LW9iai0kKENPTkZJR19NUExTKVx0XHQmIzQzOz0gbXBscy9cbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWc9Mjk9Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTM1LVx0ICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgbG9vcGJhY2sgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHMsXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6MzY6XHQgIHVzaW5nIHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5cbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zNy1cbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWc9NDE9Y29uZmlnIFZNV0FSRV9WTUNJX1ZTT0NLRVRTXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTUwLVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NTE6XHQgIHdpbGwgYmUgY2FsbGVkIHZtd192c29ja192bWNpX3RyYW5zcG9ydC4gSWYgdW5zdXJlLCBzYXkgTi5cbm5ldC92bXdfdnNvY2svS2NvbmZpZy01Mi1cbm5ldC92bXdfdnNvY2svS2NvbmZpZz01Mz1jb25maWcgVklSVElPX1ZTT0NLRVRTXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTYzLVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbm5ldC92bXdfdnNvY2svS2NvbmZpZzo2NDpcdCAgY2FsbGVkIHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0LiBJZiB1bnN1cmUsIHNheSBOLlxubmV0L3Ztd192c29jay9LY29uZmlnLTY1LVxubmV0L3Ztd192c29jay9LY29uZmlnPTY2PWNvbmZpZyBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTcwLVx0ICB0aGUgdmlydGlvX3Zzb2NrLiAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxubmV0L3Ztd192c29jay9LY29uZmlnOjcxOlx0ICB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydF9jb21tb24uXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNzItXG4tLVxubmV0L3Ztd192c29jay9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19WU09DS0VUU19ESUFHKSAmIzQzOz0gdnNvY2tfZGlhZy5vXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1ZNV0FSRV9WTUNJX1ZTT0NLRVRTKSAmIzQzOz0gdm13X3Zzb2NrX3ZtY2lfdHJhbnNwb3J0Lm9cbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6NTpvYmotJChDT05GSUdfVklSVElPX1ZTT0NLRVRTKSAmIzQzOz0gdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnQub1xubmV0L3Ztd192c29jay9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19WSVJUSU9fVlNPQ0tFVFNfQ09NTU9OKSAmIzQzOz0gdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLm9cbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtNy1vYmotJChDT05GSUdfSFlQRVJWX1ZTT0NLRVRTKSAmIzQzOz0gaHZfc29jay5vXG4tLVxubmV0L3Ztd192c29jay9NYWtlZmlsZT0xMz12c29ja19kaWFnLXkgJiM0Mzs9IGRpYWcub1xubmV0L3Ztd192c29jay9NYWtlZmlsZS0xNC1cbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6MTU6dm13X3Zzb2NrX3ZtY2lfdHJhbnNwb3J0LXkgJiM0Mzs9IHZtY2lfdHJhbnNwb3J0Lm8gdm1jaV90cmFuc3BvcnRfbm90aWZ5Lm8gXFxcbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtMTYtXHR2bWNpX3RyYW5zcG9ydF9ub3RpZnlfcXN0YXRlLm9cbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtMTctXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjE4OnZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0LXkgJiM0Mzs9IHZpcnRpb190cmFuc3BvcnQub1xubmV0L3Ztd192c29jay9NYWtlZmlsZS0xOS1cbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6MjA6dm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLXkgJiM0Mzs9IHZpcnRpb190cmFuc3BvcnRfY29tbW9uLm9cbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtMjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjMxCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSB2c29ja2V0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYENPTkZJR19WU09DS0VUU2Agc2l0cyBpbm5vY3VvdXNseSBlbm91Z2gsIHJpZ2h0IHRoZXJlIHVuZGVyIGBuZXQvYC4gTm90aGluZyBvYnZpb3VzbHkgaG9sZGluZyBpdCBiYWNrLCBubyB3ZWlyZCBkZXBlbmRlbmNpZXMgdG8gdHJpcCBvdmVyLiBCdXQgd2FpdCwgYSBuYWdnaW5nIHRob3VnaHQg4oCTIHdoYXQgYWJvdXQgc3lzY3RsPyBDb3VsZCB0aGVyZSBiZSBzb21lIGludGVyYWN0aW9uLCBzb21lIGNvbmRpdGlvbiBJJiMzOTttIG1pc3Npbmc/IEkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIGB2c29ja19zeXNjdGxfcmVnaXN0ZXJgIGZ1bmN0aW9uLCB3aGVyZSBzeXNjdGwgcGFyYW1ldGVycyBhcmUgZGVmaW5lZCwgaXMgZ3VhcmRlZCBieSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBvciBuZXR3b3JrIG9wZXJhdGlvbiBjaGVja3MuIExldCYjMzk7cyBkaWcgaW50byB0aGUgYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aGF0IGB2c29ja19zeXNjdGxfcmVnaXN0ZXJgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpZiB0aGVyZSBhcmUgYW55IGdvdGNoYXMgaW4gdGhpcyBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTI4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5Mjg6XHRcbjI5Mjk6XHRzdGF0aWMgaW50IF9fbmV0X2luaXQgdnNvY2tfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbjI5MzA6XHR7XG4yOTMxOlx0XHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbjI5MzI6XHRcbjI5MzM6XHRcdGlmIChuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbjI5MzQ6XHRcdFx0dGFibGUgPSB2c29ja190YWJsZTtcbjI5MzU6XHRcdH0gZWxzZSB7XG4yOTM2Olx0XHRcdHRhYmxlID0ga21lbWR1cCh2c29ja190YWJsZSwgc2l6ZW9mKHZzb2NrX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4yOTM3Olx0XHRcdGlmICghdGFibGUpXG4yOTM4Olx0XHRcdFx0Z290byBlcnJfYWxsb2M7XG4yOTM5Olx0XG4yOTQwOlx0XHRcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNldnNvY2subW9kZTtcbjI5NDE6XHRcdFx0dGFibGVbMV0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V2c29jay5jaGlsZF9uc19tb2RlO1xuMjk0MjpcdFx0XHR0YWJsZVsyXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXZzb2NrLmcyaF9mYWxsYmFjaztcbjI5NDM6XHRcdH1cbjI5NDQ6XHRcbjI5NDU6XHRcdG5ldC1cdTAwM2V2c29jay5zeXNjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwmIzM0O25ldC92c29ja1wmIzM0OywgdGFibGUsXG4yOTQ2Olx0XHRcdFx0XHRcdFx0ICAgICAgIEFSUkFZX1NJWkUodnNvY2tfdGFibGUpKTtcbjI5NDc6XHRcdGlmICghbmV0LVx1MDAzZXZzb2NrLnN5c2N0bF9oZHIpXG4yOTQ4Olx0XHRcdGdvdG8gZXJyX3JlZztcbjI5NDk6XHRcbjI5NTA6XHRcdHJldHVybiAwO1xuMjk1MTpcdFxuMjk1MjpcdGVycl9yZWc6XG4yOTUzOlx0XHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSlcbjI5NTQ6XHRcdFx0a2ZyZWUodGFibGUpO1xuMjk1NTpcdGVycl9hbGxvYzpcbjI5NTY6XHRcdHJldHVybiAtRU5PTUVNO1xuMjk1NzpcdH1cbjI5NTg6XHRcbjI5NTk6XHRzdGF0aWMgdm9pZCB2c29ja19zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXG4yOTYwOlx0e1xuMjk2MTpcdFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4yOTYyOlx0XG4yOTYzOlx0XHR0YWJsZSA9IG5ldC1cdTAwM2V2c29jay5zeXNjdGxfaGRyLVx1MDAzZWN0bF90YWJsZV9hcmc7XG4yOTY0Olx0XHR1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUobmV0LVx1MDAzZXZzb2NrLnN5c2N0bF9oZHIpO1xuMjk2NTpcdFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpXG4yOTY2Olx0XHRcdGtmcmVlKHRhYmxlKTtcbjI5Njc6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTEzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYSBuZXR3b3JraW5nIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIHZzb2NrIFN5c2N0bCBSZWdpc3RyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGB2c29ja19zeXNjdGxfcmVnaXN0ZXJgIGZ1bmN0aW9uIGxpdmVzLiBHaXZlbiB0aGUgY29udGV4dCwgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSBpdCYjMzk7cyBuZXN0bGVkIHdpdGhpbiB0aGUgdnNvY2sgbmV0d29yayBvcGVyYXRpb25zIHN0cnVjdHVyZSwgcHJvYmFibHkgc29tZXRoaW5nIGxpa2UgYHZzb2NrX25ldF9vcHNgLiBJJiMzOTtsbCB3YW50IHRvIHZlcmlmeSB0aGF0LiBNeSBndXQgc2F5cyB0byBsb29rIHNvbWV3aGVyZSBhcm91bmQgbGluZXMgMjk2OCB0byAzMDAwIOKAkyB0aGF0IHNvdW5kcyBsaWtlIGEgcmVhc29uYWJsZSByYW5nZSBmb3IgdGhpcyBraW5kIG9mIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svYWZfdnNvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5NjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjk2ODpcdFxuMjk2OTpcdHN0YXRpYyB2b2lkIHZzb2NrX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbjI5NzA6XHR7XG4yOTcxOlx0XHRpZiAobmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKVxuMjk3MjpcdFx0XHRuZXQtXHUwMDNldnNvY2subW9kZSA9IFZTT0NLX05FVF9NT0RFX0dMT0JBTDtcbjI5NzM6XHRcdGVsc2VcbjI5NzQ6XHRcdFx0bmV0LVx1MDAzZXZzb2NrLm1vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zKTtcbjI5NzU6XHRcbjI5NzY6XHRcdG5ldC1cdTAwM2V2c29jay5jaGlsZF9uc19tb2RlID0gbmV0LVx1MDAzZXZzb2NrLm1vZGU7XG4yOTc3Olx0XHRuZXQtXHUwMDNldnNvY2suY2hpbGRfbnNfbW9kZV9sb2NrZWQgPSAwO1xuMjk3ODpcdFx0bmV0LVx1MDAzZXZzb2NrLmcyaF9mYWxsYmFjayA9IDE7XG4yOTc5Olx0fVxuMjk4MDpcdFxuMjk4MTpcdHN0YXRpYyBfX25ldF9pbml0IGludCB2c29ja19zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuMjk4MjpcdHtcbjI5ODM6XHRcdHZzb2NrX25ldF9pbml0KG5ldCk7XG4yOTg0Olx0XG4yOTg1Olx0XHRpZiAodnNvY2tfc3lzY3RsX3JlZ2lzdGVyKG5ldCkpXG4yOTg2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjk4NzpcdFxuMjk4ODpcdFx0cmV0dXJuIDA7XG4yOTg5Olx0fVxuMjk5MDpcdFxuMjk5MTpcdHN0YXRpYyBfX25ldF9leGl0IHZvaWQgdnNvY2tfc3lzY3RsX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbjI5OTI6XHR7XG4yOTkzOlx0XHR2c29ja19zeXNjdGxfdW5yZWdpc3RlcihuZXQpO1xuMjk5NDpcdH1cbjI5OTU6XHRcbjI5OTY6XHRzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHZzb2NrX3N5c2N0bF9vcHMgPSB7XG4yOTk3Olx0XHQuaW5pdCA9IHZzb2NrX3N5c2N0bF9pbml0X25ldCxcbjI5OTg6XHRcdC5leGl0ID0gdnNvY2tfc3lzY3RsX2V4aXRfbmV0LFxuMjk5OTpcdH07XG4zMDAwOlx0XG4zMDAxOlx0c3RhdGljIGludCBfX2luaXQgdnNvY2tfaW5pdCh2b2lkKVxuMzAwMjpcdHtcbjMwMDM6XHRcdGludCBlcnIgPSAwO1xuMzAwNDpcdFxuMzAwNTpcdFx0dnNvY2tfaW5pdF90YWJsZXMoKTtcbjMwMDY6XHRcbjMwMDc6XHRcdHZzb2NrX3Byb3RvLm93bmVyID0gVEhJU19NT0RVTEU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTE0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSB2c29jayBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoZSB2c29jayBpbml0aWFsaXphdGlvbiwgYHZzb2NrX2luaXQoKWAgY2FsbHMgYHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmFtcDt2c29ja19zeXNjdGxfb3BzKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0RvIHdlIG5lZWQgdGhlIGBDT05GSUdfTkVUX1NZU0NUTGAgb3B0aW9uIGVuYWJsZWQgZm9yIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/JiMzNDsgSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gYSByZWxhdGVkIGNvbnRleHQsIGFuZCBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgIGlzIGltcGxlbWVudGVkIGFuZCB1c2VkLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaCBvZiB0aGUgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ2lzdGVyX25ldF9zeXNjdGxfc3omIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9NTE4PXN0cnVjdCBjdGxfdGFibGU7XG4tLVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTUyMC0jZGVmaW5lIHJlZ2lzdGVyX25ldF9zeXNjdGwobmV0LCBwYXRoLCB0YWJsZSlcdFxcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6NTIxOlx0cmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIHBhdGgsIHRhYmxlLCBBUlJBWV9TSVpFKHRhYmxlKSlcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC01MjItI2lmZGVmIENPTkZJR19TWVNDVExcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaD01MjM9aW50IG5ldF9zeXNjdGxfaW5pdCh2b2lkKTtcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDo1MjQ6c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJlZ2lzdGVyX25ldF9zeXNjdGxfc3ooc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTUyNS1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpO1xuLS1cbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaD01Mjg9c3RhdGljIGlubGluZSBpbnQgbmV0X3N5c2N0bF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDo1Mjk6c3RhdGljIGlubGluZSBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtNTMwLVx0Y29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIHNpemVfdCB0YWJsZV9zaXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ4MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFuYWx5c2lzOiB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBDT05GSUdfU1lTQ1RMYCBhbmQgYENPTkZJR19WU09DS0VUU2AgYXJlIHJlcXVpcmVkLCBzbyB0aGUgcHJlcmVxdWlzaXRlcyBhcmUgdGhlcmUuIFRoaXMgY2hhbmdlIGlzIGluIGBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNgLCBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AuCgpUaGUgY29kZSBtb2RpZmllcyB0aGUgc3lzY3RsIGhhbmRsZXIgZm9yIHRoZSB2c29jayBuZXRucyBtb2RlLiBBbnkgcHJvY2VzcyBjYW4gcmVhZCBvciB3cml0ZSB0byBgL3Byb2Mvc3lzL25ldC92c29jay9jaGlsZF9uc19tb2RlYCwgbWFraW5nIHRoaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhhdCYjMzk7cyBnb29kLCB0aGF0JiMzOTtzIHRoZSBwcmltYXJ5IGh1cmRsZSBmb3IgZnV6emluZy4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogc2hvdWxkIHdlIGZ1enogaXQ/IExldCYjMzk7cyBjaGVjayB0aGUgZ3VpZGVsaW5lcy4gVGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgZmFsbCB1bmRlciBhbnkgb2YgdGhlICYjMzQ7bmVnYXRpdmUgY3JpdGVyaWEuJiMzNDsgSXQmIzM5O3Mgbm90IGRvY3VtZW50YXRpb24sIGEgYnVpbGQgc3lzdGVtIGNoYW5nZSB0aGF0IGRvZXNuJiMzOTt0IGFmZmVjdCBjb21waWxlZCBDIGxvZ2ljLCB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgZHJpdmVyIHRlYXJkb3duLiBJdCYjMzk7cyBhbHNvIG5vdCBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aC4gVGhpcyBpcyB0b3VjaGluZyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGluIGNvcmUgbmV0d29ya2luZywgYW5kIHRoZSBwYXRjaCBtb2RpZmllcyBhIHN5c2N0bCBoYW5kbGVyIChgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYCkuIEZ1cnRoZXJtb3JlLCBpdCBpbml0aWFsaXplcyBhIGxvY2FsIHZhcmlhYmxlIGBuZXdfbW9kZWAgZGlmZmVyZW50bHkuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyB0aGUgdmFsdWUgb2YgYG5ld19tb2RlYCB3aGVuIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AgZG9lcyBub3Qgc2V0IGl0IChlLmcuLCB3aGVuIHdyaXRpbmcgMCBieXRlcykuCgpUaGUgcGF0Y2ggY2xlYXJseSB0b3VjaGVzIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlLCBzbyB0aGUgYW5zd2VyIGlzICp5ZXMqLiBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuCgpOb3csIGZvciBgRm9jdXNTeW1ib2xzYC4gVGhlIHByaW1hcnkgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQgaXMgYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AuIEJ1dCB3aGF0IGFib3V0IGl0cyBjYWxsZXJzIG9yIHJlbGF0ZWQgZnVuY3Rpb25zPyBIb2xkIG9uLi4uIGlzIGB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdgIHN0YXRpYyBhbmQgaW5saW5lZD8gTm8sIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmVmZXJlbmNlZCBieSBwb2ludGVyIHdpdGhpbiB0aGUgYHByb2NfaGFuZGxlcmAgb2YgdGhlIHN5c2N0bCB0YWJsZSBlbnRyeS4gVGhlIGNvbXBpbGVyICp3aWxsKiBnZW5lcmF0ZSBhIHN5bWJvbCBmb3IgaXQuIExldCYjMzk7cyBzZWUgaWYgdGhlIG90aGVyIHN5bWJvbHMgYXJlIHRoZXJlLCB0b28sIHN1Y2ggYXMgYHZzb2NrX25ldF9jaGlsZF9tb2RlYCBhbmQgYHZzb2NrX25ldF9zZXRfY2hpbGRfbW9kZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zzb2NrX25ldF9jaGlsZF9tb2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9hZl92c29jay5jPTI4NTk9c3RhdGljIGludCB2c29ja19uZXRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg3Mi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODczOnN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg3NC1cdFx0XHRcdCAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODgwLVx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsIHZzb2NrLmNoaWxkX25zX21vZGUpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4ODE6XHRuZXdfbW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg4Mi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODgzLVx0cmV0ID0gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjg4NDpcdFx0XHRcdCAgICAgIHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCksIFx1MDAyNm5ld19tb2RlKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODg1LVx0aWYgKHJldClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjkwMz1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTE1LVx0XHQubW9kZVx0XHQ9IDA2NDQsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjkxNjpcdFx0LnByb2NfaGFuZGxlclx0PSB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTE3LVx0fSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjk2OT1zdGF0aWMgdm9pZCB2c29ja19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NzMtXHRlbHNlXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjk3NDpcdFx0bmV0LVx1MDAzZXZzb2NrLm1vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTc1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk2NgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlRyYWNpbmcgdGhlIHZzb2NrX25ldF9jaGlsZF9tb2RlIERlZmluaXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdoZXJlIGlzIGB2c29ja19uZXRfY2hpbGRfbW9kZWAgZGVmaW5lZD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyBkZWNsYXJlZCBhbmQgaW5pdGlhbGl6ZWQgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBmdW5jdGlvbiBhbmQgaG93IGl0IGltcGFjdHMgdGhlIGxhcmdlciBzeXN0ZW0uIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gZGVidWdnaW5nIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGUgcHJvZ3JhbSwgb3IgZXZlbiBqdXN0IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwcm9ncmFtLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHRyYWNpbmcgdGhhdCB2YXJpYWJsZSBkb3duIGFuZCB1bmRlcnN0YW5kaW5nIGV2ZXJ5dGhpbmcgYWJvdXQgaXRzIHVzYWdlLCBhbmQgaXRzIGVmZmVjdHMgb24gdGhlIHByb2dyYW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zzb2NrX25ldF9jaGlsZF9tb2RlXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmg9Mjg5PXN0YXRpYyBpbmxpbmUgYm9vbCB2c29ja19uZXRfc2V0X2NoaWxkX21vZGUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbmluY2x1ZGUvbmV0L2FmX3Zzb2NrLmgtMzAzLVxuaW5jbHVkZS9uZXQvYWZfdnNvY2suaDozMDQ6c3RhdGljIGlubGluZSBlbnVtIHZzb2NrX25ldF9tb2RlIHZzb2NrX25ldF9jaGlsZF9tb2RlKHN0cnVjdCBuZXQgKm5ldClcbmluY2x1ZGUvbmV0L2FmX3Zzb2NrLmgtMzA1LXtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjg3Mz1zdGF0aWMgaW50IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODgwLVx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsIHZzb2NrLmNoaWxkX25zX21vZGUpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4ODE6XHRuZXdfbW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg4Mi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODgzLVx0cmV0ID0gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjg4NDpcdFx0XHRcdCAgICAgIHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCksIFx1MDAyNm5ld19tb2RlKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODg1LVx0aWYgKHJldClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjk2OT1zdGF0aWMgdm9pZCB2c29ja19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NzMtXHRlbHNlXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjk3NDpcdFx0bmV0LVx1MDAzZXZzb2NrLm1vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTc1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTY1MAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgYHZzb2NrX25ldF9jaGlsZF9tb2RlYCoqCgpPa2F5LCBzbyBgdnNvY2tfbmV0X2NoaWxkX21vZGVgIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgaW5saW5lIHdpdGhpbiBgaW5jbHVkZS9uZXQvYWZfdnNvY2suaGAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIHZzb2NrIG5ldCBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyBpcyByZWxhdGVkIHRvIGhvdyB0aGUgdnNvY2sgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBjaGlsZCBuZXR3b3JrIG5hbWVzcGFjZXMgb3IgY29uZmlndXJhdGlvbnMuCgpOb3csIHdoYXQgYWJvdXQgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nYD8gVGhhdCYjMzk7cyBhbm90aGVyIHBvdGVudGlhbCBwaWVjZSBvZiB0aGUgcHV6emxlIEkgbmVlZCB0byBjb25zaWRlci4gSSBzaG91bGQgcHJvYmFibHkgdHJhY2sgZG93biB3aGVyZSB0aGF0JiMzOTtzIGRlZmluZWQgb3IgdXNlZCB0byBzZWUgaG93IGl0JiMzOTtzIGxpbmtlZC4KCkxldCBtZSBjaGVjayBsaW5lIDI4MDAgb2YgYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgdnNvY2sgaW1wbGVtZW50YXRpb24gYW5kIGhvdyBpdCBtYW5hZ2VzIG5ldHdvcmsgbW9kZXMuIEhvcGVmdWxseSwgdGhhdCBsb2NhdGlvbiB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gdGhlc2UgdmFyaWFibGVzLCBpbmNsdWRpbmcgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhleSBhcmUgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4MDA6XHRzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgdnNvY2tfZGV2aWNlID0ge1xuMjgwMTpcdFx0Lm5hbWVcdFx0PSBcJiMzNDt2c29ja1wmIzM0OyxcbjI4MDI6XHRcdC5mb3BzXHRcdD0gXHUwMDI2dnNvY2tfZGV2aWNlX29wcyxcbjI4MDM6XHR9O1xuMjgwNDpcdFxuMjgwNTpcdHN0YXRpYyBpbnQgX192c29ja19uZXRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbjI4MDY6XHRcdFx0XHRcdCAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MsXG4yODA3Olx0XHRcdFx0XHQgICBlbnVtIHZzb2NrX25ldF9tb2RlIG1vZGUsXG4yODA4Olx0XHRcdFx0XHQgICBlbnVtIHZzb2NrX25ldF9tb2RlICpuZXdfbW9kZSlcbjI4MDk6XHR7XG4yODEwOlx0XHRjaGFyIGRhdGFbVlNPQ0tfTkVUX01PREVfU1RSX01BWF0gPSB7MH07XG4yODExOlx0XHRzdHJ1Y3QgY3RsX3RhYmxlIHRtcDtcbjI4MTI6XHRcdGludCByZXQ7XG4yODEzOlx0XG4yODE0Olx0XHRpZiAoIXRhYmxlLVx1MDAzZWRhdGEgfHwgIXRhYmxlLVx1MDAzZW1heGxlbiB8fCAhKmxlbnApIHtcbjI4MTU6XHRcdFx0KmxlbnAgPSAwO1xuMjgxNjpcdFx0XHRyZXR1cm4gMDtcbjI4MTc6XHRcdH1cbjI4MTg6XHRcbjI4MTk6XHRcdHRtcCA9ICp0YWJsZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIFZTb2NrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIFZTb2NrIHNpdHVhdGlvbiwgYW5kIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGtlZXAgaW4gbWluZCBhcmUgYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AgYW5kIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gcGljdHVyZS4gSSBrbm93IHRoaXMgc3R1ZmYsIGJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiwgc28gSSB3aWxsIHN0YXJ0IGJ5IGNoZWNraW5nIGZvciBhbnkgbWlzc2luZyBjb25maWd1cmF0aW9uIGJpdHMuCgpGaXJzdCBzdG9wIGlzIHRoZSBgbmV0L3Ztd192c29jay9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjZW50cmFsIG9wdGlvbiwgYW5kIHRoZXJlIGl0IGlzOiBgY29uZmlnIFZTT0NLRVRTIHRyaXN0YXRlICYjMzQ7VmlydHVhbCBTb2NrZXQgcHJvdG9jb2wmIzM0O2AuIEdvb2QsIHRoYXQgY29uZmlybXMgdGhlIGNvcmUgY29tcG9uZW50LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMsIHRvby4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoZSBzeXNjdGwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1NZU0NUTGAgaXMgZW5hYmxlZCwgYmVjYXVzZSBWU29jayBsaWtlbHkgZXhwb3NlcyBzb21lIHR1bmFibGUgcGFyYW1ldGVycy4KCkZpbmFsbHksIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSB0b3Agb2YgYGFmX3Zzb2NrLmNgIGl0c2VsZi4gVGhlIGluY2x1ZGVzIGFuZCBpbml0aWFsIGRlZmluaXRpb25zIHRoZXJlIG9mdGVuIHByb3ZpZGUgYSBxdWljayBvdmVydmlldyBvZiBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBJIG1pZ2h0IGhhdmUgbWlzc2VkLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LypcbiAgIDM6XHQgKiBWTXdhcmUgdlNvY2tldHMgRHJpdmVyXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBWTXdhcmUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAgIDY6XHQgKi9cbiAgIDc6XHRcbiAgIDg6XHQvKiBJbXBsZW1lbnRhdGlvbiBub3RlczpcbiAgIDk6XHQgKlxuICAxMDpcdCAqIC0gVGhlcmUgYXJlIHR3byBraW5kcyBvZiBzb2NrZXRzOiB0aG9zZSBjcmVhdGVkIGJ5IHVzZXIgYWN0aW9uIChzdWNoIGFzXG4gIDExOlx0ICogY2FsbGluZyBzb2NrZXQoMikpIGFuZCB0aG9zZSBjcmVhdGVkIGJ5IGluY29taW5nIGNvbm5lY3Rpb24gcmVxdWVzdCBwYWNrZXRzLlxuICAxMjpcdCAqXG4gIDEzOlx0ICogLSBUaGVyZSBhcmUgdHdvIFwmIzM0O2dsb2JhbFwmIzM0OyB0YWJsZXMsIG9uZSBmb3IgYm91bmQgc29ja2V0cyAoc29ja2V0cyB0aGF0IGhhdmVcbiAgMTQ6XHQgKiBzcGVjaWZpZWQgYW4gYWRkcmVzcyB0aGF0IHRoZXkgYXJlIHJlc3BvbnNpYmxlIGZvcikgYW5kIG9uZSBmb3IgY29ubmVjdGVkXG4gIDE1Olx0ICogc29ja2V0cyAoc29ja2V0cyB0aGF0IGhhdmUgZXN0YWJsaXNoZWQgYSBjb25uZWN0aW9uIHdpdGggYW5vdGhlciBzb2NrZXQpLlxuICAxNjpcdCAqIFRoZXNlIHRhYmxlcyBhcmUgXCYjMzQ7Z2xvYmFsXCYjMzQ7IGluIHRoYXQgYWxsIHNvY2tldHMgb24gdGhlIHN5c3RlbSBhcmUgcGxhY2VkXG4gIDE3Olx0ICogd2l0aGluIHRoZW0uIC0gTm90ZSwgdGhvdWdoLCB0aGF0IHRoZSBib3VuZCB0YWJsZSBjb250YWlucyBhbiBleHRyYSBlbnRyeVxuICAxODpcdCAqIGZvciBhIGxpc3Qgb2YgdW5ib3VuZCBzb2NrZXRzIGFuZCBTT0NLX0RHUkFNIHNvY2tldHMgd2lsbCBhbHdheXMgcmVtYWluIGluXG4gIDE5Olx0ICogdGhhdCBsaXN0LiBUaGUgYm91bmQgdGFibGUgaXMgdXNlZCBzb2xlbHkgZm9yIGxvb2t1cCBvZiBzb2NrZXRzIHdoZW4gcGFja2V0c1xuICAyMDpcdCAqIGFyZSByZWNlaXZlZCBhbmQgdGhhdCYjMzk7cyBub3QgbmVjZXNzYXJ5IGZvciBTT0NLX0RHUkFNIHNvY2tldHMgc2luY2Ugd2UgY3JlYXRlXG4gIDIxOlx0ICogYSBkYXRhZ3JhbSBoYW5kbGUgZm9yIGVhY2ggYW5kIG5lZWQgbm90IHBlcmZvcm0gYSBsb29rdXAuICBLZWVwaW5nIFNPQ0tfREdSQU1cbiAgMjI6XHQgKiBzb2NrZXRzIG91dCBvZiB0aGUgYm91bmQgaGFzaCBidWNrZXRzIHdpbGwgcmVkdWNlIHRoZSBjaGFuY2Ugb2YgY29sbGlzaW9uc1xuICAyMzpcdCAqIHdoZW4gbG9va2luZyBmb3IgU09DS19TVFJFQU0gc29ja2V0cyBhbmQgcHJldmVudHMgdXMgZnJvbSBoYXZpbmcgdG8gY2hlY2sgdGhlXG4gIDI0Olx0ICogc29ja2V0IHR5cGUgaW4gdGhlIGhhc2ggdGFibGUgbG9va3Vwcy5cbiAgMjU6XHQgKlxuICAyNjpcdCAqIC0gU29ja2V0cyBjcmVhdGVkIGJ5IHVzZXIgYWN0aW9uIHdpbGwgZWl0aGVyIGJlIFwmIzM0O2NsaWVudFwmIzM0OyBzb2NrZXRzIHRoYXRcbiAgMjc6XHQgKiBpbml0aWF0ZSBhIGNvbm5lY3Rpb24gb3IgXCYjMzQ7c2VydmVyXCYjMzQ7IHNvY2tldHMgdGhhdCBsaXN0ZW4gZm9yIGNvbm5lY3Rpb25zOyB3ZSBkb1xuICAyODpcdCAqIG5vdCBzdXBwb3J0IHNpbXVsdGFuZW91cyBjb25uZWN0cyAodHdvIFwmIzM0O2NsaWVudFwmIzM0OyBzb2NrZXRzIGNvbm5lY3RpbmcpLlxuICAyOTpcdCAqXG4gIDMwOlx0ICogLSBcJiMzNDtTZXJ2ZXJcJiMzNDsgc29ja2V0cyBhcmUgcmVmZXJyZWQgdG8gYXMgbGlzdGVuZXIgc29ja2V0cyB0aHJvdWdob3V0IHRoaXNcbiAgMzE6XHQgKiBpbXBsZW1lbnRhdGlvbiBiZWNhdXNlIHRoZXkgYXJlIGluIHRoZSBUQ1BfTElTVEVOIHN0YXRlLiAgV2hlbiBhXG4gIDMyOlx0ICogY29ubmVjdGlvbiByZXF1ZXN0IGlzIHJlY2VpdmVkICh0aGUgc2Vjb25kIGtpbmQgb2Ygc29ja2V0IG1lbnRpb25lZCBhYm92ZSksXG4gIDMzOlx0ICogd2UgY3JlYXRlIGEgbmV3IHNvY2tldCBhbmQgcmVmZXIgdG8gaXQgYXMgYSBwZW5kaW5nIHNvY2tldC4gIFRoZXNlIHBlbmRpbmdcbiAgMzQ6XHQgKiBzb2NrZXRzIGFyZSBwbGFjZWQgb24gdGhlIHBlbmRpbmcgY29ubmVjdGlvbiBsaXN0IG9mIHRoZSBsaXN0ZW5lciBzb2NrZXQuXG4gIDM1Olx0ICogV2hlbiBmdXR1cmUgcGFja2V0cyBhcmUgcmVjZWl2ZWQgZm9yIHRoZSBhZGRyZXNzIHRoZSBsaXN0ZW5lciBzb2NrZXQgaXNcbiAgMzY6XHQgKiBib3VuZCB0bywgd2UgY2hlY2sgaWYgdGhlIHNvdXJjZSBvZiB0aGUgcGFja2V0IGlzIGZyb20gb25lIHRoYXQgaGFzIGFuXG4gIDM3Olx0ICogZXhpc3RpbmcgcGVuZGluZyBjb25uZWN0aW9uLiAgSWYgaXQgZG9lcywgd2UgcHJvY2VzcyB0aGUgcGFja2V0IGZvciB0aGVcbiAgMzg6XHQgKiBwZW5kaW5nIHNvY2tldC4gIFdoZW4gdGhhdCBzb2NrZXQgcmVhY2hlcyB0aGUgY29ubmVjdGVkIHN0YXRlLCBpdCBpcyByZW1vdmVkXG4gIDM5Olx0ICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0JiMzOTtzIHBlbmRpbmcgbGlzdCBhbmQgZW5xdWV1ZWQgaW4gdGhlIGxpc3RlbmVyXG4gIDQwOlx0ICogc29ja2V0JiMzOTtzIGFjY2VwdCBxdWV1ZS4gIENhbGxlcnMgb2YgYWNjZXB0KDIpIHdpbGwgYWNjZXB0IGNvbm5lY3RlZCBzb2NrZXRzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDQ3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgdnNvY2sgUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHZzb2NrLCBhbmQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwZXItbmV0IHN1YnN5c3RlbSByZWdpc3RyYXRpb24uIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGRpcmVjdGx5IGF0IHRoZSBzb3VyY2UgY29kZSDigJMgc3BlY2lmaWNhbGx5IGBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNgLiBJIGtub3cgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBBRl9WU09DSyBmdW5jdGlvbmFsaXR5IGlzIGRlZmluZWQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLCBuYXR1cmFsbHksIHNvIHRoZSBhcmVhIGFyb3VuZCBgcmVnaXN0ZXJfcGVybmV0X3N1YnN5c2AgaXMgd2hlcmUgSSYjMzk7bGwgYmUgY29uY2VudHJhdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHZzb2NrIGZhbWlseSBob29rcyBpbnRvIHRoZSBuZXR3b3JraW5nIHN0YWNrIGF0IHRoZSBwZXItbmV0IG5hbWVzcGFjZSBsZXZlbC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIHRoYXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvcnJlY3QgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29udGVudGlvbiBwb2ludHMsIG9yIHZlcmlmeSB0aGUgaW50ZW5kZWQgYmVoYXZpb3Igb2YgdGhlIHN1YnN5c3RlbSYjMzk7cyBsaWZlY3ljbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zzb2NrX3N5c2N0bF9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjk5MT1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHZzb2NrX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5OTUtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjk5NjpzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHZzb2NrX3N5c2N0bF9vcHMgPSB7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjk5Ny1cdC5pbml0ID0gdnNvY2tfc3lzY3RsX2luaXRfbmV0LFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0zMDAxPXN0YXRpYyBpbnQgX19pbml0IHZzb2NrX2luaXQodm9pZClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzAyNy1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozMDI4Olx0aWYgKHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2dnNvY2tfc3lzY3RsX29wcykpIHtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMDI5LVx0XHRlcnIgPSAtRU5PTUVNO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0zMDQ3PXN0YXRpYyB2b2lkIF9fZXhpdCB2c29ja19leGl0KHZvaWQpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwNTEtXHRwcm90b191bnJlZ2lzdGVyKFx1MDAyNnZzb2NrX3Byb3RvKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozMDUyOlx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNnZzb2NrX3N5c2N0bF9vcHMpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwNTMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjEwMgoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiAzOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFZTT0NLRVRTIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIHplcm9lZCBpbiBvbiB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGhlcmUuIGBDT05GSUdfVlNPQ0tFVFNgIGlzIHRoZSBwcmltYXJ5IG9uZSwgbmF0dXJhbGx5LiBUaGVuLCBgQ09ORklHX1NZU0NUTGAgaXMgcmVxdWlyZWQgZm9yIHRoZSBzeXNjdGwgc3VwcG9ydCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkIG9uIGFtZDY0IHN5c3RlbXMgYW5kIGZvciBzeXprYWxsZXIuCgpOb3csIEkgbmVlZGVkIHRvIGNvbmZpcm0gd2hldGhlciBgQ09ORklHX05FVGAgaXMgcmVxdWlyZWQuIFNpbmNlIGBWU09DS0VUU2AgbGl2ZXMgdW5kZXIgYG5ldC9gLCBpdCBtYWRlIHNlbnNlIHRvIGNoZWNrLiBMb29raW5nIGF0IGBuZXQvdm13X3Zzb2NrL0tjb25maWdgLCBzcGVjaWZpY2FsbHksIGxpbmUgNiBjb25maXJtcyB0aGF0IGBWU09DS0VUU2AgKmlzKiBpbmNsdWRlZCB3aGVuIGBDT05GSUdfTkVUYCBpcyBlbmFibGVkLiBTbywgYFZTT0NLRVRTYCBhbmQgYFNZU0NUTGAgYXJlIHRoZSBtYWluIHRoaW5ncyBJIG5lZWQgdG8gZm9jdXMgb24uCgpOZXh0LCBJIGRpZCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBGb2N1c1N5bWJvbHMuIEkgaWRlbnRpZmllZCBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYCBhbmQgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nYC4gTG9va3MgbGlrZSB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgb25seSBtb2RpZnlpbmcgYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AsIHdoaWNoIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gcmVhZGluZyBhbmQgd3JpdGluZyBgL3Byb2Mvc3lzL25ldC92c29jay9jaGlsZF9uc19tb2RlYC4KCkZpbmFsbHksIEkgY2hlY2tlZCBXb3J0aEZ1enppbmcuIFRoZSBwYXRjaCBpcyBpbml0aWFsaXppbmcgYG5ld19tb2RlYCB3aXRoaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AuIENydWNpYWxseSwgdGhpcyBtb2RpZmllcyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYGFmX3Zzb2NrYC4gQWNjb3JkaW5nIHRvIG15IGNyaXRlcmlhLCBhbnkgbG9naWMgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBxdWFsaWZ5LiBTZWN0aW9uIDMgaXMgY2xlYXIgb24gdGhhdC4gUGx1cywgaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBtZWV0IGFueSBvZiB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgaW4gU2VjdGlvbiAyLgoKRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtTWVNDVEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcmIzM0OywKICAgICYjMzQ7X192c29ja19uZXRfbW9kZV9zdHJpbmcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKCkgaW4gbmV0L3Ztd192c29jay9hZl92c29jay5jIHRvIGluaXRpYWxpemUgdGhlIG5ld19tb2RlIHZhcmlhYmxlIGJlZm9yZSBwYXNzaW5nIGl0IHRvIF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKCksIHByZXZlbnRpbmcgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkIHdoZW4gd3JpdGluZyB0byAvcHJvYy9zeXMvbmV0L3Zzb2NrL2NoaWxkX25zX21vZGUgd2l0aCB6ZXJvIGxlbmd0aC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHN5c2N0bCBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1NZU0NUTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyYjMzQ7LAogICAgJiMzNDtfX3Zzb2NrX25ldF9tb2RlX3N0cmluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoKSBpbiBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3X21vZGUgdmFyaWFibGUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gX192c29ja19uZXRfbW9kZV9zdHJpbmcoKSwgcHJldmVudGluZyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWQgd2hlbiB3cml0aW5nIHRvIC9wcm9jL3N5cy9uZXQvdnNvY2svY2hpbGRfbnNfbW9kZSB3aXRoIHplcm8gbGVuZ3RoLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc3lzY3RsIGNvZGUgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT45bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIHRoZSBzdGFjayB2YXJpYWJsZSBgbmV3X21vZGVgIGluIGB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoKWAgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkIChzcGVjaWZpY2FsbHkgaWYgYSB3cml0ZSBvY2N1cnJlZCB3aXRoIGAqbGVucCA9PSAwYCwgY2F1c2luZyBgX192c29ja19uZXRfbW9kZV9zdHJpbmcoKWAgdG8gcmV0dXJuIDAgd2l0aG91dCBhc3NpZ25pbmcgYCpuZXdfbW9kZWApLiBUaGUgcGF0Y2ggaW5pdGlhbGl6ZXMgYG5ld19tb2RlYCB3aXRoIGB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpYCBiZWZvcmUgcGFzc2luZyBpdHMgcG9pbnRlci5cblxuQmVjYXVzZSB0aGlzIGNoYW5nZSByZXNvbHZlcyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWQgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgb3IgZXhwb3NpbmcgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMsIGl0IHBvc2VzIG5vIHJpc2sgb2YgaW50cm9kdWNpbmcgS01TQU4tZGV0ZWN0YWJsZSBidWdzLiBTdGFuZGFyZCB0ZXN0aW5nL0tBU0FOIGlzIHN1ZmZpY2llbnQsIGFuZCBzcGF3bmluZyBhIGRlZGljYXRlZCwgcmVzb3VyY2UtaW50ZW5zaXZlIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjZiZTA5ZWE4NDU2NTg4ODhjYzg1OTM1YjIyNTMzNDA0MzdlZTM2MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDE0OjQwOjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCmluZGV4IDYyMmRiZDA0Njc5OTQuLjYxMTYzMzU3YWUzYzQgMTAwNjQ0Ci0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKQEAgLTI4NzgsNiAmIzQzOzI4NzgsNyBAQCBzdGF0aWMgaW50IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAogCWludCByZXQ7CiAKIAluZXQgPSBjb250YWluZXJfb2YodGFibGUtJmd0O2RhdGEsIHN0cnVjdCBuZXQsIHZzb2NrLmNoaWxkX25zX21vZGUpOwomIzQzOwluZXdfbW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCk7CiAKIAlyZXQgPSBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcywKIAkJCQkgICAgICB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpLCAmYW1wO25ld19tb2RlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBKdXN0aWZpY2F0aW9uOiB2bXdfdnNvY2sgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIHNlZSBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoIHNldHRpbmcgdXAgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGZpcnN0IGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgdGFyZ2V0ZWQgY2hhbmdlLCBzbyB3ZSBuZWVkIHRvIGRldGVybWluZSB0aGUgcG90ZW50aWFsIHJpc2suIEkmIzM5O20gbG9va2luZyBhdCBhIGRpZmYgd2l0aGluIGBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNgLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGxpbmUgMjg3OC4gVGhlIGRpZmYgc2hvd3MgYSBuZXcgbGluZSBgbmV3X21vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpO2AgaGFzIGJlZW4gYWRkZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsY3VsYXRpbmcgYSBgbmV3X21vZGVgIHZhcmlhYmxlIHVzaW5nIHRoZSBmdW5jdGlvbiBgdnNvY2tfbmV0X2NoaWxkX21vZGVgLiBUaGUgc3Vycm91bmRpbmcgY29kZSBpbnZvbHZlcyBhIGBjdGxfdGFibGVgIGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byBhIGNoaWxkIG5hbWVzcGFjZSBtb2RlIHN0cmluZy4gSSYjMzk7bGwgbmVlZCB0byByZWFkIHRoZSBjb2RlIGFyb3VuZCB0aGlzIGFkZGl0aW9uIG1vcmUgY2xvc2VseSwgc28gSSBzaG91bGQgZmlyZSB1cCBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgbGluZXMgaW4gdGhlIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdnNvY2tfbmV0X2NoaWxkX21vZGVgIGlzIGRvaW5nIHdpdGggdGhlIGBuZXRgIHN0cnVjdCwgYW5kIGhvdyB0aGF0IG5ldyB2YWx1ZSBpbnRlcmFjdHMgd2l0aCB0aGUgY29udHJvbCB0YWJsZSBzZXR1cC4gRGVwZW5kaW5nIG9uIGhvdyB0aG9zZSBmdW5jdGlvbnMgYXJlIGludGVyYWN0aW5nLCBhbmQgdGhlIGRhdGEgdGhleSBhcmUgd29ya2luZyB3aXRoLCB0aGlzIGNvdWxkIHZlcnkgd2VsbCBiZSBzb21ldGhpbmcgdGhhdCB3b3VsZCBiZW5lZml0IGZyb20gZnV6emluZyB3aXRoIEtNU0FOLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svYWZfdnNvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjg2MDpcdFx0XHRcdFx0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4yODYxOlx0e1xuMjg2MjpcdFx0c3RydWN0IG5ldCAqbmV0O1xuMjg2MzpcdFxuMjg2NDpcdFx0aWYgKHdyaXRlKVxuMjg2NTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMjg2NjpcdFxuMjg2NzpcdFx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsIHZzb2NrLm1vZGUpO1xuMjg2ODpcdFxuMjg2OTpcdFx0cmV0dXJuIF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zLFxuMjg3MDpcdFx0XHRcdFx0ICAgICAgIHZzb2NrX25ldF9tb2RlKG5ldCksIE5VTEwpO1xuMjg3MTpcdH1cbjI4NzI6XHRcbjI4NzM6XHRzdGF0aWMgaW50IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuMjg3NDpcdFx0XHRcdFx0ICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4yODc1Olx0e1xuMjg3NjpcdFx0ZW51bSB2c29ja19uZXRfbW9kZSBuZXdfbW9kZTtcbjI4Nzc6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbjI4Nzg6XHRcdGludCByZXQ7XG4yODc5Olx0XG4yODgwOlx0XHRuZXQgPSBjb250YWluZXJfb2YodGFibGUtXHUwMDNlZGF0YSwgc3RydWN0IG5ldCwgdnNvY2suY2hpbGRfbnNfbW9kZSk7XG4yODgxOlx0XHRuZXdfbW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCk7XG4yODgyOlx0XG4yODgzOlx0XHRyZXQgPSBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyxcbjI4ODQ6XHRcdFx0XHRcdCAgICAgIHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCksIFx1MDAyNm5ld19tb2RlKTtcbjI4ODU6XHRcdGlmIChyZXQpXG4yODg2Olx0XHRcdHJldHVybiByZXQ7XG4yODg3Olx0XG4yODg4Olx0XHRpZiAod3JpdGUpIHtcbjI4ODk6XHRcdFx0LyogUHJldmVudCBhIFwmIzM0O2xvY2FsXCYjMzQ7IG5hbWVzcGFjZSBmcm9tIGVzY2FsYXRpbmcgdG8gXCYjMzQ7Z2xvYmFsXCYjMzQ7LFxuMjg5MDpcdFx0XHQgKiB3aGljaCB3b3VsZCBnaXZlIG5lc3RlZCBuYW1lc3BhY2VzIGFjY2VzcyB0byBnbG9iYWwgQ0lEcy5cbjI4OTE6XHRcdFx0ICovXG4yODkyOlx0XHRcdGlmICh2c29ja19uZXRfbW9kZShuZXQpID09IFZTT0NLX05FVF9NT0RFX0xPQ0FMIFx1MDAyNlx1MDAyNlxuMjg5MzpcdFx0XHQgICAgbmV3X21vZGUgPT0gVlNPQ0tfTkVUX01PREVfR0xPQkFMKVxuMjg5NDpcdFx0XHRcdHJldHVybiAtRVBFUk07XG4yODk1Olx0XG4yODk2Olx0XHRcdGlmICghdnNvY2tfbmV0X3NldF9jaGlsZF9tb2RlKG5ldCwgbmV3X21vZGUpKVxuMjg5NzpcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4yODk4Olx0XHR9XG4yODk5Olx0XG4yOTAwOlx0XHRyZXR1cm4gMDtcbjI5MDE6XHR9XG4yOTAyOlx0XG4yOTAzOlx0c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdnNvY2tfdGFibGVbXSA9IHtcbjI5MDQ6XHRcdHtcbjI5MDU6XHRcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O25zX21vZGVcJiMzNDssXG4yOTA2Olx0XHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQudnNvY2subW9kZSxcbjI5MDc6XHRcdFx0Lm1heGxlblx0XHQ9IFZTT0NLX05FVF9NT0RFX1NUUl9NQVgsXG4yOTA4Olx0XHRcdC5tb2RlXHRcdD0gMDQ0NCxcbjI5MDk6XHRcdFx0LnByb2NfaGFuZGxlclx0PSB2c29ja19uZXRfbW9kZV9zdHJpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU1MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGlzIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bGwgZm9jdXMgb24gbGluZXMgMjgyMCB0aHJvdWdoIDI4NjUsIGFzIHRoYXQgc2VlbXMgbGlrZSB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiBjb2RlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggaG93IHRoZSB2c29jayBjb25uZWN0aW9uIGlzIGNvbmZpZ3VyZWQgb3IgcHJlc2VudGVkLiBJJiMzOTtsbCBwYXkgYXR0ZW50aW9uIHRvIGFueSBzdHJpbmcgbWFuaXB1bGF0aW9uIG9yIG5ldHdvcmstcmVsYXRlZCBwYXJhbWV0ZXJzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgZGVidWdnaW5nIGluZm8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9hZl92c29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODIwOlx0XHR0bXAuZGF0YSA9IGRhdGE7XG4yODIxOlx0XG4yODIyOlx0XHRpZiAoIXdyaXRlKSB7XG4yODIzOlx0XHRcdGNvbnN0IGNoYXIgKnA7XG4yODI0Olx0XG4yODI1Olx0XHRcdHN3aXRjaCAobW9kZSkge1xuMjgyNjpcdFx0XHRjYXNlIFZTT0NLX05FVF9NT0RFX0dMT0JBTDpcbjI4Mjc6XHRcdFx0XHRwID0gVlNPQ0tfTkVUX01PREVfU1RSX0dMT0JBTDtcbjI4Mjg6XHRcdFx0XHRicmVhaztcbjI4Mjk6XHRcdFx0Y2FzZSBWU09DS19ORVRfTU9ERV9MT0NBTDpcbjI4MzA6XHRcdFx0XHRwID0gVlNPQ0tfTkVUX01PREVfU1RSX0xPQ0FMO1xuMjgzMTpcdFx0XHRcdGJyZWFrO1xuMjgzMjpcdFx0XHRkZWZhdWx0OlxuMjgzMzpcdFx0XHRcdFdBUk5fT05DRSh0cnVlLCBcJiMzNDtuZXRucyBoYXMgaW52YWxpZCB2c29jayBtb2RlXCYjMzQ7KTtcbjI4MzQ6XHRcdFx0XHQqbGVucCA9IDA7XG4yODM1Olx0XHRcdFx0cmV0dXJuIDA7XG4yODM2Olx0XHRcdH1cbjI4Mzc6XHRcbjI4Mzg6XHRcdFx0c3Ryc2NweShkYXRhLCBwLCBzaXplb2YoZGF0YSkpO1xuMjgzOTpcdFx0XHR0bXAubWF4bGVuID0gc3RybGVuKHApO1xuMjg0MDpcdFx0fVxuMjg0MTpcdFxuMjg0MjpcdFx0cmV0ID0gcHJvY19kb3N0cmluZyhcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xuMjg0MzpcdFx0aWYgKHJldCB8fCAhd3JpdGUpXG4yODQ0Olx0XHRcdHJldHVybiByZXQ7XG4yODQ1Olx0XG4yODQ2Olx0XHRpZiAoKmxlbnAgXHUwMDNlPSBzaXplb2YoZGF0YSkpXG4yODQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg0ODpcdFxuMjg0OTpcdFx0aWYgKCFzdHJuY21wKGRhdGEsIFZTT0NLX05FVF9NT0RFX1NUUl9HTE9CQUwsIHNpemVvZihkYXRhKSkpXG4yODUwOlx0XHRcdCpuZXdfbW9kZSA9IFZTT0NLX05FVF9NT0RFX0dMT0JBTDtcbjI4NTE6XHRcdGVsc2UgaWYgKCFzdHJuY21wKGRhdGEsIFZTT0NLX05FVF9NT0RFX1NUUl9MT0NBTCwgc2l6ZW9mKGRhdGEpKSlcbjI4NTI6XHRcdFx0Km5ld19tb2RlID0gVlNPQ0tfTkVUX01PREVfTE9DQUw7XG4yODUzOlx0XHRlbHNlXG4yODU0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg1NTpcdFxuMjg1NjpcdFx0cmV0dXJuIDA7XG4yODU3Olx0fVxuMjg1ODpcdFxuMjg1OTpcdHN0YXRpYyBpbnQgdnNvY2tfbmV0X21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4yODYwOlx0XHRcdFx0XHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbjI4NjE6XHR7XG4yODYyOlx0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4yODYzOlx0XG4yODY0Olx0XHRpZiAod3JpdGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNzMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSB2c29jayBOZXR3b3JrIE1vZGUgU3RyaW5nKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nYC4gSSBrbm93IHRoaXMgaXMgYSBrZXkgdmFyaWFibGUgcmVsYXRlZCB0byB0aGUgdnNvY2sgaW1wbGVtZW50YXRpb24sIHNvIHVuZGVyc3RhbmRpbmcgaXQgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgYW5kIGhvdyBpdOKAmXMgdXNlZC4KCkxldCYjMzk7cyBzdGFydCBieSBleGFtaW5pbmcgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHN0cmluZywgc3BlY2lmaWNhbGx5IGxpbmVzIDI4MDAgdGhyb3VnaCAyODI1LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIGNvbnRleHQuIEkmIzM5O2xsIGV4cGVjdCB0byBzZWUgaG93IHRoZSBzdHJpbmcmIzM5O3Mgc3RydWN0dXJlIGlzIGRlZmluZWQgYW5kIHdoaWNoIGVsZW1lbnRzIGFyZSBpbXBvcnRhbnQuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IG5ldHdvcmsgbW9kZXMgYXJlIHJlcHJlc2VudGVkLCBhbmQgd2hhdCBpbmZvcm1hdGlvbiBpcyBlbmNvZGVkIHdpdGhpbiB0aGUgc3RyaW5nIGl0c2VsZi4gVGhpcyBzZWN0aW9uIGxpa2VseSBjb250YWlucyB0aGUgZnVuZGFtZW50YWwgc2V0dXAsIGFuZCBzaG91bGQgcmV2ZWFsIGhvdyBtb2RlcyBhcmUgZGVmaW5lZCBpbiB0aGUgdnNvY2sgc3Vic3lzdGVtLiBJJiMzOTttIGtlZW4gdG8gZ3Jhc3AgdGhlIG51YW5jZXMgaW4gdGhpcyBjcnVjaWFsIGRhdGEgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svYWZfdnNvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgwMDpcdHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB2c29ja19kZXZpY2UgPSB7XG4yODAxOlx0XHQubmFtZVx0XHQ9IFwmIzM0O3Zzb2NrXCYjMzQ7LFxuMjgwMjpcdFx0LmZvcHNcdFx0PSBcdTAwMjZ2c29ja19kZXZpY2Vfb3BzLFxuMjgwMzpcdH07XG4yODA0Olx0XG4yODA1Olx0c3RhdGljIGludCBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuMjgwNjpcdFx0XHRcdFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyxcbjI4MDc6XHRcdFx0XHRcdCAgIGVudW0gdnNvY2tfbmV0X21vZGUgbW9kZSxcbjI4MDg6XHRcdFx0XHRcdCAgIGVudW0gdnNvY2tfbmV0X21vZGUgKm5ld19tb2RlKVxuMjgwOTpcdHtcbjI4MTA6XHRcdGNoYXIgZGF0YVtWU09DS19ORVRfTU9ERV9TVFJfTUFYXSA9IHswfTtcbjI4MTE6XHRcdHN0cnVjdCBjdGxfdGFibGUgdG1wO1xuMjgxMjpcdFx0aW50IHJldDtcbjI4MTM6XHRcbjI4MTQ6XHRcdGlmICghdGFibGUtXHUwMDNlZGF0YSB8fCAhdGFibGUtXHUwMDNlbWF4bGVuIHx8ICEqbGVucCkge1xuMjgxNTpcdFx0XHQqbGVucCA9IDA7XG4yODE2Olx0XHRcdHJldHVybiAwO1xuMjgxNzpcdFx0fVxuMjgxODpcdFxuMjgxOTpcdFx0dG1wID0gKnRhYmxlO1xuMjgyMDpcdFx0dG1wLmRhdGEgPSBkYXRhO1xuMjgyMTpcdFxuMjgyMjpcdFx0aWYgKCF3cml0ZSkge1xuMjgyMzpcdFx0XHRjb25zdCBjaGFyICpwO1xuMjgyNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDM4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgdnNvY2sgUGF0Y2ggZm9yIEtNU0FOIE5lZWRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIG1ldGljdWxvdXNseSB0cmFjZSB0aGUgY29udHJvbCBmbG93IGFuZCBwb3RlbnRpYWwgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwYXRjaC4gRmlyc3QsIEkgc2VlIHRoZSBjb2RlIHNuaXBwZXQgaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AgYW5kIGltbWVkaWF0ZWx5IHplcm8gaW4gb24gdGhlIGBuZXdfbW9kZWAgdmFyaWFibGUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBpZiBpdCYjMzk7cyBpbml0aWFsaXplZCAqYmVmb3JlKiB0aGUgcGF0Y2ggaXMgYXBwbGllZC4gVGhlIHN1YnNlcXVlbnQgY29kZSBhbmQgY29uZGl0aW9uYWwgc3RhdGVtZW50cywgZXNwZWNpYWxseSB0aGUgaW50ZXJhY3Rpb24gd2l0aCBgX192c29ja19uZXRfbW9kZV9zdHJpbmdgLCBhcmUgYSByZWQgZmxhZyDigJMgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhlcmUgY2FuIGxlYWQgdG8gc3VidGxlLCBoYXJkLXRvLWRlYnVnIGlzc3VlcywgZXhhY3RseSB3aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoLgoKSSB0aGVuIHdlbnQgdGhyb3VnaCBhbmQgcmV2aWV3ZWQgdGhlIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AgZnVuY3Rpb24uIEkgc2VlIHRoZSBwb3RlbnRpYWwgZm9yIGBsZW5wYCB0byBiZSB6ZXJvLCBhbmQgd2hlbiB3cml0ZSBpcyBhbHNvIHRydWUsIHRoZSByZXR1cm4gaGFwcGVucyB3aXRob3V0IGV2ZXIgc2V0dGluZyBgbmV3X21vZGVgLiBCaW5nbyEgVGhpcyBsb29rcyBsaWtlIGEgY2xhc3NpYyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWQsIGEgS01TQU4gbmlnaHRtYXJlLiBUaGUgcGF0Y2gsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGNvcnJlY3RseSBhZGRyZXNzZXMgdGhpcyBieSBpbml0aWFsaXppbmcgYG5ld19tb2RlYCByaWdodCBhd2F5LiBTbyBpdCAqZml4ZXMqIHRoZSBidWcsIHRoZSBLTVNBTiByaXNrIGlzIHJlc29sdmVkLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhlIHBhdGNoICppbnRyb2R1Y2UqIGFueSBuZXcgS01TQU4gcmlza3M/IExldCYjMzk7cyBjYXJlZnVsbHkgY29uc2lkZXIgdGhlIGNyaXRlcmlhLiBEb2VzIGl0IHRvdWNoIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U/IE5vLiBEb2VzIGl0IGludHJvZHVjZSBuZXcgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBBYnNvbHV0ZWx5IG5vdCwgaXQmIzM5O3MgdGhlIG9wcG9zaXRlLiBEb2VzIGl0IGNoYW5nZSBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbj8gTm8sIGl0IGluaXRpYWxpemVzIGEgdmFyaWFibGUgdGhhdCB3YXNuJiMzOTt0IGluaXRpYWxpemVkIGVhcmxpZXIuIERvZXMgaXQgbW9kaWZ5IGJvdW5kcyBjaGVja3M/IE5vLgoKVGhlIGtleSBpcyB0aGF0IHRoZSBwYXRjaCAqY29ycmVjdHMqIGFuIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdHkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG9uZXMuIFRoZSBwdXJwb3NlIG9mIEtNU0FOIGlzIHRvIGZpbmQgc3VjaCBpc3N1ZXMsIG5vdCBuZWNlc3NhcmlseSB0byB2ZXJpZnkgdGhhdCBhIGZpeCBpcyBjb21wbGV0ZS4gS01TQU4gbWF5IGJlIG92ZXJraWxsIGluIHRoaXMgc2NlbmFyaW8uIEFjY29yZGluZyB0byB0aGUgc3RhdGVkIHJ1bGVzLCBydW5uaW5nIEtNU0FOIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHJpc2tzLCB3aGljaCBpdCBkb2VzbiYjMzk7dC4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoIGVsaW1pbmF0ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eSByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBvbmUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9hZl92c29jay5jPTI4NTk9c3RhdGljIGludCB2c29ja19uZXRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg3Mi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODczOnN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg3NC1cdFx0XHRcdCAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yOTAzPXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MTUtXHRcdC5tb2RlXHRcdD0gMDY0NCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTE2Olx0XHQucHJvY19oYW5kbGVyXHQ9IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MTctXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQ3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBhIGB2c29ja19uZXRgIE1vZGUgVHJhbnNpdGlvbioqCgpBbHJpZ2h0LCBJIHNlZSBhIGxpbmUgaGVyZTogYG5ld19tb2RlID0gdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KTtgLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMsICYjMzQ7SG1tLCB3aGF0JiMzOTtzIGB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpYCBhY3R1YWxseSAqZG9pbmcqPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbW9kZSB0cmFuc2l0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgdnNvY2tfbmV0X2NoaWxkX21vZGVgIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCYjMzk7cyByZXR1cm5pbmcgYW5kIHdoYXQgdGhlIG92ZXJhbGwgZWZmZWN0IHdpbGwgYmUgb24gdGhlIGBuZXRgIG9iamVjdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlJiMzOTtzIG9wZXJhdGlvbmFsIHNlbWFudGljcyB0byBjb250aW51ZS4gTGV0JiMzOTtzIHRyYWNlIGJhY2sgdG8gdGhhdCBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2c29ja19uZXRfY2hpbGRfbW9kZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9hZl92c29jay5oPTI4OT1zdGF0aWMgaW5saW5lIGJvb2wgdnNvY2tfbmV0X3NldF9jaGlsZF9tb2RlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5pbmNsdWRlL25ldC9hZl92c29jay5oLTMwMy1cbmluY2x1ZGUvbmV0L2FmX3Zzb2NrLmg6MzA0OnN0YXRpYyBpbmxpbmUgZW51bSB2c29ja19uZXRfbW9kZSB2c29ja19uZXRfY2hpbGRfbW9kZShzdHJ1Y3QgbmV0ICpuZXQpXG5pbmNsdWRlL25ldC9hZl92c29jay5oLTMwNS17XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI4NTk9c3RhdGljIGludCB2c29ja19uZXRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg3Mi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODczOnN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg3NC1cdFx0XHRcdCAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODgwLVx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsIHZzb2NrLmNoaWxkX25zX21vZGUpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4ODE6XHRuZXdfbW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg4Mi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODgzLVx0cmV0ID0gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjg4NDpcdFx0XHRcdCAgICAgIHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCksIFx1MDAyNm5ld19tb2RlKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODg1LVx0aWYgKHJldClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjkwMz1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTE1LVx0XHQubW9kZVx0XHQ9IDA2NDQsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjkxNjpcdFx0LnByb2NfaGFuZGxlclx0PSB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTE3LVx0fSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjk2OT1zdGF0aWMgdm9pZCB2c29ja19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NzMtXHRlbHNlXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjk3NDpcdFx0bmV0LVx1MDAzZXZzb2NrLm1vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTc1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDI5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSB2c29jayBIZWFkZXIqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgdnNvY2sgaW1wbGVtZW50YXRpb24sIGFuZCB0aGUgYGluY2x1ZGUvbmV0L2FmX3Zzb2NrLmhgIGhlYWRlciBmaWxlIGlzIHRoZSBsb2dpY2FsIGZpcnN0IHN0b3AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcmVnaW9uIGFyb3VuZCBsaW5lIDMwNC4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBpbmRpY2F0b3Igb2Ygc29tZXRoaW5nIHJlbGF0ZWQgdG8gc29ja2V0IGNyZWF0aW9uLCBjb25uZWN0aW9uIG1hbmFnZW1lbnQsIG9yIHBlcmhhcHMgc29tZSBrZXkgc3RydWN0dXJlIGRlZmluaXRpb24uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IGp1bXBzIG91dCBhdCBtZS4gVGhpcyBpcyBnb2luZyB0byBiZSBteSBkaXZlLWluIHBvaW50LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgc29tZXRoaW5nIHRoYXQgd2lsbCBzdGFydCBtZSBvbiB0aGUgcmlnaHQgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9hZl92c29jay5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTA6XHRcdFx0XHRcdFx0ICAgIGVudW0gdnNvY2tfbmV0X21vZGUgbW9kZSlcbiAyOTE6XHR7XG4gMjkyOlx0XHRpbnQgbmV3X2xvY2tlZCA9IG1vZGUgJiM0MzsgMTtcbiAyOTM6XHRcdGludCBvbGRfbG9ja2VkID0gMDsgLyogdW5sb2NrZWQgKi9cbiAyOTQ6XHRcbiAyOTU6XHRcdGlmICh0cnlfY21weGNoZyhcdTAwMjZuZXQtXHUwMDNldnNvY2suY2hpbGRfbnNfbW9kZV9sb2NrZWQsXG4gMjk2Olx0XHRcdFx0XHUwMDI2b2xkX2xvY2tlZCwgbmV3X2xvY2tlZCkpIHtcbiAyOTc6XHRcdFx0V1JJVEVfT05DRShuZXQtXHUwMDNldnNvY2suY2hpbGRfbnNfbW9kZSwgbW9kZSk7XG4gMjk4Olx0XHRcdHJldHVybiB0cnVlO1xuIDI5OTpcdFx0fVxuIDMwMDpcdFxuIDMwMTpcdFx0cmV0dXJuIG9sZF9sb2NrZWQgPT0gbmV3X2xvY2tlZDtcbiAzMDI6XHR9XG4gMzAzOlx0XG4gMzA0Olx0c3RhdGljIGlubGluZSBlbnVtIHZzb2NrX25ldF9tb2RlIHZzb2NrX25ldF9jaGlsZF9tb2RlKHN0cnVjdCBuZXQgKm5ldClcbiAzMDU6XHR7XG4gMzA2Olx0XHRyZXR1cm4gUkVBRF9PTkNFKG5ldC1cdTAwM2V2c29jay5jaGlsZF9uc19tb2RlKTtcbiAzMDc6XHR9XG4gMzA4Olx0XG4gMzA5Olx0LyogUmV0dXJuIHRydWUgaWYgdHdvIG5hbWVzcGFjZXMgcGFzcyB0aGUgbW9kZSBydWxlcy4gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UuXG4gMzEwOlx0ICpcbiAzMTE6XHQgKiBBIE5VTEwgbmFtZXNwYWNlIGlzIHRyZWF0ZWQgYXMgVlNPQ0tfTkVUX01PREVfR0xPQkFMLlxuIDMxMjpcdCAqXG4gMzEzOlx0ICogUmVhZCBtb3JlIGFib3V0IG1vZGVzIGluIHRoZSBjb21tZW50IGhlYWRlciBvZiBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMuXG4gMzE0Olx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MzUKCQkJCQkJCW91dHB1dDogMTkzCgkJCQkJCQl0aG91Z2h0czogMjEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBhIHZzb2NrIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AuIEJlZm9yZSB0aGUgY2hhbmdlLCB0aGUgY29kZSBkZWNsYXJlZCBgbmV3X21vZGVgIG9uIHRoZSBzdGFjaywgYnV0IGRpZG4mIzM5O3QgaW5pdGlhbGl6ZSBpdC4gSW4gY2VydGFpbiBzY2VuYXJpb3MsIHNwZWNpZmljYWxseSB3aGVuIHRoZSB3cml0ZSBzaXplIChgKmxlbnBgKSB3YXMgemVybywgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nYCBtaWdodCBub3Qgd3JpdGUgdG8gYG5ld19tb2RlYC4gVGhpcyBtZWFudCB0aGF0IGxhdGVyLCB0aGUgZnVuY3Rpb24gY291bGQgcmVhZCBhbiB1bmluaXRpYWxpemVkIHZhbHVlIGZyb20gYG5ld19tb2RlYCBpbiB0aGUgYGlmYCBjb25kaXRpb25zLCBhbmQgS01TQU4gd291bGQgcmlnaHRmdWxseSBmbGFnIHRoaXMuCgpUaGlzIHBhdGNoIGZpeGVzIHRoYXQgZXhhY3QgaXNzdWUgYnkgaW5pdGlhbGl6aW5nIGBuZXdfbW9kZWAgd2l0aCBhIGNhbGwgdG8gYHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldClgLiBOb3csIGBuZXdfbW9kZWAgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQgYmVmb3JlIGl0JiMzOTtzIHVzZWQuCgpUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBjaGFuZ2UganVzdGlmeSBLTVNBTiBmdXp6aW5nPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgbm8sIGJ1dCBsZXQmIzM5O3MgYmUgYWJzb2x1dGVseSBzdXJlLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogS01TQU4gaXMgb25seSBuZWVkZWQgaWYgdGhlICpjb2RlIGNoYW5nZXMqIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBLTVNBTiAqc3BlY2lmaWNhbGx5KiBjYW4gZGV0ZWN0IGFuZCBLQVNBTiBjYW4mIzM5O3QuCgpOb3csIGRvZXMgdGhlIHBhdGNoIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzPyBBYnNvbHV0ZWx5IG5vdC4gSXQmIzM5O3MgaW5pdGlhbGl6aW5nIGEgc3RhY2sgdmFyaWFibGUgYmVmb3JlIHVzZS4gSXQmIzM5O3MgKmZpeGluZyogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgbm90IGNyZWF0aW5nIG9uZS4gSXQmIzM5O3Mgbm90IG1vZGlmeWluZyBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBvciBhbHRlcmluZyBhbnkgYnVmZmVyIGxlbmd0aHMgb3IgYm91bmRzIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gSW4gZmFjdCwgaXQgKmNsb3NlcyogYW4gZXhpc3RpbmcgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWsuIEFsbCBzdGFjayBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCBub3cuCgpUaGUgcGF0Y2ggY29uc2lzdHMgb2YgYSBzaW5nbGUgbGluZTogYG5ld19tb2RlID0gdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KTtgLiBUaGlzIGxpbmUgaW50cm9kdWNlcyBubyBuZXcgcmlzay4gYHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldClgIGlzIHJldHVybmluZyB0aGUgY3VycmVudCBtb2RlLCB3aGljaCBpcyBpbml0aWFsaXplZCBpbiBgdnNvY2tfbmV0X2luaXRgLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gUnVubmluZyBLTVNBTiB3b3VsZCBiZSBvdmVya2lsbCBpbiB0aGlzIHNpdHVhdGlvbi4gS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHN0YW5kYXJkIHRlc3RpbmcuCgpNeSBmaW5hbCBhbmFseXNpcyBpczoKCiogICAqKk5lZWRzS01TQU4gPSBmYWxzZSoqCiogICAqKktNU0FOUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpbml0aWFsaXplcyB0aGUgbG9jYWwgc3RhY2sgdmFyaWFibGUgYG5ld19tb2RlYCBpbiBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKClgIHRvIGB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpYC4gUHJldmlvdXNseSwgaWYgYCpsZW5wYCB3YXMgMCB3aGVuIHdyaXRpbmcgdG8gYC9wcm9jL3N5cy9uZXQvdnNvY2svY2hpbGRfbnNfbW9kZWAsIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZygpYCBtaWdodCByZXR1cm4gMCB3aXRob3V0IHdyaXRpbmcgdG8gYCpuZXdfbW9kZWAsIGxlYXZpbmcgYG5ld19tb2RlYCB1bmluaXRpYWxpemVkLiBUaGlzIGNvdWxkIGxlYWQgdG8gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgZW5zdXJpbmcgYG5ld19tb2RlYCBpcyAqYWx3YXlzKiBpbml0aWFsaXplZC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGxlYWsga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMvcGFkZGluZy4gQmVjYXVzZSB0aGUgcGF0Y2ggcmVzb2x2ZXMgYW4gdW5pbml0aWFsaXplZCByZWFkIGFuZCBkb2VzIG5vdCBjcmVhdGUgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzLCBzcGF3bmluZyBhbiBleHBlbnNpdmUgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgdGhlIHN0YWNrIHZhcmlhYmxlIGBuZXdfbW9kZWAgaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZygpYCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgKHNwZWNpZmljYWxseSBpZiBhIHdyaXRlIG9jY3VycmVkIHdpdGggYCpsZW5wID09IDBgLCBjYXVzaW5nIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZygpYCB0byByZXR1cm4gMCB3aXRob3V0IGFzc2lnbmluZyBgKm5ld19tb2RlYCkuIFRoZSBwYXRjaCBpbml0aWFsaXplcyBgbmV3X21vZGVgIHdpdGggYHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldClgIGJlZm9yZSBwYXNzaW5nIGl0cyBwb2ludGVyLlxuXG5CZWNhdXNlIHRoaXMgY2hhbmdlIHJlc29sdmVzIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZCByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBvciBleHBvc2luZyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIHN0cnVjdCBwYWRkaW5nIGlzc3VlcywgaXQgcG9zZXMgbm8gcmlzayBvZiBpbnRyb2R1Y2luZyBLTVNBTi1kZXRlY3RhYmxlIGJ1Z3MuIFN0YW5kYXJkIHRlc3RpbmcvS0FTQU4gaXMgc3VmZmljaWVudCwgYW5kIHNwYXduaW5nIGEgZGVkaWNhdGVkLCByZXNvdXJjZS1pbnRlbnNpdmUgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgc3RhY2sgdmFyaWFibGUgYG5ld19tb2RlYCBpbiBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKClgIGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCAoc3BlY2lmaWNhbGx5IGlmIGEgd3JpdGUgb2NjdXJyZWQgd2l0aCBgKmxlbnAgPT0gMGAsIGNhdXNpbmcgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKClgIHRvIHJldHVybiAwIHdpdGhvdXQgYXNzaWduaW5nIGAqbmV3X21vZGVgKS4gVGhlIHBhdGNoIGluaXRpYWxpemVzIGBuZXdfbW9kZWAgd2l0aCBgdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KWAgYmVmb3JlIHBhc3NpbmcgaXRzIHBvaW50ZXIuXG5cbkJlY2F1c2UgdGhpcyBjaGFuZ2UgcmVzb2x2ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLCBpdCBwb3NlcyBubyByaXNrIG9mIGludHJvZHVjaW5nIEtNU0FOLWRldGVjdGFibGUgYnVncy4gU3RhbmRhcmQgdGVzdGluZy9LQVNBTiBpcyBzdWZmaWNpZW50LCBhbmQgc3Bhd25pbmcgYSBkZWRpY2F0ZWQsIHJlc291cmNlLWludGVuc2l2ZSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NDA6MjguMDk5NDA2NDQyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMTAxMjczNDgzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiU1lTQ1RMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nXCIsXG4gICAgXCJfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgdGhlIHN0YWNrIHZhcmlhYmxlIGBuZXdfbW9kZWAgaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZygpYCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgKHNwZWNpZmljYWxseSBpZiBhIHdyaXRlIG9jY3VycmVkIHdpdGggYCpsZW5wID09IDBgLCBjYXVzaW5nIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZygpYCB0byByZXR1cm4gMCB3aXRob3V0IGFzc2lnbmluZyBgKm5ld19tb2RlYCkuIFRoZSBwYXRjaCBpbml0aWFsaXplcyBgbmV3X21vZGVgIHdpdGggYHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldClgIGJlZm9yZSBwYXNzaW5nIGl0cyBwb2ludGVyLlxcblxcbkJlY2F1c2UgdGhpcyBjaGFuZ2UgcmVzb2x2ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLCBpdCBwb3NlcyBubyByaXNrIG9mIGludHJvZHVjaW5nIEtNU0FOLWRldGVjdGFibGUgYnVncy4gU3RhbmRhcmQgdGVzdGluZy9LQVNBTiBpcyBzdWZmaWNpZW50LCBhbmQgc3Bhd25pbmcgYSBkZWRpY2F0ZWQsIHJlc291cmNlLWludGVuc2l2ZSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoKSBpbiBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3X21vZGUgdmFyaWFibGUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gX192c29ja19uZXRfbW9kZV9zdHJpbmcoKSwgcHJldmVudGluZyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWQgd2hlbiB3cml0aW5nIHRvIC9wcm9jL3N5cy9uZXQvdnNvY2svY2hpbGRfbnNfbW9kZSB3aXRoIHplcm8gbGVuZ3RoLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc3lzY3RsIGNvZGUgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NDA6MjguMDk5NDE1NDkyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzY4NzkzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNmJlMDllYTg0NTY1ODg4OGNjODU5MzViMjI1MzM0MDQzN2VlMzYzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDE0OjQwOjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xcbmluZGV4IDYyMmRiZDA0Njc5OTQuLjYxMTYzMzU3YWUzYzQgMTAwNjQ0XFxuLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jXFxuKysrIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXFxuQEAgLTI4NzgsNiArMjg3OCw3IEBAIHN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRuZXQgPSBjb250YWluZXJfb2YodGFibGUtXFx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsIHZzb2NrLmNoaWxkX25zX21vZGUpO1xcbitcXHRuZXdfbW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCk7XFxuIFxcbiBcXHRyZXQgPSBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KSwgXFx1MDAyNm5ld19tb2RlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NDA6MjguNjM3MDc3NDIxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMDI5MTE2NDUwOTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJTWVNDVExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdcIixcbiAgICBcIl9fdnNvY2tfbmV0X21vZGVfc3RyaW5nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKCkgaW4gbmV0L3Ztd192c29jay9hZl92c29jay5jIHRvIGluaXRpYWxpemUgdGhlIG5ld19tb2RlIHZhcmlhYmxlIGJlZm9yZSBwYXNzaW5nIGl0IHRvIF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKCksIHByZXZlbnRpbmcgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkIHdoZW4gd3JpdGluZyB0byAvcHJvYy9zeXMvbmV0L3Zzb2NrL2NoaWxkX25zX21vZGUgd2l0aCB6ZXJvIGxlbmd0aC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIHN5c2N0bCBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjZiZTA5ZWE4NDU2NTg4ODhjYzg1OTM1YjIyNTMzNDA0MzdlZTM2M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDE0OjQwOjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5pbmRleCA2MjJkYmQwNDY3OTk0Li42MTE2MzM1N2FlM2M0IDEwMDY0NFxuLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jXG4rKysgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbkBAIC0yODc4LDYgKzI4NzgsNyBAQCBzdGF0aWMgaW50IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuIFx0aW50IHJldDtcbiBcbiBcdG5ldCA9IGNvbnRhaW5lcl9vZih0YWJsZS1cdTAwM2VkYXRhLCBzdHJ1Y3QgbmV0LCB2c29jay5jaGlsZF9uc19tb2RlKTtcbitcdG5ld19tb2RlID0gdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KTtcbiBcbiBcdHJldCA9IF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zLFxuIFx0XHRcdFx0ICAgICAgdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KSwgXHUwMDI2bmV3X21vZGUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NDA6MjguNjM3MDc4OTUxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzA5NzU2NDMxNjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIHZzb2NrIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgZGlmZiB0aGF0IHRvdWNoZXMgYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AuIFJpZ2h0IGF3YXksIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgVlNPQ0sgaW1wbGVtZW50YXRpb24uIFRoZSBodW5rIG1vZGlmaWVzIHRoZSBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI4NzguIEknbSBnb2luZyB0byBoYXZlIHRvIGluc3BlY3QgdGhhdCBzZWN0aW9uIG9mIGNvZGUgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhpbmdzLiBUaGUgZGlmZiBpbnRyb2R1Y2VzIGEgYG5ld19tb2RlYCB2YXJpYWJsZSBhbmQgYXNzaWducyBhIG5ldyBmdW5jdGlvbiB0byBpdCBjYWxsZWQgYHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldClgLiBJIGltbWVkaWF0ZWx5IGhhdmUgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcyBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCBoZXJlLiBJJ2xsIHByb2JhYmx5IG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgYW5kIG1heWJlIHRyYWNlIGhvdyBgdnNvY2tfbmV0X2NoaWxkX21vZGVgIGlzIHVzZWQgZWxzZXdoZXJlIGluIHRoZSBjb2RlYmFzZS4gTXkgdXN1YWwgYXBwcm9hY2ggd291bGQgYmUgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBJJ20gb2ZmIHRvIGRvIHRoYXQgbm93LiBJJ2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBvdmVyYWxsIGltcGFjdCwgb2YgY291cnNlLCBhbmQgZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBvciBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkxMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjUyOjE4LjM5MzUxNDU5M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMDE3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg2MDpcXHRcXHRcXHRcXHRcXHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4yODYxOlxcdHtcXG4yODYyOlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4yODYzOlxcdFxcbjI4NjQ6XFx0XFx0aWYgKHdyaXRlKVxcbjI4NjU6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4yODY2OlxcdFxcbjI4Njc6XFx0XFx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVxcdTAwM2VkYXRhLCBzdHJ1Y3QgbmV0LCB2c29jay5tb2RlKTtcXG4yODY4OlxcdFxcbjI4Njk6XFx0XFx0cmV0dXJuIF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zLFxcbjI4NzA6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHZzb2NrX25ldF9tb2RlKG5ldCksIE5VTEwpO1xcbjI4NzE6XFx0fVxcbjI4NzI6XFx0XFxuMjg3MzpcXHRzdGF0aWMgaW50IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbjI4NzQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuMjg3NTpcXHR7XFxuMjg3NjpcXHRcXHRlbnVtIHZzb2NrX25ldF9tb2RlIG5ld19tb2RlO1xcbjI4Nzc6XFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbjI4Nzg6XFx0XFx0aW50IHJldDtcXG4yODc5OlxcdFxcbjI4ODA6XFx0XFx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVxcdTAwM2VkYXRhLCBzdHJ1Y3QgbmV0LCB2c29jay5jaGlsZF9uc19tb2RlKTtcXG4yODgxOlxcdFxcdG5ld19tb2RlID0gdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KTtcXG4yODgyOlxcdFxcbjI4ODM6XFx0XFx0cmV0ID0gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxuMjg4NDpcXHRcXHRcXHRcXHRcXHQgICAgICB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpLCBcXHUwMDI2bmV3X21vZGUpO1xcbjI4ODU6XFx0XFx0aWYgKHJldClcXG4yODg2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjg4NzpcXHRcXG4yODg4OlxcdFxcdGlmICh3cml0ZSkge1xcbjI4ODk6XFx0XFx0XFx0LyogUHJldmVudCBhIFxcXCJsb2NhbFxcXCIgbmFtZXNwYWNlIGZyb20gZXNjYWxhdGluZyB0byBcXFwiZ2xvYmFsXFxcIixcXG4yODkwOlxcdFxcdFxcdCAqIHdoaWNoIHdvdWxkIGdpdmUgbmVzdGVkIG5hbWVzcGFjZXMgYWNjZXNzIHRvIGdsb2JhbCBDSURzLlxcbjI4OTE6XFx0XFx0XFx0ICovXFxuMjg5MjpcXHRcXHRcXHRpZiAodnNvY2tfbmV0X21vZGUobmV0KSA9PSBWU09DS19ORVRfTU9ERV9MT0NBTCBcXHUwMDI2XFx1MDAyNlxcbjI4OTM6XFx0XFx0XFx0ICAgIG5ld19tb2RlID09IFZTT0NLX05FVF9NT0RFX0dMT0JBTClcXG4yODk0OlxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMjg5NTpcXHRcXG4yODk2OlxcdFxcdFxcdGlmICghdnNvY2tfbmV0X3NldF9jaGlsZF9tb2RlKG5ldCwgbmV3X21vZGUpKVxcbjI4OTc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yODk4OlxcdFxcdH1cXG4yODk5OlxcdFxcbjI5MDA6XFx0XFx0cmV0dXJuIDA7XFxuMjkwMTpcXHR9XFxuMjkwMjpcXHRcXG4yOTAzOlxcdHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XFxuMjkwNDpcXHRcXHR7XFxuMjkwNTpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJuc19tb2RlXFxcIixcXG4yOTA2OlxcdFxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2aW5pdF9uZXQudnNvY2subW9kZSxcXG4yOTA3OlxcdFxcdFxcdC5tYXhsZW5cXHRcXHQ9IFZTT0NLX05FVF9NT0RFX1NUUl9NQVgsXFxuMjkwODpcXHRcXHRcXHQubW9kZVxcdFxcdD0gMDQ0NCxcXG4yOTA5OlxcdFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHZzb2NrX25ldF9tb2RlX3N0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1MjoxOC4zOTM4NDc4NzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzA3ODA3NDM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBEZWVwZXIgaW50byB2c29jayBOZXR3b3JraW5nKipcblxuQWxyaWdodCwgSSdtIGFscmVhZHkgZGVlcCBpbiB0aGlzIGB2c29ja2AgY29kZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGZ1bGx5IGdyYXNwaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBgbmV3X21vZGVgIHZhcmlhYmxlLiBUaGUgZG9jdW1lbnRhdGlvbiBtZW50aW9ucyBob3cgaXQncyB1c2VkLCBidXQgSSBuZWVkIHRvIHNlZSBpdCBpbiBhY3Rpb24sIHRvby4gSSB3YW50IHRvIGluc3BlY3QgaG93IGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AgYWN0dWFsbHkgbGV2ZXJhZ2VzIGBuZXdfbW9kZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgbW9kZSBjaGFuZ2VzIGFuZCBob3cgdGhlIHVuZGVybHlpbmcgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvbiB0aGlzLiBJIGJldCB0aGVyZSdzIHNvbWUgaW50ZXJlc3RpbmcgbG9naWMgZW1iZWRkZWQgaW4gaG93IGBuZXdfbW9kZWAgdHJhbnNsYXRlcyBpbnRvIG5ldHdvcmsgYmVoYXZpb3IsIGFuZCB0aGlzIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AgZnVuY3Rpb24gc2VlbXMgbGlrZSBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHBvdGVudGlhbCBlZGdlIGNhc2VzIGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24uIExldCdzIHNlZSBob3cgdGhleSB3b3JrIHRvZ2V0aGVyIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBuZXR3b3JrIG1vZGUgaXMgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mjg5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1Mjo0MS40NzE5MjUzNjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTExODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Ztd192c29jay9hZl92c29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4MzA6XFx0XFx0XFx0XFx0cCA9IFZTT0NLX05FVF9NT0RFX1NUUl9MT0NBTDtcXG4yODMxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4MzI6XFx0XFx0XFx0ZGVmYXVsdDpcXG4yODMzOlxcdFxcdFxcdFxcdFdBUk5fT05DRSh0cnVlLCBcXFwibmV0bnMgaGFzIGludmFsaWQgdnNvY2sgbW9kZVxcXCIpO1xcbjI4MzQ6XFx0XFx0XFx0XFx0KmxlbnAgPSAwO1xcbjI4MzU6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjgzNjpcXHRcXHRcXHR9XFxuMjgzNzpcXHRcXG4yODM4OlxcdFxcdFxcdHN0cnNjcHkoZGF0YSwgcCwgc2l6ZW9mKGRhdGEpKTtcXG4yODM5OlxcdFxcdFxcdHRtcC5tYXhsZW4gPSBzdHJsZW4ocCk7XFxuMjg0MDpcXHRcXHR9XFxuMjg0MTpcXHRcXG4yODQyOlxcdFxcdHJldCA9IHByb2NfZG9zdHJpbmcoXFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxuMjg0MzpcXHRcXHRpZiAocmV0IHx8ICF3cml0ZSlcXG4yODQ0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjg0NTpcXHRcXG4yODQ2OlxcdFxcdGlmICgqbGVucCBcXHUwMDNlPSBzaXplb2YoZGF0YSkpXFxuMjg0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yODQ4OlxcdFxcbjI4NDk6XFx0XFx0aWYgKCFzdHJuY21wKGRhdGEsIFZTT0NLX05FVF9NT0RFX1NUUl9HTE9CQUwsIHNpemVvZihkYXRhKSkpXFxuMjg1MDpcXHRcXHRcXHQqbmV3X21vZGUgPSBWU09DS19ORVRfTU9ERV9HTE9CQUw7XFxuMjg1MTpcXHRcXHRlbHNlIGlmICghc3RybmNtcChkYXRhLCBWU09DS19ORVRfTU9ERV9TVFJfTE9DQUwsIHNpemVvZihkYXRhKSkpXFxuMjg1MjpcXHRcXHRcXHQqbmV3X21vZGUgPSBWU09DS19ORVRfTU9ERV9MT0NBTDtcXG4yODUzOlxcdFxcdGVsc2VcXG4yODU0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI4NTU6XFx0XFxuMjg1NjpcXHRcXHRyZXR1cm4gMDtcXG4yODU3OlxcdH1cXG4yODU4OlxcdFxcbjI4NTk6XFx0c3RhdGljIGludCB2c29ja19uZXRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4yODYwOlxcdFxcdFxcdFxcdFxcdCB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbjI4NjE6XFx0e1xcbjI4NjI6XFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbjI4NjM6XFx0XFxuMjg2NDpcXHRcXHRpZiAod3JpdGUpXFxuMjg2NTpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjI4NjY6XFx0XFxuMjg2NzpcXHRcXHRuZXQgPSBjb250YWluZXJfb2YodGFibGUtXFx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsIHZzb2NrLm1vZGUpO1xcbjI4Njg6XFx0XFxuMjg2OTpcXHRcXHRyZXR1cm4gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjUyOjQxLjQ3MjExOTgzN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1MTU4MDgyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVjZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzb21ldGhpbmcganVtcHMgb3V0IGF0IG1lOiBgbmV3X21vZGVgIHdpdGhpbiBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYCB3YXMgdG90YWxseSB1bmluaXRpYWxpemVkIGJlZm9yZSB0aGlzIHBhdGNoLiBUaGF0J3MgYSBjbGFzc2ljIGJ1ZyB3YWl0aW5nIHRvIGhhcHBlbiEgTm93LCBsZXQgbWUgc2VlLi4uIFdhaXQgYSBtaW51dGUsIGluIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AsIGlmIGB3cml0ZWAgaXMgZmFsc2UsIGl0ICpyZXR1cm5zKiBiZWZvcmUgYWN0dWFsbHkgc2V0dGluZyBgKm5ld19tb2RlYC4gQnV0IHRoZW4sIGluIGB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdgLCB0aGUgY29kZSBleHBsaWNpdGx5ICpjaGVja3MqIGBpZiAod3JpdGUpYC4gVGhpcyBpcyBtYWtpbmcgbWUgc3RhcnQgdG8gcXVlc3Rpb24gdGhlIG92ZXJhbGwgbG9naWMgaGVyZS5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhleSBhZGRlZCBgbmV3X21vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpO2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgY3J1Y2lhbCBhZGRpdGlvbi4gQ2xlYXJseSwgc29tZXRoaW5nIHdhcyBmdW5kYW1lbnRhbGx5IHdyb25nIHRoYXQgbmVlZGVkIHRvIGJlIGFkZHJlc3NlZCBoZXJlLiBJIG5lZWQgc29tZSBjb250ZXh0LiBBbHJpZ2h0LCB0aW1lIHRvIGdvIGRpZ2dpbmcuIEknbGwgY2hlY2sgdGhlIGBnaXQgbG9nYCBvciBjb21taXQgbWVzc2FnZS4gSG9wZWZ1bGx5LCB0aGUgYXV0aG9yIHByb3ZpZGVkIHNvbWUgaGVscGZ1bCBleHBsYW5hdGlvbi4gSWYgdGhhdCdzIG5vdCBlbm91Z2gsIEknbGwgbmVlZCB0byBnbyBkZWVwZXIgaW50byBgX192c29ja19uZXRfbW9kZV9zdHJpbmdgIHRvIHNlZSB3aGF0IEknbSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTYzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTI6NDQuOTg3OTMyNjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTcwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Ztd192c29jay9hZl92c29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4MTA6XFx0XFx0Y2hhciBkYXRhW1ZTT0NLX05FVF9NT0RFX1NUUl9NQVhdID0gezB9O1xcbjI4MTE6XFx0XFx0c3RydWN0IGN0bF90YWJsZSB0bXA7XFxuMjgxMjpcXHRcXHRpbnQgcmV0O1xcbjI4MTM6XFx0XFxuMjgxNDpcXHRcXHRpZiAoIXRhYmxlLVxcdTAwM2VkYXRhIHx8ICF0YWJsZS1cXHUwMDNlbWF4bGVuIHx8ICEqbGVucCkge1xcbjI4MTU6XFx0XFx0XFx0KmxlbnAgPSAwO1xcbjI4MTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjgxNzpcXHRcXHR9XFxuMjgxODpcXHRcXG4yODE5OlxcdFxcdHRtcCA9ICp0YWJsZTtcXG4yODIwOlxcdFxcdHRtcC5kYXRhID0gZGF0YTtcXG4yODIxOlxcdFxcbjI4MjI6XFx0XFx0aWYgKCF3cml0ZSkge1xcbjI4MjM6XFx0XFx0XFx0Y29uc3QgY2hhciAqcDtcXG4yODI0OlxcdFxcbjI4MjU6XFx0XFx0XFx0c3dpdGNoIChtb2RlKSB7XFxuMjgyNjpcXHRcXHRcXHRjYXNlIFZTT0NLX05FVF9NT0RFX0dMT0JBTDpcXG4yODI3OlxcdFxcdFxcdFxcdHAgPSBWU09DS19ORVRfTU9ERV9TVFJfR0xPQkFMO1xcbjI4Mjg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjgyOTpcXHRcXHRcXHRjYXNlIFZTT0NLX05FVF9NT0RFX0xPQ0FMOlxcbjI4MzA6XFx0XFx0XFx0XFx0cCA9IFZTT0NLX05FVF9NT0RFX1NUUl9MT0NBTDtcXG4yODMxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4MzI6XFx0XFx0XFx0ZGVmYXVsdDpcXG4yODMzOlxcdFxcdFxcdFxcdFdBUk5fT05DRSh0cnVlLCBcXFwibmV0bnMgaGFzIGludmFsaWQgdnNvY2sgbW9kZVxcXCIpO1xcbjI4MzQ6XFx0XFx0XFx0XFx0KmxlbnAgPSAwO1xcbjI4MzU6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjgzNjpcXHRcXHRcXHR9XFxuMjgzNzpcXHRcXG4yODM4OlxcdFxcdFxcdHN0cnNjcHkoZGF0YSwgcCwgc2l6ZW9mKGRhdGEpKTtcXG4yODM5OlxcdFxcdFxcdHRtcC5tYXhsZW4gPSBzdHJsZW4ocCk7XFxuMjg0MDpcXHRcXHR9XFxuMjg0MTpcXHRcXG4yODQyOlxcdFxcdHJldCA9IHByb2NfZG9zdHJpbmcoXFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxuMjg0MzpcXHRcXHRpZiAocmV0IHx8ICF3cml0ZSlcXG4yODQ0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjUyOjQ0Ljk4ODI1NTI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzI5MjgyMDM3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoIEZ1enppbmc/KipcblxuT2theSwgc28gSSd2ZSBzcG90dGVkIGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgaXNzdWUuIExpbmUgMjgxNCBjYXVnaHQgbXkgZXllOiB0aGVyZSdzIGEgY29uZGl0aW9uYWwgY2hlY2sgZm9yIGAqbGVucGAgaW4gdGhlIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AgZnVuY3Rpb24uIElmIGAqbGVucGAgaXMgemVybyB3aGVuIGB3cml0ZWAgaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgd2l0aG91dCBzZXR0aW5nIGAqbmV3X21vZGVgLiBMYXRlciwgaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AsIGBuZXdfbW9kZWAgaXMgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZC4gS01TQU4gb3IgdGhlIGNvbXBpbGVyIHdvdWxkIGRlZmluaXRlbHkgZmxhZyB0aGF0LiBGaXhpbmcgaXQgYnkgaW5pdGlhbGl6aW5nIGBuZXdfbW9kZWAgaXMgdGhlIHdheSB0byBnby5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBkb2VzIHRoaXMgcGF0Y2ggd2FycmFudCBmdXp6aW5nIGFjY29yZGluZyB0byB0aG9zZSBjcml0ZXJpYT8gIExldCdzIGJyZWFrIGl0IGRvd246IFRoZSBnb2FsIGlzIHRvIGNhdGNoIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBvciBhbnkgbmV3bHkgZXhwb3NlZCBidWdzLiBXZSdyZSBsb29raW5nIGF0IFwicmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZVwiIHNwZWNpZmljYWxseS5cblxuVGhlIGNyaXRlcmlhIHNheSAqbm90KiB0byBmdXp6OiBtb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCB1c2VyLXNwYWNlIHRvb2xzLCBsb2dnaW5nIHRoYXQgZG9lc24ndCBhZmZlY3QgY29udHJvbCBmbG93LCBidWlsZCBzeXN0ZW0gY2hhbmdlcyB0aGF0IGRvbid0IGNoYW5nZSBDIGxvZ2ljLCBoYXJkd2FyZSB0aGF0J3Mgbm90IGVtdWxhdGVkLCBvciB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuXG5cbkJ1dCB0aGV5ICpkbyogc2F5IHRvIGZ1eno6IGNvcmUgc3Vic3lzdGVtcyBsaWtlIG5ldHdvcmtpbmcsIHJlZmFjdG9yaW5ncyBvZiByZWFjaGFibGUgY29kZSwgcnVudGltZSBhc3NlcnRpb25zLCBhbmQgcmVhY2hhYmxlIGRyaXZlcnMvcHJvdG9jb2xzLlxuXG5UaGlzIHBhdGNoIHRvdWNoZXMgYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AsIHdoaWNoIGlzIGNvcmUgbmV0d29ya2luZyDigJMgc3BlY2lmaWNhbGx5LCB2c29jayBzb2NrZXQgYW5kIHN5c2N0bCBoYW5kbGluZy4gICpJcyogaXQgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gIFllcyEgIFRoZSBgdnNvY2tfdGFibGVgIGlzIHJlZ2lzdGVyZWQgdmlhIHN5c2N0bCBhbmQgcHJvY2ZzIGF0IGAvcHJvYy9zeXMvbmV0L3Zzb2NrLy4uLmAsIHdoaWNoICppcyogcmVhY2hhYmxlLiBUaGlzIG1lYW5zIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDgxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjUzOjE3LjkxNjQ2MTQ5N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4MjY5NDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZzb2NrX3RhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC92bXdfdnNvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNDc9RVhQT1JUX1NZTUJPTF9HUEwodnNvY2tfY29ubmVjdGVkX3RhYmxlKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQ4OkRFRklORV9TUElOTE9DSyh2c29ja190YWJsZV9sb2NrKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQ5OkVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX3RhYmxlX2xvY2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTAtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzQyPXN0YXRpYyB2b2lkIHZzb2NrX2luc2VydF91bmJvdW5kKHN0cnVjdCB2c29ja19zb2NrICp2c2spXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM0My17XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjM0NDpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNDUtXFx0X192c29ja19pbnNlcnRfYm91bmQodnNvY2tfdW5ib3VuZF9zb2NrZXRzLCB2c2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozNDY6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNDctfVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTM0OT12b2lkIHZzb2NrX2luc2VydF9jb25uZWN0ZWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaylcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNTMtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjM1NDpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNTUtXFx0X192c29ja19pbnNlcnRfY29ubmVjdGVkKGxpc3QsIHZzayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjM1NjpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM1Ny19XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzYwPXZvaWQgdnNvY2tfcmVtb3ZlX2JvdW5kKHN0cnVjdCB2c29ja19zb2NrICp2c2spXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM2MS17XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjM2MjpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNjMtXFx0aWYgKF9fdnNvY2tfaW5fYm91bmRfdGFibGUodnNrKSlcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzY0LVxcdFxcdF9fdnNvY2tfcmVtb3ZlX2JvdW5kKHZzayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjM2NTpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM2Ni19XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzY5PXZvaWQgdnNvY2tfcmVtb3ZlX2Nvbm5lY3RlZChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNzAte1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozNzE6XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ2c29ja190YWJsZV9sb2NrKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzcyLVxcdGlmIChfX3Zzb2NrX2luX2Nvbm5lY3RlZF90YWJsZSh2c2spKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNzMtXFx0XFx0X192c29ja19yZW1vdmVfY29ubmVjdGVkKHZzayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjM3NDpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM3NS19XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzgzPXN0cnVjdCBzb2NrICp2c29ja19maW5kX2JvdW5kX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICphZGRyLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM4Ny1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mzg4OlxcdHNwaW5fbG9ja19iaChcXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTM4OS1cXHRzayA9IF9fdnNvY2tfZmluZF9ib3VuZF9zb2NrZXRfbmV0KGFkZHIsIG5ldCk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzkyLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozOTM6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zOTQtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9NDE1PXN0cnVjdCBzb2NrICp2c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXRfbmV0KHN0cnVjdCBzb2NrYWRkcl92bSAqc3JjLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTQyMC1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6NDIxOlxcdHNwaW5fbG9ja19iaChcXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTQyMi1cXHRzayA9IF9fdnNvY2tfZmluZF9jb25uZWN0ZWRfc29ja2V0X25ldChzcmMsIGRzdCwgbmV0KTtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00MjUtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjQyNjpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTQyNy1cXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz00NTQ9dm9pZCB2c29ja19mb3JfZWFjaF9jb25uZWN0ZWRfc29ja2V0KHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00NTgtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjQ1OTpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00NjAtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNDcxLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo0NzI6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00NzMtfVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTg2OT1zdGF0aWMgaW50IF9fdnNvY2tfYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcilcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy04ODgtXFx0Y2FzZSBTT0NLX1NFUVBBQ0tFVDpcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6ODg5OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dnNvY2tfdGFibGVfbG9jayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTg5MC1cXHRcXHRyZXR2YWwgPSBfX3Zzb2NrX2JpbmRfY29ubmVjdGlibGUodnNrLCBhZGRyKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6ODkxOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ2c29ja190YWJsZV9sb2NrKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtODkyLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI4NzM9c3RhdGljIGludCB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTAyLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTAzOnN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MDQtXFx0e1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI5Mjk9c3RhdGljIGludCBfX25ldF9pbml0IHZzb2NrX3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkzMy1cXHRpZiAobmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSkge1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTM0OlxcdFxcdHRhYmxlID0gdnNvY2tfdGFibGU7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MzUtXFx0fSBlbHNlIHtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjkzNjpcXHRcXHR0YWJsZSA9IGttZW1kdXAodnNvY2tfdGFibGUsIHNpemVvZih2c29ja190YWJsZSksIEdGUF9LRVJORUwpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTM3LVxcdFxcdGlmICghdGFibGUpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjk0NS1cXHRuZXQtXFx1MDAzZXZzb2NrLnN5c2N0bF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXFxcIm5ldC92c29ja1xcXCIsIHRhYmxlLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTQ2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBBUlJBWV9TSVpFKHZzb2NrX3RhYmxlKSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NDctXFx0aWYgKCFuZXQtXFx1MDAzZXZzb2NrLnN5c2N0bF9oZHIpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2RpYWcuYz0xND1zdGF0aWMgaW50IHNrX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2RpYWcuYy0yOS1cXHQvKiBMb2NrIG9yZGVyIGRpY3RhdGVzIHRoYXQgc2tfbG9jayBpcyBhY3F1aXJlZCBiZWZvcmVcXG5uZXQvdm13X3Zzb2NrL2RpYWcuYzozMDpcXHQgKiB2c29ja190YWJsZV9sb2NrLCBzbyB3ZSBjYW5ub3QgbG9jayBoZXJlLiAgU2ltcGx5IGRvbid0IHRha2VcXG5uZXQvdm13X3Zzb2NrL2RpYWcuYzozMTpcXHQgKiBza19sb2NrOyBzayBpcyBndWFyYW50ZWVkIHRvIHN0YXkgYWxpdmUgc2luY2UgdnNvY2tfdGFibGVfbG9jayBpc1xcbm5ldC92bXdfdnNvY2svZGlhZy5jLTMyLVxcdCAqIGhlbGQuXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2RpYWcuYz00OD1zdGF0aWMgaW50IHZzb2NrX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2RpYWcuYy02Ny1cXG5uZXQvdm13X3Zzb2NrL2RpYWcuYzo2ODpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZzb2NrX3RhYmxlX2xvY2spO1xcbm5ldC92bXdfdnNvY2svZGlhZy5jLTY5LVxcbi0tXFxubmV0L3Ztd192c29jay9kaWFnLmMtMTMxLWRvbmU6XFxubmV0L3Ztd192c29jay9kaWFnLmM6MTMyOlxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ2c29ja190YWJsZV9sb2NrKTtcXG5uZXQvdm13X3Zzb2NrL2RpYWcuYy0xMzMtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz00MTM9c3RhdGljIHZvaWQgdmlydGlvX3Zzb2NrX3Jlc2V0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNDE1LVxcdC8qIHZtY2lfdHJhbnNwb3J0LmMgZG9lc24ndCB0YWtlIHNrX2xvY2sgaGVyZSBlaXRoZXIuICBBdCBsZWFzdCB3ZSdyZVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjQxNjpcXHQgKiB1bmRlciB2c29ja190YWJsZV9sb2NrIHNvIHRoZSBzb2NrIGNhbm5vdCBkaXNhcHBlYXIgd2hpbGUgd2UncmVcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy00MTctXFx0ICogZXhlY3V0aW5nLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1MzoxOC40MzQ3MzYxNTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzAxMzQ0NDEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipEZWx2aW5nIGludG8gdnNvY2sgTmFtZXNwYWNlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYHZzb2NrYCBoYW5kbGVzIG5hbWVzcGFjZXMuIE15IGluaXRpYWwgcG9pbnQgb2YgcmVmZXJlbmNlIGlzIHRoZSBgdnNvY2tfdGFibGVgIGRhdGEgc3RydWN0dXJlLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgZmllbGRzIGBjaGlsZF9uc19tb2RlYCBhbmQgYG5zX21vZGVgLiBUaG9zZSBhcmUgdGhlIGtleSBpbmRpY2F0b3JzIG9mIHdoYXQgbmFtZXNwYWNlcyBhcmUgaW52b2x2ZWQgYW5kIGhvdy5cblxuVG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24sIEnigJltIHplcm9pbmcgaW4gb24gbGluZXMgMjkwMyB0aHJvdWdoIDI5MzAgb2YgYGFmX3Zzb2NrLmNgLiBUaGF04oCZcyB3aGVyZSB0aGUgbmFtZXNwYWNlIG1vZGUgbG9naWMgaXMgbGlrZWx5IGltcGxlbWVudGVkIGluIG1vcmUgZGV0YWlsIGFuZCBJIHNob3VsZCBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZSBtb2RlcyBhcmUgc2V0LCBob3cgdGhleSBpbnRlcmFjdCwgYW5kIHdoYXQgc2l0dWF0aW9ucyB0cmlnZ2VyIHBhcnRpY3VsYXIgYmVoYXZpb3JzLiBJIGV4cGVjdCB0byBzZWUgdGhlIGtleSBjaGVja3MgYW5kIGNvbmRpdGlvbmFscyBnb3Zlcm5pbmcgdGhlIG5hbWVzcGFjZSB0cmFuc2l0aW9ucyBvciBsaW1pdGF0aW9ucy4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlYWwgbWFnaWMgKG9yIHBvdGVudGlhbCBnb3RjaGFzISkgYXJlIGhhcHBlbmluZy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjEwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTM6MjUuNDQ4MTgzMTk0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5ODE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwMyxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjkwMzpcXHRzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xcbjI5MDQ6XFx0XFx0e1xcbjI5MDU6XFx0XFx0XFx0LnByb2NuYW1lXFx0PSBcXFwibnNfbW9kZVxcXCIsXFxuMjkwNjpcXHRcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LnZzb2NrLm1vZGUsXFxuMjkwNzpcXHRcXHRcXHQubWF4bGVuXFx0XFx0PSBWU09DS19ORVRfTU9ERV9TVFJfTUFYLFxcbjI5MDg6XFx0XFx0XFx0Lm1vZGVcXHRcXHQ9IDA0NDQsXFxuMjkwOTpcXHRcXHRcXHQucHJvY19oYW5kbGVyXFx0PSB2c29ja19uZXRfbW9kZV9zdHJpbmdcXG4yOTEwOlxcdFxcdH0sXFxuMjkxMTpcXHRcXHR7XFxuMjkxMjpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJjaGlsZF9uc19tb2RlXFxcIixcXG4yOTEzOlxcdFxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2aW5pdF9uZXQudnNvY2suY2hpbGRfbnNfbW9kZSxcXG4yOTE0OlxcdFxcdFxcdC5tYXhsZW5cXHRcXHQ9IFZTT0NLX05FVF9NT0RFX1NUUl9NQVgsXFxuMjkxNTpcXHRcXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG4yOTE2OlxcdFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ1xcbjI5MTc6XFx0XFx0fSxcXG4yOTE4OlxcdFxcdHtcXG4yOTE5OlxcdFxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcImcyaF9mYWxsYmFja1xcXCIsXFxuMjkyMDpcXHRcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LnZzb2NrLmcyaF9mYWxsYmFjayxcXG4yOTIxOlxcdFxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihpbnQpLFxcbjI5MjI6XFx0XFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuMjkyMzpcXHRcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvaW50dmVjX21pbm1heCxcXG4yOTI0OlxcdFxcdFxcdC5leHRyYTFcXHRcXHQ9IFNZU0NUTF9aRVJPLFxcbjI5MjU6XFx0XFx0XFx0LmV4dHJhMlxcdFxcdD0gU1lTQ1RMX09ORSxcXG4yOTI2OlxcdFxcdH0sXFxuMjkyNzpcXHR9O1xcbjI5Mjg6XFx0XFxuMjkyOTpcXHRzdGF0aWMgaW50IF9fbmV0X2luaXQgdnNvY2tfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcXG4yOTMwOlxcdHtcXG4yOTMxOlxcdFxcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xcbjI5MzI6XFx0XFxuMjkzMzpcXHRcXHRpZiAobmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSkge1xcbjI5MzQ6XFx0XFx0XFx0dGFibGUgPSB2c29ja190YWJsZTtcXG4yOTM1OlxcdFxcdH0gZWxzZSB7XFxuMjkzNjpcXHRcXHRcXHR0YWJsZSA9IGttZW1kdXAodnNvY2tfdGFibGUsIHNpemVvZih2c29ja190YWJsZSksIEdGUF9LRVJORUwpO1xcbjI5Mzc6XFx0XFx0XFx0aWYgKCF0YWJsZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTM6MjUuNDQ4NDg0Nzg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4OTg5NzQyMzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmNlcm5zIFJlZ2FyZGluZyBgL3Byb2Mvc3lzL25ldC92c29jay9jaGlsZF9uc19tb2RlYCoqXG5cbk9rYXksIGhlcmUncyB3aGF0J3MgaW1tZWRpYXRlbHkgY29uY2VybmluZzogSSBzZWUgdGhhdCBgL3Byb2Mvc3lzL25ldC92c29jay9jaGlsZF9uc19tb2RlYCBpcyB3cml0YWJsZSBhbmQgaGFzIG1vZGUgMDY0NC4gVGhhdCdzIGEgaHVnZSByZWQgZmxhZyByaWdodCBvZmYgdGhlIGJhdC4gVGhlIGZhY3QgdGhhdCB1c2Vyc3BhY2UgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhpcyBzeXNjdGwgaXMgcHJvYmxlbWF0aWMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGVuIHVzZXJzcGFjZSB3cml0ZXMgdG8gYC9wcm9jL3N5cy9uZXQvdnNvY2svY2hpbGRfbnNfbW9kZWAsIGl0IHRyaWdnZXJzIGEgZGlyZWN0IGNhbGwgdG8gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AuIEFuZCB0aGF0J3MuLi4gdGhhdCdzIGEgZGlyZWN0IGVudHJ5IHBvaW50IGludG8gdGhlIGNvcmUgdnNvY2sgbmV0d29ya2luZyBjb2RlLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgcGF0aCB0aGF0J3MgZWFzaWx5IGFjY2Vzc2libGUgZnJvbSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kLCBjcml0aWNhbGx5LCBmcm9tIHN5emthbGxlciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gcmlnaHQgbm93IGlzIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYCBmdW5jdGlvbiBpdHNlbGYuIE1vZGlmeWluZyB0aGUgY29uZmlndXJhdGlvbiB2aWEgdGhpcyBzeXNjdGwgaXMgZXNzZW50aWFsbHkgY2hhbmdpbmcgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgbmV0d29ya2luZy92c29jayBjb3JlLCBhbmQgdGhhdCBvcGVucyB0aGUgZG9vciB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIGEgdmVjdG9yIHRvIHBvdGVudGlhbGx5IGV4cGxvaXQgYW55IGJ1Z3MsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblNvLCBsZXQncyBzdG9wIGFuZCB2ZXJpZnkgd2hhdCBLY29uZmlnIGVuYWJsZXMgYGFmX3Zzb2NrLmNgIGFuZCB0YWtlIGEgZGVlcCBicmVhdGguIFRpbWUgZm9yIHNvbWUgbW9yZSBpbnZlc3RpZ2F0aW9uIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA4NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjUzOjU0LjQzODIzMDI0MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU5MDA0ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZfdnNvY2tcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Ztd192c29jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay9NYWtlZmlsZT04PW9iai0kKENPTkZJR19WU09DS0VUU19MT09QQkFDSykgKz0gdnNvY2tfbG9vcGJhY2sub1xcbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtOS1cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjEwOnZzb2NrLXkgKz0gYWZfdnNvY2subyBhZl92c29ja190YXAubyB2c29ja19hZGRyLm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTExLXZzb2NrLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB2c29ja19icGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1Mzo1NC41MzQxMzU5NjNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE3NDcxMDE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgdGhlIHZzb2NrIE1ha2VmaWxlKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBuZXQvdm13X3Zzb2NrL01ha2VmaWxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhpcyB2c29jayBtb2R1bGUsIHNvIGxldCdzIHN0YXJ0IHdpdGggYSBxdWljayBza2ltIG9mIHRoZSBmaXJzdCAxNSBsaW5lcy4gVGhpcyB1c3VhbGx5IGdpdmVzIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgY29yZSB2YXJpYWJsZXMsIGluY2x1ZGVkIGRpcmVjdG9yaWVzLCBhbmQgYW55IGltbWVkaWF0ZSBmbGFncyB0aGF0IGFyZSBzZXQuIEkgZXhwZWN0IHRvIHNlZSB0aGUgdHlwaWNhbCBrZXJuZWwgbW9kdWxlIHNldHVwOiBwcm9iYWJseSBzZXR0aW5nIHVwIGBvYmotbWAsIG1heWJlIHNvbWUgaW5jbHVkZSBwYXRocywgYW5kIGRlZmluaXRpb25zIGZvciBzb3VyY2UgZmlsZXMuIEFueXRoaW5nIHVudXN1YWwsIGxpa2Ugc3BlY2lmaWMgY29tcGlsZXIgZmxhZ3Mgb3IgY29uZGl0aW9uYWwgbG9naWMsIHdpbGwgaW1tZWRpYXRlbHkgY2F0Y2ggbXkgZXllIGFuZCB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY5MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjUzOjU2LjcwODg0ODg3M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0b2JqLSQoQ09ORklHX1ZTT0NLRVRTKSArPSB2c29jay5vXFxuICAgMzpcXHRvYmotJChDT05GSUdfVlNPQ0tFVFNfRElBRykgKz0gdnNvY2tfZGlhZy5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfVk1XQVJFX1ZNQ0lfVlNPQ0tFVFMpICs9IHZtd192c29ja192bWNpX3RyYW5zcG9ydC5vXFxuICAgNTpcXHRvYmotJChDT05GSUdfVklSVElPX1ZTT0NLRVRTKSArPSB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydC5vXFxuICAgNjpcXHRvYmotJChDT05GSUdfVklSVElPX1ZTT0NLRVRTX0NPTU1PTikgKz0gdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19IWVBFUlZfVlNPQ0tFVFMpICs9IGh2X3NvY2sub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX1ZTT0NLRVRTX0xPT1BCQUNLKSArPSB2c29ja19sb29wYmFjay5vXFxuICAgOTpcXHRcXG4gIDEwOlxcdHZzb2NrLXkgKz0gYWZfdnNvY2subyBhZl92c29ja190YXAubyB2c29ja19hZGRyLm9cXG4gIDExOlxcdHZzb2NrLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB2c29ja19icGYub1xcbiAgMTI6XFx0XFxuICAxMzpcXHR2c29ja19kaWFnLXkgKz0gZGlhZy5vXFxuICAxNDpcXHRcXG4gIDE1OlxcdHZtd192c29ja192bWNpX3RyYW5zcG9ydC15ICs9IHZtY2lfdHJhbnNwb3J0Lm8gdm1jaV90cmFuc3BvcnRfbm90aWZ5Lm8gXFxcXFxcbiAgMTY6XFx0XFx0dm1jaV90cmFuc3BvcnRfbm90aWZ5X3FzdGF0ZS5vXFxuICAxNzpcXHRcXG4gIDE4OlxcdHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0LXkgKz0gdmlydGlvX3RyYW5zcG9ydC5vXFxuICAxOTpcXHRcXG4gIDIwOlxcdHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi15ICs9IHZpcnRpb190cmFuc3BvcnRfY29tbW9uLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTM6NTYuNzA4OTQ2NDEzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc1NjU3NzQ1OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSB2c29jayBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYENPTkZJR19WU09DS0VUU2AgaXMgcmVzcG9uc2libGUgZm9yIGNvbXBpbGluZyBgdnNvY2sub2AsIGFuZCB0aGF0IGluIHR1cm4gcHVsbHMgaW4gYGFmX3Zzb2NrLm9gLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX1ZTT0NLRVRTYCB0byBzZWUgd2hhdCBlbHNlIG1pZ2h0IGJlIHJlcXVpcmVkIG9yIHBvdGVudGlhbGx5IGltcGFjdGluZyB0aGlzIG1vZHVsZS4gTGV0J3MgZGl2ZSBpbnRvIGBuZXQvdm13X3Zzb2NrL0tjb25maWdgIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBkZXRhaWxzIHRlbGwgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzM2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1NDowNC4yNzQ3MjU4ODNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC92bXdfdnNvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBWc29jayBwcm90b2NvbFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgVlNPQ0tFVFNcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldCBwcm90b2NvbFxcXCJcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgVmlydHVhbCBTb2NrZXQgUHJvdG9jb2wgaXMgYSBzb2NrZXQgcHJvdG9jb2wgc2ltaWxhciB0byBUQ1AvSVBcXG4gIDEwOlxcdFxcdCAgYWxsb3dpbmcgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIFZpcnR1YWwgTWFjaGluZXMgYW5kIGh5cGVydmlzb3JcXG4gIDExOlxcdFxcdCAgb3IgaG9zdC5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBZb3Ugc2hvdWxkIGFsc28gc2VsZWN0IG9uZSBvciBtb3JlIGh5cGVydmlzb3Itc3BlY2lmaWMgdHJhbnNwb3J0c1xcbiAgMTQ6XFx0XFx0ICBiZWxvdy5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICAxNzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHZzb2NrLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgVlNPQ0tFVFNfRElBR1xcbiAgMjA6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4gIDIxOlxcdFxcdGRlcGVuZHMgb24gVlNPQ0tFVFNcXG4gIDIyOlxcdFxcdGRlZmF1bHQgeVxcbiAgMjM6XFx0XFx0aGVscFxcbiAgMjQ6XFx0XFx0ICBTdXBwb3J0IGZvciBQRl9WU09DSyBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXFxuICAyNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICAyNjpcXHRcXG4gIDI3OlxcdFxcdCAgRW5hYmxlIHRoaXMgbW9kdWxlIHNvIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgY2FuIHF1ZXJ5IG9wZW4gc29ja2V0cy5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXFxuICAzMDpcXHRcXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXRzIGxvb3BiYWNrIHRyYW5zcG9ydFxcXCJcXG4gIDMxOlxcdFxcdGRlcGVuZHMgb24gVlNPQ0tFVFNcXG4gIDMyOlxcdFxcdGRlZmF1bHQgeVxcbiAgMzM6XFx0XFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cXG4gIDM0OlxcdFxcdGhlbHBcXG4gIDM1OlxcdFxcdCAgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIGxvb3BiYWNrIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzLFxcbiAgMzY6XFx0XFx0ICB1c2luZyB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydF9jb21tb24uXFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMzk6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB2c29ja19sb29wYmFjay4gSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1NDowNC4yNzQ5MDQ3MzNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTYxMzAyODE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgSGllcmFyY2h5KipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBzb3VyY2UgXCJuZXQvdm13X3Zzb2NrL0tjb25maWdcImAgbGluZSBsaXZlcyBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIHN5c3RlbS4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gc3RhcnQgYXQgdGhlIHRvcCwgb3IgYXQgbGVhc3QgYSByZWFzb25hYmx5IGhpZ2gtbGV2ZWwgS2NvbmZpZyBmaWxlLiBJJ2xsIGNoZWNrIGBuZXQvS2NvbmZpZ2AgZmlyc3QuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgYW55dGhpbmcgbmV0d29yay1yZWxhdGVkLiBIb3BlZnVsbHksIHRoaXMgcGFyZW50IEtjb25maWcgZmlsZSB3aWxsIGRpcmVjdGx5IGluY2x1ZGUgdGhlIHZtd192c29jayBLY29uZmlnLCBvciBhdCBsZWFzdCBnaXZlIG1lIGEgcG9pbnRlciB0byB0aGUgcmVsZXZhbnQgc2VjdGlvbiB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHdoZXJlIGl0J3MgZGVmaW5lZC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4uLiBhbmQgaG93IGZhciBJIG5lZWQgdG8gZ28gdG8gdHJhY2UgdGhpcyBkb3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAyNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTQ6MDkuODg3OTM1NjY3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM0MTYyODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm13X3Zzb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9Mjc0PXNvdXJjZSBcXFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6Mjc1OnNvdXJjZSBcXFwibmV0L3Ztd192c29jay9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTI3Ni1zb3VyY2UgXFxcIm5ldC9uZXRsaW5rL0tjb25maWdcXFwiXFxuLS1cXG5uZXQvTWFrZWZpbGU9NjQ9b2JqLSQoQ09ORklHX09QRU5WU1dJVENIKVxcdCs9IG9wZW52c3dpdGNoL1xcbm5ldC9NYWtlZmlsZTo2NTpvYmotJChDT05GSUdfVlNPQ0tFVFMpXFx0Kz0gdm13X3Zzb2NrL1xcbm5ldC9NYWtlZmlsZS02Ni1vYmotJChDT05GSUdfTVBMUylcXHRcXHQrPSBtcGxzL1xcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnPTI5PWNvbmZpZyBWU09DS0VUU19MT09QQkFDS1xcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTM1LVxcdCAgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIGxvb3BiYWNrIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzLFxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzozNjpcXHQgIHVzaW5nIHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMzctXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc9NDE9Y29uZmlnIFZNV0FSRV9WTUNJX1ZTT0NLRVRTXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTAtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxubmV0L3Ztd192c29jay9LY29uZmlnOjUxOlxcdCAgd2lsbCBiZSBjYWxsZWQgdm13X3Zzb2NrX3ZtY2lfdHJhbnNwb3J0LiBJZiB1bnN1cmUsIHNheSBOLlxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy01Mi1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc9NTM9Y29uZmlnIFZJUlRJT19WU09DS0VUU1xcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTYzLVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxubmV0L3Ztd192c29jay9LY29uZmlnOjY0OlxcdCAgY2FsbGVkIHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0LiBJZiB1bnN1cmUsIHNheSBOLlxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy02NS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc9NjY9Y29uZmlnIFZJUlRJT19WU09DS0VUU19DT01NT05cXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03MC1cXHQgIHRoZSB2aXJ0aW9fdnNvY2suICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxubmV0L3Ztd192c29jay9LY29uZmlnOjcxOlxcdCAgdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLlxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03Mi1cXG4tLVxcbm5ldC92bXdfdnNvY2svTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfVlNPQ0tFVFNfRElBRykgKz0gdnNvY2tfZGlhZy5vXFxubmV0L3Ztd192c29jay9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19WTVdBUkVfVk1DSV9WU09DS0VUUykgKz0gdm13X3Zzb2NrX3ZtY2lfdHJhbnNwb3J0Lm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1ZJUlRJT19WU09DS0VUUykgKz0gdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnQub1xcbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6NjpvYmotJChDT05GSUdfVklSVElPX1ZTT0NLRVRTX0NPTU1PTikgKz0gdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX0hZUEVSVl9WU09DS0VUUykgKz0gaHZfc29jay5vXFxuLS1cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlPTEzPXZzb2NrX2RpYWcteSArPSBkaWFnLm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTE0LVxcbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6MTU6dm13X3Zzb2NrX3ZtY2lfdHJhbnNwb3J0LXkgKz0gdm1jaV90cmFuc3BvcnQubyB2bWNpX3RyYW5zcG9ydF9ub3RpZnkubyBcXFxcXFxubmV0L3Ztd192c29jay9NYWtlZmlsZS0xNi1cXHR2bWNpX3RyYW5zcG9ydF9ub3RpZnlfcXN0YXRlLm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTE3LVxcbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6MTg6dm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnQteSArPSB2aXJ0aW9fdHJhbnNwb3J0Lm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTE5LVxcbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6MjA6dm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLXkgKz0gdmlydGlvX3RyYW5zcG9ydF9jb21tb24ub1xcbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtMjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU0OjEwLjAyMTM1OTIyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMzI5MzI3MjYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIHZzb2NrZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBDT05GSUdfVlNPQ0tFVFNgIHNpdHMgaW5ub2N1b3VzbHkgZW5vdWdoLCByaWdodCB0aGVyZSB1bmRlciBgbmV0L2AuIE5vdGhpbmcgb2J2aW91c2x5IGhvbGRpbmcgaXQgYmFjaywgbm8gd2VpcmQgZGVwZW5kZW5jaWVzIHRvIHRyaXAgb3Zlci4gQnV0IHdhaXQsIGEgbmFnZ2luZyB0aG91Z2h0IOKAkyB3aGF0IGFib3V0IHN5c2N0bD8gQ291bGQgdGhlcmUgYmUgc29tZSBpbnRlcmFjdGlvbiwgc29tZSBjb25kaXRpb24gSSdtIG1pc3Npbmc/IEkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIGB2c29ja19zeXNjdGxfcmVnaXN0ZXJgIGZ1bmN0aW9uLCB3aGVyZSBzeXNjdGwgcGFyYW1ldGVycyBhcmUgZGVmaW5lZCwgaXMgZ3VhcmRlZCBieSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBvciBuZXR3b3JrIG9wZXJhdGlvbiBjaGVja3MuIExldCdzIGRpZyBpbnRvIHRoZSBgbmV0L3Ztd192c29jay9hZl92c29jay5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIHRoYXQgYHZzb2NrX3N5c2N0bF9yZWdpc3RlcmAgZnVuY3Rpb24uIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaWYgdGhlcmUgYXJlIGFueSBnb3RjaGFzIGluIHRoaXMgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjMxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTQ6MjMuMzE0NjM0Mzc5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkyOCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjkyODpcXHRcXG4yOTI5OlxcdHN0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxcbjI5MzA6XFx0e1xcbjI5MzE6XFx0XFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XFxuMjkzMjpcXHRcXG4yOTMzOlxcdFxcdGlmIChuZXRfZXEobmV0LCBcXHUwMDI2aW5pdF9uZXQpKSB7XFxuMjkzNDpcXHRcXHRcXHR0YWJsZSA9IHZzb2NrX3RhYmxlO1xcbjI5MzU6XFx0XFx0fSBlbHNlIHtcXG4yOTM2OlxcdFxcdFxcdHRhYmxlID0ga21lbWR1cCh2c29ja190YWJsZSwgc2l6ZW9mKHZzb2NrX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XFxuMjkzNzpcXHRcXHRcXHRpZiAoIXRhYmxlKVxcbjI5Mzg6XFx0XFx0XFx0XFx0Z290byBlcnJfYWxsb2M7XFxuMjkzOTpcXHRcXG4yOTQwOlxcdFxcdFxcdHRhYmxlWzBdLmRhdGEgPSBcXHUwMDI2bmV0LVxcdTAwM2V2c29jay5tb2RlO1xcbjI5NDE6XFx0XFx0XFx0dGFibGVbMV0uZGF0YSA9IFxcdTAwMjZuZXQtXFx1MDAzZXZzb2NrLmNoaWxkX25zX21vZGU7XFxuMjk0MjpcXHRcXHRcXHR0YWJsZVsyXS5kYXRhID0gXFx1MDAyNm5ldC1cXHUwMDNldnNvY2suZzJoX2ZhbGxiYWNrO1xcbjI5NDM6XFx0XFx0fVxcbjI5NDQ6XFx0XFxuMjk0NTpcXHRcXHRuZXQtXFx1MDAzZXZzb2NrLnN5c2N0bF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXFxcIm5ldC92c29ja1xcXCIsIHRhYmxlLFxcbjI5NDY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIEFSUkFZX1NJWkUodnNvY2tfdGFibGUpKTtcXG4yOTQ3OlxcdFxcdGlmICghbmV0LVxcdTAwM2V2c29jay5zeXNjdGxfaGRyKVxcbjI5NDg6XFx0XFx0XFx0Z290byBlcnJfcmVnO1xcbjI5NDk6XFx0XFxuMjk1MDpcXHRcXHRyZXR1cm4gMDtcXG4yOTUxOlxcdFxcbjI5NTI6XFx0ZXJyX3JlZzpcXG4yOTUzOlxcdFxcdGlmICghbmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSlcXG4yOTU0OlxcdFxcdFxcdGtmcmVlKHRhYmxlKTtcXG4yOTU1OlxcdGVycl9hbGxvYzpcXG4yOTU2OlxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjI5NTc6XFx0fVxcbjI5NTg6XFx0XFxuMjk1OTpcXHRzdGF0aWMgdm9pZCB2c29ja19zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXFxuMjk2MDpcXHR7XFxuMjk2MTpcXHRcXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcXG4yOTYyOlxcdFxcbjI5NjM6XFx0XFx0dGFibGUgPSBuZXQtXFx1MDAzZXZzb2NrLnN5c2N0bF9oZHItXFx1MDAzZWN0bF90YWJsZV9hcmc7XFxuMjk2NDpcXHRcXHR1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUobmV0LVxcdTAwM2V2c29jay5zeXNjdGxfaGRyKTtcXG4yOTY1OlxcdFxcdGlmICghbmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSlcXG4yOTY2OlxcdFxcdFxcdGtmcmVlKHRhYmxlKTtcXG4yOTY3OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTQ6MjMuMzE0ODUzMzg5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwOTc2OTU2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhIG5ldHdvcmtpbmcgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSB2c29jayBTeXNjdGwgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgYHZzb2NrX3N5c2N0bF9yZWdpc3RlcmAgZnVuY3Rpb24gbGl2ZXMuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCdzIGhpZ2hseSBsaWtlbHkgaXQncyBuZXN0bGVkIHdpdGhpbiB0aGUgdnNvY2sgbmV0d29yayBvcGVyYXRpb25zIHN0cnVjdHVyZSwgcHJvYmFibHkgc29tZXRoaW5nIGxpa2UgYHZzb2NrX25ldF9vcHNgLiBJJ2xsIHdhbnQgdG8gdmVyaWZ5IHRoYXQuIE15IGd1dCBzYXlzIHRvIGxvb2sgc29tZXdoZXJlIGFyb3VuZCBsaW5lcyAyOTY4IHRvIDMwMDAg4oCTIHRoYXQgc291bmRzIGxpa2UgYSByZWFzb25hYmxlIHJhbmdlIGZvciB0aGlzIGtpbmQgb2YgY29uZmlndXJhdGlvbi4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTEzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1NDoyNi40MTI1NTE3NDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC92bXdfdnNvY2svYWZfdnNvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTY4LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTY4OlxcdFxcbjI5Njk6XFx0c3RhdGljIHZvaWQgdnNvY2tfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbjI5NzA6XFx0e1xcbjI5NzE6XFx0XFx0aWYgKG5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpXFxuMjk3MjpcXHRcXHRcXHRuZXQtXFx1MDAzZXZzb2NrLm1vZGUgPSBWU09DS19ORVRfTU9ERV9HTE9CQUw7XFxuMjk3MzpcXHRcXHRlbHNlXFxuMjk3NDpcXHRcXHRcXHRuZXQtXFx1MDAzZXZzb2NrLm1vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnMpO1xcbjI5NzU6XFx0XFxuMjk3NjpcXHRcXHRuZXQtXFx1MDAzZXZzb2NrLmNoaWxkX25zX21vZGUgPSBuZXQtXFx1MDAzZXZzb2NrLm1vZGU7XFxuMjk3NzpcXHRcXHRuZXQtXFx1MDAzZXZzb2NrLmNoaWxkX25zX21vZGVfbG9ja2VkID0gMDtcXG4yOTc4OlxcdFxcdG5ldC1cXHUwMDNldnNvY2suZzJoX2ZhbGxiYWNrID0gMTtcXG4yOTc5OlxcdH1cXG4yOTgwOlxcdFxcbjI5ODE6XFx0c3RhdGljIF9fbmV0X2luaXQgaW50IHZzb2NrX3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuMjk4MjpcXHR7XFxuMjk4MzpcXHRcXHR2c29ja19uZXRfaW5pdChuZXQpO1xcbjI5ODQ6XFx0XFxuMjk4NTpcXHRcXHRpZiAodnNvY2tfc3lzY3RsX3JlZ2lzdGVyKG5ldCkpXFxuMjk4NjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yOTg3OlxcdFxcbjI5ODg6XFx0XFx0cmV0dXJuIDA7XFxuMjk4OTpcXHR9XFxuMjk5MDpcXHRcXG4yOTkxOlxcdHN0YXRpYyBfX25ldF9leGl0IHZvaWQgdnNvY2tfc3lzY3RsX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4yOTkyOlxcdHtcXG4yOTkzOlxcdFxcdHZzb2NrX3N5c2N0bF91bnJlZ2lzdGVyKG5ldCk7XFxuMjk5NDpcXHR9XFxuMjk5NTpcXHRcXG4yOTk2OlxcdHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgdnNvY2tfc3lzY3RsX29wcyA9IHtcXG4yOTk3OlxcdFxcdC5pbml0ID0gdnNvY2tfc3lzY3RsX2luaXRfbmV0LFxcbjI5OTg6XFx0XFx0LmV4aXQgPSB2c29ja19zeXNjdGxfZXhpdF9uZXQsXFxuMjk5OTpcXHR9O1xcbjMwMDA6XFx0XFxuMzAwMTpcXHRzdGF0aWMgaW50IF9faW5pdCB2c29ja19pbml0KHZvaWQpXFxuMzAwMjpcXHR7XFxuMzAwMzpcXHRcXHRpbnQgZXJyID0gMDtcXG4zMDA0OlxcdFxcbjMwMDU6XFx0XFx0dnNvY2tfaW5pdF90YWJsZXMoKTtcXG4zMDA2OlxcdFxcbjMwMDc6XFx0XFx0dnNvY2tfcHJvdG8ub3duZXIgPSBUSElTX01PRFVMRTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTQ6MjYuNDEyNzYxNTI2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk0OTU2NjUxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSB2c29jayBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlIHZzb2NrIGluaXRpYWxpemF0aW9uLCBgdnNvY2tfaW5pdCgpYCBjYWxscyBgcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZ2c29ja19zeXNjdGxfb3BzKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkRvIHdlIG5lZWQgdGhlIGBDT05GSUdfTkVUX1NZU0NUTGAgb3B0aW9uIGVuYWJsZWQgZm9yIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/XCIgSXQncyBhIGtleSBmdW5jdGlvbiBpbiBhIHJlbGF0ZWQgY29udGV4dCwgYW5kIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgY2xlYXIuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCBpcyBpbXBsZW1lbnRlZCBhbmQgdXNlZC4gTGV0J3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaCBvZiB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTE0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1NDozNS45MDg0Mjk1MjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMzU3NjE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaD01MTg9c3RydWN0IGN0bF90YWJsZTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC01MjAtI2RlZmluZSByZWdpc3Rlcl9uZXRfc3lzY3RsKG5ldCwgcGF0aCwgdGFibGUpXFx0XFxcXFxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDo1MjE6XFx0cmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIHBhdGgsIHRhYmxlLCBBUlJBWV9TSVpFKHRhYmxlKSlcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtNTIyLSNpZmRlZiBDT05GSUdfU1lTQ1RMXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTUyMz1pbnQgbmV0X3N5c2N0bF9pbml0KHZvaWQpO1xcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDo1MjQ6c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJlZ2lzdGVyX25ldF9zeXNjdGxfc3ooc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLFxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC01MjUtXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTUyOD1zdGF0aWMgaW5saW5lIGludCBuZXRfc3lzY3RsX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDo1Mjk6c3RhdGljIGlubGluZSBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTUzMC1cXHRjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU0OjM2LjYxMjU3Njk2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3NTQ3MzUzNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBbmFseXNpczogdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYENPTkZJR19TWVNDVExgIGFuZCBgQ09ORklHX1ZTT0NLRVRTYCBhcmUgcmVxdWlyZWQsIHNvIHRoZSBwcmVyZXF1aXNpdGVzIGFyZSB0aGVyZS4gVGhpcyBjaGFuZ2UgaXMgaW4gYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AsIHNwZWNpZmljYWxseSB0b3VjaGluZyBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYC5cblxuVGhlIGNvZGUgbW9kaWZpZXMgdGhlIHN5c2N0bCBoYW5kbGVyIGZvciB0aGUgdnNvY2sgbmV0bnMgbW9kZS4gQW55IHByb2Nlc3MgY2FuIHJlYWQgb3Igd3JpdGUgdG8gYC9wcm9jL3N5cy9uZXQvdnNvY2svY2hpbGRfbnNfbW9kZWAsIG1ha2luZyB0aGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoYXQncyBnb29kLCB0aGF0J3MgdGhlIHByaW1hcnkgaHVyZGxlIGZvciBmdXp6aW5nLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IHNob3VsZCB3ZSBmdXp6IGl0PyBMZXQncyBjaGVjayB0aGUgZ3VpZGVsaW5lcy4gVGhpcyBjaGFuZ2UgZG9lc24ndCBmYWxsIHVuZGVyIGFueSBvZiB0aGUgXCJuZWdhdGl2ZSBjcml0ZXJpYS5cIiBJdCdzIG5vdCBkb2N1bWVudGF0aW9uLCBhIGJ1aWxkIHN5c3RlbSBjaGFuZ2UgdGhhdCBkb2Vzbid0IGFmZmVjdCBjb21waWxlZCBDIGxvZ2ljLCB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgZHJpdmVyIHRlYXJkb3duLiBJdCdzIGFsc28gbm90IGFuIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoLiBUaGlzIGlzIHRvdWNoaW5nIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gY29yZSBuZXR3b3JraW5nLCBhbmQgdGhlIHBhdGNoIG1vZGlmaWVzIGEgc3lzY3RsIGhhbmRsZXIgKGB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdgKS4gRnVydGhlcm1vcmUsIGl0IGluaXRpYWxpemVzIGEgbG9jYWwgdmFyaWFibGUgYG5ld19tb2RlYCBkaWZmZXJlbnRseS4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIHRoZSB2YWx1ZSBvZiBgbmV3X21vZGVgIHdoZW4gYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nYCBkb2VzIG5vdCBzZXQgaXQgKGUuZy4sIHdoZW4gd3JpdGluZyAwIGJ5dGVzKS5cblxuVGhlIHBhdGNoIGNsZWFybHkgdG91Y2hlcyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSwgc28gdGhlIGFuc3dlciBpcyAqeWVzKi4gYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLlxuXG5Ob3csIGZvciBgRm9jdXNTeW1ib2xzYC4gVGhlIHByaW1hcnkgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQgaXMgYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AuIEJ1dCB3aGF0IGFib3V0IGl0cyBjYWxsZXJzIG9yIHJlbGF0ZWQgZnVuY3Rpb25zPyBIb2xkIG9uLi4uIGlzIGB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdgIHN0YXRpYyBhbmQgaW5saW5lZD8gTm8sIGl0IGxvb2tzIGxpa2UgaXQncyByZWZlcmVuY2VkIGJ5IHBvaW50ZXIgd2l0aGluIHRoZSBgcHJvY19oYW5kbGVyYCBvZiB0aGUgc3lzY3RsIHRhYmxlIGVudHJ5LiBUaGUgY29tcGlsZXIgKndpbGwqIGdlbmVyYXRlIGEgc3ltYm9sIGZvciBpdC4gTGV0J3Mgc2VlIGlmIHRoZSBvdGhlciBzeW1ib2xzIGFyZSB0aGVyZSwgdG9vLCBzdWNoIGFzIGB2c29ja19uZXRfY2hpbGRfbW9kZWAgYW5kIGB2c29ja19uZXRfc2V0X2NoaWxkX21vZGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ4MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTQ6NDQuMTU5OTMzNDIxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjA5NjUwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2c29ja19uZXRfY2hpbGRfbW9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjg1OT1zdGF0aWMgaW50IHZzb2NrX25ldF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4NzItXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4NzM6c3RhdGljIGludCB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg3NC1cXHRcXHRcXHRcXHQgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODgwLVxcdG5ldCA9IGNvbnRhaW5lcl9vZih0YWJsZS1cXHUwMDNlZGF0YSwgc3RydWN0IG5ldCwgdnNvY2suY2hpbGRfbnNfbW9kZSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4ODE6XFx0bmV3X21vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODgyLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODgzLVxcdHJldCA9IF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODg0OlxcdFxcdFxcdFxcdCAgICAgIHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCksIFxcdTAwMjZuZXdfbW9kZSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4ODUtXFx0aWYgKHJldClcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yOTAzPXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkxNS1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjkxNjpcXHRcXHQucHJvY19oYW5kbGVyXFx0PSB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkxNy1cXHR9LFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI5Njk9c3RhdGljIHZvaWQgdnNvY2tfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NzMtXFx0ZWxzZVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTc0OlxcdFxcdG5ldC1cXHUwMDNldnNvY2subW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKGN1cnJlbnQtXFx1MDAzZW5zcHJveHktXFx1MDAzZW5ldF9ucyk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NzUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU0OjQ0LjIyNjAzNDY5NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTM5NDI0NTE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqVHJhY2luZyB0aGUgdnNvY2tfbmV0X2NoaWxkX21vZGUgRGVmaW5pdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHdoZXJlIGlzIGB2c29ja19uZXRfY2hpbGRfbW9kZWAgZGVmaW5lZD9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gS25vd2luZyB3aGVyZSBpdCdzIGRlY2xhcmVkIGFuZCBpbml0aWFsaXplZCBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgbGFyZ2VyIHN5c3RlbS4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBkZWJ1Z2dpbmcgb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBwcm9ncmFtLCBvciBldmVuIGp1c3QgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHByb2dyYW0uIEknbSBnb2luZyB0byBzdGFydCB0cmFjaW5nIHRoYXQgdmFyaWFibGUgZG93biBhbmQgdW5kZXJzdGFuZGluZyBldmVyeXRoaW5nIGFib3V0IGl0cyB1c2FnZSwgYW5kIGl0cyBlZmZlY3RzIG9uIHRoZSBwcm9ncmFtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk2NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU0OjU5LjYyMDI4MjA4OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzNjY5NDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2c29ja19uZXRfY2hpbGRfbW9kZVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2FmX3Zzb2NrLmg9Mjg5PXN0YXRpYyBpbmxpbmUgYm9vbCB2c29ja19uZXRfc2V0X2NoaWxkX21vZGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxuaW5jbHVkZS9uZXQvYWZfdnNvY2suaC0zMDMtXFxuaW5jbHVkZS9uZXQvYWZfdnNvY2suaDozMDQ6c3RhdGljIGlubGluZSBlbnVtIHZzb2NrX25ldF9tb2RlIHZzb2NrX25ldF9jaGlsZF9tb2RlKHN0cnVjdCBuZXQgKm5ldClcXG5pbmNsdWRlL25ldC9hZl92c29jay5oLTMwNS17XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjg3Mz1zdGF0aWMgaW50IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4ODAtXFx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVxcdTAwM2VkYXRhLCBzdHJ1Y3QgbmV0LCB2c29jay5jaGlsZF9uc19tb2RlKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjg4MTpcXHRuZXdfbW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4ODItXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4ODMtXFx0cmV0ID0gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4ODQ6XFx0XFx0XFx0XFx0ICAgICAgdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KSwgXFx1MDAyNm5ld19tb2RlKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg4NS1cXHRpZiAocmV0KVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI5Njk9c3RhdGljIHZvaWQgdnNvY2tfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NzMtXFx0ZWxzZVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTc0OlxcdFxcdG5ldC1cXHUwMDNldnNvY2subW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKGN1cnJlbnQtXFx1MDAzZW5zcHJveHktXFx1MDAzZW5ldF9ucyk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NzUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU1OjAxLjk1Njk4MzMyNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTM2OTc2NjI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGB2c29ja19uZXRfY2hpbGRfbW9kZWAqKlxuXG5Pa2F5LCBzbyBgdnNvY2tfbmV0X2NoaWxkX21vZGVgIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgaW5saW5lIHdpdGhpbiBgaW5jbHVkZS9uZXQvYWZfdnNvY2suaGAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgdnNvY2sgbmV0IGluZnJhc3RydWN0dXJlLiBJJ20gd29uZGVyaW5nIGlmIHRoaXMgaXMgcmVsYXRlZCB0byBob3cgdGhlIHZzb2NrIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgY2hpbGQgbmV0d29yayBuYW1lc3BhY2VzIG9yIGNvbmZpZ3VyYXRpb25zLlxuXG5Ob3csIHdoYXQgYWJvdXQgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nYD8gVGhhdCdzIGFub3RoZXIgcG90ZW50aWFsIHBpZWNlIG9mIHRoZSBwdXp6bGUgSSBuZWVkIHRvIGNvbnNpZGVyLiBJIHNob3VsZCBwcm9iYWJseSB0cmFjayBkb3duIHdoZXJlIHRoYXQncyBkZWZpbmVkIG9yIHVzZWQgdG8gc2VlIGhvdyBpdCdzIGxpbmtlZC5cblxuTGV0IG1lIGNoZWNrIGxpbmUgMjgwMCBvZiBgbmV0L3Ztd192c29jay9hZl92c29jay5jYC4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZSB2c29jayBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0IG1hbmFnZXMgbmV0d29yayBtb2Rlcy4gSG9wZWZ1bGx5LCB0aGF0IGxvY2F0aW9uIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgcmVsYXRlZCB0byB0aGVzZSB2YXJpYWJsZXMsIGluY2x1ZGluZyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGV5IGFyZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTY1MCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU1OjMxLjMyNjc1MjM4NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Ztd192c29jay9hZl92c29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4MDA6XFx0c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHZzb2NrX2RldmljZSA9IHtcXG4yODAxOlxcdFxcdC5uYW1lXFx0XFx0PSBcXFwidnNvY2tcXFwiLFxcbjI4MDI6XFx0XFx0LmZvcHNcXHRcXHQ9IFxcdTAwMjZ2c29ja19kZXZpY2Vfb3BzLFxcbjI4MDM6XFx0fTtcXG4yODA0OlxcdFxcbjI4MDU6XFx0c3RhdGljIGludCBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbjI4MDY6XFx0XFx0XFx0XFx0XFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyxcXG4yODA3OlxcdFxcdFxcdFxcdFxcdCAgIGVudW0gdnNvY2tfbmV0X21vZGUgbW9kZSxcXG4yODA4OlxcdFxcdFxcdFxcdFxcdCAgIGVudW0gdnNvY2tfbmV0X21vZGUgKm5ld19tb2RlKVxcbjI4MDk6XFx0e1xcbjI4MTA6XFx0XFx0Y2hhciBkYXRhW1ZTT0NLX05FVF9NT0RFX1NUUl9NQVhdID0gezB9O1xcbjI4MTE6XFx0XFx0c3RydWN0IGN0bF90YWJsZSB0bXA7XFxuMjgxMjpcXHRcXHRpbnQgcmV0O1xcbjI4MTM6XFx0XFxuMjgxNDpcXHRcXHRpZiAoIXRhYmxlLVxcdTAwM2VkYXRhIHx8ICF0YWJsZS1cXHUwMDNlbWF4bGVuIHx8ICEqbGVucCkge1xcbjI4MTU6XFx0XFx0XFx0KmxlbnAgPSAwO1xcbjI4MTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjgxNzpcXHRcXHR9XFxuMjgxODpcXHRcXG4yODE5OlxcdFxcdHRtcCA9ICp0YWJsZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTU6MzEuMzI2ODk0NzE1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQzMzA5MjExNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIFZTb2NrIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBWU29jayBzaXR1YXRpb24sIGFuZCB0aGUga2V5IGZ1bmN0aW9ucyB0byBrZWVwIGluIG1pbmQgYXJlIGB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdgIGFuZCBgX192c29ja19uZXRfbW9kZV9zdHJpbmdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZnVsbCBjb25maWd1cmF0aW9uIHBpY3R1cmUuIEkga25vdyB0aGlzIHN0dWZmLCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4sIHNvIEkgd2lsbCBzdGFydCBieSBjaGVja2luZyBmb3IgYW55IG1pc3NpbmcgY29uZmlndXJhdGlvbiBiaXRzLlxuXG5GaXJzdCBzdG9wIGlzIHRoZSBgbmV0L3Ztd192c29jay9LY29uZmlnYCBmaWxlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNlbnRyYWwgb3B0aW9uLCBhbmQgdGhlcmUgaXQgaXM6IGBjb25maWcgVlNPQ0tFVFMgdHJpc3RhdGUgXCJWaXJ0dWFsIFNvY2tldCBwcm90b2NvbFwiYC4gR29vZCwgdGhhdCBjb25maXJtcyB0aGUgY29yZSBjb21wb25lbnQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgZGVwZW5kZW5jaWVzLCB0b28uXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhlIHN5c2N0bCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfU1lTQ1RMYCBpcyBlbmFibGVkLCBiZWNhdXNlIFZTb2NrIGxpa2VseSBleHBvc2VzIHNvbWUgdHVuYWJsZSBwYXJhbWV0ZXJzLlxuXG5GaW5hbGx5LCBJJ2xsIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSB0b3Agb2YgYGFmX3Zzb2NrLmNgIGl0c2VsZi4gVGhlIGluY2x1ZGVzIGFuZCBpbml0aWFsIGRlZmluaXRpb25zIHRoZXJlIG9mdGVuIHByb3ZpZGUgYSBxdWljayBvdmVydmlldyBvZiBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBJIG1pZ2h0IGhhdmUgbWlzc2VkLiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1NTozNS42NTc4MTg1MzdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC92bXdfdnNvY2svYWZfdnNvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBWTXdhcmUgdlNvY2tldHMgRHJpdmVyXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgVk13YXJlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXFxuICAgNjpcXHQgKi9cXG4gICA3OlxcdFxcbiAgIDg6XFx0LyogSW1wbGVtZW50YXRpb24gbm90ZXM6XFxuICAgOTpcXHQgKlxcbiAgMTA6XFx0ICogLSBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIHNvY2tldHM6IHRob3NlIGNyZWF0ZWQgYnkgdXNlciBhY3Rpb24gKHN1Y2ggYXNcXG4gIDExOlxcdCAqIGNhbGxpbmcgc29ja2V0KDIpKSBhbmQgdGhvc2UgY3JlYXRlZCBieSBpbmNvbWluZyBjb25uZWN0aW9uIHJlcXVlc3QgcGFja2V0cy5cXG4gIDEyOlxcdCAqXFxuICAxMzpcXHQgKiAtIFRoZXJlIGFyZSB0d28gXFxcImdsb2JhbFxcXCIgdGFibGVzLCBvbmUgZm9yIGJvdW5kIHNvY2tldHMgKHNvY2tldHMgdGhhdCBoYXZlXFxuICAxNDpcXHQgKiBzcGVjaWZpZWQgYW4gYWRkcmVzcyB0aGF0IHRoZXkgYXJlIHJlc3BvbnNpYmxlIGZvcikgYW5kIG9uZSBmb3IgY29ubmVjdGVkXFxuICAxNTpcXHQgKiBzb2NrZXRzIChzb2NrZXRzIHRoYXQgaGF2ZSBlc3RhYmxpc2hlZCBhIGNvbm5lY3Rpb24gd2l0aCBhbm90aGVyIHNvY2tldCkuXFxuICAxNjpcXHQgKiBUaGVzZSB0YWJsZXMgYXJlIFxcXCJnbG9iYWxcXFwiIGluIHRoYXQgYWxsIHNvY2tldHMgb24gdGhlIHN5c3RlbSBhcmUgcGxhY2VkXFxuICAxNzpcXHQgKiB3aXRoaW4gdGhlbS4gLSBOb3RlLCB0aG91Z2gsIHRoYXQgdGhlIGJvdW5kIHRhYmxlIGNvbnRhaW5zIGFuIGV4dHJhIGVudHJ5XFxuICAxODpcXHQgKiBmb3IgYSBsaXN0IG9mIHVuYm91bmQgc29ja2V0cyBhbmQgU09DS19ER1JBTSBzb2NrZXRzIHdpbGwgYWx3YXlzIHJlbWFpbiBpblxcbiAgMTk6XFx0ICogdGhhdCBsaXN0LiBUaGUgYm91bmQgdGFibGUgaXMgdXNlZCBzb2xlbHkgZm9yIGxvb2t1cCBvZiBzb2NrZXRzIHdoZW4gcGFja2V0c1xcbiAgMjA6XFx0ICogYXJlIHJlY2VpdmVkIGFuZCB0aGF0J3Mgbm90IG5lY2Vzc2FyeSBmb3IgU09DS19ER1JBTSBzb2NrZXRzIHNpbmNlIHdlIGNyZWF0ZVxcbiAgMjE6XFx0ICogYSBkYXRhZ3JhbSBoYW5kbGUgZm9yIGVhY2ggYW5kIG5lZWQgbm90IHBlcmZvcm0gYSBsb29rdXAuICBLZWVwaW5nIFNPQ0tfREdSQU1cXG4gIDIyOlxcdCAqIHNvY2tldHMgb3V0IG9mIHRoZSBib3VuZCBoYXNoIGJ1Y2tldHMgd2lsbCByZWR1Y2UgdGhlIGNoYW5jZSBvZiBjb2xsaXNpb25zXFxuICAyMzpcXHQgKiB3aGVuIGxvb2tpbmcgZm9yIFNPQ0tfU1RSRUFNIHNvY2tldHMgYW5kIHByZXZlbnRzIHVzIGZyb20gaGF2aW5nIHRvIGNoZWNrIHRoZVxcbiAgMjQ6XFx0ICogc29ja2V0IHR5cGUgaW4gdGhlIGhhc2ggdGFibGUgbG9va3Vwcy5cXG4gIDI1OlxcdCAqXFxuICAyNjpcXHQgKiAtIFNvY2tldHMgY3JlYXRlZCBieSB1c2VyIGFjdGlvbiB3aWxsIGVpdGhlciBiZSBcXFwiY2xpZW50XFxcIiBzb2NrZXRzIHRoYXRcXG4gIDI3OlxcdCAqIGluaXRpYXRlIGEgY29ubmVjdGlvbiBvciBcXFwic2VydmVyXFxcIiBzb2NrZXRzIHRoYXQgbGlzdGVuIGZvciBjb25uZWN0aW9uczsgd2UgZG9cXG4gIDI4OlxcdCAqIG5vdCBzdXBwb3J0IHNpbXVsdGFuZW91cyBjb25uZWN0cyAodHdvIFxcXCJjbGllbnRcXFwiIHNvY2tldHMgY29ubmVjdGluZykuXFxuICAyOTpcXHQgKlxcbiAgMzA6XFx0ICogLSBcXFwiU2VydmVyXFxcIiBzb2NrZXRzIGFyZSByZWZlcnJlZCB0byBhcyBsaXN0ZW5lciBzb2NrZXRzIHRocm91Z2hvdXQgdGhpc1xcbiAgMzE6XFx0ICogaW1wbGVtZW50YXRpb24gYmVjYXVzZSB0aGV5IGFyZSBpbiB0aGUgVENQX0xJU1RFTiBzdGF0ZS4gIFdoZW4gYVxcbiAgMzI6XFx0ICogY29ubmVjdGlvbiByZXF1ZXN0IGlzIHJlY2VpdmVkICh0aGUgc2Vjb25kIGtpbmQgb2Ygc29ja2V0IG1lbnRpb25lZCBhYm92ZSksXFxuICAzMzpcXHQgKiB3ZSBjcmVhdGUgYSBuZXcgc29ja2V0IGFuZCByZWZlciB0byBpdCBhcyBhIHBlbmRpbmcgc29ja2V0LiAgVGhlc2UgcGVuZGluZ1xcbiAgMzQ6XFx0ICogc29ja2V0cyBhcmUgcGxhY2VkIG9uIHRoZSBwZW5kaW5nIGNvbm5lY3Rpb24gbGlzdCBvZiB0aGUgbGlzdGVuZXIgc29ja2V0LlxcbiAgMzU6XFx0ICogV2hlbiBmdXR1cmUgcGFja2V0cyBhcmUgcmVjZWl2ZWQgZm9yIHRoZSBhZGRyZXNzIHRoZSBsaXN0ZW5lciBzb2NrZXQgaXNcXG4gIDM2OlxcdCAqIGJvdW5kIHRvLCB3ZSBjaGVjayBpZiB0aGUgc291cmNlIG9mIHRoZSBwYWNrZXQgaXMgZnJvbSBvbmUgdGhhdCBoYXMgYW5cXG4gIDM3OlxcdCAqIGV4aXN0aW5nIHBlbmRpbmcgY29ubmVjdGlvbi4gIElmIGl0IGRvZXMsIHdlIHByb2Nlc3MgdGhlIHBhY2tldCBmb3IgdGhlXFxuICAzODpcXHQgKiBwZW5kaW5nIHNvY2tldC4gIFdoZW4gdGhhdCBzb2NrZXQgcmVhY2hlcyB0aGUgY29ubmVjdGVkIHN0YXRlLCBpdCBpcyByZW1vdmVkXFxuICAzOTpcXHQgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQncyBwZW5kaW5nIGxpc3QgYW5kIGVucXVldWVkIGluIHRoZSBsaXN0ZW5lclxcbiAgNDA6XFx0ICogc29ja2V0J3MgYWNjZXB0IHF1ZXVlLiAgQ2FsbGVycyBvZiBhY2NlcHQoMikgd2lsbCBhY2NlcHQgY29ubmVjdGVkIHNvY2tldHNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTU6MzUuNjU4MDI1MTE3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1MDc4NzU4Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB2c29jayBSZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHZzb2NrLCBhbmQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwZXItbmV0IHN1YnN5c3RlbSByZWdpc3RyYXRpb24uIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgZGlyZWN0bHkgYXQgdGhlIHNvdXJjZSBjb2RlIOKAkyBzcGVjaWZpY2FsbHkgYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AuIEkga25vdyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgQUZfVlNPQ0sgZnVuY3Rpb25hbGl0eSBpcyBkZWZpbmVkLiBJJ20gZm9jdXNpbmcgb24gdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLCBuYXR1cmFsbHksIHNvIHRoZSBhcmVhIGFyb3VuZCBgcmVnaXN0ZXJfcGVybmV0X3N1YnN5c2AgaXMgd2hlcmUgSSdsbCBiZSBjb25jZW50cmF0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgdnNvY2sgZmFtaWx5IGhvb2tzIGludG8gdGhlIG5ldHdvcmtpbmcgc3RhY2sgYXQgdGhlIHBlci1uZXQgbmFtZXNwYWNlIGxldmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gdGhhdCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29ycmVjdCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb250ZW50aW9uIHBvaW50cywgb3IgdmVyaWZ5IHRoZSBpbnRlbmRlZCBiZWhhdmlvciBvZiB0aGUgc3Vic3lzdGVtJ3MgbGlmZWN5Y2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ0NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTY6MDAuNzM2ODA5NzI3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Nzg1MTc4NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnNvY2tfc3lzY3RsX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjk5MT1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHZzb2NrX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjk5NS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjk5NjpzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHZzb2NrX3N5c2N0bF9vcHMgPSB7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5OTctXFx0LmluaXQgPSB2c29ja19zeXNjdGxfaW5pdF9uZXQsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzAwMT1zdGF0aWMgaW50IF9faW5pdCB2c29ja19pbml0KHZvaWQpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzAyNy1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzAyODpcXHRpZiAocmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2dnNvY2tfc3lzY3RsX29wcykpIHtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzAyOS1cXHRcXHRlcnIgPSAtRU5PTUVNO1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTMwNDc9c3RhdGljIHZvaWQgX19leGl0IHZzb2NrX2V4aXQodm9pZClcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMDUxLVxcdHByb3RvX3VucmVnaXN0ZXIoXFx1MDAyNnZzb2NrX3Byb3RvKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzA1MjpcXHR1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXFx1MDAyNnZzb2NrX3N5c2N0bF9vcHMpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMDUzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTY6MDEuMzE1MzM4MTMzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk2MzE0NzEwNjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBWU09DS0VUUyBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgemVyb2VkIGluIG9uIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaGVyZS4gYENPTkZJR19WU09DS0VUU2AgaXMgdGhlIHByaW1hcnkgb25lLCBuYXR1cmFsbHkuIFRoZW4sIGBDT05GSUdfU1lTQ1RMYCBpcyByZXF1aXJlZCBmb3IgdGhlIHN5c2N0bCBzdXBwb3J0LCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgb24gYW1kNjQgc3lzdGVtcyBhbmQgZm9yIHN5emthbGxlci5cblxuTm93LCBJIG5lZWRlZCB0byBjb25maXJtIHdoZXRoZXIgYENPTkZJR19ORVRgIGlzIHJlcXVpcmVkLiBTaW5jZSBgVlNPQ0tFVFNgIGxpdmVzIHVuZGVyIGBuZXQvYCwgaXQgbWFkZSBzZW5zZSB0byBjaGVjay4gTG9va2luZyBhdCBgbmV0L3Ztd192c29jay9LY29uZmlnYCwgc3BlY2lmaWNhbGx5LCBsaW5lIDYgY29uZmlybXMgdGhhdCBgVlNPQ0tFVFNgICppcyogaW5jbHVkZWQgd2hlbiBgQ09ORklHX05FVGAgaXMgZW5hYmxlZC4gU28sIGBWU09DS0VUU2AgYW5kIGBTWVNDVExgIGFyZSB0aGUgbWFpbiB0aGluZ3MgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5OZXh0LCBJIGRpZCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBGb2N1c1N5bWJvbHMuIEkgaWRlbnRpZmllZCBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYCBhbmQgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nYC4gTG9va3MgbGlrZSB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgb25seSBtb2RpZnlpbmcgYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AsIHdoaWNoIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gcmVhZGluZyBhbmQgd3JpdGluZyBgL3Byb2Mvc3lzL25ldC92c29jay9jaGlsZF9uc19tb2RlYC5cblxuRmluYWxseSwgSSBjaGVja2VkIFdvcnRoRnV6emluZy4gVGhlIHBhdGNoIGlzIGluaXRpYWxpemluZyBgbmV3X21vZGVgIHdpdGhpbiBgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nYC4gQ3J1Y2lhbGx5LCB0aGlzIG1vZGlmaWVzIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBgYWZfdnNvY2tgLiBBY2NvcmRpbmcgdG8gbXkgY3JpdGVyaWEsIGFueSBsb2dpYyBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHF1YWxpZnkuIFNlY3Rpb24gMyBpcyBjbGVhciBvbiB0aGF0LiBQbHVzLCBpdCBkb2Vzbid0IHNlZW0gdG8gbWVldCBhbnkgb2YgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGluIFNlY3Rpb24gMi5cblxuRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJ20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxMDIsIk91dHB1dFRva2VucyI6MTYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU3OjM3LjYzMDA1MTcwNVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzQ3MTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlNZU0NUTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ1wiLFxuICAgIFwiX192c29ja19uZXRfbW9kZV9zdHJpbmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoKSBpbiBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3X21vZGUgdmFyaWFibGUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gX192c29ja19uZXRfbW9kZV9zdHJpbmcoKSwgcHJldmVudGluZyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWQgd2hlbiB3cml0aW5nIHRvIC9wcm9jL3N5cy9uZXQvdnNvY2svY2hpbGRfbnNfbW9kZSB3aXRoIHplcm8gbGVuZ3RoLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc3lzY3RsIGNvZGUgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiU1lTQ1RMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nXCIsXG4gICAgXCJfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZygpIGluIG5ldC92bXdfdnNvY2svYWZfdnNvY2suYyB0byBpbml0aWFsaXplIHRoZSBuZXdfbW9kZSB2YXJpYWJsZSBiZWZvcmUgcGFzc2luZyBpdCB0byBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZygpLCBwcmV2ZW50aW5nIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZCB3aGVuIHdyaXRpbmcgdG8gL3Byb2Mvc3lzL25ldC92c29jay9jaGlsZF9uc19tb2RlIHdpdGggemVybyBsZW5ndGguIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgbmV0d29ya2luZyBzeXNjdGwgY29kZSB0aGF0IGNhbiBiZSBleGVyY2lzZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1NzozNy43NTM1MzQ5NzRaIiwiU2VxIjozOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MTM1ODU5NjkyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU3OjM3Ljc1NDM3OTMwNVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU4MTM1Nzc0Nzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgdGhlIHN0YWNrIHZhcmlhYmxlIGBuZXdfbW9kZWAgaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZygpYCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgKHNwZWNpZmljYWxseSBpZiBhIHdyaXRlIG9jY3VycmVkIHdpdGggYCpsZW5wID09IDBgLCBjYXVzaW5nIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZygpYCB0byByZXR1cm4gMCB3aXRob3V0IGFzc2lnbmluZyBgKm5ld19tb2RlYCkuIFRoZSBwYXRjaCBpbml0aWFsaXplcyBgbmV3X21vZGVgIHdpdGggYHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldClgIGJlZm9yZSBwYXNzaW5nIGl0cyBwb2ludGVyLlxcblxcbkJlY2F1c2UgdGhpcyBjaGFuZ2UgcmVzb2x2ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLCBpdCBwb3NlcyBubyByaXNrIG9mIGludHJvZHVjaW5nIEtNU0FOLWRldGVjdGFibGUgYnVncy4gU3RhbmRhcmQgdGVzdGluZy9LQVNBTiBpcyBzdWZmaWNpZW50LCBhbmQgc3Bhd25pbmcgYSBkZWRpY2F0ZWQsIHJlc291cmNlLWludGVuc2l2ZSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNmJlMDllYTg0NTY1ODg4OGNjODU5MzViMjI1MzM0MDQzN2VlMzYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTQ6NDA6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbmluZGV4IDYyMmRiZDA0Njc5OTQuLjYxMTYzMzU3YWUzYzQgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbisrKyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuQEAgLTI4NzgsNiArMjg3OCw3IEBAIHN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4gXHRpbnQgcmV0O1xuIFxuIFx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsIHZzb2NrLmNoaWxkX25zX21vZGUpO1xuK1x0bmV3X21vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpO1xuIFxuIFx0cmV0ID0gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXG4gXHRcdFx0XHQgICAgICB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpLCBcdTAwMjZuZXdfbW9kZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1NzozNy43NTQzODE0OTVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjkxNjEwODkwOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBKdXN0aWZpY2F0aW9uOiB2bXdfdnNvY2sgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBzZWUgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aCBzZXR0aW5nIHVwIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBhIHJlbGF0aXZlbHkgdGFyZ2V0ZWQgY2hhbmdlLCBzbyB3ZSBuZWVkIHRvIGRldGVybWluZSB0aGUgcG90ZW50aWFsIHJpc2suIEknbSBsb29raW5nIGF0IGEgZGlmZiB3aXRoaW4gYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgbGluZSAyODc4LiBUaGUgZGlmZiBzaG93cyBhIG5ldyBsaW5lIGBuZXdfbW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCk7YCBoYXMgYmVlbiBhZGRlZC4gSXQgbG9va3MgbGlrZSBpdCdzIGNhbGN1bGF0aW5nIGEgYG5ld19tb2RlYCB2YXJpYWJsZSB1c2luZyB0aGUgZnVuY3Rpb24gYHZzb2NrX25ldF9jaGlsZF9tb2RlYC4gVGhlIHN1cnJvdW5kaW5nIGNvZGUgaW52b2x2ZXMgYSBgY3RsX3RhYmxlYCBhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBjaGlsZCBuYW1lc3BhY2UgbW9kZSBzdHJpbmcuIEknbGwgbmVlZCB0byByZWFkIHRoZSBjb2RlIGFyb3VuZCB0aGlzIGFkZGl0aW9uIG1vcmUgY2xvc2VseSwgc28gSSBzaG91bGQgZmlyZSB1cCBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgbGluZXMgaW4gdGhlIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdnNvY2tfbmV0X2NoaWxkX21vZGVgIGlzIGRvaW5nIHdpdGggdGhlIGBuZXRgIHN0cnVjdCwgYW5kIGhvdyB0aGF0IG5ldyB2YWx1ZSBpbnRlcmFjdHMgd2l0aCB0aGUgY29udHJvbCB0YWJsZSBzZXR1cC4gRGVwZW5kaW5nIG9uIGhvdyB0aG9zZSBmdW5jdGlvbnMgYXJlIGludGVyYWN0aW5nLCBhbmQgdGhlIGRhdGEgdGhleSBhcmUgd29ya2luZyB3aXRoLCB0aGlzIGNvdWxkIHZlcnkgd2VsbCBiZSBzb21ldGhpbmcgdGhhdCB3b3VsZCBiZW5lZml0IGZyb20gZnV6emluZyB3aXRoIEtNU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTg6MDYuOTE1NDczODczWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjExMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg2MDpcXHRcXHRcXHRcXHRcXHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4yODYxOlxcdHtcXG4yODYyOlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4yODYzOlxcdFxcbjI4NjQ6XFx0XFx0aWYgKHdyaXRlKVxcbjI4NjU6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4yODY2OlxcdFxcbjI4Njc6XFx0XFx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVxcdTAwM2VkYXRhLCBzdHJ1Y3QgbmV0LCB2c29jay5tb2RlKTtcXG4yODY4OlxcdFxcbjI4Njk6XFx0XFx0cmV0dXJuIF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zLFxcbjI4NzA6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHZzb2NrX25ldF9tb2RlKG5ldCksIE5VTEwpO1xcbjI4NzE6XFx0fVxcbjI4NzI6XFx0XFxuMjg3MzpcXHRzdGF0aWMgaW50IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbjI4NzQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuMjg3NTpcXHR7XFxuMjg3NjpcXHRcXHRlbnVtIHZzb2NrX25ldF9tb2RlIG5ld19tb2RlO1xcbjI4Nzc6XFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbjI4Nzg6XFx0XFx0aW50IHJldDtcXG4yODc5OlxcdFxcbjI4ODA6XFx0XFx0bmV0ID0gY29udGFpbmVyX29mKHRhYmxlLVxcdTAwM2VkYXRhLCBzdHJ1Y3QgbmV0LCB2c29jay5jaGlsZF9uc19tb2RlKTtcXG4yODgxOlxcdFxcdG5ld19tb2RlID0gdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KTtcXG4yODgyOlxcdFxcbjI4ODM6XFx0XFx0cmV0ID0gX192c29ja19uZXRfbW9kZV9zdHJpbmcodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxuMjg4NDpcXHRcXHRcXHRcXHRcXHQgICAgICB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpLCBcXHUwMDI2bmV3X21vZGUpO1xcbjI4ODU6XFx0XFx0aWYgKHJldClcXG4yODg2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjg4NzpcXHRcXG4yODg4OlxcdFxcdGlmICh3cml0ZSkge1xcbjI4ODk6XFx0XFx0XFx0LyogUHJldmVudCBhIFxcXCJsb2NhbFxcXCIgbmFtZXNwYWNlIGZyb20gZXNjYWxhdGluZyB0byBcXFwiZ2xvYmFsXFxcIixcXG4yODkwOlxcdFxcdFxcdCAqIHdoaWNoIHdvdWxkIGdpdmUgbmVzdGVkIG5hbWVzcGFjZXMgYWNjZXNzIHRvIGdsb2JhbCBDSURzLlxcbjI4OTE6XFx0XFx0XFx0ICovXFxuMjg5MjpcXHRcXHRcXHRpZiAodnNvY2tfbmV0X21vZGUobmV0KSA9PSBWU09DS19ORVRfTU9ERV9MT0NBTCBcXHUwMDI2XFx1MDAyNlxcbjI4OTM6XFx0XFx0XFx0ICAgIG5ld19tb2RlID09IFZTT0NLX05FVF9NT0RFX0dMT0JBTClcXG4yODk0OlxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMjg5NTpcXHRcXG4yODk2OlxcdFxcdFxcdGlmICghdnNvY2tfbmV0X3NldF9jaGlsZF9tb2RlKG5ldCwgbmV3X21vZGUpKVxcbjI4OTc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yODk4OlxcdFxcdH1cXG4yODk5OlxcdFxcbjI5MDA6XFx0XFx0cmV0dXJuIDA7XFxuMjkwMTpcXHR9XFxuMjkwMjpcXHRcXG4yOTAzOlxcdHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XFxuMjkwNDpcXHRcXHR7XFxuMjkwNTpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJuc19tb2RlXFxcIixcXG4yOTA2OlxcdFxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2aW5pdF9uZXQudnNvY2subW9kZSxcXG4yOTA3OlxcdFxcdFxcdC5tYXhsZW5cXHRcXHQ9IFZTT0NLX05FVF9NT0RFX1NUUl9NQVgsXFxuMjkwODpcXHRcXHRcXHQubW9kZVxcdFxcdD0gMDQ0NCxcXG4yOTA5OlxcdFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHZzb2NrX25ldF9tb2RlX3N0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1ODowNi45MTU2NzI3MTRaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTY4MTcyNzIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBjdXJpb3VzIGFib3V0IHRoaXMgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJJ2xsIGZvY3VzIG9uIGxpbmVzIDI4MjAgdGhyb3VnaCAyODY1LCBhcyB0aGF0IHNlZW1zIGxpa2UgdGhlIHJlbGV2YW50IHNlY3Rpb24gb2YgY29kZS4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggaG93IHRoZSB2c29jayBjb25uZWN0aW9uIGlzIGNvbmZpZ3VyZWQgb3IgcHJlc2VudGVkLiBJJ2xsIHBheSBhdHRlbnRpb24gdG8gYW55IHN0cmluZyBtYW5pcHVsYXRpb24gb3IgbmV0d29yay1yZWxhdGVkIHBhcmFtZXRlcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0J3MgcmVzcG9uc2libGUgZm9yIGRlYnVnZ2luZyBpbmZvLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTUxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1ODowOC41OTc0MDMwNDhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC92bXdfdnNvY2svYWZfdnNvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODIwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODIwOlxcdFxcdHRtcC5kYXRhID0gZGF0YTtcXG4yODIxOlxcdFxcbjI4MjI6XFx0XFx0aWYgKCF3cml0ZSkge1xcbjI4MjM6XFx0XFx0XFx0Y29uc3QgY2hhciAqcDtcXG4yODI0OlxcdFxcbjI4MjU6XFx0XFx0XFx0c3dpdGNoIChtb2RlKSB7XFxuMjgyNjpcXHRcXHRcXHRjYXNlIFZTT0NLX05FVF9NT0RFX0dMT0JBTDpcXG4yODI3OlxcdFxcdFxcdFxcdHAgPSBWU09DS19ORVRfTU9ERV9TVFJfR0xPQkFMO1xcbjI4Mjg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjgyOTpcXHRcXHRcXHRjYXNlIFZTT0NLX05FVF9NT0RFX0xPQ0FMOlxcbjI4MzA6XFx0XFx0XFx0XFx0cCA9IFZTT0NLX05FVF9NT0RFX1NUUl9MT0NBTDtcXG4yODMxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4MzI6XFx0XFx0XFx0ZGVmYXVsdDpcXG4yODMzOlxcdFxcdFxcdFxcdFdBUk5fT05DRSh0cnVlLCBcXFwibmV0bnMgaGFzIGludmFsaWQgdnNvY2sgbW9kZVxcXCIpO1xcbjI4MzQ6XFx0XFx0XFx0XFx0KmxlbnAgPSAwO1xcbjI4MzU6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjgzNjpcXHRcXHRcXHR9XFxuMjgzNzpcXHRcXG4yODM4OlxcdFxcdFxcdHN0cnNjcHkoZGF0YSwgcCwgc2l6ZW9mKGRhdGEpKTtcXG4yODM5OlxcdFxcdFxcdHRtcC5tYXhsZW4gPSBzdHJsZW4ocCk7XFxuMjg0MDpcXHRcXHR9XFxuMjg0MTpcXHRcXG4yODQyOlxcdFxcdHJldCA9IHByb2NfZG9zdHJpbmcoXFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxuMjg0MzpcXHRcXHRpZiAocmV0IHx8ICF3cml0ZSlcXG4yODQ0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjg0NTpcXHRcXG4yODQ2OlxcdFxcdGlmICgqbGVucCBcXHUwMDNlPSBzaXplb2YoZGF0YSkpXFxuMjg0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yODQ4OlxcdFxcbjI4NDk6XFx0XFx0aWYgKCFzdHJuY21wKGRhdGEsIFZTT0NLX05FVF9NT0RFX1NUUl9HTE9CQUwsIHNpemVvZihkYXRhKSkpXFxuMjg1MDpcXHRcXHRcXHQqbmV3X21vZGUgPSBWU09DS19ORVRfTU9ERV9HTE9CQUw7XFxuMjg1MTpcXHRcXHRlbHNlIGlmICghc3RybmNtcChkYXRhLCBWU09DS19ORVRfTU9ERV9TVFJfTE9DQUwsIHNpemVvZihkYXRhKSkpXFxuMjg1MjpcXHRcXHRcXHQqbmV3X21vZGUgPSBWU09DS19ORVRfTU9ERV9MT0NBTDtcXG4yODUzOlxcdFxcdGVsc2VcXG4yODU0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI4NTU6XFx0XFxuMjg1NjpcXHRcXHRyZXR1cm4gMDtcXG4yODU3OlxcdH1cXG4yODU4OlxcdFxcbjI4NTk6XFx0c3RhdGljIGludCB2c29ja19uZXRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4yODYwOlxcdFxcdFxcdFxcdFxcdCB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbjI4NjE6XFx0e1xcbjI4NjI6XFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbjI4NjM6XFx0XFxuMjg2NDpcXHRcXHRpZiAod3JpdGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU4OjA4LjU5NzY5Nzk0OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDIwMzAzMDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB2c29jayBOZXR3b3JrIE1vZGUgU3RyaW5nKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AuIEkga25vdyB0aGlzIGlzIGEga2V5IHZhcmlhYmxlIHJlbGF0ZWQgdG8gdGhlIHZzb2NrIGltcGxlbWVudGF0aW9uLCBzbyB1bmRlcnN0YW5kaW5nIGl0IGlzIGNydWNpYWwuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGFuZCBob3cgaXTigJlzIHVzZWQuXG5cbkxldCdzIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgc3RyaW5nLCBzcGVjaWZpY2FsbHkgbGluZXMgMjgwMCB0aHJvdWdoIDI4MjUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgY29udGV4dC4gSSdsbCBleHBlY3QgdG8gc2VlIGhvdyB0aGUgc3RyaW5nJ3Mgc3RydWN0dXJlIGlzIGRlZmluZWQgYW5kIHdoaWNoIGVsZW1lbnRzIGFyZSBpbXBvcnRhbnQuIEknbSBsb29raW5nIGZvciBjbHVlcyBhYm91dCBob3cgbmV0d29yayBtb2RlcyBhcmUgcmVwcmVzZW50ZWQsIGFuZCB3aGF0IGluZm9ybWF0aW9uIGlzIGVuY29kZWQgd2l0aGluIHRoZSBzdHJpbmcgaXRzZWxmLiBUaGlzIHNlY3Rpb24gbGlrZWx5IGNvbnRhaW5zIHRoZSBmdW5kYW1lbnRhbCBzZXR1cCwgYW5kIHNob3VsZCByZXZlYWwgaG93IG1vZGVzIGFyZSBkZWZpbmVkIGluIHRoZSB2c29jayBzdWJzeXN0ZW0uIEknbSBrZWVuIHRvIGdyYXNwIHRoZSBudWFuY2VzIGluIHRoaXMgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3MywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTg6MTEuMDE4MDAzMDQzWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgwMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjgwMDpcXHRzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgdnNvY2tfZGV2aWNlID0ge1xcbjI4MDE6XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJ2c29ja1xcXCIsXFxuMjgwMjpcXHRcXHQuZm9wc1xcdFxcdD0gXFx1MDAyNnZzb2NrX2RldmljZV9vcHMsXFxuMjgwMzpcXHR9O1xcbjI4MDQ6XFx0XFxuMjgwNTpcXHRzdGF0aWMgaW50IF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuMjgwNjpcXHRcXHRcXHRcXHRcXHQgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zLFxcbjI4MDc6XFx0XFx0XFx0XFx0XFx0ICAgZW51bSB2c29ja19uZXRfbW9kZSBtb2RlLFxcbjI4MDg6XFx0XFx0XFx0XFx0XFx0ICAgZW51bSB2c29ja19uZXRfbW9kZSAqbmV3X21vZGUpXFxuMjgwOTpcXHR7XFxuMjgxMDpcXHRcXHRjaGFyIGRhdGFbVlNPQ0tfTkVUX01PREVfU1RSX01BWF0gPSB7MH07XFxuMjgxMTpcXHRcXHRzdHJ1Y3QgY3RsX3RhYmxlIHRtcDtcXG4yODEyOlxcdFxcdGludCByZXQ7XFxuMjgxMzpcXHRcXG4yODE0OlxcdFxcdGlmICghdGFibGUtXFx1MDAzZWRhdGEgfHwgIXRhYmxlLVxcdTAwM2VtYXhsZW4gfHwgISpsZW5wKSB7XFxuMjgxNTpcXHRcXHRcXHQqbGVucCA9IDA7XFxuMjgxNjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yODE3OlxcdFxcdH1cXG4yODE4OlxcdFxcbjI4MTk6XFx0XFx0dG1wID0gKnRhYmxlO1xcbjI4MjA6XFx0XFx0dG1wLmRhdGEgPSBkYXRhO1xcbjI4MjE6XFx0XFxuMjgyMjpcXHRcXHRpZiAoIXdyaXRlKSB7XFxuMjgyMzpcXHRcXHRcXHRjb25zdCBjaGFyICpwO1xcbjI4MjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE0OjU4OjExLjAxODIxNzA3M1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4OTk2OTA4MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSB2c29jayBQYXRjaCBmb3IgS01TQU4gTmVlZHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIG1ldGljdWxvdXNseSB0cmFjZSB0aGUgY29udHJvbCBmbG93IGFuZCBwb3RlbnRpYWwgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwYXRjaC4gRmlyc3QsIEkgc2VlIHRoZSBjb2RlIHNuaXBwZXQgaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AgYW5kIGltbWVkaWF0ZWx5IHplcm8gaW4gb24gdGhlIGBuZXdfbW9kZWAgdmFyaWFibGUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBpZiBpdCdzIGluaXRpYWxpemVkICpiZWZvcmUqIHRoZSBwYXRjaCBpcyBhcHBsaWVkLiBUaGUgc3Vic2VxdWVudCBjb2RlIGFuZCBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBlc3BlY2lhbGx5IHRoZSBpbnRlcmFjdGlvbiB3aXRoIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZ2AsIGFyZSBhIHJlZCBmbGFnIOKAkyB1bmluaXRpYWxpemVkIG1lbW9yeSB0aGVyZSBjYW4gbGVhZCB0byBzdWJ0bGUsIGhhcmQtdG8tZGVidWcgaXNzdWVzLCBleGFjdGx5IHdoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2guXG5cbkkgdGhlbiB3ZW50IHRocm91Z2ggYW5kIHJldmlld2VkIHRoZSBgX192c29ja19uZXRfbW9kZV9zdHJpbmdgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgcG90ZW50aWFsIGZvciBgbGVucGAgdG8gYmUgemVybywgYW5kIHdoZW4gd3JpdGUgaXMgYWxzbyB0cnVlLCB0aGUgcmV0dXJuIGhhcHBlbnMgd2l0aG91dCBldmVyIHNldHRpbmcgYG5ld19tb2RlYC4gQmluZ28hIFRoaXMgbG9va3MgbGlrZSBhIGNsYXNzaWMgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkLCBhIEtNU0FOIG5pZ2h0bWFyZS4gVGhlIHBhdGNoLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBjb3JyZWN0bHkgYWRkcmVzc2VzIHRoaXMgYnkgaW5pdGlhbGl6aW5nIGBuZXdfbW9kZWAgcmlnaHQgYXdheS4gU28gaXQgKmZpeGVzKiB0aGUgYnVnLCB0aGUgS01TQU4gcmlzayBpcyByZXNvbHZlZC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhlIHBhdGNoICppbnRyb2R1Y2UqIGFueSBuZXcgS01TQU4gcmlza3M/IExldCdzIGNhcmVmdWxseSBjb25zaWRlciB0aGUgY3JpdGVyaWEuIERvZXMgaXQgdG91Y2ggc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZT8gTm8uIERvZXMgaXQgaW50cm9kdWNlIG5ldyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IEFic29sdXRlbHkgbm90LCBpdCdzIHRoZSBvcHBvc2l0ZS4gRG9lcyBpdCBjaGFuZ2UgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24/IE5vLCBpdCBpbml0aWFsaXplcyBhIHZhcmlhYmxlIHRoYXQgd2Fzbid0IGluaXRpYWxpemVkIGVhcmxpZXIuIERvZXMgaXQgbW9kaWZ5IGJvdW5kcyBjaGVja3M/IE5vLlxuXG5UaGUga2V5IGlzIHRoYXQgdGhlIHBhdGNoICpjb3JyZWN0cyogYW4gZXhpc3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgb25lcy4gVGhlIHB1cnBvc2Ugb2YgS01TQU4gaXMgdG8gZmluZCBzdWNoIGlzc3Vlcywgbm90IG5lY2Vzc2FyaWx5IHRvIHZlcmlmeSB0aGF0IGEgZml4IGlzIGNvbXBsZXRlLiBLTVNBTiBtYXkgYmUgb3ZlcmtpbGwgaW4gdGhpcyBzY2VuYXJpby4gQWNjb3JkaW5nIHRvIHRoZSBzdGF0ZWQgcnVsZXMsIHJ1bm5pbmcgS01TQU4gb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgcmlza3MsIHdoaWNoIGl0IGRvZXNuJ3QuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoIGVsaW1pbmF0ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eSByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBvbmUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMzgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTQ6NTg6MjAuMDE1MTI3OTE5WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzE4MjY1NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjg1OT1zdGF0aWMgaW50IHZzb2NrX25ldF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4NzItXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4NzM6c3RhdGljIGludCB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg3NC1cXHRcXHRcXHRcXHQgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yOTAzPXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkxNS1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjkxNjpcXHRcXHQucHJvY19oYW5kbGVyXFx0PSB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmdcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkxNy1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1ODoyMi43MzMzOTk5MjFaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA5MDU4NTk0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBhIGB2c29ja19uZXRgIE1vZGUgVHJhbnNpdGlvbioqXG5cbkFscmlnaHQsIEkgc2VlIGEgbGluZSBoZXJlOiBgbmV3X21vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpO2AuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgXCJIbW0sIHdoYXQncyBgdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KWAgYWN0dWFsbHkgKmRvaW5nKj9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJ3MgcHVycG9zZSB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbW9kZSB0cmFuc2l0aW9uLiBJJ2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGB2c29ja19uZXRfY2hpbGRfbW9kZWAgdG8gZmlndXJlIG91dCB3aGF0IGl0J3MgcmV0dXJuaW5nIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGVmZmVjdCB3aWxsIGJlIG9uIHRoZSBgbmV0YCBvYmplY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29kZSdzIG9wZXJhdGlvbmFsIHNlbWFudGljcyB0byBjb250aW51ZS4gTGV0J3MgdHJhY2UgYmFjayB0byB0aGF0IGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNDcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1ODoyNC44MjM5ODg5N1oiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNzkzNTg1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2c29ja19uZXRfY2hpbGRfbW9kZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9hZl92c29jay5oPTI4OT1zdGF0aWMgaW5saW5lIGJvb2wgdnNvY2tfbmV0X3NldF9jaGlsZF9tb2RlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbmluY2x1ZGUvbmV0L2FmX3Zzb2NrLmgtMzAzLVxcbmluY2x1ZGUvbmV0L2FmX3Zzb2NrLmg6MzA0OnN0YXRpYyBpbmxpbmUgZW51bSB2c29ja19uZXRfbW9kZSB2c29ja19uZXRfY2hpbGRfbW9kZShzdHJ1Y3QgbmV0ICpuZXQpXFxuaW5jbHVkZS9uZXQvYWZfdnNvY2suaC0zMDUte1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI4NTk9c3RhdGljIGludCB2c29ja19uZXRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODcyLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODczOnN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4NzQtXFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg4MC1cXHRuZXQgPSBjb250YWluZXJfb2YodGFibGUtXFx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsIHZzb2NrLmNoaWxkX25zX21vZGUpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODgxOlxcdG5ld19tb2RlID0gdnNvY2tfbmV0X2NoaWxkX21vZGUobmV0KTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg4Mi1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjg4My1cXHRyZXQgPSBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjg4NDpcXHRcXHRcXHRcXHQgICAgICB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpLCBcXHUwMDI2bmV3X21vZGUpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODg1LVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjkwMz1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MTUtXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI5MTY6XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MTctXFx0fSxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yOTY5PXN0YXRpYyB2b2lkIHZzb2NrX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTczLVxcdGVsc2VcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjk3NDpcXHRcXHRuZXQtXFx1MDAzZXZzb2NrLm1vZGUgPSB2c29ja19uZXRfY2hpbGRfbW9kZShjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnMpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTc1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1ODoyNi45NjE5MzA4NTVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjUxMzc3MDM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB2c29jayBIZWFkZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSB2c29jayBpbXBsZW1lbnRhdGlvbiwgYW5kIHRoZSBgaW5jbHVkZS9uZXQvYWZfdnNvY2suaGAgaGVhZGVyIGZpbGUgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RvcC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHJlZ2lvbiBhcm91bmQgbGluZSAzMDQuIFRoYXQncyB1c3VhbGx5IGEgZ29vZCBpbmRpY2F0b3Igb2Ygc29tZXRoaW5nIHJlbGF0ZWQgdG8gc29ja2V0IGNyZWF0aW9uLCBjb25uZWN0aW9uIG1hbmFnZW1lbnQsIG9yIHBlcmhhcHMgc29tZSBrZXkgc3RydWN0dXJlIGRlZmluaXRpb24uIEknbSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQganVtcHMgb3V0IGF0IG1lLiBUaGlzIGlzIGdvaW5nIHRvIGJlIG15IGRpdmUtaW4gcG9pbnQuIEknbSBleHBlY3RpbmcgdG8gc2VlIHNvbWV0aGluZyB0aGF0IHdpbGwgc3RhcnQgbWUgb24gdGhlIHJpZ2h0IHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1ODoyOS40NzU3MDQ2MzFaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MzYwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9hZl92c29jay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgZW51bSB2c29ja19uZXRfbW9kZSBtb2RlKVxcbiAyOTE6XFx0e1xcbiAyOTI6XFx0XFx0aW50IG5ld19sb2NrZWQgPSBtb2RlICsgMTtcXG4gMjkzOlxcdFxcdGludCBvbGRfbG9ja2VkID0gMDsgLyogdW5sb2NrZWQgKi9cXG4gMjk0OlxcdFxcbiAyOTU6XFx0XFx0aWYgKHRyeV9jbXB4Y2hnKFxcdTAwMjZuZXQtXFx1MDAzZXZzb2NrLmNoaWxkX25zX21vZGVfbG9ja2VkLFxcbiAyOTY6XFx0XFx0XFx0XFx0XFx1MDAyNm9sZF9sb2NrZWQsIG5ld19sb2NrZWQpKSB7XFxuIDI5NzpcXHRcXHRcXHRXUklURV9PTkNFKG5ldC1cXHUwMDNldnNvY2suY2hpbGRfbnNfbW9kZSwgbW9kZSk7XFxuIDI5ODpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjk5OlxcdFxcdH1cXG4gMzAwOlxcdFxcbiAzMDE6XFx0XFx0cmV0dXJuIG9sZF9sb2NrZWQgPT0gbmV3X2xvY2tlZDtcXG4gMzAyOlxcdH1cXG4gMzAzOlxcdFxcbiAzMDQ6XFx0c3RhdGljIGlubGluZSBlbnVtIHZzb2NrX25ldF9tb2RlIHZzb2NrX25ldF9jaGlsZF9tb2RlKHN0cnVjdCBuZXQgKm5ldClcXG4gMzA1OlxcdHtcXG4gMzA2OlxcdFxcdHJldHVybiBSRUFEX09OQ0UobmV0LVxcdTAwM2V2c29jay5jaGlsZF9uc19tb2RlKTtcXG4gMzA3OlxcdH1cXG4gMzA4OlxcdFxcbiAzMDk6XFx0LyogUmV0dXJuIHRydWUgaWYgdHdvIG5hbWVzcGFjZXMgcGFzcyB0aGUgbW9kZSBydWxlcy4gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UuXFxuIDMxMDpcXHQgKlxcbiAzMTE6XFx0ICogQSBOVUxMIG5hbWVzcGFjZSBpcyB0cmVhdGVkIGFzIFZTT0NLX05FVF9NT0RFX0dMT0JBTC5cXG4gMzEyOlxcdCAqXFxuIDMxMzpcXHQgKiBSZWFkIG1vcmUgYWJvdXQgbW9kZXMgaW4gdGhlIGNvbW1lbnQgaGVhZGVyIG9mIG5ldC92bXdfdnNvY2svYWZfdnNvY2suYy5cXG4gMzE0OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNDo1ODoyOS40Nzc4ODI4OTNaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTI5NjM0MjIyNTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIGEgdnNvY2sgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZ2AuIEJlZm9yZSB0aGUgY2hhbmdlLCB0aGUgY29kZSBkZWNsYXJlZCBgbmV3X21vZGVgIG9uIHRoZSBzdGFjaywgYnV0IGRpZG4ndCBpbml0aWFsaXplIGl0LiBJbiBjZXJ0YWluIHNjZW5hcmlvcywgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIHdyaXRlIHNpemUgKGAqbGVucGApIHdhcyB6ZXJvLCBgX192c29ja19uZXRfbW9kZV9zdHJpbmdgIG1pZ2h0IG5vdCB3cml0ZSB0byBgbmV3X21vZGVgLiBUaGlzIG1lYW50IHRoYXQgbGF0ZXIsIHRoZSBmdW5jdGlvbiBjb3VsZCByZWFkIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUgZnJvbSBgbmV3X21vZGVgIGluIHRoZSBgaWZgIGNvbmRpdGlvbnMsIGFuZCBLTVNBTiB3b3VsZCByaWdodGZ1bGx5IGZsYWcgdGhpcy5cblxuVGhpcyBwYXRjaCBmaXhlcyB0aGF0IGV4YWN0IGlzc3VlIGJ5IGluaXRpYWxpemluZyBgbmV3X21vZGVgIHdpdGggYSBjYWxsIHRvIGB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpYC4gTm93LCBgbmV3X21vZGVgIGlzICphbHdheXMqIGluaXRpYWxpemVkIGJlZm9yZSBpdCdzIHVzZWQuXG5cblRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGNoYW5nZSBqdXN0aWZ5IEtNU0FOIGZ1enppbmc/IE15IGluaXRpYWwgdGhvdWdodCBpcyBubywgYnV0IGxldCdzIGJlIGFic29sdXRlbHkgc3VyZS4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IEtNU0FOIGlzIG9ubHkgbmVlZGVkIGlmIHRoZSAqY29kZSBjaGFuZ2VzKiBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gKnNwZWNpZmljYWxseSogY2FuIGRldGVjdCBhbmQgS0FTQU4gY2FuJ3QuXG5cbk5vdywgZG9lcyB0aGUgcGF0Y2ggaW50cm9kdWNlIGFueSBuZXcgcmlza3M/IEFic29sdXRlbHkgbm90LiBJdCdzIGluaXRpYWxpemluZyBhIHN0YWNrIHZhcmlhYmxlIGJlZm9yZSB1c2UuIEl0J3MgKmZpeGluZyogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgbm90IGNyZWF0aW5nIG9uZS4gSXQncyBub3QgbW9kaWZ5aW5nIGFueSBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyaW5nIGFueSBidWZmZXIgbGVuZ3RocyBvciBib3VuZHMgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBJbiBmYWN0LCBpdCAqY2xvc2VzKiBhbiBleGlzdGluZyBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVhay4gQWxsIHN0YWNrIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIG5vdy5cblxuVGhlIHBhdGNoIGNvbnNpc3RzIG9mIGEgc2luZ2xlIGxpbmU6IGBuZXdfbW9kZSA9IHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldCk7YC4gVGhpcyBsaW5lIGludHJvZHVjZXMgbm8gbmV3IHJpc2suIGB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpYCBpcyByZXR1cm5pbmcgdGhlIGN1cnJlbnQgbW9kZSwgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgaW4gYHZzb2NrX25ldF9pbml0YC5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gUnVubmluZyBLTVNBTiB3b3VsZCBiZSBvdmVya2lsbCBpbiB0aGlzIHNpdHVhdGlvbi4gS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHN0YW5kYXJkIHRlc3RpbmcuXG5cbk15IGZpbmFsIGFuYWx5c2lzIGlzOlxuXG4qICAgKipOZWVkc0tNU0FOID0gZmFsc2UqKlxuKiAgICoqS01TQU5SZWFzb25pbmc6KiogVGhlIHBhdGNoIGluaXRpYWxpemVzIHRoZSBsb2NhbCBzdGFjayB2YXJpYWJsZSBgbmV3X21vZGVgIGluIGB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoKWAgdG8gYHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldClgLiBQcmV2aW91c2x5LCBpZiBgKmxlbnBgIHdhcyAwIHdoZW4gd3JpdGluZyB0byBgL3Byb2Mvc3lzL25ldC92c29jay9jaGlsZF9uc19tb2RlYCwgYF9fdnNvY2tfbmV0X21vZGVfc3RyaW5nKClgIG1pZ2h0IHJldHVybiAwIHdpdGhvdXQgd3JpdGluZyB0byBgKm5ld19tb2RlYCwgbGVhdmluZyBgbmV3X21vZGVgIHVuaW5pdGlhbGl6ZWQuIFRoaXMgY291bGQgbGVhZCB0byBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBlbnN1cmluZyBgbmV3X21vZGVgIGlzICphbHdheXMqIGluaXRpYWxpemVkLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgbGVhayBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy9wYWRkaW5nLiBCZWNhdXNlIHRoZSBwYXRjaCByZXNvbHZlcyBhbiB1bmluaXRpYWxpemVkIHJlYWQgYW5kIGRvZXMgbm90IGNyZWF0ZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMsIHNwYXduaW5nIGFuIGV4cGVuc2l2ZSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjM1LCJPdXRwdXRUb2tlbnMiOjE5MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTowNzoxOS4xMTIxMDg4OTVaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIHRoZSBzdGFjayB2YXJpYWJsZSBgbmV3X21vZGVgIGluIGB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoKWAgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkIChzcGVjaWZpY2FsbHkgaWYgYSB3cml0ZSBvY2N1cnJlZCB3aXRoIGAqbGVucCA9PSAwYCwgY2F1c2luZyBgX192c29ja19uZXRfbW9kZV9zdHJpbmcoKWAgdG8gcmV0dXJuIDAgd2l0aG91dCBhc3NpZ25pbmcgYCpuZXdfbW9kZWApLiBUaGUgcGF0Y2ggaW5pdGlhbGl6ZXMgYG5ld19tb2RlYCB3aXRoIGB2c29ja19uZXRfY2hpbGRfbW9kZShuZXQpYCBiZWZvcmUgcGFzc2luZyBpdHMgcG9pbnRlci5cXG5cXG5CZWNhdXNlIHRoaXMgY2hhbmdlIHJlc29sdmVzIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZCByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBvciBleHBvc2luZyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIHN0cnVjdCBwYWRkaW5nIGlzc3VlcywgaXQgcG9zZXMgbm8gcmlzayBvZiBpbnRyb2R1Y2luZyBLTVNBTi1kZXRlY3RhYmxlIGJ1Z3MuIFN0YW5kYXJkIHRlc3RpbmcvS0FTQU4gaXMgc3VmZmljaWVudCwgYW5kIHNwYXduaW5nIGEgZGVkaWNhdGVkLCByZXNvdXJjZS1pbnRlbnNpdmUgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgdGhlIHN0YWNrIHZhcmlhYmxlIGBuZXdfbW9kZWAgaW4gYHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZygpYCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgKHNwZWNpZmljYWxseSBpZiBhIHdyaXRlIG9jY3VycmVkIHdpdGggYCpsZW5wID09IDBgLCBjYXVzaW5nIGBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZygpYCB0byByZXR1cm4gMCB3aXRob3V0IGFzc2lnbmluZyBgKm5ld19tb2RlYCkuIFRoZSBwYXRjaCBpbml0aWFsaXplcyBgbmV3X21vZGVgIHdpdGggYHZzb2NrX25ldF9jaGlsZF9tb2RlKG5ldClgIGJlZm9yZSBwYXNzaW5nIGl0cyBwb2ludGVyLlxcblxcbkJlY2F1c2UgdGhpcyBjaGFuZ2UgcmVzb2x2ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLCBpdCBwb3NlcyBubyByaXNrIG9mIGludHJvZHVjaW5nIEtNU0FOLWRldGVjdGFibGUgYnVncy4gU3RhbmRhcmQgdGVzdGluZy9LQVNBTiBpcyBzdWZmaWNpZW50LCBhbmQgc3Bhd25pbmcgYSBkZWRpY2F0ZWQsIHJlc291cmNlLWludGVuc2l2ZSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowspg9k[1] Phase: Succeeded StartedAt: 2026-09-15 15:07:30 +0000 UTC FinishedAt: 2026-09-15 15:07:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[1].abort-on-skip-outcome Phase: Skipped Message: when 'false' evaluated false StartedAt: 2026-09-15 15:07:30 +0000 UTC FinishedAt: 2026-09-15 15:07:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2] Phase: Succeeded StartedAt: 2026-09-15 15:07:30 +0000 UTC FinishedAt: 2026-09-15 18:51:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-15 15:07:30 +0000 UTC FinishedAt: 2026-09-15 18:51:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-15 15:07:30 +0000 UTC FinishedAt: 2026-09-15 15:07:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-15 15:07:30 +0000 UTC FinishedAt: 2026-09-15 15:07:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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-workflowspg9k/series-workflowspg9k-convert-artifact-2514246245/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-15 15:07:40 +0000 UTC FinishedAt: 2026-09-15 15:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-15 15:07:40 +0000 UTC FinishedAt: 2026-09-15 15:23:58 +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:*700078de-9284-48a1-9a6f-a656b4367cc1,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-workflowspg9k/series-workflowspg9k-convert-artifact-2514246245/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": "f9979291-e364-476e-934d-5cbbbf276a3f", "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-workflowspg9k/series-workflowspg9k-build-action-3294582411/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-15 15:07:40 +0000 UTC FinishedAt: 2026-09-15 15:23:48 +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:*700078de-9284-48a1-9a6f-a656b4367cc1,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-workflowspg9k/series-workflowspg9k-convert-artifact-2514246245/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": "f9979291-e364-476e-934d-5cbbbf276a3f", "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-workflowspg9k/series-workflowspg9k-build-action-3294582411/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-15 15:23:58 +0000 UTC FinishedAt: 2026-09-15 15:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped Message: when 'false' evaluated false StartedAt: 2026-09-15 15:23:58 +0000 UTC FinishedAt: 2026-09-15 15:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-15 15:23:58 +0000 UTC FinishedAt: 2026-09-15 15:24:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-15 15:23:58 +0000 UTC FinishedAt: 2026-09-15 15:24:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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-workflowspg9k/series-workflowspg9k-convert-artifact-2587644736/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-15 15:24:08 +0000 UTC FinishedAt: 2026-09-15 15:26:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-15 15:24:08 +0000 UTC FinishedAt: 2026-09-15 15:25:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f9979291-e364-476e-934d-5cbbbf276a3f,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-workflowspg9k/series-workflowspg9k-build-action-3294582411/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-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-15 15:26:07 +0000 UTC FinishedAt: 2026-09-15 15:26:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped Message: when 'false' evaluated false StartedAt: 2026-09-15 15:26:07 +0000 UTC FinishedAt: 2026-09-15 15:26:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-15 15:26:07 +0000 UTC FinishedAt: 2026-09-15 15:42:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-15 15:26:07 +0000 UTC FinishedAt: 2026-09-15 15:42:17 +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:*700078de-9284-48a1-9a6f-a656b4367cc1,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-workflowspg9k/series-workflowspg9k-convert-artifact-2587644736/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": "d8e0a121-b288-4077-9e2f-2d48cc1ec3f6", "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-workflowspg9k/series-workflowspg9k-build-action-3906453756/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-15 15:26:07 +0000 UTC FinishedAt: 2026-09-15 15:42:07 +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:*700078de-9284-48a1-9a6f-a656b4367cc1,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-workflowspg9k/series-workflowspg9k-convert-artifact-2587644736/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": "d8e0a121-b288-4077-9e2f-2d48cc1ec3f6", "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-workflowspg9k/series-workflowspg9k-build-action-3906453756/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-15 15:42:17 +0000 UTC FinishedAt: 2026-09-15 15:42:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped Message: when 'false' evaluated false StartedAt: 2026-09-15 15:42:17 +0000 UTC FinishedAt: 2026-09-15 15:42:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-15 15:42:17 +0000 UTC FinishedAt: 2026-09-15 15:44:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-15 15:42:17 +0000 UTC FinishedAt: 2026-09-15 15:44:10 +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:*d8e0a121-b288-4077-9e2f-2d48cc1ec3f6,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-workflowspg9k/series-workflowspg9k-build-action-3906453756/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-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-15 15:44:20 +0000 UTC FinishedAt: 2026-09-15 18:51:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-15 15:44:20 +0000 UTC FinishedAt: 2026-09-15 18:51:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"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:*f9979291-e364-476e-934d-5cbbbf276a3f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d8e0a121-b288-4077-9e2f-2d48cc1ec3f6,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-workflowspg9k/series-workflowspg9k-build-action-3294582411/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-workflowspg9k/series-workflowspg9k-build-action-3906453756/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-15 15:44:20 +0000 UTC FinishedAt: 2026-09-15 15:44:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-15 15:44:20 +0000 UTC FinishedAt: 2026-09-15 15:44:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"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-workflowspg9k/series-workflowspg9k-convert-artifact-1953321625/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped Message: when 'false' evaluated false StartedAt: 2026-09-15 15:44:20 +0000 UTC FinishedAt: 2026-09-15 15:44:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-15 15:44:20 +0000 UTC FinishedAt: 2026-09-15 15:44:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped Message: when 'false' evaluated false StartedAt: 2026-09-15 15:44:20 +0000 UTC FinishedAt: 2026-09-15 15:44:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-15 15:44:30 +0000 UTC FinishedAt: 2026-09-15 18:51:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspg9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_net_child_mode_string","__vsock_net_mode_string"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","SYSCTL"],"series_id":"4307a5da-71ef-4975-8a48-ef102656adb4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-15 15:44:30 +0000 UTC FinishedAt: 2026-09-15 18:51:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f9979291-e364-476e-934d-5cbbbf276a3f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d8e0a121-b288-4077-9e2f-2d48cc1ec3f6,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-workflowspg9k/series-workflowspg9k-build-action-3294582411/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-workflowspg9k/series-workflowspg9k-build-action-3906453756/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-workflowspg9k/series-workflowspg9k-convert-artifact-1953321625/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,}