bGlic3NoMiAtIFNTSDIgbGlicmFyeQo9PT09PT09PT09PT09PT09PT09PT09CgpWZXJzaW9uIDAuNQotLS0tLS0tLS0tLQoKICAqKiogQkMgQnJlYWsgKioqCiAgUmVpbXBsZW1lbnRlZCBsaWJzc2gyX3Nlc3Npb25fbWV0aG9kcygpIHRvIG1hdGNoIGxpYnNzaDJfc2Vzc2lvbl9tZXRob2RfcHJlZigpIHN0eWxlCgogIEZpeGVkIGxpYnNzaDJfYXR0cjJiaW4oKSAoZWZmZWN0cyBhbnkgc2V0c3RhdCBzdHlsZSBjYWxsKS4KCiAgRml4ZWQgYXV0aGVudGljYXRpbmcgd2l0aCBlbmNyeXB0ZWQgcHJpdmF0ZSBrZXkuCgogIEZpeGVkIGF1dGhlbnRpY2F0aW5nIHZpYSBzc2gtZHNzIHB1YmxpYyBrZXkuCgogIEZpeGVkIEtFWF9JTklUIGNvb2tpZSBhbmQgcGFja2V0IHBhZGRpbmcgdG8gdXNlIGFjdHVhbCByYW5kb20gZGF0YQoKICBBZGRlZCBERVNURElSIHN1cHBvcnQgdG8gbWFrZWZpbGVzIChBZGFtIEdvs+piaW93c2tpIC0tIEkgaG9wZSB0aGF0IGNoYXJhY3RlciBzZXQgdHJhbnNsYXRlcyByaWdodCkKCiAgQWRkZWQgbGlic3NoMl9jaGFubmVsX2ZvcndhcmRfbGlzdGVuX2V4KCksIGxpYnNzaDJfY2hhbm5lbF9mb3J3YXJkX2NhbmNlbCgpLCBhbmQgbGlic3NoMl9jaGFubmVsX2ZvcndhcmRfYWNjZXB0KCkuCgogIEFkZGVkIC4vY29uZmlndXJlIG9wdGlvbiAnLS1kaXNhYmxlLWdleC1uZXcnIHRvIGFsbG93IHVzaW5nIHRoZSBvbGRlciBncm91cC1leGNoYW5nZSBmb3JtYXQKCiAgQWRkZWQgTUFDIG1ldGhvZHMgaG1hYy1tZDUgYW5kIGhtYWMtbWQ1LTk2LgoKVmVyc2lvbiAwLjQKLS0tLS0tLS0tLS0KCiAgRml4ZWQgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gZnJlZSBzZnRwX2RpcmhhbmRsZSBkYXRhIGZyb20gYSBmaWxlaGFuZGxlIHN0cnVjdC4KCiAgRml4ZWQgbGVhayBpbiBzZnRwX29wZW5fZXgoKSwgaGFuZGxlLT5oYW5kbGUgbm90IGZyZWVkIGluIGhhbmRsZV9jbG9zZSgpLgoKICBGaXhlZCBsZWFrIGluIHNmdHBfc3ltbGlua19leCgpLCByZXN1bHQgZm9yIFJFQURMSU5LIGFuZCBSRUFMUEFUSCBub3QgZnJlZWQgdW5sZXNzIHRoZXJlIHdhcyBhbiBlcnJvci4KCiAgQWRkZWQgbGlic3NoMl9iYW5uZXJfc2V0KCksIHNwZWNpZnkgYW4gYXJiaXRyYXJ5IGJhbm5lciB0byBzZW5kIG9uIGludHJvZHVjdGlvbi4KClZlcnNpb24gMC4zCi0tLS0tLS0tLS0tCgogIEZpeGVkIGxpYnNzaDJfY2hhbm5lbF9yZWFkX2V4KCkuICBQYWNrZXQgbG9vcCBpbml0aWFsaXplZCBCRUZPUkUgdHJhbnNwb3J0IHBvbGxlZCBmb3IgbmV3IHBhY2tldHMgKHNob3VsZCBoYXZlIGJlZW4gYWZ0ZXIpLgoKICBGaXhlZCBibG9ja2luZyBpc3N1ZXMgaW4gc2NwX3NlbmQoKS9zY3BfcmVjdigpLgoKICBGaXhlZCBkZWdyZWUgb2YgaW5kaXJlY3Rpb24gaW4gbWFjZXJyb3IgY2FsbGJhY2suCgogIENoYW5nZWQgcGFja2V0IHJlYWQgbWVjaGFuaXNtIHRvIHVzZSBhIGZpeGVkIGJ1ZmZlciBhbmQgYXZvaWQgdW5uZWNlc3NhcnkgYWxsb2MvZnJlZSBjYWxscy4gKGVzcGVjaWFsbHkgd2hpbGUgbm9uLWJsb2NrIGxvb3BpbmcpCgogIEFkZGVkIGNoYW5uZWwgY2xvc2UgY2FsbGJhY2suCgogIEFkZGVkIFNGVFAgc3VwcG9ydCAoVXNpbmcgaXRzIG93biBoZWFkZXIgZmlsZTogbGlic3NoMl9zZnRwLmgpCgpWZXJzaW9uIDAuMgotLS0tLS0tLS0tLQoKICBDaGFuZ2VkIGV4dGVuZGVkIGRhdGEgaWdub3JhbmNlIG1lY2hhbmlzbToKICAgIGxpYnNzaDJfY2hhbm5lbF9pZ25vcmVfZXh0ZW5kZWRfZGF0YSgpIGNoYW5nZWQgdG8gbGlic3NoMl9jaGFubmVsX2hhbmRsZV9leHRlbmRlZF9kYXRhKCkKICAgIE1hY3JvIGludHJvZHVjZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgZHVyaW5nIGJldGEgcGhhc2UuCiAgICAqKiogVEhFIExJQlNTSDJfQ0hBTk5FTF9JR05PUkVfRVhURU5ERURfREFUQSgpIE1BQ1JPIFdJTEwgQkUgUkVNT1ZFRCBQUklPUiBUTyAxLjAgUkVMRUFTRSAqKioKICAgIGxpYnNzaDJfY2hhbm5lbF9oYW5kbGVfZXh0ZW5kZWRfZGF0YSgpIG1heSBiZSBwYXNzZWQgb25lIG9mIHRocmVlICJpZ25vcmVfbW9kZSIgY29uc3RhbnRzCiAgICAgIExJQlNTSDJfQ0hBTk5FTF9FWFRFTkRFRF9EQVRBX05PTkUgICAgICAgRGVmYXVsdCBiZWhhdmlvciwgcXVldWUgRUQgcGFja2V0cyBhbmQgcmV0dXJuIHRoZW0gd2l0aCByZWFkX2V4CiAgICAgIExJQlNTSDJfQ0hBTk5FTF9FWFRFTkRFRF9EQVRBX0lHTk9SRSAgICAgRXF1aXZhbGVudCB0byBsaWJzc2gyX2NoYW5uZWxfaWdub3JlX2V4dGVuZGVkX2RhdGEoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElHTk9SRSB3aWxsIGltcGxpY2l0bHkgZmx1c2ggdGhlIGV4dGVuZGVkIGRhdGEgc3RyZWFtKHMpCiAgICAgIExJQlNTSDJfQ0hBTk5FTF9FWFRFTkRFRF9EQVRBX01FUkdFICAgICAgQ2FsbHMgdG8gY2hhbm5lbF9yZWFkKCkgd2lsbCBjaGVjayBib3RoIHRoZSBzdGFuZGFyZCBkYXRhIHN0cmVhbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgZXh0ZW5kZWQgZGF0YSBzdHJlYW0ocykgZm9yIHRoZSBmaXJzdCBhdmFpbGFibGUgcGFja2V0CgogIENoYW5nZWQgbGlic3NoMl9zZXNzaW9uX2Rpc2Nvbm5lY3RfZXgoKSB0byByZXR1cm4gYW4gZXJyb3IgY29kZSB3aGVuIGFsbG9jIGZhaWxzCgogIEFkZGVkIGxpYnNzaDJfY2hhbm5lbF9mbHVzaF9leCgpIGFuZCBiYXNpYyBtYWNyb3M6IC4uLl9mbHVzaCgpIC4uLl9mbHVzaF9zdGRlcnIoKQogICAgZmx1c2hfZXggYWNjZXB0cyBlaXRoZXIgdGhlIHN0cmVhbWlkICgwIGZvciBzdGFuZGFyZCBkYXRhLCAxIGZvciBzdGRlcnIpIG9yIG9uZSBvZiB0aGUgdHdvIGZvbGxvd2luZyBjb25zdGFudHM6CiAgICAgIExJQlNTSDJfQ0hBTk5FTF9GTFVTSF9BTEwgICAgICAgICAgICAgICAgRmx1c2ggYWxsIHN0cmVhbXMKICAgICAgTElCU1NIMl9DSEFOTkVMX0ZMVVNIX0VYVEVOREVEX0RBVEEgICAgICBGbHVzaCBhbGwgc3RyZWFtcyBFWENFUFQgdGhlIHN0YW5kYXJkIGRhdGEgc3RyZWFtCgogIEFkZGVkIGxpYnNzaDJfc2Vzc2lvbl9jYWxsYmFja19zZXQoKSBmb3Igc2V0dGluZyBpZ25vcmUvZGVidWcvZGlzY29ubmVjdC9tYWNlcnJvciBjYWxsYmFja3MKCiAgQWRkZWQgbGlic3NoMl9zZXNzaW9uX21ldGhvZF9wcmVmKCkgdG8gc2VsZWN0aXZlbHkgc2V0IG1ldGhvZHMgYW5kIG1ldGhvZCBwcmVmZXJlbmNlcy4KCiAgQWRkZWQgbGlic3NoMl9zZXNzaW9uX21ldGhvZHMoKSB0byBkZXRlcm1pbmUgd2hhdCBtZXRob2RzIHdlcmUgbmVnb3RpYXRlZC4KCiAgQWRkZWQgbGlic3NoMl9zZXNzaW9uX2Fic3RyYWN0KCkgZm9yIHJldHJlaXZpbmcgJnNlc3Npb24tPmFic3RyYWN0CgogIEFkZGVkIGxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKCkgZm9yIHJldHJlaXZpbmcgZXJyb3IgY29kZXMvbWVzc2FnZXMKClZlcnNpb24gMC4xCi0tLS0tLS0tLS0tCgogIEluaXRpYWwgUmVsZWFzZToKICAgIEtFWCBtZXRob2RzOiBkaWZmaWUtaGVsbG1hbi1ncm91cDE0LXNoYTEsIGRpZmZpZS1oZWxsbWFuLWdyb3VwLWV4Y2hhbmdlLXNoYTEsIGRpZmZpZS1oZWxsbWFuLWdyb3VwMS1zaGExCiAgICBIb3N0a2V5IG1ldGhvZHM6IHNzaC1yc2EsIHNzaC1kc3MKICAgIENpcGhlciBtZXRob2RzOiBhZXMyNTYtY2JjLCByaWpuZGFlbC1jYmNAbHlzYXRvci5saXUuc2UsIGFlczE5Mi1jYmMsIGFlczEyOC1jYmMsIGJsb3dmaXNoLWNiYywgYXJjZm91ciwgY2FzdDEyOC1jYmMsIDNkZXMtY2JjLCBub25lKgogICAgQ29tcHJlc3Npb24gbWV0aG9kczogemxpYiwgbm9uZQogICAgTUFDIG1ldGhvZHM6IGhtYWMtc2hhMSwgaG1hYy1zaGExLTk2LCBobWFjLXJpcGVtZDE2MCwgaG1hYy1yaXBlbWQxNjBAb3BlbnNzaC5jb20gbm9uZSoKICAgICpDaXBoZXIvTUFDICJub25lIiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGZvciBzZWN1cml0eSBwdXJwb3NlcywKICAgICBVc2UgLS1lbmFibGUtY3J5cHQtbm9uZSBhbmQvb3IgLS1lbmFibGUtbWFjLW5vbmUgd2l0aCAuL2NvbmZpZ3VyZSB0byBlbmFibGUK